-
Всем добрый день.
Вижу, тема до сих пор так и не раскрыта. Столкнулся с такой же ситуацией - ПЛК73 + панель Weintek. В панели задаю полтора десятка параметров типа UINT (пределы уставок), все объявлены как RETAIN в ПЛК, тип параметра Конфигурационный. Периодически то один, то другой самопроизвольно сбрасывается на значение по умолчанию. Отключений по питанию не было, программа выполняется нормально. Что характерно - практически аналогичный проект реализован на ПЛК110 - там такого не наблюдается. ПЛК73 особенный, это факт)
Можно, конечно, с этим бороться разными способами, но интереснее разобраться почему.
-
Уже больше полутора лет работает ПЛК63, который сидит на грязном питании с периодическим отключением, еще ни разу не слетал Конфигурационный параметр. Меняет либо по сети, либо с экрана.
-
Удалось обнаружить причину такого странного поведения ПЛК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-порта (именно приема-передачи). Точно же где-то есть.