Какие проблемы могут возникнуть, если я перекрываю мультирегистрационные элементы данных Modbus?
Обычно используется 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 ответ
Это сделает ваше устройство не modbus-compatible
устройство, но просто modbus-like
устройство.
Недостаток в том, что существует множество клиентов Modbus, в основном SCADA-систем, которые просто перестают работать с такой картой регистров. Поэтому, если вас не интересуют сторонние клиенты, вы можете сделать это, но какова цель?
UPD
Также вы получаете неопределенное поведение при чтении регистров, которые принадлежат разным значениям одновременно. Каков ожидаемый результат чтения одного слова в 4002
? LSB из a
или MSB из b
?
Как мне прочитать 2 последовательных номера (a
а также b
)??
Modbus уже похож на Modbus, когда дело доходит до значений нескольких регистров
Неправильно, это все еще Modbus, но всякий раз, когда вы готовите многозначные значения или внедряете метки времени, вы явно определяете их в документации, и ваши правила не должны нарушать общие правила Modbus, как упомянуто выше. Нет ничего плохого в том, что вы используете 2 регистра в спецификации MSB.
Таким образом, ответ заключается в том, что он может работать для некоторых конкретных случаев, но, как правило, вообще не используется.