Modbus: различия между версиями
Kilpio (обсуждение | вклад) |
Kilpio (обсуждение | вклад) |
||
Строка 43: | Строка 43: | ||
| 16-битное слово || только чтение | | 16-битное слово || только чтение | ||
|} | |} | ||
'''Регистры флагов'''(Coils)хранят однобитные значения - то есть могут находится в состоянии 0 или 1. Такие регистры могут обозначать текущее состояние выхода (включено реле). Название "coil" буквально и означает обмотку-актюатор электромеханического реле. Регистры флагов допускают как чтение, так и запись. | |||
'''Дискретные входы''' (Discrete Inputs) также являются однобитными регистрами, описывающими состояние входа устройства (например подано напряжение -- 1). Эти регистры поддерживают только чтение. | |||
'''Регистры хранения''' (Holding Registers) и '''регистры ввода''' (Input Registers) представлены двухбайтовым словом и могут хранить значения от 0 до 65535 (0x0000 -- 0xFFFFF). |
Версия 18:59, 6 декабря 2016
Для управления WB-MR14 используется протокол Modbus с открытой спецификацией. Это протокол прикладного (седьмого) уровня модели OSI, он служит для обмена данными, чаще всего между устройствами автоматизации и реализован в виде "протокола ответов на запросы (request-reply protocol)".
В устройствах Wirenboard данные Modbus передаются по последовательным линиям связи RS-485. В последовательных линиях связи протокол RS-485 полудуплексный и работает по принципу «клиент-сервер». Каждое устройство в сети имеет адрес от 1 до 247, адрес 0 используется для широковещательной передачи данных всем устройствам, а адреса 248–255 считаются зарезервированными согласно спецификации 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, содержащий запрошенные данные.
При возникновении ошибки устройством возвращается код ошибки. В случае обычной транзакции код функции в ответе возвращается без изменений; в случае ошибки старший бит кода функции устанавливается в единицу (то есть код функции + 0x80)
Ответ от ведомого устройства должен прийти в течение заданного таймаута — бессмысленно ждать ответ, который, возможно, никогда и не придет.
Структуры данных Modbus
В Modbus принято кодировать адреса и данные в формате big-endian, то есть в формате, когда байты следуют, начиная со старшего: например, при передаче шестнадцатеричного числа 0x1234 сначала устройством будет принят байт 0x12, а затем — 0x34. Для передачи данных другого типа, например, чисел с плавающей запятой, строк и т.п. производитель может выбрать свой собственный способ кодирования — для расшифровки получаемых данных важно ознакомится со спецификацией производителя устройства.
Модель данных Modbus
Обмен данными с Modbus-устройствами происходит через регистры. В протоколе Modbus определяется четыре типа регистров, показанных в таблице:
Таблица | Размер | Тип доступа |
---|---|---|
Регистры флагов (Coils) | 1 бит | чтение и запись |
Дискретные входы (Discrete Inputs) | 1 бит | только чтение |
Регистры хранения (Holding Registers) | 16-битное слово | чтение и запись |
Регистры ввода (Input Registers) | 16-битное слово | только чтение |
Регистры флагов(Coils)хранят однобитные значения - то есть могут находится в состоянии 0 или 1. Такие регистры могут обозначать текущее состояние выхода (включено реле). Название "coil" буквально и означает обмотку-актюатор электромеханического реле. Регистры флагов допускают как чтение, так и запись.
Дискретные входы (Discrete Inputs) также являются однобитными регистрами, описывающими состояние входа устройства (например подано напряжение -- 1). Эти регистры поддерживают только чтение.
Регистры хранения (Holding Registers) и регистры ввода (Input Registers) представлены двухбайтовым словом и могут хранить значения от 0 до 65535 (0x0000 -- 0xFFFFF).