
Код:
function_block Err
var_input
I1, I2, I3, I4, I5, I6, I7, I8 : bool;
end_var
var_output
Q : bool;
end_var
var
n, r : udint;
t : SYS.TON;
b : SYS.BLINK;
c : SYS.CTN;
end_var
// Подсчитаем число активных входов и определим число импульсов
n := 0; r := 0;
if I1 then n := n + 1; r := 1; end_if
if I2 then n := n + 1; r := 2; end_if
if I3 then n := n + 1; r := 3; end_if
if I4 then n := n + 1; r := 4; end_if
if I5 then n := n + 1; r := 5; end_if
if I6 then n := n + 1; r := 6; end_if
if I7 then n := n + 1; r := 7; end_if
if I8 then n := n + 1; r := 8; end_if
if n = 0 then Q := false; c(U:=false, R:=true); t(I:=false); end_if // Активных нет
if n > 1 then Q := true; c(U:=false, R:=true); t(I:=false); end_if // Активных много
if n = 1 then // Активный один
if c.Q = r and not b.Q then // Счетчик имппульсов досчитал до номера ошибки
t(I := true, T := T#5s); b(I:=false); // Запускаем таймер паузы и выключаем генератор
if t.Q then t(I:=false); c(R:=true); end_if // Если пауза выдержана, сбрасываем таймер и счетчик
else // Иначе включаем генератор и подсчитываем импульсы, которые он выдает
b(I := true, Th := T#500ms, Tl := T#500ms, Q=>Q); c(R:=false, U := b.Q);
end_if
end_if
end_function_block