Modbus - один из старейших коммуникационных протоколов, основанный на архитектуре ведущий-ведомый (Master-Slave). Использует для передачи данных интерфейсы RS-485, RS-422, RS-232, а также Ethernet сети TCP/IP (протокол Modbus TCP).
Modbus RTU
Формат пакета (сообщения) Modbus RTU состоит из адреса устройства SlaveID, кода функции, специальных данных в зависимости от кода функции и CRC контрольной суммы.
SlaveID - Код функции- Специальные данные - CRC
Если убрать адрес (SlaveID) и контрольную сумму (CRC), то получится PDU, Protocol Data Unit (PDU).
SlaveID – это адрес устройства, может принимать значение от 0 до 247, адреса с 248 до 255 зарезервированы.
Данные в модуле хранятся в 4 таблицах. Две таблицы доступны только для чтения и две для чтения-записи. В каждой таблице помещается 9999 значений.
Номер Адрес HEXТип Название Тип
регистра регистра
1-9999 0000 до 270E Чтение-запись DiscreteOutput Coils DO
10001-1999 90000 до 270E Чтение Discrete Input Contacts DI
30001-3999 90000 до 270E Чтение AnalogInput Registers AI
40001-4999 90000 до 270E Чтение-запись Analog Output Holding Registers AO
В сообщении Modbus используется адрес регистра. Например, первый регистр AO Holding Register, имеет номер 40001, но его адрес равен 0000. Разница между этими двумя величинами есть смещение offset. Каждая таблица имеет свое смещение, соответственно: 1, 10001, 30001 и 40001.
Виды комнад Modbus RTU
Код Что делает функция Тип значения Тип доступа функции
01 (0x01) Чтение DO Read Coil Status Дискретное Чтение
02 (0x02) Чтение DI Read Input Status Дискретное Чтение
03 (0x03) Чтение AO Read Holding Registers 16 битное Чтение
04 (0x04) Чтение AI Read Input Registers 16 битное Чтение
05 (0x05) Запись одного DO Force Single Coil Дискретное Запись
06 (0x06) Запись одного AO Preset Single Register 16 битное Запись
15 (0x0F) Запись нескольких DO Force Multiple Coils Дискретное Запись
16 (0x10) Запись нескольких АO Preset Multiple Registers 16 битное Запись
Интересные ссылки: