Триггеры то ладно, но каких-то средств для работы с временнЫми интервалами точно не хватает
Вид для печати
Триггеры то ладно, но каких-то средств для работы с временнЫми интервалами точно не хватает
Да, библиотеки конечно не хватает...
Городить все стандартные блоки лениво...
Да и отсутствие TIME не очень радует, хотя программа не даёт использовать имя TIME в качестве переменной, скорее всего работы ведутся и имя переменной уже зарезервировано.
Использую для тестов время цикла, не знаю на сколько такой вариант верный, но, как мне кажется, он более менее точный:
function_block times
var_input
T_cycle:udint;
end_var
var_output
T : udint;
end_var
var
M:udint;
end_var
M:=T;
T:=M+T_cycle;
end_function_block
А Таймер TOF получился такой (используя ФБ ST Tites)
function_block TOF
var_input
IN:bool;
PT:udint;
T_cycle:udint;
end_var
var_output
Q:bool;
ET:udint;
end_var
var
M:bool;
StartTime:udint;
T:times;
end_var
T();
T.T_cycle:=T_cycle;
if IN then
Q:=true;
ET:=0;
else
if M then
StartTime:=T.T;
end_if
if Q then
ET:=T.T-StartTime;
if ET>=PT then
Q:=false;
ET:=PT;
end_if
end_if
end_if
M:=IN;
end_function_block
Ну как временный эрзац. Если задача тяжелая - то может имеет смысл проверить "циклов за секунду"
А по поводу fb times - даже сейчас нужен ли он ? Во всех блоках типа TON/TOF/BLINK/PID/... локальный "readonly" t := t + 1 изобразит TIME()
Внезапно оказавшийся 1.754мс за цикл тоже не проблема и сейчас
Вложение 69661Вложение 69662
В ПР205 (думаю что и в 103-ем),есть системное время в мс, и их можно использовать для реального времени блоков TON\TOF\TP и прочих.
yura2507 а не могли бы выкладывать код закрывая его тегами, чтобы можно было развернуть и скопировать? спасибо.
R_TRIG Триггер переднего фронта, от слова Raise
F_TRIG Триггер заднего фронта, от слова FallКод:function_block R_TRIG
var_input
I:bool;
end_var
var_output
Q : bool;
end_var
var
M:bool;
end_var
Q:=false;
if I and not M then Q:=true; end_if
M:=I;
end_function_block
Код:function_block F_TRIG
var_input
I:bool;
end_var
var_output
Q : bool;
end_var
var
M:bool;
end_var
Q:=false;
if not I and M then Q:=true; end_if
M:=I;
end_function_block
Спасибо, полезно, когда ни на что не остается свободного времени и кто-то уже переписал или создал FB на ST...
Код:function_block R_TRIG
var_input
I:bool;
end_var
var_output
Q : bool;
end_var
var
M:bool;
end_var
(*
Q:=false;
if I and not M then Q:=true; end_if
*)
Q:=I and not M;
M:=I;
end_function_block
Код:function_block F_TRIG
var_input
I:bool;
end_var
var_output
Q : bool;
end_var
var
M:bool;
end_var
(*
Q:=false;
if not I and M then Q:=true; end_if
*)
Q:=not I and NOT M;
M:=NOT I;
end_function_block