Цитата Сообщение от Валенок Посмотреть сообщение
Описанный процесс - долгий и последовательный. Ничего лучшего кроме автомата для этого нет. Он же наиболее наглядный и легко модифицируемый.
Код:
program/function_block
var_input //входы свободно меняются в любой момент
  tmOn,
  tmOff : time; //время в откр/закр состоянии
  CountSwitch : int; //кол-во клацаний
end_var
var_output
  CurrentSwith : int; //на посмотреть
  Q : bool; //соббсно на клапан[ы]
end_var
var
  Step : (WAIT, ON, OFF); //собсно автомат
  t : time;
  OnPress : r_trig; //событие нажатия на кнопу (63/73 - старт/стоп ?)
end_var
***************************
OnPress(CLK := _KEY = ..); //_KEY - в конфигурации 63/73
case Step of
  WAIT:
     CurrentSwith := 0; 
     if OnPress.Q then //есть есть у революции принуд. начало ...
        CurrentSwitch := 1;
        t := time();
        Step := ON;
     end_if
  ON:
     if OnPress.Q then // .. и конец тоже может быть, коли "СТАРТ/СТОП"
        Step := WAIT;
     elsif (time() - t) > tmOn then
        t := time(); 
        CurrentSwitch := CurrentSwitch + 1;
        Step := sel(CurrentSwitch > CountSwitch, OFF, WAIT);
     end_if
  OFF:
     if OnPress.Q then // ..
        Step := WAIT;
     elsif (time() - t) > tmOff then
        t := time(); 
        Step := ON;
     end_if
end_case
Q := Step = ON;
Наверно второй раз в жизни так комментировал код. Он же сам себя комментит.
Спасибо! работает, плк у меня 73 )) у вас по нажатию на клавишу вкл. откл? правильно у меня работает?