Modbus
Протокол Modbus не избавлен от некоторых недостатков:
- организация обмена данными по модели ведущий-подчиненный. При этом подчиненное устройство не может само инициировать отправку данных ведущему, а должно в обязательном порядке ожидать запроса.
- отсутствует механизм для определения обрыва линии связи.
- в одном запросе можно прочитать значения только последовательных регистров. Для чтения произвольных регистров необходимо отправлять несколько запросов, что увеличивает нагрузку на сеть.
Slave-устройство не может само начать обмен данными, только по команде от master’a.
В качестве физического уровня стандарт предусматривает использование интерфейсов RS-232, RS-422 и RS-485. Также существует реализация для TCP/IP — Modbus TCP.
Сеть Modbus может состоять из нескольких slave-устройств (от 1-го до 247-ми), но master должен быть только один. Каждое из подчиненных устройств имеет свой собственный адрес, соответственно, ведущий может адресовать свое сообщение или запрос конкретному slave-устройству.
Кроме того, поддерживаются широковещательные сообщения, которые принимают все подчиненные. Но разница заключается в том, что опознав сообщение, адресованное именно ему, подчиненное устройство отправляет ведущему ответ. На широковещательные же запросы подчиненные отвечать не могут.
На адреса slave накладываются некоторые ограничения:
- диапазон допустимых адресов — 1…247. Значения адресов от 248 до 255 являются зарезервированными, а адрес 0 используется для передачи широковещательных сообщений.
- master адреса не имеет, он в сети и так один.
- два подчиненных устройства не могут иметь одинаковые адреса.
Вот как может выглядеть один из вариантов подключения устройств с использованием RS-485:

Modbus RTU | RS-232 RS-422 RS-485 | Двоичный вариант кодирования данных. Разделителем между пакетами служит временной интервал. То есть сообщение должно начинаться и заканчиваться паузой в течение определенного промежутка времени. Это время не должно быть меньше, чем время передачи 3.5 символов при использующейся скорости передачи данных.Кроме того, в процессе передачи пакета данных не должно быть пауз длительностью, превышающей время передачи 1.5 символов. Соответственно, Modbus RTU очень критичен к временным задержкам, но зато размер пакетов меньше, чем в Modbus ASCII. |
Modbus ASCII | RS-232 RS-422 RS-485 | В данном случае для обмена данными используются исключительно ASCII символы. И в отличие от Modbus RTU начало и конец сообщений определяются специальными символами.Начало пакета — ASCII символ «:» (0x3A), конец — «CR + LF» (0x0D + 0x0A). |
Modbus TCP | TCP/IP | Протокол используется при передаче данных с использованием TCP/IP. |
Modbus RTU и Modbus ASCII. Структура пакетов выглядит следующим образом:


В стандарте Modbus принята следующая терминология:
- ADU (Application Data Unit) — полный пакет данных.
- PDU (protocol data unit) — часть пакета, содержащая непосредственно полезные данные.
Для расчета контрольной суммы используются разные алгоритмы: для Modbus RTU — CRC16, для ASCII — LRC8. В обоих случаях под контрольную сумму задействованы два байта.
Коды функций можно разделить на три группы:
- Стандартные коды команд, описанные в Modbus-IDA.
- Задаваемые пользователем (user-defined function codes) — 65…72, 100…110. Эти коды не описаны в спецификации стандарта и могут использоваться в конкретных изделиях для собственных функций.
- Зарезервированные (reserved). В эту группу входят коды 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 и 127.
Но прежде, чем перейти к рассмотрению базовых/стандартных команд, необходимо рассмотреть использующуюся модель данных. Выполнение команд протокола Modbus подразумевает чтение и запись данных в регистры устройства. И различают 4 типа регистров, организованных в 4 таблицы данных:
Таблица | Тип элемента |
---|---|
Дискретные входы (Discrete Inputs) | 1 бит |
Дискретные выходы (регистры флагов, Coils) | 1 бит |
Регистры ввода (Input Registers) | 16-битное слово |
Регистры хранения (Holding Registers) | 16-битное слово |
Дискретные входы и регистры ввода доступны только для чтения данных, а, соответственно, дискретные выходы и регистры хранения — для чтения и записи.
Доступ к регистрам таблицы осуществляется при помощи 16-ти битного адреса. Первому элементу таблицы соответствует адрес 0. Таким образом, каждая из этих 4-х таблиц может включать в себя вплоть до 65536 регистров (адреса 0…65535 — 16 бит).
https://rutube.ru/video/eb872931ef26372bcffb303794df6a7b/?r=plemwd
Стандартные команды (функции MODBUS)
- 0x01 (1) — чтение значений из нескольких регистров флагов (Read Coil Status); 1 (true folse)
- 0x02 (2) — чтение значений из нескольких дискретных входов (Read Discrete Inputs);
- 0x03 (3) — чтение значений из нескольких регистров хранения (Read Holding Registers);
- 0x04 (4) — чтение значений из нескольких регистров ввода (Read Input Registers);
- 0x05 (5) — запись значения одного флага (Force Single Coil);
- 0x06 (6) — запись значения в один регистр хранения (Preset Single Register);
- 0x07 (7) — чтение сигналов состояния (Read Exception Status);
- 0x08 (8) — диагностика (Diagnostic);
- 0x0B (11) — чтение счётчика событий (Get Com Event Counter);
- 0x0C (12) — чтение журнала событий (Get Com Event Log);
- 0x0F (15) — запись значений в несколько регистров флагов (Force Multiple Coils);
- 0x10 (16) — запись значений в несколько регистров хранения (Preset Multiple Registers);
- 0x11 (17) — чтение информации об устройстве (Report Slave ID);
- 0x14 (20) — чтение из файла (Read File Record).
Статья скопирована с сайта
https://microtechnics.ru/protokol-modbus-obzor-opisanie-i-primery-ispolzovaniya/
https://rutube.ru/video/936be519096da6fa7c59ce8843103c60/?r=plemwd
Добавить комментарий