PDA

Просмотр полной версии : Суммирование предыдущих значений расхода.



arelavv
24.08.2015, 16:45
Для того чтобы знать количество воды прошедшее через фильтры за определенное время, в ST написал следующее выражение:
a=a+(QF1)\3600- где QF1-тэг расход в т\час , 3600сек - т.е. вычисляем т\сек. Все вроде логично, но в конечном итоге не получилось того чего хотел - подскажите где ошибка. Методом научного втыка подобрал число в 2100000 на которое надо делить чтобы получить нужные данные...Проверял на контроллере ПЛК63. В режиме эмуляции число отличается на порядок... Чувствую что надо как то привязаться к TIME? но не знаю как...Жду помощи от специалистов...

_Mikhail
24.08.2015, 16:48
Расчет вызывается раз в секунду или в каждом цикле?

Scream
24.08.2015, 20:24
Для того чтобы знать количество воды прошедшее через фильтры за определенное время, в 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 литров в час*)

Yegor
25.08.2015, 06:08
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

arelavv
25.08.2015, 08:15
Расчет вызывается раз в сек.
Спасибо всем!!!
будем посмотреть...

arelavv
26.08.2015, 10:28
Использовал программку от Егора все работает спасибо еще раз!!!
есть маленький вопросик, -MOD целочисленное деление - а цифры 1000>500 что обозначают?

capzap
26.08.2015, 10:50
Использовал программку от Егора все работает спасибо еще раз!!!
есть маленький вопросик, -MOD целочисленное деление - а цифры 1000>500 что обозначают?

скобок для Вас не добавили (TIME_TO_UDINT(TIME()) MOD 1000) > 500

arelavv
26.08.2015, 13:35
Так что-же >500

capzap
26.08.2015, 13:42
да любое число там может стоять больше 500, чтоб событие случилось один раз в секунду

arelavv
26.08.2015, 16:42
Спасибо за информацию!!!