Содержание статьи:
- Настройки коммуникационного интерфейса расходомеров MD
- Регистры данных Modbus
- Функции чтения/записи Modbus
- Пример: считывание показаний мгновенного расхода
Цифровые расходомеры Line Tech серии MD оснащаются цифровым интерфейсом RS-485 для работы в промышленной сети по протоколу Modbus RTU. Способ подключения расходомеров MD к сети RS-485 описан в статье «Подключение приборов Line Tech к промышленной сети RS-485». Теория работы интерфейса RS-485 с объяснениями назначения отдельных элементов сети приводится в статье «Передача данных в промышленных сетях на основе RS485».
Настройки коммуникационного интерфейса расходомеров MD
Производитель поставляет расходомеры MD со следующими настройками коммуникационного интерфейса:
Скорость передачи данных: 38 400 бод. Также доступны значения 9 600, 19 200, 57 600 и 115 200. Может настраиваться конечным пользователем, процедура описана ниже.
Количество бит данных: 8 бит
Стоп-бит: 1
Проверка четности: нет
Протокол: Modbus RTU или Line Tech. Процедура настройки описана здесь
Адрес в шине: 1. Доступны значения 1…32. Может настраиваться конечным пользователем, процедура описана здесь.
Регистры данных Modbus
Доступ к данным в расходомерах Line Tech организован с помощью таблицы HOLDING REGISTERS с 16-битными данными (2 байта). Каждый регистр имеет свой адрес. Распределение параметров приборов Line Tech по этой таблице (адресам регистров) приведено ниже. Под некоторые параметры отводится сразу несколько последовательно идущих регистров. Все параметры доступны для чтения (символ «R» в колонке «Доступ»), в то время как запись разрешена для ограниченного числа регистров (символ «W»).
Особенность организации адресного пространства расходомеров Line Tech состоит в том, что регистры зависят от адреса прибора в сети. Например, если для расходомера с адресом «1» в сети показания расхода считываются в регистрах 0х0000 и 0х0001, то для расходомера с адресом «2» показания следует считывать в регистрах 0х0014 и 0х0015. А для расходомера с адресом 32 – в регистрах 0х026C и 0х026D. В связи с этим в таблице приведены регистры для расходомера с адресом 1, 2 и 32. Адреса регистров для произвольного адреса N (значение от 1 до 32) легко посчитать, прибавив к номеру регистра для первого адреса значение 20∙(N-1).
Таблица регистров расходомеров Line Tech серии MD
Адрес |
Параметр |
Тип данных |
Доступ |
Адрес, hex |
Значение, hex |
1 |
Мгновенный расход в единицах расхода |
Float(*), 32 бит |
R |
Старший: 0x0000, Младший: 0x0001 |
0x00000000… (0…3,4 × 1038) |
1 |
Мгновенный расход в процентах от верхнего предела измерения (ВПИ) |
Float, 32 бит |
R |
Старший: 0x0002, Младший: 0x0003 |
0x00000000… (0…100) |
1 |
Код единицы измерения |
Unsigned int, 16 бит |
R |
0х0004 |
0x0001: н.см3/мин(**) 0x0002: н.л/мин |
1 |
Верхний предел измерения |
Float, 32 бит |
R |
Старший: 0x0005, Младший: 0x0006 |
0x00000000… (0…3,4 × 1038) |
1 |
Тип расходомера |
Unsigned int, 16 бит |
R |
0х0007 |
0x0000: регулятор 0x0004: измеритель |
1 |
Тип аналогового входного/выходного сигнала |
Unsigned int, 16 бит |
R |
0х0008 |
0x0000: напряжение 0x0001: ток |
1 |
Источник уставки |
Unsigned int, 16 бит |
RW |
0х0009 |
0x0000: аналоговый сигнал 0x0001: цифровой сигнал |
1 |
Включение/выключение регулирования расхода цифровым сигналом |
Unsigned int, 16 бит |
RW |
0х000A |
0x0000: выкл. 0x0001: вкл. |
1 |
Уставка, |
Float, 32 бит |
RW |
Старший: 0x000C, Младший: 0x000D |
0x00000000… (0…3,4 × 1038) |
1 |
Код скорости передачи данных |
Unsigned int, 16 бит |
RW |
0х000E |
0x0000: 9 600 бод 0x0001: 19 200 бод 0х0002: 38 400 бод 0х0003: 57 600 бод 0х0004: 115 200 бод |
2 |
Мгновенный расход в единицах расхода |
Float, 32 бит |
R |
Старший: 0x0014, Младший: 0x0015 |
0x00000000… (0…3,4 × 1038) |
2 |
Мгновенный расход в процентах от верхнего предела измерения (ВПИ) |
Float, 32 бит |
R |
Старший: 0x0016, Младший: 0x0017 |
0x00000000… (0…100) |
2 |
Код единицы измерения |
Unsigned int, 16 бит |
R |
0х0018 |
0x0001: н.см3/мин(**) 0x0002: н.л/мин |
2 |
Верхний предел измерения |
Float, 32 бит |
R |
Старший: 0x0019, Младший: 0x001A |
0x00000000… (0…3,4 × 1038) |
2 |
Тип расходомера |
Unsigned int, 16 бит |
R |
0х001B |
0x0000: регулятор 0x0004: измеритель |
2 |
Тип аналогового входного/выходного сигнала |
Unsigned int, 16 бит |
R |
0х001C |
0x0000: напряжение 0x0001: ток |
2 |
Источник уставки |
Unsigned int, 16 бит |
RW |
0х001D |
0x0000: аналоговый сигнал 0x0001: цифровой сигнал |
2 |
Включение/выключение регулирования расхода цифровым сигналом |
Unsigned int, 16 бит |
RW |
0х001E |
0x0000: выкл. 0x0001: вкл. |
2 |
Уставка, |
Float, 32 бит |
RW |
Старший: 0x0020, Младший: 0x0021 |
0x00000000… (0…3,4 × 1038) |
2 |
Код скорости передачи данных |
Unsigned int, 16 бит |
RW |
0х0022 |
0x0000: 9 600 бод 0x0001: 19 200 бод 0х0002: 38 400 бод 0х0003: 57 600 бод 0х0004: 115 200 бод |
32 |
Мгновенный расход в единицах расхода |
Float, 32 бит |
R |
Старший: 0x026C, Младший: 0x026D |
0x00000000… (0…3,4 × 1038) |
32 |
Мгновенный расход в процентах от верхнего предела измерения (ВПИ) |
Float, 32 бит |
R |
Старший: 0x026E, Младший: 0x026F |
0x00000000… (0…100) |
32 |
Код единицы измерения |
Unsigned int, 16 бит |
R |
0х0270 |
0x0001: н.см3/мин(**) 0x0002: н.л/мин |
32 |
Верхний предел измерения |
Float, 32 бит |
R |
Старший: 0x0271, Младший: 0x0272 |
0x00000000… (0…3,4 × 1038) |
32 |
Тип расходомера |
Unsigned int, 16 бит |
R |
0х0273 |
0x0000: регулятор 0x0004: измеритель |
32 |
Тип аналогового входного/выходного сигнала |
Unsigned int, 16 бит |
R |
0х0274 |
0x0000: напряжение 0x0001: ток |
32 |
Источник уставки |
Unsigned int, 16 бит |
RW |
0х0275 |
0x0000: аналоговый сигнал 0x0001: цифровой сигнал |
32 |
Включение/выключение регулирования расхода цифровым сигналом |
Unsigned int, 16 бит |
RW |
0х0276 |
0x0000: выкл. 0x0001: вкл. |
32 |
Уставка, |
Float, 32 бит |
RW |
Старший: 0x0278, Младший: 0x0279 |
0x00000000… (0…3,4 × 1038) |
32 |
Код скорости передачи данных |
Unsigned int, 16 бит |
RW |
0х027A |
0x0000: 9 600 бод 0x0001: 19 200 бод 0х0002: 38 400 бод 0х0003: 57 600 бод 0х0004: 115 200 бод |
(*) Данные считываются/записываются в hex-представлении. Для данных с типом Int перевод в hex легко осуществить с помощью стандартного калькулятора Windows (в режиме «Программист»). Для конвертации данных с типом Float имеет смысл воспользоваться онлайн сервисами (можно найти в поисковиках по запросу «перевод hex во float онлайн»).
(**) символ «н» обозначает нормальные условия: 0°С и 101,325 кПа (абс).
Функции чтения/записи Modbus
Для управления работой расходомеров Line Tech используются следующие функции: чтение нескольких последовательных регистров, запись одного регистра и запись нескольких последовательных регистров. Ниже приведены структуры соответствующих запросов, формируемых ведущим устройством, а также структуры ответов, получаемых от ведомого устройства.
Чтение нескольких регистров из таблицы HOLDING REGISTERS, код функции 0×03
Запрос
Адрес ведомого устройства |
Код функции |
Адрес первого регистра |
Количество считываемых регистров |
Контрольная сумма CRC16 |
1 байт |
1 байт: 0х03 |
2 байта |
2 байта |
2 байта, |
Ответ
Адрес ведомого устройства |
Код функции |
Количество байт данных |
Передаваемые данные |
Контрольная сумма CRC16 |
1 байт |
1 байт: 0х03 |
1 байт |
N байт |
2 байта, |
Для получения значения контрольной суммы можно воспользоваться онлайн сервисами (можно найти в поисковиках по запросу «контрольная сумма crc16 modbus онлайн»). Важно учитывать, что контрольная сумма передается младшим байтом вперед. Так для строки с запросом на считывание мгновенного расхода расходомера с адресом «1» («0х010300000002») контрольная сумма CRC16 равна «0х0BC4». Соответственно, полный правильный запрос на чтение расхода будет выглядеть так: 0х010300000002C40B
Запись одного регистра из таблицы HOLDING REGISTERS, код функции 0×06
Запрос
Адрес ведомого устройства |
Код функции |
Адрес записываемого регистра |
Записываемые данные |
Контрольная сумма CRC16 |
1 байт |
1 байт: 0х06 |
2 байта |
2 байта |
2 байта, младшим вперед |
Ответ: Если команда выполнена успешно, то ведомое устройство возвращает точную копию запроса.
Запись нескольких регистров из таблицы HOLDING REGISTERS, код функции 0×10
Запрос
Адрес ведомого устройства |
Код функции |
Адрес первого записываемого регистра |
Количество записываемых регистров |
Количество записываемых байтов |
Записываемые данные |
Контрольная сумма CRC16 |
1 байт |
1 байт: 0х10 |
2 байта |
2 байта |
1 байт |
N байт |
2 байта, младшим вперед |
Ответ:
Адрес ведомого устройства |
Код функции |
Адрес первого записываемого регистра |
Количество записываемых регистров |
Количество записываемых байтов |
Контрольная сумма CRC16 |
1 байт |
1 байт: 0х10 |
2 байта |
2 байта |
1 байт |
2 байта, младшим вперед |
Пример: считывание показаний мгновенного расхода
Из таблицы регистров видно, что показания мгновенного расхода можно считывать как в единицах измерения, в которых откалиброван расходомер, так и в процентах ВПИ.
Считывание мгновенного расхода для расходомера с адресом «1» в единицах измерения
Запрос: 01 03 00 00 00 02 C4 0B, где
0х01 Адрес устройства
0х03 Код функции
0х00 Адрес первого регистра, старший байт
0х00 Адрес первого регистра, младший байт
0х00 Количество регистров, старший байт
0х02 Количество регистров, младший байт
0xC4 Контрольная сумма, младший байт
0x0B Контрольная сумма, старший байт
Ответ: 01 03 04 3F 3F F4 DD 40 B2, где
0х01 Адрес устройства
0х03 Код функции
0х04 Количество байт данных
0х3F Мгновенный расход, старший байт 1
0х3F Мгновенный расход, байт 2
0хF4 Мгновенный расход, байт 3
0хDD Мгновенный расход, младший байт
0x40 Контрольная сумма, младший байт
0xB2 Контрольная сумма, старший байт
Мгновенный расход в единицах расхода (регистр 0х0000 и 0x0001): 0х3F3FF4DD, что равно «0,74983» в десятеричной системе счисления
Считывание мгновенного расхода для расходомера с адресом «1» в процентах ВПИ
Запрос: 01 03 00 02 00 02 65 CB, где
0х01 Адрес устройства
0х03 Код функции
0х00 Адрес первого регистра, старший байт
0х02 Адрес первого регистра, младший байт
0х00 Количество регистров, старший байт
0х02 Количество регистров, младший байт
0x65 Контрольная сумма, младший байт
0xCB Контрольная сумма, старший байт
Ответ: 01 03 04 42 95 F7 4C B9 A2, где
0х01 Адрес устройства
0х03 Код функции
0х04 Количество байт данных
0х42 Мгновенный расход, старший байт 1
0х95 Мгновенный расход, байт 2
0хF7 Мгновенный расход, байт 3
0х4C Мгновенный расход, младший байт 4
0xB9 Контрольная сумма, младший байт
0xA2 Контрольная сумма, старший байт
Мгновенный расход в процентах ВПИ (регистр 0х0002 и 0x0003): 0х4295F74C, что равно «74,983» в десятеричной системе счисления
Считывание для расходомера с адресом «2» мгновенного расхода в единицах измерения, процентах ВПИ, а также единицы измерения прибора
Запрос: 02 03 00 14 00 05 C5 FE, где
0х02 Адрес устройства
0х03 Код функции
0х00 Адрес первого регистра, старший байт
0х14 Адрес первого регистра, младший байт
0х00 Количество регистров, старший байт
0х05 Количество регистров, младший байт
0xC5 Контрольная сумма, младший байт
0xFE Контрольная сумма, старший байт
Ответ: 02 03 0A 3F 66 56 16 42 B3 F3 41 00 02 88 A6, где
0х02 Адрес устройства
0х03 Код функции
0х0A Количество байт данных
0х3F Мгновенный расход в единицах, старший байт 1
0х66 Мгновенный расход в единицах, байт 2
0х56 Мгновенный расход в единицах, байт 3
0х16 Мгновенный расход в единицах, младший байт 4
0х42 Мгновенный расход в процентах, старший байт 1
0хB3 Мгновенный расход в процентах, байт 2
0хF3 Мгновенный расход в процентах, байт 3
0х41 Мгновенный расход в процентах, младший байт 4
0x00 Единица измерения расхода, старший байт
0x02 Единица измерения расхода, младший байт
0x88 Контрольная сумма, младший байт
0xA6 Контрольная сумма, старший байт
Мгновенный расход в единицах расхода (регистр 0х0014 и 0x0015): 0х3F665616, что равно «0,899751» в десятеричной системе счисления
Мгновенный расход в процентах ВПИ (регистр 0х0016 и 0x0017): 0х42B3F341, что равно «89,9751» в десятеричной системе счисления
Единица измерения расхода (регистр 0х0018): 0х0002, что соответствует «н.л/мин» (см. таблицу регистров)
Таким образом, прибор дает показания расхода: 0,899751 н.л/мин или 89,9751 % ВПИ.
→Продолжение читайте в статье «Работа расходомеров Line Tech в сети RS-485 по протоколу Modbus-RTU (продолжение)»