Цитата Сообщение от 1exan Посмотреть сообщение
Код:
function_block DRIVER_drm //имя функционального блока.

    var_input //объявление входных переменных
         strt : bool;//старт
         stop : bool;//стоп
         pause : bool;//пауза
    end_var

    var_output //объявление выходных переменных
        rt_fw : bool;//вращение вперёд
        rt_bw : bool;//вращение назад
    end_var   

    var //объявление локальных переменных
        State : udint;   // Текущее состояние
        t : SYS.TON;        // Метка времени события
    end_var

   //CODE
     
   if strt then
       
       case State of
           
           0: t(I:=true, T := t#1s);
                    if t.Q then State := 1; t(I := false); end_if
               
           1: t(I:=true, T := t#3s);
                    if t.Q then State := 2; t(I := false); end_if
                        
           2: t(I:=true, T := t#1s);
                    if t.Q then State := 3; t(I := false); end_if
                        
           3: t(I:=true, T := t#3s);
                    if t.Q then State := 0; t(I := false); end_if     

       end_case   

       rt_fw := State = 1;
       rt_bw := State = 3;

   else
       State := 0;
       t(I := false);
       rt_fw := false;
       rt_bw := false;
              
   end_if
   
end_function_block
мне кажется имеет смысл к этому коду добавить ловлю фронта старта, чтоб если это первый запуск начинать с кейса №1 как просил вопрашающий
Цель моих действий сделать ФБ который будет осуществлять следующий алгоритм: вращение вперёд-пауза-вращение назад и всё это повторять в течении определённого времени.