Цитата Сообщение от Антон_Б Посмотреть сообщение
В этом примере длительность выходного импульса равна 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, но хотел принцип реализации задержки показать.