
Сообщение от
Viktor D
Ну я так и пытаюсь делать.
Непонятно как работает во эта строка
st(U := bl.Q, R := st.Q = 2); // Счетчик вращений от 0 до 1
конкретно
R := st.Q = 2 - это что делает?
Счетчик сбрасывается в 0 при R = true, т.е. как только он досчитает до 2, то на следующем цикле счетчик сбросится.
Счетчик можно заменить на направление вращения:
Код:
function_block DRV
var_input
Start : bool;
Stop : bool;
tStart : udint;
tStop : udint;
tWork : udint; // Время работы блока
end_var
var_output
FW : bool;
RW : bool;
end_var
var
bl : SYS.BLINK; // Генератор времени работы и паузы
tW : SYS.TON; // Таймер работы блока
tr : SYS.FTRIG; // Переход на паузу
dir : bool; // Направление вращения
OnOff : bool; // Кнопка
end_var
OnOff := (OnOff or Start) and not (Stop or tW.Q);
tW(I := OnOff, T := udint_to_time(tWork));
bl(I := OnOff, Th := udint_to_time(tStart), Tl := udint_to_time(tStop));
tr(I := bl.Q); if tr.Q then dir := not dir; end_if
FW := not dir and bl.Q;
RW := dir and bl.Q;
end_function_block