cMT2108X2, некорректный подсчет времени работы оборудования

Всем доброго дня!
В панели cMT2108X2 не могу локализовать и устранить ошибку.
Суть такова: к панели через ICPCON по Modbus подключен топливный расходомер (подача и обратка), и если есть расход (идут импульсы), панель считает суточные и накопительные моточасы двигателя.
Оба параметра МЧ хранятся во float. Принцип определения факта расхода-простоя работает без нареканий, прошу принять за данность))
Подсчет обоих МЧ идет по одному принципу: раз в 5 секунд (period=5) запускается макрос, в макросе проверяется, есть ли расход по подаче или обратке (delta_p > 0 or delta_o > 0), и если да - прибавить 5 секунд к параметрам моточасов ("drt1_mh" - суточный, "drt1_mhsum" - накопительные/суммарные):
Проблема в том, что по неизвестной причине накопленные часы в конце суток оказываются в 1.4 раза больше, чем суточные. Как это вообще может происходить - не могу представить.
Макрос запускается асинхронно.
Ситуация осложняется и тем, что проблемная панель на данный момент недоступна (установлена на судне, судно в рейсе), а эмуляция или запуск на другой такой же панели не дает такого эффекта, накопленные и суточные имеют одинаковые значения.
Есть ли этому какое-то логическое объяснение, кроме намеренного саботажа?)
В панели cMT2108X2 не могу локализовать и устранить ошибку.
Суть такова: к панели через ICPCON по Modbus подключен топливный расходомер (подача и обратка), и если есть расход (идут импульсы), панель считает суточные и накопительные моточасы двигателя.
Оба параметра МЧ хранятся во float. Принцип определения факта расхода-простоя работает без нареканий, прошу принять за данность))
Подсчет обоих МЧ идет по одному принципу: раз в 5 секунд (period=5) запускается макрос, в макросе проверяется, есть ли расход по подаче или обратке (delta_p > 0 or delta_o > 0), и если да - прибавить 5 секунд к параметрам моточасов ("drt1_mh" - суточный, "drt1_mhsum" - накопительные/суммарные):
- Код: Выделить всё
- // Расчет моточасов
float mh = 0 // моточасы
if (delta_p > 0 or delta_o > 0) then
GetData(mh, "Local HMI", "drt1_mh", 1)
mh = mh+(period/3600.0) // + 5 сек
SetData(mh, "Local HMI", "drt1_mh", 1)
GetData(mh, "Local HMI", "drt1_mhsum", 1)
mh = mh+(period/3600.0) // + 5 сек
SetData(mh, "Local HMI", "drt1_mhsum", 1)
end if
Проблема в том, что по неизвестной причине накопленные часы в конце суток оказываются в 1.4 раза больше, чем суточные. Как это вообще может происходить - не могу представить.
Макрос запускается асинхронно.
Ситуация осложняется и тем, что проблемная панель на данный момент недоступна (установлена на судне, судно в рейсе), а эмуляция или запуск на другой такой же панели не дает такого эффекта, накопленные и суточные имеют одинаковые значения.
Есть ли этому какое-то логическое объяснение, кроме намеренного саботажа?)