Удалось обнаружить причину такого странного поведения ПЛК73. Происходит конфликт COM-портов.
На COM 0 ПЛК - мастер, опрашивает датчики раз в 10 секунд, по COM 1 соединен с панелью, соответственно, здесь ПЛК - слейв. Общаются все по Modus RTU. В панели имеются кнопки инкремент/декремент для параметров типа INT, и при длительном удержании этих кнопок запись по COM 1 "накладывается" на чтение по COM 0, дальше (вероятно) Watchdog и (точно) Reset. Конфигурационные переменные, которые были изменены после последнего отключения питания, не записываются в EEPROM (это же не отключение питания), и соответственно принимают последнее сохраненное значение (в моем случае 0).
Вижу следующие выходы из ситуации:
1. Инкрементируемую переменную записывать ОДИН РАЗ И ПО ОТЖАТИЮ КНОПКИ - есть у панели возможность поставить флаги начала/окончания записи. Вроде бы наиболее логично, но заняты у меня эти флаги(
2. Найти где-то в ПЛК73 флаги работы порта COM 1 (того, что слейв) и разрешать второму порту опрос только при условии, что COM 1 ничего не принимает. Мне этот вариант был бы гораздо удобнее.
Помогите, люди добрые! Подскажите, где найти состояние работы COM-порта (именно приема-передачи). Точно же где-то есть.




Ответить с цитированием