Modbus: различия между версиями

Материал из Wiren Board
Строка 9: Строка 9:
Пакет данных Modbus выглядит, как это показано на рисунке. '''PDU''' (Protocol Data Unit) — общая часть пакета MODBUS, включающая код функции и данные пакета. '''ADU''' (Application Data Unit) — полный пакет MODBUS. Включает в себя специфичную для физического уровня часть пакета и PDU. Для последовательных линий в заголовке ADU передается адрес устройства, а в конце — контрольная сумма CRC16. Максимальный размер ADU в последовательных коммуникационных линиях составляет '''253 байта''' (из максимальных, разрешенных спецификацией 256 байт вычитается 1 байт адреса и два байта контрольной суммы). Для справки — в Modbus TCP максимальная длина пакета составляет 260 байт.
Пакет данных Modbus выглядит, как это показано на рисунке. '''PDU''' (Protocol Data Unit) — общая часть пакета MODBUS, включающая код функции и данные пакета. '''ADU''' (Application Data Unit) — полный пакет MODBUS. Включает в себя специфичную для физического уровня часть пакета и PDU. Для последовательных линий в заголовке ADU передается адрес устройства, а в конце — контрольная сумма CRC16. Максимальный размер ADU в последовательных коммуникационных линиях составляет '''253 байта''' (из максимальных, разрешенных спецификацией 256 байт вычитается 1 байт адреса и два байта контрольной суммы). Для справки — в Modbus TCP максимальная длина пакета составляет 260 байт.


Функция кодируется одним байтом и определяет,какое действие должно выполнить ведомое устройство. Значение кодов функций лежат в диапазоне от 1 до 255, причем коды от 128 до 255 зарезервированы для сообщений об ошибках со стороны ведомого устройства. Код 0 зарезервирован.
Размер блока данных может варьироваться от нуля до максимально допустимого. Если обработка запроса прошла без ошибок, то ведомое устройство возвращает пакет ADU, содержащий запрошенные данные.


[[Файл:Modbus_transaction_OK.png|500px|thumb|left|Modbus-транзакция, прошедшая без ошибок]]
[[Файл:Modbus_transaction_OK.png|500px|thumb|left|Modbus-транзакция, прошедшая без ошибок]]
[[Файл:Modbus_transaction_ERR.png|500px|thumb|left|Modbus-транзакция с ошибками]]
[[Файл:Modbus_transaction_ERR.png|500px|thumb|left|Modbus-транзакция с ошибками]]

Версия 17:38, 6 декабря 2016

Для управления WB-MR14 используется протокол Modbus с открытой спецификацией. Это протокол прикладного (седьмого) уровня модели OSI, он служит для обмена данными, чаще всего между устройствами автоматизации и реализован в виде "протокола ответов на запросы (request-reply protocol)".

В устройствах Wirenboard данные Modbus передаются по последовательным линиям связи RS-485. В последовательных линиях связи протокол RS-485 полудуплексный и работает по принципу «клиент-сервер». Каждое устройство в сети имеет адрес от 1 до 247, адрес 0 используется для широковещательной передачи данных всем устройствам, а адреса 248–255 считаются зарезервированными согласно спецификации Modbus, их использование не рекомендуется.

Ведущее устройство ("мастер", или "клиент") периодически опрашивает "ведомое", или "сервер". Ведущее устройство не имеет адреса, передача сообщений от ведомого устройства ведущему без запроса ведущего в протоколе не предусмотрена.

Датаграмма Modbus в общем виде

Пакет данных Modbus выглядит, как это показано на рисунке. PDU (Protocol Data Unit) — общая часть пакета MODBUS, включающая код функции и данные пакета. ADU (Application Data Unit) — полный пакет MODBUS. Включает в себя специфичную для физического уровня часть пакета и PDU. Для последовательных линий в заголовке ADU передается адрес устройства, а в конце — контрольная сумма CRC16. Максимальный размер ADU в последовательных коммуникационных линиях составляет 253 байта (из максимальных, разрешенных спецификацией 256 байт вычитается 1 байт адреса и два байта контрольной суммы). Для справки — в Modbus TCP максимальная длина пакета составляет 260 байт.


Функция кодируется одним байтом и определяет,какое действие должно выполнить ведомое устройство. Значение кодов функций лежат в диапазоне от 1 до 255, причем коды от 128 до 255 зарезервированы для сообщений об ошибках со стороны ведомого устройства. Код 0 зарезервирован.

Размер блока данных может варьироваться от нуля до максимально допустимого. Если обработка запроса прошла без ошибок, то ведомое устройство возвращает пакет ADU, содержащий запрошенные данные.

Modbus-транзакция, прошедшая без ошибок
Modbus-транзакция с ошибками