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

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


 
Назначение.
Функциональный блок MB_R применяется для чтения группы переменных со Slave-устройства по протоколу Modbus.
 
Входные параметры:
Параметр
Тип данных
Описание
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 задается целым числом от 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 для выбора типа запрашиваемых данных:
DATA_TYPE
Тип данных
0
Булевский
1
2-х байтовое целое без знака
2
2-х байтовое целое со знаком
3
4-х байтовое целое без знака
4
4-х байтовое целое со знаком
5
4-х байтовое вещественное
6
8-ми байтовое вещественное
Значения параметра SEQ для выбора порядка передачи байтов:
Значение SEQ
Порядок байт
Замена байт
Замена слов
Замена двойных слов
1
1-0 (типовое значение)
Да
-
-
2
0-1
-
-
-
3
1-0-3-2 (типовое значение)
Да
-
-
4
0-1-2-3
-
-
-
5
2-3-0-1
-
Да
-
6
3-2-1-0
Да
Да
-
7
1-0-3-2-5-4-7-6 (типовое)
Да
-
-
8
0-1-2-3-4-5-6-7
-
-
-
9
2-3-0-1-6-7-4-5
-
Да
-
10
3-2-1-0-7-6-5-4
Да
Да
-
11
5-4-7-6-1-0-3-2
Да
-
Да
12
4-5-6-7-0-1-2-3
-
-
Да
13
6-7-4-5-2-3-0-1
-
Да
Да
14
7-6-5-4-3-2-1-0
Да
Да
Да
0
(по умолчанию)
Автоматически выбирается типовое значение в соответствии с размером типа данных:
  • DATA_TYPE=1..2 → SEQ=1;
  • DATA_TYPE=3..5 → SEQ=3;
  • DATA_TYPE=6 → SEQ=7.
Значения параметра FUNC для выбора кода modbus-функции:
FUNC
Название
Описание
1
READ COILS
Чтение нескольких дискретных выходов
2
READ CONTACTS
Чтение нескольких дискретных входов
3
READ HOLDING REGISTERS
Чтение нескольких аналоговых выходов
4
READ INPUT REGISTERS
Чтение нескольких аналоговых входов
 
Выходные параметры:
Параметр
Тип данных
Описание
READY
BOOLEAN
Признак завершения операции:
  • READY=FALSE - когда обнаружена ошибка во входных параметрах блока, запрос не направляется;
  • READY=TRUE - выставляется сразу после направления запроса, независимо от его результатов.
FAULT
INTEGER
Код завершения операции, список возможных кодов описан в конце раздела 9.9.1.1 «MB_RTU_MST - конфигурация связи по протоколу Modbus-RTU Master».
 
Особенности назначения modbus-адресов.
Порядок назначения modbus-адресов зависит от выбранного во входном параметре DATA_TYPE типа данных. Для булевского и 2-х байтового типа данных modbus-адреса задаются последовательно, для целых и вещественных – через один (два регистра на одну переменную), для вещественных двойной точности - через три адреса (четыре регистра на одну переменную). Рекомендуется для каждого типа данных выделять отдельный блок modbus-адресов.
DATA_TYPE
Тип данных Modbus
Порядок modbus-адресов
0
Булевский
Последовательно
1
2-х байтовое целое без знака
Последовательно
2
2-х байтовое целое со знаком
Последовательно
3
4-х байтовое целое без знака
через один
4
4-х байтовое целое со знаком
через один
5
4-х байтовое вещественное
через один
6
8-ми байтовое вещественное
через три адреса
Необходимость учитывать тип данных при работе с 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;