Нажмите на изображение для увеличения. 

Название:	Owen.jpg 
Просмотров:	18 
Размер:	58.7 Кб 
ID:	84987
Код:
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