Просмотр полной версии : Суммирование предыдущих значений расхода.
Для того чтобы знать количество воды прошедшее через фильтры за определенное время, в ST написал следующее выражение:
a=a+(QF1)\3600- где QF1-тэг расход в т\час , 3600сек - т.е. вычисляем т\сек. Все вроде логично, но в конечном итоге не получилось того чего хотел - подскажите где ошибка. Методом научного втыка подобрал число в 2100000 на которое надо делить чтобы получить нужные данные...Проверял на контроллере ПЛК63. В режиме эмуляции число отличается на порядок... Чувствую что надо как то привязаться к TIME? но не знаю как...Жду помощи от специалистов...
_Mikhail
24.08.2015, 16:48
Расчет вызывается раз в секунду или в каждом цикле?
Для того чтобы знать количество воды прошедшее через фильтры за определенное время, в ST написал следующее выражение:
a=a+(QF1)\3600- где QF1-тэг расход в т\час , 3600сек - т.е. вычисляем т\сек. Все вроде логично, но в конечном итоге не получилось того чего хотел - подскажите где ошибка. Методом научного втыка подобрал число в 2100000 на которое надо делить чтобы получить нужные данные...Проверял на контроллере ПЛК63. В режиме эмуляции число отличается на порядок... Чувствую что надо как то привязаться к TIME? но не знаю как...Жду помощи от специалистов...
r1(clk:=i8);(*триггер на вход от счетчика*)
IF r1.Q THEN(*если сработал триггер*)
IF one=FALSE(*доп. переменная, если она false запоминаем время сейчас, если TRUE, то вычитаем от текущего запомненное в t1 = получаем сколько прошло между сигналами в мс*)
THEN
one:=TRUE;
t1:=TIME();
ELSE
t2:=TIME()-t1;
one:=FALSE;
END_IF
END_IF
Liters:=DWORD_TO_WORD(3600000/TIME_TO_DWORD(t2));(*счетчик 1 имп\л liters - выходная переменная WORD литров в час*)
VAR
tickTock: R_TRIG;
END_VAR
tickTock(CLK := TIME_TO_UDINT(TIME()) MOD 1000 > 500);
IF tickTock.Q THEN
a := a + QF1 / 3600;
END_IF
Расчет вызывается раз в сек.
Спасибо всем!!!
будем посмотреть...
Использовал программку от Егора все работает спасибо еще раз!!!
есть маленький вопросик, -MOD целочисленное деление - а цифры 1000>500 что обозначают?
Использовал программку от Егора все работает спасибо еще раз!!!
есть маленький вопросик, -MOD целочисленное деление - а цифры 1000>500 что обозначают?
скобок для Вас не добавили (TIME_TO_UDINT(TIME()) MOD 1000) > 500
да любое число там может стоять больше 500, чтоб событие случилось один раз в секунду
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot