Цитата Сообщение от uvwxyz Посмотреть сообщение
Уважаемые разработчики проясните пожалуйста следующую ситуацию.
При работе ПЛК150 с ModbusSlave устройствами возникла следующая проблема. В PLC Configuration создан Modbus(Master). Внутри него создан Universal Modbus Device, внутри которого выбраны несколько(например, 3) Register Input Modul. Опрос Modbus-slave устройства идёт периодически 1 раз в секунду.
Если ответ на запрос приходит позже чем Max timeout,то сообщение об ошибке почему-то отсутствует, но информация из Modbus-slave устройства оказывается не в тех Register Input Modul'ях, из которых она была запрошена. Ответы как бы сдвигаются циклически на одну позицию. Например, информация, запрошенная Register Input Modul 1, оказывается в Register Input Modul 2. Информация, запрошенная Register Input Modul 2, оказывается в Register Input Modul 3. А информация, запрошенная Register Input Modul 3, оказывается в Register Input Modul 1.
При обмене используется интерфейс RS485 и протокол Modbus RTU
Дело совсем не в таргете и не в прошивке.
Дело в особенностях протокола ModBus. В ModBus-е мастер не может идентифицировать ответы на запросы разл. регистров с одного и того-же устройства. Поэтому в Вашем случае, уважаемый uvwxyz, было следующее.

1. При старте мастер опросил регистр 1.
2. Устройство стормозило и ответило на запрос после таймаута - мастер высветил ошибку (только один раз, ее легко не заметить).
3. Мастер посылает запрос ко сл. регистру и тут устройство наконец возвращает ответ на предидущий запрос.
4.Мастер радостно кладет значение 1-го регистра в ячейку для 2-го. Цикл 3-4 повторяется.

Решения два.
1. Если устройство постоянно долго думает - выставите таймаут побольше.
2. Если же это единичные случаи, то попробуйте чередовать команды чтения регистров, например 1-й читать командой 0х03, второй 0х04, третий 0х03 и т.д.
В этом случае мастер сможет идентифицировать запаздавшую посылку по номеру команды.