Особливості протоколу modbus tcp - блог домашнього програміста
ModbusRTUчерез TCPсоедіненіе
Найпростіший спосіб обміну Modbus повідомленнями через мережу - просто передавати Modbus RTU пакети через TCP сокет (з'єднання). У цьому випадку формат пакетів такий же, як і для Modbus RTU протоколу. В принципі на цьому можна і закінчити за цим типом протоколу.
Для обміну Modbsu повідомленнями по мережі вирішили використовувати модифікований протокол. Взяли стандартний Modbus RTU і трохи його змінили. По-перше прибрали з нього останніх 2 байта CRC16. Так як кожен пакет TCP / IP містить свою контрольну суму, вирішили що робити перевірку ще раз не потрібно. Крім того прибрали перший байт Slave ID. В принципі, Як буде видно далі, Його не прибрали, а просто перейменували. Ось ці байти, без Slave ID і CRC16 назвали PDU - Protocol Data Unit.
Наприклад, візьмемо запит Modbus RTU. який Новомосковскет кілька HOLDING регістрів з пристрою # 17 (Slave ID = 17)
Тепер прибираємо перший і останніх 2 байта. Отримуємо PDU!
З цим начебто все ясно. Тепер, що б отримати повноцінний пакет Modbus TCP нам потрібно додати попереду MBAP Header - Modbus Application Header. Тобто нам потрібно додати якийсь заголовок. Цей заголовок включає в себе Transaction ID. Protocol ID. Length і Unit ID.
Transaction ID - 2 байта, які встановлюються клієнтом, що б однозначно ідентифікувати кожен запит. Тобто це просто число від 0 до 65535 унікальне для кожного запиту.
Protocol ID - 2 байта, які визначають версію протоколу. У поточній реалізації завжди повинні бути рівні 0x00 0x00
Length - 2 байта, які визначають довжину пакета (за винятком байтів Protocol ID. Transaction ID і Length)
Але насправді цілком звичайна ситуація, коли є якийсь сервер, який просто маршрутизує Modbus RTU запити на інші пристрої, які під'єднані до нього по різних каналах (локальна мережа, послідовний порт, CAN інтерфейс). Тому клієнт може використовувати Modbus TCP сервер як шлюз (Gateway) для спілкування з пристроями за ним.
Приклад Modbus TCP сервера, який використовується як шлюз для перенаправлення запитів на Modbus RTU пристрої
А тепер наочна схема, чим відрізняється Modbus RTU запит від Modbus TCP запиту.
Відмінності Modbus RTU і Modbus TCP запитів
Подивимося приклад байтів для двох запитів: