MB_R - чтение группы данных

Назначение.
Функциональный блок MB_R применяется для чтения группы переменных со Slave-устройства по протоколу Modbus.
Входные параметры:
|
Параметр
|
Тип данных
|
Описание
|
|
RUN
|
BOOLEAN
|
|
|
ID_DRV
|
INTEGER
|
Идентификатор задачи связи Modbus-RTU MST или Modbus-TCP MST, в рамках которой будет выполняться запрос.
|
|
SLAVE
|
INTEGER
|
Сетевой адрес Slave-устройства по протоколу Modbus задается целым числом от 1 до 255.
|
|
ADDRD
|
INTEGER
|
Modbus-адрес первой переменной из запрашиваемой группы на Slave-устройстве.
|
|
NUMBER
|
INTEGER
|
Количество переменных, значения которых будут прочитаны со Slave-устройства, отсчет начинается с modbus-адреса ADDRD включительно.
|
|
ADDRB
|
INTEGER
|
Адрес первой переменной из группы на Master-устройстве, должен иметь значение на единицу меньше заданного modbus-адреса.
Полученная от Slave-устройства группа данных в количестве NUMBER будет записана в переменные, начиная с modbus-адреса ADDRB+1.
|
|
DATA_TYPE
|
INTEGER
|
Типа запрашиваемых данных
|
|
SEQ
|
INTEGER
|
Порядок передачи байтов для числовых значений
|
|
FUNC
|
INTEGER
|
Код modbus-функции
|
Значения параметра DATA_TYPE для выбора типа запрашиваемых данных:
|
Значения параметра SEQ для выбора порядка передачи байтов:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Значения параметра FUNC для выбора кода modbus-функции:
|
Выходные параметры:
|
Параметр
|
Тип данных
|
Описание
|
|
READY
|
BOOLEAN
|
Признак завершения операции:
|
|
FAULT
|
INTEGER
|
Код завершения операции, список возможных кодов описан в конце раздела 9.9.1.1 «MB_RTU_MST - конфигурация связи по протоколу Modbus-RTU Master».
|
Особенности назначения modbus-адресов.
Порядок назначения modbus-адресов зависит от выбранного во входном параметре DATA_TYPE типа данных. Для булевского и 2-х байтового типа данных modbus-адреса задаются последовательно, для целых и вещественных – через один (два регистра на одну переменную), для вещественных двойной точности - через три адреса (четыре регистра на одну переменную). Рекомендуется для каждого типа данных выделять отдельный блок modbus-адресов.
Необходимость учитывать тип данных при работе с modbus-адресами возникает из-за особенностей реализации протокола Modbus, согласно которому один modbus-адрес указывает на регистр данных размером 2 байта. Поэтому для передачи значений 4-х байтового целого, 4-х байтового вещественного и 8-ми байтового вещественного используются несколько 2 байтных modbus-регистров.
Примеры назначения modbus-адресов для 5 переменных разных типов приведены на следующих изображениях. Следует обратить внимание, что в 2-х байтовом режиме группа переменных оканчивается переменной var_end. Ее добавление необходимо, чтобы ограничить размер переменной var_modbus_5 одним регистром в 2 байта. Иначе переменная var_modbus_5 будет считаться 4-х байтовой целой переменной, что приведет к ошибке.
![]() ![]() ![]() ![]() |
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.MB_R(RUN, ID_DRV, SLAVE, FUNC, DATA_TYPE, SEQ, ADDRD, ADDRB, NUMBER);
//возвращается READY=false при ошибке в параметрах блока,
//после отправки запроса READY=true
READY := Block.READY;
//чтение кода завершения операции
FAULT := Block.FAULT;
|




