
Сообщение от
Антон_Б
В этом примере длительность выходного импульса равна 5 мс. А можно ли ее задавать?
Время не корректно выадерживает. МОжет связано с BLINKom
Странно, вроде бы, выдерживает
Код:
function_block Delay
var_input
In: bool;
Clk: bool;
end_var
var_output
Out: bool;
end_var
var
A: array [0..999] of bool; // буфер на 1000 * 10 мс = 10 с
InIndx: udint;
OutIndx: udint;
end_var
if CLK then // если на тактовом входе true - выполнить пересчёт
A[InIndx] := In;
OutIndx := InIndx + 123; // 123 * 10 ms = 1 s 23 ms - задержка при такте 10 ms
if OutIndx > 999 then
OutIndx := OutIndx - 1000; //минус длина массива
end_if
Out := A[OutIndx]; // значение выхода
InIndx := InIndx + 1;
if InIndx > 999 then
InIndx := InIndx - 1000; //минус длина массива
end_if
end_if
end_function_block
delay.PNG
Ничего не менял в коде...
По хорошему, BLINK и RTrig реализовать бы на ST, но хотел принцип реализации задержки показать.