количество байтов в Modbus TCP PDU

Я пишу Modbus TCP Master для связи с подчиненными Modbus TCP.

У меня проблема с определением правильного формата пакета

Это стандартный формат пакета:

 | Tx ID | Proto ID | Length | Unit ID ***| FCode | Data |***

Как мы знаем, FCode & Data формирует PDU comms.

Но мой ведомый Modbus TCP имеет один байт впереди для количества переданных байтов. выглядит так:

| Tx ID | Proto ID | Length | Unit ID ***| FCode | byte count | Data |***

Мой вопрос в том, что это в любом случае нарушение спецификации Modbus TCP?


person BBM    schedule 13.12.2018    source источник
comment
Я отредактировал ваш вопрос, улучшив либо его форматирование, либо ее качество, чтобы помочь людям понять ваш вопрос и помочь вам получить правильный ответ. Но вам все равно может потребоваться добавить дополнительную информацию, чтобы ваш вопрос стал полностью решаемым.   -  person Bsquare ℬℬ    schedule 13.12.2018


Ответы (1)


Это зависит от кода функции. Разные функциональные коды имеют разные pdu:s.

Например, одиночный регистр записи (0x06) не имеет «счетчика байтов», а запись нескольких регистров (0x010) имеет.

Какие функциональные коды используются?

person random    schedule 11.01.2019
comment
Я узнал, что этот формат приемлем в соответствии с руководством по реализации. Я понял, что ведомое устройство использует Modbus RTU через TCP, и, следовательно, дополнительное поле для количества байтов - person BBM; 12.01.2019
comment
Хорошо, я вижу. Вы заменили ведомое устройство или обновили свой код до RTU, чтобы теперь все работало? - person random; 14.01.2019
comment
Поскольку я добавлял поддержку ведомого устройства, и это приемлемо в спецификации, я добавил поддержку как Modbus TCP, так и Modbus RTU через TCP, и теперь все работает нормально. Спасибо за ваш вклад - person BBM; 14.01.2019