Перейти к содержанию

Навигация

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

(не показано 15 промежуточных версий 6 участников)
Строка 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 байт.




Строка 73: Строка 73:
Регистры в стандарте Modbus адресуются с помощью 16-битных адресов. Адресация начинается с нуля. Адрес регистра, таким образом, может принимать значения от 0 до 65535.  
Регистры в стандарте Modbus адресуются с помощью 16-битных адресов. Адресация начинается с нуля. Адрес регистра, таким образом, может принимать значения от 0 до 65535.  


Адресные пространства регистров, также называемые таблицами иди блоками, могут быть различны для всех четырёх типов регистров. Это значит, что значения регистров с одинаковым адресом, но разным типом, в общем случае разные.  
Адресные пространства регистров, также называемые таблицами или блоками, могут быть различны для всех четырёх типов регистров. Это значит, что значения регистров с одинаковым адресом, но разным типом, в общем случае разные.  


Например, при чтении регистра флагов (coil) номер 42, регистра дискретного входа (Discrete), регистров ввода и хранения (Input и Holding) с теми же адресами, можно получить четыре разных значения.
Например, при чтении регистра флагов (coil) номер 42, регистра дискретного входа (Discrete), регистров ввода и хранения (Input и Holding) с теми же адресами, можно получить четыре разных значения.
Строка 271: Строка 271:
В случае ограниченных вычислительных ресурсов для вычисления контрольной суммы существует функция, использующая табличные значения (также приведена в спецификации).
В случае ограниченных вычислительных ресурсов для вычисления контрольной суммы существует функция, использующая табличные значения (также приведена в спецификации).


== Расширение протокола Modbus Wiren Board ==
== Расширение протокола Modbus от Wiren Board ==
{{Anchor|modbus-ext}}
Мы производим устройства, которые работают по стандартному протоколу Modbus RTU. Но протокол очень старый и имеет ряд недостатков, которые мы решили устранить.


Мы производим устройства, которые работают по стандартному протоколу Modbus RTU. Но протокол очень старый и имеет ряд недостатков, которые мы решили устранить с помощью своего расширения протокола.
Мы добавили к стандартному протоколу новые функции: настраиваемое время задержки, игнорирование стопбитов и режим сплошного чтения регистров.


Всё описываемое ниже справедливо только для Modbus-устройств Wiren Board.
Также выпустили расширение протокола под названием «Быстрый Modbus». В нем появились события и быстрое сканирование устройств на шине RS-485.
 
Ниже описаны новые функции, а про расширение «Быстрый Modbus» читайте на [[Fast_Modbus |странице с описанием]].
 
Всё описываемое справедливо только для Modbus-устройств Wiren Board.


=== Настраиваемое время задержки ответа устройством ===
=== Настраиваемое время задержки ответа устройством ===
Строка 284: Строка 290:
В устройствах есть специальный регистр 113, в котором можно настроить время ответа slave-устройства в миллисекундах. Нужное значение подбирается опытным путём.
В устройствах есть специальный регистр 113, в котором можно настроить время ответа slave-устройства в миллисекундах. Нужное значение подбирается опытным путём.


=== Стопбиты ===
=== Игнорирование стопбитов ===
Устройства всегда ожидают от мастера 1 стопбит, а отправляют ответ с 2.  
Устройства всегда ожидают от мастера 1 стопбит, а отправляют ответ с 2.  


Строка 297: Строка 303:
При таком запросе устройство вернёт пакет со значением регистров. Если регистры отсутствуют в устройстве, то для них будет возвращено значение 0xFFFE.
При таком запросе устройство вернёт пакет со значением регистров. Если регистры отсутствуют в устройстве, то для них будет возвращено значение 0xFFFE.


=== Сканирование устройств на шине ===
Обычно инсталяция содержит несколько устройств в щите на одной шине Modbus. Каждое устроство имеет адрес который можно изменить. Для настройки мастера адреса подчиненных устройств необходимо переписать и внести в конфигурацию вручную. Это не очень удобно. Даже если адреса не повторяются то для настройки мастера их необходимо переписать и внести в конфигурациюю вручную. Это тоже не очень удобно.
Ранее сканирование шины было возможно самописными скриптами основная идея которых заключалась в переборе всех возможных адресов на шине и ожидания ответа от них или таймаута. Процесс занимал несколько минут.
В расширении протокола мы добавили возможность быстро просканировать шину без необходимости выжидать таймаут для каждого несуществущего адреса. Более того при сканировании могут быть обнаружены устройства с одинаковыми адресами! Протокол позволяет обнаружить такие устройства и даже настроить им адреса не отключая их от шины.
Теперь можно собрать щит не обращая внимания на адреса. В процессе сканирования будут прочитаны модели устройств. их серийные номера и адреса на шине с возвожностью их настройки.
Описание расширеных команд и референсная реализация утилиты сканирования доступны в [https://github.com/wirenboard/wb-modbus-ext-scanner репозитории].
</translate>
</translate>