Сообщение от
МихаилГл
Скиньте последний код... Гляну. Я уже совсем запутался чего вы хотите...
Код:
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