Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

MB_RTU_MST - конфигурация Modbus-RTU Master


Назначение.
Функциональный блок MB_RTU_MST применяется для настройки и запуска задачи связи по протоколу Modbus-RTU в режиме Master.
Альтернативой использованию блока MB_RTU_MST является добавление и настройка задачи связи "Modbus-RTU Master" через дерево конфигурации. Подробнее в разделе "Управление конфигурацией → Внешние коммуникации → Задачи связи Modbus → Настройка Modbus через дерево конфигурации" документа "Unimod PRO 2. Руководство пользователя". 
 
Входные параметры:
Параметр
Тип данных
Описание
RUN
BOOLEAN
Управление работой блока:
  • RUN=TRUE - запуск блока и инициализация задачи связи;
  • RUN=FALSE - остановка блока и задачи связи.
ID_DRV
INTEGER
Уникальный идентификатор задачи связи Modbus, который передается на соответствующий вход функциональных блоков чтения или записи для их привязки к задаче связи.
PORT
INTEGER
Номер физического COM-порта на контроллере, используемого для обмена данными. Одна задача связи использует один физический COM-порт, поэтому для двусторонней передачи данных используются минимум два COM-порта: один на вход, другой на выход. Количество доступных соединений по протоколу Modbus-RTU ограничивается количеством COM-портов контроллера.
RATE
INTEGER
Поддерживается скорость передачи данных в бит/с: 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600 и 115200. Диапазон поддерживаемых значений зависит от типа мастер-модуля и описан в его руководстве по эксплуатации.
TOUT
INTEGER
Время в миллисекундах, в течение которого ожидается ответ от удаленного Slave-устройства. При отсутствии ответа в указанный период, запрос отправляется повторно.
DELAY
INTEGER
Пауза между запросами в миллисекундах, по истечении которой будет отправлен очередной запрос на Slave-устройство. При нулевом значении следующий запрос будет отправлен сразу после получения ответа.
PARITY
INTEGER
Количество стоповых битов и режим контроля четности задаются целым числом:
  • 1 - нет контроля четности, 2 стоповых бита;
  • 2 - режим EVEN, 1 бит четности устанавливается в единицу при четном количестве единиц в битах данных;
  • 3 - режим ODD, 1 бит четности устанавливается в единицу при нечетном количестве единиц;
  • 4 - режим SPACE не влияет на возможность контроля ошибок, 1 бит четности всегда равен нулю;
  • 5 - режим MARK не влияет на возможность контроля ошибок, 1 бит четности всегда равен единице.
PARAM
INTEGER
Режим синхронности операции и используемая кодировка при передаче данных задаются целым числом:
  • 0 - асинхронный запрос в двоичном формате;
  • 1 - синхронный запрос в двоичном формате;
  • 8 - асинхронный запрос в кодировке ASCII;
  • 9 - синхронный запрос в кодировке ASCII.
 
Выходные параметры:
Параметр
Тип данных
Описание
OK
BOOLEAN
Признак завершения асинхронной операции:
  • OK=TRUE - при успешном завершении операции и отсутствии ошибок;
  • OK=FALSE  - при возникновении ошибок.
FAULT
INTEGER
Код ошибки по результатам завершения операции, список возможных кодов ошибок описан в конце настоящего раздела.
 
Описание алгоритма.
Настройки задачи связи передаются в блок через входные параметры, а их изменение постоянно отслеживается блоком. Поэтому, для изменения настроек не требуется перезапускать выполнение блока, достаточно в процессе работы изменить значение входного параметра, и задача связи будет незамедлительно переинициализирована. При этом во взаимосвязанных блоках чтения или записи могут возникнуть ошибки обмена по протоколу Modbus, если в момент изменения настроек были прерваны передача запроса или прием ответа.
Для организации обмена данными со Slave-устройством совместно с блоком MB_RTU_MST необходимо использовать один из системных функциональных блоков чтения или записи данных. Название таких блоков начинается с префикса «MB_*», буква R в названии блока маркирует блоки чтения, буква W – блоки записи. Для взаимосвязи между блоками используется параметр ID_DRV, одинаковое значение которого передается на оба задействованных блока, как показано на следующем изображении. К одной задаче связи может быть привязано произвольное количество блоков чтения или записи.
 
 
По умолчанию осуществляется обмен не закодированными двоичными данными в асинхронном режиме - после отправки запроса управление переходит к следующему оператору приложения, не дожидаясь ответа на запрос.
При необходимости можно закодировать передаваемые данные символами ASCII в шестнадцатеричном формате и/или обмениваться данными в синхронном режиме. Для этого передайте одно из допустимых вышеуказанных значений в параметр PARAM. В синхронном режиме вызванный функциональный блок после выполнения modbus-запроса не возвращает управление технологическому приложению до получения ответа на запрос и окончательного завершения операции.
Скорость передачи и кодировка передаваемых данных, количество стоповых битов и режим контроля четности должны совпадать на передающем и принимающем устройствах.
 
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.MB_RTU_MST(true, 3, 1, 115200, 0, 1, 1000, 0);
//чтение выходных параметров
OK := Block.OK;
FAULT := Block.FAULT;
Коды ошибок на выходе FAULT.
Коды ошибок, возникающие при инициализации задачи связи:
Код
Описание
0
Выполнено успешно, ошибок нет
1
Ошибка инициализации (некорректные параметры)
2
Удаленное устройство не отвечает (таймаут истек)
3
Системная ошибка при работе с портом или сервер Modbus-TCP недоступен
4
Системная ошибка при обращении к задаче связи
5
Выполняется запрос
6
Ошибка принятых данных
7
Выполнение блока прервано (актуально в асинхронном режиме)
9
Ошибка открытия порта
13
Некорректный ответ от Slave-устройства (адрес устройства, код функции, количество данных в ответном пакете отличается от запрашиваемого)
138
Служба или драйвер не были инициализированы (выключен запуск задачи связи)
141
Параметр Slave задан некорректно
144
Параметр Order задан некорректно (например, для вещественной переменной указан 16-разрядный режим)
149
Неизвестный код функции, или функция не поддерживается (параметр FUNC задан неверно)
150
Параметр Number задан некорректно или обращение в режиме Master по несуществующему адресу на стороне мастер-модуля (связка параметров Addrb и Number)
151
  • параметр Type задан некорректно;
  • несоответствие разрядности переменных (например, задан 32-разрядный тип, но переменные в словаре технологического приложения расположены подряд, или наоборот (подробнее про разрядность и назначение modbus-адресов в разделе 9.9.2.1 "MB_R - чтение группы данных");
  • обращение отдельно к старшей части 32-разрядной переменной.
152
Внутренняя ошибка при обращении к базе технологического приложения
 
Когда задача связи проинициализирована успешно, но от удаленного Slave-устройства поступил ответ-исключение, код ошибки формируется сложением числа 200 с кодом ошибки по спецификации Modbus:
Код
Описание
201
Illegal function
202
Illegal data address
203
Illegal data value
204
Server device failure
205
Acknowledge
206
Server device busy
208
Memory parity error
210
Gateway path unavailable
211
Gateway target device failed to respond