Какие проблемы могут возникнуть, если я перекрываю мультирегистрационные элементы данных Modbus? - PullRequest
0 голосов
/ 21 января 2019

Обычно используется 2 регистра для чтения / записи значения с плавающей запятой в Modbus. Мой вопрос заключается в том, какие проблемы или проблемы совместимости возникают, если я указываю свою карту регистрации устройств с перекрывающимися данными следующим образом.

40001 (float a), 40002 (float b), 40003 (float c), 40004 (float d) и т. Д.

Число с плавающей запятой (a) можно прочитать на 40001 с помощью FC03, количество регистров равно 2. Число с плавающей запятой (b) можно прочитать на 40002 с помощью FC03, количество регистров равно 2. С плавающей точкой (a) и (b) можно прочитать на 40001 с помощью FC03, количество регистров - 4.

1 Ответ

0 голосов
/ 22 января 2019

Это сделает ваше устройство не устройством modbus-compatible, а устройством modbus-like.

Недостаток в том, что существует множество клиентов Modbus, в основном SCADA-систем, которые просто перестали бы работать с такой картой регистров. Поэтому, если вас не интересуют сторонние клиенты, вы можете сделать это, но какова цель?

UPD

Также вы получаете неопределенное поведение при чтении регистров, которые принадлежат разным значениям одновременно. Каков ожидаемый результат чтения одного слова на 4002? LSB a или MSB b?

Как мне прочитать 2 последовательных числа (a и b) ??

Modbus уже похож на Modbus, когда дело доходит до регистрации Значения

Неправильно, это по-прежнему Modbus, но всякий раз, когда вы готовите многозначные значения или применяете метки времени, вы явно определяете их в документации, и ваши правила не должны нарушать общие правила Modbus, такие как упомянутые выше. Нет ничего плохого в том, что вы используете 2 регистра в спецификации MSB.

Таким образом, ответ может работать для некоторых конкретных случаев, но, как правило, вообще не используется .

...