
- •Технические характеристики интерфейса rs-485
- •Общее описание протокола Modbus rtu
- •Адресация данных в протоколе Modbus rtu
- •Контроль ошибок в протоколе Modbus rtu
- •Rtu фрейм
- •Логические ошибки
- •Стандартные коды ошибок
- •Стандартные коды функций протокола Modbus
- •0X10 Preset Multiple Registers (Установка значений в несколько регистров)
- •0X03 Read Holding Registers (Чтение значений из нескольких регистров)
- •0X06 Preset Single Register (Установка значения в один регистр)
- •0X01 Read Coil Status (Чтение значений из нескольких регистров флагов)
- •0X0f Force Multiple Coils (Запись значений в несколько регистров флагов)
- •0X05 Force Single Coil (Запись значения в один флаг регистра флагов)
- •0X50 Set date and time (Установка даты и времени)
- •Ссылки на используемые в статье источники
- •Утилиты
- •Правильная разводка сетей rs-485
- •Что такое витая пара и почему она используется?
- •Волновое сопротивление витой пары
- •Число витых пар на каждый передатчик
- •Согласующие резисторы
- •Максимальное число передатчиков и приемников в сети
- •Примеры правильных сетей
- •Один передатчик, один приемник
- •Неправильное расположение терминатора
- •Составные кабели
- •Длинные ответвители
Общее описание протокола Modbus rtu
Протокол Modbus описывает единый простой формат передачи данных PDU, который в свою очередь входит в полный пакет ADU. Формат ADU меняется в зависимости от типа линии связи.
Существуют 3 режима протокола Modbus:
-
RTU- для передачи по последовательным линиям связи (в основном RS-485, реже RS-422/RS-232)
-
ASCII- для передачи по последовательным линиям связи (в основном RS-485, реже RS-422/RS-232)
-
TCP - для передачи данных по сетям TCP/IP
Режим RTU предполагает одно ведущее (запрашивающее) устройство в линии (master), которое может передавать команды одному или нескольким ведомым устройствам (slave), обращаясь к ним по уникальному в линии адресу. Синтаксис команд протокола позволяет адресовать 247 устройств на одной линии связи стандарта RS-485 (реже RS-422 или RS-232).
Инициатива проведения обмена всегда исходит от ведущего устройства. Ведомые устройства прослушивают линию связи. Мастер подаёт запрос (посылка, последовательность байт) в линию и переходит в состояние прослушивания линии связи. Ведомое устройство отвечает на запрос, пришедший в его адрес. Окончание ответной посылки мастер определяет, по временному интервалу между окончанием приёма предыдущего байта и началом приёма следующего. Если этот интервал превысил время, необходимое для приёма двух байт на заданной скорости передачи, приём кадра ответа считается завершённым. Кадры запроса и ответа по протоколу modbus имеют фиксированный формат, приведённый в (Таблица 1-1).
адрес ведомого устройства |
номер функции |
данные |
CRC |
1 байт |
1 байт |
N < 253 (байт) |
2 байта |
Таблица 1-1. Кадр посылки Modbus RTU |
где:
-
адрес ведомого устройства — первое однобайтное поле кадра. Оно содержит адрес подчинённого устройства, к которому адресован запрос. Ведомые устройства отвечают только на запросы, поступившие в их адрес. Ответ также начинается с адреса отвечающего ведомого устройства, который может изменяться от 1 до 254. Адрес 0 используется для широковещательной передачи, его распознаёт каждое устройство;
-
номер функции — это следующее однобайтное поле кадра. Оно говорит ведомому устройству, какие данные или выполнение какого действия требует от него ведущее устройство;
-
данные — поле содержит информацию, необходимую ведомому устройству для выполнения заданной мастером функции или содержит данные, передаваемые ведомым устройством в ответ на запрос ведущего. Длина и формат поля зависит от номера функции;
-
CRC — (контрольная сумма) заключительное двухбайтное поле кадра. Контрольная сумма завершает кадры запроса и ответа и применяется для проверки отсутствия ошибок в кадре посылки Modbus RTU.
Следует отметить, что поле CRC записывается младшим байтом вперёд. Алгоритм расчёта CRC может отличаться для разных устройств.
Адресация данных в протоколе Modbus rtu
Все операции с данными привязаны к нулю, каждый вид данных (регистр, выходное/входное значение) начинаются с адреса 0000. Адресация к ячейке начинается с 1.
Например: Флаг номер 1 программируемого контроллера имеет адрес 0000 (указывается в поле "Адрес").
Флаг номер 127 (DEC) имеет адрес 0x007E hex (126 dec) (указывается в поле "Адрес").
Запоминающий регистр 40001 будет иметь адрес 0000 в поле "Адрес" команды. Потому что код операции уже содержит в себе необходимую информацию об адресе. Операции с этими регистрами имеют смещение Адрес_регистра - 40000 = Значение Используемое В Поле "Адрес". Тип адресации команд в дальнейшем будем помечать т.о.
смещение |
обозначение |
-40000 |
4x |
-10000 |
1x |
Запоминающий регистр 40108 будет иметь адрес 006B hex (107 dec)