Диалоговые процедуры и форматы кадров
Процедура обмена сообщениями Modbus приведена на рис. 13.
Рис. 13. Диалоговая процедура обмена сообщениями в Modbus
Сообщения при обмене формируются в кадр из отдельных байт (символов, посылок). Возможные структуры байта в Modbus RTU приведены на рис. 14.
Рис. 14. Структура байта Modbus
а - при наличии бита контроля на четность/нечетность (бит паритета), б - при отсутствии бита паритета
При установке на четность подсчитывается количество бит в области данных и если оно нечетное, то бит паритета устанавливают в 1, а если четное, то бит паритета устанавливают в 0, таким образом, общее количество бит будет четным.
Кадры запроса и ответа по протоколу Modbus имеют фиксированный формат. Каждый запрос со стороны ведущего узла включает код команды (чтение, запись и т.д.), адрес абонента, размер поля данных, собственно данные и контрольный CRC-код. Функция обслуживания тайм-аута реализована для фиксирования коллизий при приеме/передаче данных. Размер полей в байтах приведен на рис. 15.
Старт кадра - очередной кадр начинается с интервала тишины (логического сигнала 1) длительностью не менее 3,5 символа (байта) на данной скорости передачи. Стартовое поле необходимо, поскольку используется асинхронная передача, и необходимо в канале связи иметь признак начала передачи.
.
Рис. 15. Формат кадра протокола локальной сети подстанции:
А – адрес подчиненного устройства; F – номер функции; D – данные;
CRC – контрольная сумма
Адрес подчинённого устройства — первое однобайтное поле кадра. Оно содержит адрес подчинённого устройства, к которому адресован запрос. Подчинённые устройства отвечают только на запросы, поступившие только в их адрес. Ответ также начинается с адреса отвечающего устройства, который может изменяться от 1 до 247. Адрес 0 используется для широковещательной передачи, его распознаёт каждое устройство, но ответы не возвращаются.
Номер функции (код команды) сообщает устройству, какие данные или выполнение какого действия требует от него ведущее устройство, принимает значения от 1 до 247.
Данные – поле содержит информацию, необходимую подчиненному устройству для выполнения заданной мастером функции, или содержит данные, передаваемые подчиненным устройством в ответ на запрос ведущего. Длина и формат поля зависят от номера функции, при этом длина может быть от 0 до 254 байт.
Контрольная сумма – заключительное двухбайтное поле кадра, содержащее циклическую контрольную сумму CRC-16 всех предыдущих полей кадра. При формировании CRC используется образующий полином 1010000000000001 (А001h). Проверяется весь кадр, но действия осуществляются только над областями данных каждого байта данных. Старт и стоп биты, бит паритета, если он используется, не учитываются в контрольной сумме. Поле CRC записывается младшим байтом вперёд. Контрольная сумма завершает кадры запроса и ответа.
Стоп кадра - интервал тишины длительностью не менее 3,5 символа.
Коды команд
Коды команд разделены на четыре группы: стандартные (1-21), резерв (22-64), пользовательские (65-119) и для внутренних нужд (120-255). Назначения некоторых кодов приведены в табл. 9.
Таблица 9
Коды функций (команд) Modbus
КОД | ИМЯ | СОДЕРЖАНИЕ | Смещение адреса |
Read Discrete Output Coil | Чтение значений из нескольких регистров флагов | ||
Read Discrete Input Contacts | Чтение статуса дискретных входов | ||
Read Analog Output Holding Registers | Чтение значений из нескольких регистров | ||
Read Analog Input Registers | Чтение входных регистров | ||
Write Single Discrete Output Coil | Запись значения в один флаг регистра флагов | ||
Write Single Analog Output Holding Register | Установка значения в один регистр | ||
Diagnostics - Loop-back | Тестирование связи | ||
Write multiple Discrete Output Coils | Запись значений в несколько регистров флагов | ||
Write multiple Analog Holding Register | Установка значений в несколько регистров |
Обработка ошибок
Различают коммуникационные ошибки (связанные с искажениями при передаче данных) и логические (недопустимое значение запроса). Master после посылки сообщения ожидает ответ в установленном интервале времени. Если slave обнаружит коммуникационную ошибку в адресованном ему сообщении или не может ответить, то он промолчит, и Master по истечении установленного интервала (таймаута) фиксирует ситуацию как ошибочную. Проверка на ошибку производится приемником в пределах каждого байта (символа) по четности, в пределах кадра - по CRC.
В протоколе Modbus используется следующая диалоговая процедура.
1. Если Slave принимает корректный запрос и может его нормально обработать, то возвращает нормальный ответ, в котором адрес и номер функции совпадает с принятыми от Master.
2. Если Slave не принимает какого либо значения, никакого ответа не отправляется. Master диагностирует ошибку по таймауту.
3. Если Slave принимает запрос, но обнаруживает ошибку (паритет, CRC), никакого ответа не отправляется. Master диагностирует ошибку по таймауту.
4. Если Slave принимает запрос, но не может его обработать, отправляется ответ, содержащий в области данных сведения об ошибке. Кроме того старший бит кода команды в ответе устанавливается в единицу.
Стандартные коды ошибок приведены в табл.10 .
Таблица 10
Стандартные коды логических ошибок
Код | Сведения о логической ошибке |
Принятый код функции не может быть обработан на подчиненном. | |
Адрес данных указанный в запросе не доступен данному подчиненному. | |
Величина содержащаяся в поле данных запроса является не допустимой величиной для подчиненного. | |
Невосстанавливаемая ошибка возникла во время попытки подчиненным выполнить затребованное действие. | |
Подчиненный принял запрос и обрабатывает его, но это требует много времени. Этот ответ предохраняет главного от генерации ошибки таймаута. | |
Подчиненный занят обработкой команды. | |
Подчиненный не может выполнить программную функцию, принятую в запросе. | |
Подчиненный пытается читать расширенную память, но обнаружил ошибку паритета. |
Пример. Послан запрос на чтение группы регистров (код функции 03h). Если запрос принят без ошибки, то slave в ответе укажет также код функции 03h, а если обнаружится ошибка то - 83h. Более подробная информация будет размещена в области данных ответа. Маster должен обработать сообщение об ошибке и в типичном случае посылает повторный запрос.
Дата добавления: 2019-09-30; просмотров: 709;