Конспект по Modbus
1. Что такое Modbus?
Modbus — это простой протокол обмена данными между устройствами. Придуман для
ПЛК, но теперь используется в разных системах автоматизации.
Работает по модели клиент-сервер (или мастер-слейв в RTU)
Один главный (мастер) — управляет опросом
Остальные (слейвы) — отвечают на запросы
2. Виды Modbus
Вид Где используется Особенности
Последовательный порт (RS-485/RS- Бинарный формат, быстрый и
Modbus RTU
232) компактный
Modbus
RS-232, RS-485 Читаемый текстовый формат
ASCII
Modbus TCP Ethernet Работает через IP, быстро и удобно
3. Основные функции Modbus (Function Codes)
Код Название Описание
01 Read Coils Чтение битов (выходов)
02 Read Discrete Inputs Чтение битов (входов)
03 Read Holding Registers Чтение регистров (параметры/данные)
04 Read Input Registers Чтение регистров (только для чтения)
05 Write Single Coil Запись одного бита (вкл/выкл)
06 Write Single Register Запись одного регистра
15 (0F) Write Multiple Coils Запись нескольких битов
16 (10) Write Multiple Registers Запись нескольких регистров
4. Типы данных в Modbus
Тип Размер Назначение
Coil 1 бит Выход (вкл/выкл)
Discrete Input 1 бит Вход (только чтение)
Holding Register 16 бит Переменная для чтения/записи
Input Register 16 бит Только чтение, например, сенсоры
5. Структура Modbus-запроса
Modbus TCP-запрос (основное):
less
КопироватьРедактировать
| MBAP Header | Function Code | Data... |
Modbus RTU-запрос (основное):
КопироватьРедактировать
| Адрес | Функция | Данные | CRC |
Пример запроса:
Прочитать 2 регистра с адреса 0x0001
o Функция: 03 (Read Holding Registers)
o Адрес: 0x0001
o Кол-во: 0x0002
6. Примеры адресов
Адрес (логический) Название Примерный физ. адрес в запросе
0xxxx Coils Function 01, адрес 0000
1xxxx Discrete Inputs Function 02, адрес 0000
3xxxx Input Registers Function 04, адрес 0000
4xxxx Holding Registers Function 03, адрес 0000
Важно: Устройства часто используют смещение (например, логический адрес 40001 =
физический 0000)
7. Практика: как читать и писать
Чтение регистра:
Функция: 03 (holding register)
Адрес: 0000
Кол-во: 1
Запись регистра:
Функция: 06
Адрес: 0000
Значение: 000A (например, 10)
8. Особенности
Big Endian порядок байт (старший байт вперёд)
TCP-порт по умолчанию: 502
RTU скорость: обычно 9600 или 19200 бод
Таймауты важны — не ответит вовремя → ошибка
9. Примеры в Python
python
КопироватьРедактировать
from [Link] import ModbusTcpClient
client = ModbusTcpClient('[Link]', port=502)
[Link]()
# Чтение 2 регистров с адреса 0
result = client.read_holding_registers(0, 2, unit=1)
print([Link])
# Запись значения 100 в регистр 0
client.write_register(0, 100, unit=1)
[Link]()
🔍 Что ещё изучить:
Как работает CRC в Modbus RTU
Отличие between Modbus и других протоколов (CAN, OPC-UA)
Как анализировать Modbus-трафик (Wireshark, Modbus Poll)