Добрый день, уважаемые коллеги!
В проекте используется связка СПК110 с модулями Мх110. Встала задача контроля и учета расхода сырья с использованием импульсного расходомера (Kracht VC). Для подсчета импульсов используем каналы счетчика модуля МВ110-24.32ДН.
Задача и решение тривиальное - опрашиваем каналы счетчика, раз в секунду сохраняем значения, обнуляем каналы.
Вроде бы ничего криминального в такой логике нет и все работает.
Вот выдержка исходного кода:
где flush_cnt_on_timeout - булева переменная, по триггеру R_EDGE которой происходит обнуление каналов счетчика, cnt_timeout.Q - выход TON'a cnt_timeout, отрабатывающий с частотой раз в секунду, r1 и r2 - значения с каналов счетчика, уже преобразованные и умноженные на необходимый коэффициент.Код:flush_cnt_on_timeout := FALSE; IF cnt_timeout.Q THEN r1 := 1.48*WORD_TO_REAL(cnt_03_ch_16_19_read[1]); r2 := 0.45*WORD_TO_REAL(cnt_03_ch_16_19_read[3]); cnt_03_ch_16_19_write[1] := 0; cnt_03_ch_16_19_write[3] := 0; flush_cnt_on_timeout := TRUE; END_IF cnt_timeout(IN:=((auto_mode AND out_open_horizont AND out_open_vertical) OR ((manual_mal_circ OR manual_bol_circ) AND out_enable_invrtors)) AND NOT flush_cnt_on_timeout,PT:=T#1S);
Сам модуль в списке устройств выглядит следующим образом:
ss.PNG
Проблема в том, что стабильно раз в 3 секунды считанное значение "прыгает", являясь, по сути, суммой текущего и предыдущего, например ... 65,3 ; 60 ; 125,3 ... В отладчике та же картина, раз в 3 секунды значение счетчика не обнуляется. Но почему так выходит?
Как я понимаю, у модуля, после переполнения счетчика (значение 65535) автоматическое обнуление канала не происходит, поэтому непрерывный подсчет импульсов произвести не удастся. Сейчас думаю обнуление производить не ежесекундно, а по значению счетчика (скажем, по условию >50 000).
Такой подход корректен?