Добрый день.
1. Есть ПЛК210-12-CS, СП310 (мастер по отношению к ПЛК, подключен по ModbusTCP).
Сам ПЛК как мастер опрашивает по TCP и RTU модули ввода-вывода, датчики уровня, загазованности и прочее (из всего этого пока подключена только СП310).
Для общения с СП310 в узле Ethernet создан ModbusTCP_Slave_Device, в котором 100 Holding-регистров и 160 Input-регистров.
К Input-регистрам привязаны переменные, которые подготавливает ПО ПЛК.
2. На этапе отладки связки СП310-ПЛК210 замечено, что один из Input-регистров в старшем байте (биты с 8 по 15) имеет всегда нули. Т.е. в режиме отладки видно, что привязанная переменная имеет значение 43690 (dec). Однако СП310 читает вместо этого значение 170 (dec).
Отключил СП310, подключил ModbusPoll - то же самое (исключил вариант, что сама панель внутри себя чем то перезаписывает регистр).
3. Если отвязать переменную от "проблемного" регистра и в режиме отладки принудительно фиксировать значение вручную - все отлично. И СП310 и ModbusPoll читают регистр корректно.
4. Закомментировал весь код программы. Оставил только одну строчку "w37Value := 43690;". И эту переменную привязал к регистру. Результат такой же - старший байт где то чем то перезаписывается.
5. Начал последовательно удалять переменные из остальных Input-регистров. И вот что увидел. К первым пяти битам регистра 36, который находится перед "проблемным" 37-мым привязаны переменные типа BOOL (переменные в составе структуры). Вот если эти булевские переменные отвязать, то "проблемный" регистр читается корректно.
Как бороться? Наблюдаем нечто похожее уже не в первый раз




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