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

MB_R_R16 - чтение 16 целочисленных регистров


Назначение.
Функциональный блок MB_R_R16 применяется для чтения 16-ти целочисленных регистров подряд со Slave-устройства. Используются Modbus функции с кодами 3 (Read Holding Registers) и 4 (Read Input Registers).
 
Входные параметры:
Параметр
Тип данных
Описание
RUN
BOOLEAN
  • RUN=TRUE - запуск блока и передача в задачу связи MB_RTU_MST/MB_TCP_MST команды на чтение данных со Slave-устройства;
  • RUN=FALSE - остановка блока и задачи связи.
ID_DRV
INTEGER
Идентификатор задачи связи Modbus-RTU MST или Modbus-TCP MST, которая будет выполнять запрос.
SLAVE
INTEGER
Сетевой адрес Slave-устройства по протоколу Modbus и порядок чтения байтов задается целым числом. Правила его формирования описаны далее в настояще разделе.
FUNC
INTEGER
Код используемой modbus-функции:
  • 3 (READ HOLDING REGISTERS) - чтение нескольких аналоговых выходов;
  • 4 (READ INPUT REGISTERS) - чтение нескольких аналоговых входов.
ADR
INTEGER
Modbus-адрес первого регистра из группы на  Slave-устройстве. Особенности назначения modbus-адресов описаны в разделе 9.9.2.1 "Блок MB_R - Чтение группы данных".
NUMBER
INTEGER
Количество регистров, значения которых будут запрошены со Slave-устройства и переданы на выходы REG01 .. REG<NUMBER>. Если NUMBER <= 0 или NUMBER >16, выход READY=FALSE (запрос не отправлен), FAULT=1 (некорректные параметры).
 
Правила формирования целочисленного значения на входе SLAVE.
В младшем байте параметра кодируется сетевой адрес (целое число от 1 до 255), а во втором байте кодируется режим обмена данными (16 или 32 разрядный) в соответствии со значениями параметра ORDER, описанными в разделе 9.9.1.2 "MB_RTU_SLV - конфигурация связи по протоколу Modbus-RTU Slave".
Например, для 32-х разрядного режима работы с заменой байт (1-0-3-2) и адресом устройства 1, входной параметр SLAVE=1. Его битовая маска продемонстрирована на следующем изображении.
А для беззнакового 16-разрядного режима работы с заменой байт и адресом устройства 5, входной параметр SLAVE=1537. Его битовая маска продемонстрирована на следующем изображении.
По умолчанию установлен 32-х разрядный режим работы: на  Slave-устройстве осуществляется чтение первых 2-х последовательных 16-битных регистров, начиная с адреса ADR+0, а их значения будут переданы на выход блока REG01 в виде одного 32-битного целого числа. Затем осуществляется чтение следующих 2-х 16-битных регистров, начиная с адреса ADR+2, и т.д.
В 16-разрядном режиме один прочитанный со Slave-устройства 16-битный регистр с адресом ADR+0 будет преобразован в 32-битное целочисленное значение и передан на выход REG01. Затем осуществляется чтение следующего регистра с адресом ADR+1 и т.д.
 
Выходные параметры:
Параметр
Тип данных
Описание
READY
BOOLEAN
Признак завершения операции:
  • READY=FALSE - когда обнаружена ошибка во входных параметрах блока, запрос не направляется;
  • READY=TRUE - выставляется сразу после направления запроса, независимо от его результатов.
FAULT
INTEGER
Код завершения операции, список возможных кодов описан в конце раздела 9.9.1.1 «MB_RTU_MST - конфигурация связи по протоколу Modbus-RTU Master».
REG01
...
REG16
INTEGER
Значения целочисленных регистров по адресам:
  • ADR+0, ADR+1 .. ADR+15 при 16-разрядном режиме;
  • ADR+0, ADR+2 .. ADR+30 при 32-разрядном режиме.
 
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.MB_R_R16(RUN, ID_DRV, SLAVE, FUNC, ADR, NUMBER);
//чтение значения целочисленного регистра с адресом ADR+0
REG01 := Block.REG01;
//чтение значения целочисленного регистра с адресом ADR+1      
REG02 := Block.REG02;
//чтение значения целочисленного регистра с адресом ADR+15      
REG16 := Block.REG16;
//чтение признака и кода завершения операции
READY := Block.READY;
FAULT := Block.FAULT;