Цитата Сообщение от МихаилГл Посмотреть сообщение
Скиньте последний код... Гляну. Я уже совсем запутался чего вы хотите...
Код:
FUNCTION_BLOCK Flowmeter // имя функционального блока.

    VAR_INPUT // объявление входных переменных
        i_Work: BOOL; // разрешение на работу
        i_Imp: BOOL; // переменная считывания переднего фронта импульса
        i_ImpMass: REAL; // переменна цены импульса
        i_Flow: REAL; // Общий поток
        i_FlowYear: REAL; // Годовой поток
        i_FlowMonth: REAL; // Поток за месяц
        i_FlowDay: REAL; // Поток за день
        i_FlowHour: REAL; // Поток за час

        i_nowYear: UDINT; // Текущий год
        i_nowMonth: UDINT; // Текущий месяц
        i_nowDay: UDINT; // Текущий день
        i_nowHour: UDINT; // Текущий час
        i_nowMinute: UDINT; // Текущая минута
        i_nowSecond: UDINT; // Текущая секунда
    END_VAR

    VAR_OUTPUT // объявление выходных переменных
        Flow: REAL;
        FlowDay: REAL;
        FlowHour: REAL;
        FlowMonth: REAL;
        FlowYear: REAL;
        ImpMass: REAL;
        Work: BOOL;
    END_VAR

    VAR // объявление локальных переменных
        TON: TON_FB;
        TON_Q: BOOL;
        l_Flow: REAL;
        l_FlowDay: REAL;
        l_FlowHour: REAL;
        l_FlowMonth: REAL;
        l_FlowYear: REAL;
        l_year: UDINT;
        l_month: UDINT;
        l_day: UDINT;
        l_hour: UDINT;
        l_minute: UDINT;
        l_second: UDINT;
        l_impMass: REAL;
    END_VAR


    TON(IN := NOT(i_Work), PT := 5, Q => TON_Q);
    
    IF TON_Q THEN
        //запись входных переменных в локальные
        l_Flow := i_Flow;
        l_FlowYear := i_FlowYear;
        l_FlowMonth := i_FlowMonth;
        l_FlowDay := i_FlowDay;
        l_FlowHour := i_FlowHour;
        l_impMass := 100;
        
       //блок вычисления показаний воды
       IF i_Imp = TRUE THEN
        l_flow := l_Flow + ((1 / 1000) * i_ImpMass);
        l_FlowDay := l_FlowDay + ((1 / 1000) * i_ImpMass);
        l_FlowHour := l_FlowHour + ((1 / 1000) * i_ImpMass);
        l_FlowMonth := l_FlowMonth + ((1 / 1000) * i_ImpMass);
        l_FlowYear := l_FlowYear + ((1 / 1000) * i_ImpMass);
       END_IF
       
       //сравнение дня показаний за день. Сравнение <> не работает, сравнение с нулями работает
       IF i_nowHour = 00 AND i_nowMinute = 00 AND i_nowSecond = 00 THEN
        l_day := i_nowDay;
        l_FlowDay := 0;
       END_IF
        
        //Часовые показания
        IF i_nowHour <> l_hour THEN
            l_hour := i_nowHour;
            l_FlowHour := 0;
        END_IF
        
        //месячные показания
        IF i_nowMonth <> l_month THEN
        l_month := i_nowMonth;
        l_FlowMonth := 0;
        END_IF

        //годовые показания
        IF i_nowYear <> l_year THEN
        l_year := i_nowYear;
        l_FlowYear := 0;
        END_IF

        //запись из локальных переменных в выходные
        ImpMass := l_impMass;
        Flow := l_Flow;
        FlowHour := l_FlowHour;
        FlowDay := l_FlowDay;
        FlowMonth := l_FlowMonth;
        FlowYear := l_FlowYear;
    
    i_Work := true;
    END_IF


END_FUNCTION_BLOCK