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

MB_RW - чтение/запись группы регистров


Назначение.
Функциональный блок MB_RW применяется для чтения или записи группы регистров со Slave-устройства. Запись начинается с адреса ADRW, а чтение с адреса ADRR. Используется Modbus функция с кодом 23 (Read/Write Multiple Registers).
 
Входные параметры.
Параметр
Тип данных
Описание
RUN
BOOLEAN
  • RUN=TRUE - запуск блока и передача в задачу связи MB_RTU_MST/MB_TCP_MST команды на чтение данных со Slave-устройства;
  • RUN=FALSE - остановка выполнения блока и задачи связи.
ID_DRV
INTEGER
Идентификатор задачи связи Modbus-RTU MST или Modbus-TCP MST, в рамках которой будет выполняться запрос на чтение или запись.
ADRR
INTEGER
Начальный modbus-адрес группы входных регистров, начиная с которого подряд будут прочитаны значения регистров в количестве NUMR.
NUMR
INTEGER
Количество входных регистров для чтения со Slave-устройства. Если NUMR <= 0 или NUMR >15, выходы READY=FALSE (запрос не отправлен), FAULT=1 (некорректные параметры).
ADRW
INTEGER
Начальный modbus-адрес группы выходных регистров, начиная с которого подряд будут записаны значения регистров в количестве NUMW.
NUMW
INTEGER
Количество выходных регистров для записи на Slave-устройство. Если NUMW <= 0 или NUMW >8, выходы READY=FALSE (запрос не отправлен), FAULT=1 (некорректные параметры).
SLAVE
INTEGER
Сетевой адрес Slave-устройства по протоколу Modbus и режим обмена данными указывается в виде целочисленного значения. Правила его формирования описаны далее в настоящем разделе.
REGW1,
REGW2,
 ..
REGW8
INTEGER
Значения, которые будут записаны в целочисленные выходные регистры на Slave-устройстве, соответствуют адресам:
  • ADRW+0, ADRW+1 .. ADRW+7 при 16-разрядном режиме;
  • ADDW+0, ADDW+2 .. ADDW+14 при 32-разрядном режиме.
Особенности назначения modbus-адресов описаны в разделе 9.9.2.1 "Блок MB_R - Чтение группы данных".
Правила формирования целочисленного значения на входе SLAVE.
В младшем байте параметра кодируется сетевой адрес (целое число от 1 до 255), а во втором байте кодируется режим обмена данными (16 или 32 разрядный) в соответствии со значениями параметра ORDER, описанными в разделе 9.9.1.2 "MB_RTU_SLV - конфигурация связи по протоколу Modbus-RTU Slave".
Например, для 32-х разрядного режима работы с заменой байт (1-0-3-2) и адресом устройства 1, входной параметр SLAVE=1.
Битовая маска при значении параметра SLAVE=1:
А для беззнакового 16-разрядного режима работы с заменой байт и адресом устройства 5, входной параметр SLAVE=1537.
Битовая маска при значении параметра SLAVE=1537:
По умолчанию установлен 32-х разрядный режим работы, когда для передачи значения одной переменной используется пара последовательных 16-битных регистров. При чтении значение первой пары регистров, начиная с адреса ADDR+0, будет передано на выход блока REGR01 в виде одного 32-битного целого числа. Затем осуществляется чтение следующей пары регистров, начиная с адреса ADDR+2, и т.д. При записи 32-битное значение входного параметра REGW1 будет записано в пару регистров на Slave-устройстве, начиная с адреса ADDW+0. Затем осуществляется запись 32-битного значения со входа REGW2 в следующую пару регистров с адресом ADDW+2, и т.д.
Если установлен 16-разрядный режим, то один прочитанный со Slave-устройства 16-битный регистр данных будет записан на Master-устройстве в 32-битную целочисленную переменную, а при записи из одного 32-битного значения на Slave-устройство будет передано только 16 младших бит для записи в соответствующий 16-битный регистр. В таком случае потеря двух старших байт переменной может привести к искажению передаваемых данных.
 
Выходные параметры:
Параметр
Тип данных
Описание
READY
BOOLEAN
Признак завершения операции:
  • READY=FALSE - когда обнаружена ошибка во входных параметрах блока, запрос не направляется;
  • READY=TRUE - выставляется сразу после направления запроса, независимо от его результатов.
FAULT
INTEGER
Код завершения операции, список возможных кодов описан в конце раздела 9.9.1.1 «MB_RTU_MST - конфигурация связи по протоколу Modbus-RTU Master».
REGR01,
REGR02
 ..
REGR15
INTEGER
Значения прочитанных со Slave-устройства целочисленных регистров, соответствуют адресам:
  • ADRR+0, ADRR+1 .. ADRR+14 при 16-разрядном режиме;
  • ADDR+0, ADDR+2 .. ADDR+30 при 32-разрядном режиме.
Особенности назначения modbus-адресов описаны в разделе 9.9.2.1 "Блок MB_R - Чтение группы данных".
 
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.MB_RW(RUN, ID_DRV, SLAVE, ADRR, NUMR, ADRW, NUMW, REGW1 .. REGW8);
//чтение регистра с адресом ADRR+0
REGR01 := Block.REGR01;
//чтение регистра с адресом ADRR+1
REGR02 := Block.REGR02;
//чтение регистра с адресом ADRR+14
REGR15 := Block.REGR15;
//чтение признака завершения операции и кода ошибки
READY := Block.READY;  
FAULT := Block.FAULT;