|
|
(не показаны 3 промежуточные версии 3 участников) |
Строка 6: |
Строка 6: |
|
| |
|
| <!--T:2--> | | <!--T:2--> |
| Modbus - это протокол прикладного (седьмого) уровня модели [https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_OSI OSI]. Чаще всего он служит для обмена данными между устройствами автоматизации и реализован в виде "протокола ответов на запросы (request-reply protocol)". | | Modbus - это протокол, который служит для обмена данными между устройствами автоматизации и реализован в виде "протокола ответов на запросы (request-reply protocol)". |
|
| |
|
| <!--T:3--> | | <!--T:3--> |
Строка 21: |
Строка 21: |
|
| |
|
| <!--T:7--> | | <!--T:7--> |
| Пакет данных 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. Максимальный размер PDU в последовательных коммуникационных линиях составляет '''253 байта''' (из максимальных, разрешенных спецификацией 256 байт вычитается 1 байт адреса и два байта контрольной суммы). Для справки — в Modbus TCP максимальная длина пакета составляет 260 байт. |
|
| |
|
|
| |
|
Строка 272: |
Строка 272: |
|
| |
|
| == Расширение протокола Modbus от Wiren Board == | | == Расширение протокола Modbus от Wiren Board == |
| {{Anchor|fast-modbus}} | | {{Anchor|modbus-ext}} |
| Мы производим устройства, которые работают по стандартному протоколу Modbus RTU. Но протокол очень старый и имеет ряд недостатков, которые мы решили устранить с помощью своего расширения протокола. | | Мы производим устройства, которые работают по стандартному протоколу Modbus RTU. Но протокол очень старый и имеет ряд недостатков, которые мы решили устранить. |
|
| |
|
| Всё описываемое ниже справедливо только для Modbus-устройств Wiren Board.
| | Мы добавили к стандартному протоколу новые функции: настраиваемое время задержки, игнорирование стопбитов и режим сплошного чтения регистров. |
|
| |
|
| Торговое название расширения протокола «Быстрый Modbus».
| | Также выпустили расширение протокола под названием «Быстрый Modbus». В нем появились события и быстрое сканирование устройств на шине RS-485. |
| | |
| | Ниже описаны новые функции, а про расширение «Быстрый Modbus» читайте на [[Fast_Modbus |странице с описанием]]. |
| | |
| | Всё описываемое справедливо только для Modbus-устройств Wiren Board. |
|
| |
|
| === Настраиваемое время задержки ответа устройством === | | === Настраиваемое время задержки ответа устройством === |
Строка 286: |
Строка 290: |
| В устройствах есть специальный регистр 113, в котором можно настроить время ответа slave-устройства в миллисекундах. Нужное значение подбирается опытным путём. | | В устройствах есть специальный регистр 113, в котором можно настроить время ответа slave-устройства в миллисекундах. Нужное значение подбирается опытным путём. |
|
| |
|
| === Стопбиты === | | === Игнорирование стопбитов === |
| Устройства всегда ожидают от мастера 1 стопбит, а отправляют ответ с 2. | | Устройства всегда ожидают от мастера 1 стопбит, а отправляют ответ с 2. |
|
| |
|
Строка 298: |
Строка 302: |
|
| |
|
| При таком запросе устройство вернёт пакет со значением регистров. Если регистры отсутствуют в устройстве, то для них будет возвращено значение 0xFFFE. | | При таком запросе устройство вернёт пакет со значением регистров. Если регистры отсутствуют в устройстве, то для них будет возвращено значение 0xFFFE. |
|
| |
| === Сканирование устройств на шине ===
| |
|
| |
| Обычно инсталляция содержит несколько slave-устройств в щите или в поле на одной шине RS-485. Каждое устройство имеет адрес, который пользователь может менять. Обычно при монтаже адреса slave-устройств переписываются с корпуса устройства и вносятся вручную в конфигурацию мастера. Это не очень удобно.
| |
|
| |
| Раньше для сканирования шины использовался специальный скрипт, который перебирал все возможные адреса на шине и ждал от них ответа в течение определённого времени. Процесс занимал несколько минут и зависел от настроек связи устройств: скорости, стоповых битов и т.п.
| |
|
| |
| В расширении протокола мы добавили возможность быстро сканировать шину без необходимости выжидать таймаут для каждого несуществующего адреса. Более того, при сканировании могут быть обнаружены устройства с одинаковыми адресами, которым можно задать новые адреса не отключая устройства от шины! Также функция сканирования способна обнаружить на одной шине устройства с разными настройками связи.
| |
|
| |
| Теперь можно собрать щит не обращая внимания на modbus-адреса устройств. В процессе сканирования будут прочитаны модели устройств, настройки связи, их серийные номера и адреса на шине. Притом, вы можете изменить адреса подключённых устройств, обращаясь к устройству по уникальному серийному номеру.
| |
|
| |
| Описание расширенных команд и референсная реализация утилиты сканирования доступны в [https://github.com/wirenboard/wb-modbus-ext-scanner репозитории].
| |
|
| |
| === События ⚡ ===
| |
| {{Anchor|events}}
| |
| Для некоторых регистров устройств Wiren Board доступны «события» — это позволяет сократить время опроса изменений в регистрах устройств на шине.
| |
|
| |
| Работает так: мастер отправляет в шину широковещательные запросы каждые 50 мс, устройства на шине проводят арбитраж и по очереди отправляют изменившиеся регистры мастеру.
| |
|
| |
| События доступны для некоторых регистров, они отмечены в карте регистров молнией ⚡.
| |
|
| |
| Эта функция доступна только для устройств Wiren Board и активируется специальной командой от мастера. Если мастер не поддерживает наше расширение протокола — устройство работает по обычному протоколу Modbus RTU, что гарантирует совместимость с огромным парком сторонних устройств.
| |
|
| |
| Подробнее читайте в [https://github.com/wirenboard/wb-modbus-ext-scanner/blob/main/protocol.md описании протокола на Github].
| |
|
| |
| === Поддержка быстрого Modbus в прошивках ===
| |
|
| |
| {| border="1" class="wikitable"
| |
| ! Устройство || Версия прошивки с поддержкой "быстрого Modbus"
| |
| |-
| |
| | WB-MRx, WB-MWAC
| |
| | 1.19.0
| |
| |-
| |
| | WB-MDM3
| |
| | 2.6.0
| |
| |-
| |
| | WB-LED, WB-MRGBW-D
| |
| | 3.2.0
| |
| |-
| |
| | WB-MSx, WB-MSWx, WB-MIR, WB-M1W2
| |
| | 4.23.0
| |
| |-
| |
| | WB-MAI11
| |
| | не поддерживается
| |
| |-
| |
| | WB-MAI6
| |
| | 2.0.0
| |
| |-
| |
| | WB-MAO4
| |
| | 2.2.0
| |
| |-
| |
| | WB-MAPx
| |
| | 2.4.0
| |
| |-
| |
| | WB-MIO
| |
| | 1.6.0
| |
| |-
| |
| | WB-REF-U
| |
| | 1.4.0
| |
| |-
| |
| | WB-REF-DF
| |
| | 1.1.0
| |
| |-
| |
| |}
| |
|
| |
|
| |
|
| </translate> | | </translate> |