Показать сообщение отдельно
Старый 30.08.2018, 12:16   #1
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 561
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Особенности реализации Modbus TCP

При тестировании реализации Modbus TCP в SMH4 выявлена следующая "особенность":

Modbus TCP сервер принимает неверно сформированный запрос "Write Multiple Registers (0x10)", не формирует никакой ошибки, а в регистрах устройства оказывается мусор.

Ожидается, что неверно сформированный запрос будет или проигнорирован (вплоть до закрытия коннекта), или вернется исключение 0x03 или 0x04.
При этом, в регистры Modbus не должны модифицироваться, и тем более, в них не должны попадать мусорные значения.

Пример 1 неверного запроса и ответ:

Код:
Запрос: 0000 0000 0007 01 10 03e8 0002 04
Ответ:  0000 0000 0006 01 10 03e8 0002
Пример 2 неверного запроса и ответ:

Код:
Запрос: 0000 0000 000b 01 10 03e8 0002 04
Ответ:  0000 0000 0006 01 10 03e8 0002
Пример правильно сформированного запроса:
Код:
Запрос: 0000 0000 000b 01 10 03e8 0002 04 0001 0002
Ответ:  0000 0000 0006 01 10 03e8 0002
Результат попадания мусора в регистры:



Для теста использовалась простая программа:



По спецификации (например, http://www.modbus.org/docs/Modbus_Ap...col_V1_1b3.pdf) функция 0x10 может возвращать исключения 0x03 (ILLEGAL DATA VALUE), 0x04 (SERVER DEVICE FAILURE).

Ниже приведена диаграмма обработки функции 0x10 из спецификации:

Изображения
Тип файла: png tcpmodbus-test.png (5.2 Кбайт, 809 просмотров)
Тип файла: png badmodbus.png (12.9 Кбайт, 797 просмотров)
Тип файла: png spec-0x10.png (74.8 Кбайт, 819 просмотров)
Вложения
Тип файла: zip tcpmodbus-test.psl.zip (155.4 Кбайт, 22 просмотров)

Последний раз редактировалось Gel, 30.08.2018 в 12:45
Gel вне форума   Ответить с цитированием