При симуляции Timer будет отставать из-за 100мс цикла - в приборе цикл короче - должен успевать:
Owen.jpg
Код:
function_block Timer
var_input
I : bool;
end_var
var_output
Q : udint;
end_var
var
gen : SYS.BLINK;
rt : SYS.RTRIG;
end_var
gen(I:=I, Th:=T#10ms, Tl:=T#10ms); rt(I:=gen.Q);
if rt.Q then Q := Q + 20; end_if
if not I then Q := 0; end_if
end_function_block
А вот вообще сказка:
Код:
function_block Timer
var_input
I : bool;
end_var
var_output
Q : udint;
end_var
var
time_prev : udint;
end_var
if I then
Q := time_to_udint(get_time()) - time_prev;
else
Q := 0; time_prev := time_to_udint(get_time());
end_if
end_function_block