Код: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




Ответить с цитированием