Камрады!
У меня тупой вопрос на математику и алгоритмы, так как я снова туплю и запутался с простыми вещами.
Мне надо считать импульсы на входе модулей Mx110 (подсчёт расхода, цена одного импульса известна, импульсы поступают редко) с учётом переполнения WORD, в котором модуль их хранит и по их изменению что-то делать.
Примечания:
а) Это НЕ реакция на нажатия кнопок по счётчику импульсов - такое я уже писал. Там было не важно количество импульсов, а тут важно.
б) Пишу на CodeSys 3.5, где медленный Modbus, поэтому вариант считать импульсы самому по R_TRIG не подходит.
в) Внутри программы я могу взять даже 32-битный тип данных, с этим проблем нет. Но штатно модуль считает в типе WORD.
Вопрос-тупняк:
Сейчас я написал простой алгоритм:
* Сохраняем предыдущее значение импульсов с модуля
* Вычисляем по модулю разницу с текущим считанным
* Если разница больше нуля - что-то делаем и текущее значение запоминаем как предыдущее.
Косяк будет в том, когда у нас будет такая ерунда:
Предыдущее = 65534, Текущее = 65535 ===> ОК, разница будет равна 1, и всё будет верно
Предыдущее = 65535, Текущее = 0 ===X, Жесть! Разница будет 65535, что будет ошибкой
Как вы решали такую задачу? Как правильно отреагировать на переполнение WORD в модулей Мх110?
Если вас не затруднит - поясните мне для совсем тупых, так как я очень затупил на простой вещи.