Для протокола Modbus реализовано выполнение следующих функций:
- 03, 04 (read registers) – чтение одного или нескольких регистров;
- 06 (preset single register) – запись одного регистра;
- 16 (preset multiple registers) – запись нескольких регистров;
- 17 (report slave ID) – чтение имени прибора и версии программы.
Если адрес прибора равен нулю, то для протокола Modbus это широковещательный адрес, и прибор будет выполнять команды записи, но не будет отправлять квитанции на принятые команды.
На адреса более 247 прибор реагировать не будет.
Для функций 03, 04 и 16 допускается запись или чтение регистров, относящихся только к одной команде.
Возврат ошибки для функций
Функции | Ошибка | Причина |
---|---|---|
06 и 16 | 1 («Illegal function») |
|
03 и 04 | 2 («Illegal data address») | |
03, 04 и 16* | 4 («Failure in associated device») | Попытка записать или прочитать регистры нескольких команд |
Примечание * Исключение составляют регистры оперативных параметров, которые могут быть все считаны одной командой. Начальный адрес регистра может быть любым в пределах адресов оперативных параметров |
Назначение регистров, используемых для функций 03, 04, 06 и 16 приведены в таблице
Параметры протокола Modbus
Команда | Адрес регистра | Данные записи | Данные чтения | Примечание |
---|---|---|---|---|
Общие параметры | ||||
Код выхода exit | 0x88 | Нет | Word_16: 0 – программный сброс; 6 – аппаратный сброс; 7 – включение питания; 8 – сторожевой таймер | Только чтение |
Код последней сетевой ошибки n.Err | 0x90 | Нет | Byte: от 0 до 255 После включения прибора – 0 | Только чтение |
Конфигурационные параметры сети RS-485 | ||||
Скорость обмена bPS | 0x30 | Word_16: 0 – 2,4 кбит/с; 1 – 4,8 кбит/с; 2 – 9,6 кбит/с; 3 – 14,4 кбит/с; 4 – 19,2 кбит/с; 5 – 28,8 кбит/с; 6 – 38,4 кбит/с; 7 – 57,6 кбит/с; 8 – 115,2 кбит/с | Запись/Чтение. По умолчанию: 2 | |
Тип контроля четности слова данных PrtY | 0x38 | Word_16: 0 – контроля нет; 1 – четность; 2 – нечетность | Запись/Чтение. По умолчанию: 0 | |
Количество стоп-битов в посылке Sbit | 0x40 | Word_16: 0 – один; 1 – два | Запись/Чтение. По умолчанию: 0 | |
Задержка передачи квитанции rS.dL | 0x48 | Word_16: от 0 до 45 мс | Запись/Чтение. По умолчанию: 45 | |
Базовый адрес прибора Addr | 0x50 | Word_16: от 1 до 247 | Запись/Чтение. По умолчанию: 16 | |
Запись изменений в энергонезависимую память и перестройка сетевых параметров Aply | 0x78 | Word_16: 0 | Только запись | |
Конфигурационные параметры | ||||
Тип входного фильтра, общего для всех каналов ComF | 0x28 | Word_16: 0 – откл.; 1 – 50 Гц, первого порядка; 2 – 50 Гц, второго порядка; 3 – 50 Гц, четвертого порядка; 4 – 200 Гц, первого порядка | Запись/Чтение. По умолчанию: 0 | |
Тип подключаемого датчика In-t | 0x00 – 1 канал; 0x01 – 2 канал; 0x02 – 3 канал; 0x03 – 4 канал; 0x04 – 5 канал; 0x05 – 6 канал; 0x06 – 7 канал; 0x07 – 8 канал | Word_16: 0 – канал откл.; 1 – от 4 до 20 мА; 2 – от 0 до 20 мА; 3 – от 0 до 5 мА; 4 – от 0 до 10 В | Запись/Чтение. По умолчанию: 0 | |
Нижняя граница диапазона измерения активного датчика Ain.L | 0x58, 0x59 – 1 канал; 0x5a, 0x5b – 2 канал; 0x5c, 0x5d – 3 канал; 0x5e, 0x5f – 4 канал; 0x60, 0x61 – 5 канал; 0x62, 0x63 – 6 канал; 0x64, 0x65 – 7 канал; 0x66, 0x67 – 8 канал | Float_32 (IEEE 754). Значение хранится в двух последовательных регистрах. Старшие разряды хранятся в регистре, имеющем меньший адрес | Запись/Чтение. По умолчанию: 20000,0 | |
Верхняя граница диапазона измерения активного датчика Ain.Н | 0x68, 0x69 – 1 канал; 0x6a, 0x6b – 2 канал; 0x6c, 0x6d – 3 канал; 0x6e, 0x6f – 4 канал; 0x70, 0x71 – 5 канал; 0x72, 0x73 – 6 канал; 0x74, 0x75 – 7 канал; 0x76, 0x77 – 8 канал | Float_32 (IEEE 754). Значение хранится в двух последовательных регистрах. Старшие разряды хранятся в регистре, имеющем меньший адрес | Запись/Чтение. По умолчанию: 0,0 | |
Смещение десятичной точки dP | 0x20 – 1 канал; 0x21 – 2 канал; 0x22 – 3 канал; 0x23 – 4 канал; 0x24 – 5 канал; 0x25 – 6 канал; 0x26 – 7 канал; 0x27 – 8 канал; | Word_16: от 0 до 4 | Запись/Чтение. По умолчанию: 0 | |
Ограничение скорости изменения измеряемого сигнала (пиковый фильтр) Peak | 0x08 – 1 канал; 0x09 – 2 канал; 0x0a – 3 канал; 0x0b – 4 канал; 0x0c – 5 канал; 0x0d – 6 канал; 0x0e – 7 канал; 0x0f – 8 канал | Word_16: от 1 до 200 диапазона/с (в разах) | Запись/Чтение. По умолчанию: 200 | |
Тип выходного фильтра OutF | 0x10 – 1 канал; 0x11 – 2 канал; 0x12 – 3 канал; 0x13 – 4 канал; 0x14 – 5 канал; 0x15 – 6 канал; 0x16 – 7 канал; 0x17 – 8 канал | Word_16: 0: Откл; 1: Exp от 2 до 16 – ск. среднего, L = 2 – 16 | Запись/Чтение. По умолчанию: 0 | |
Постоянная времени для экспоненциального фильтра in.Fd | 0x18 – 1 канал; 0x19 – 2 канал; 0x1a – 3 канал; 0x1b – 4 канал; 0x1c – 5 канал; 0x1d – 6 канал; 0x1e – 7 канал; 0x1f – 8 канал | Word_16: от 10 до 10000 мс | Запись/Чтение. По умолчанию: 10 | |
Запись изменений в энергонезависимую память и применение новых параметров INIT | 0x80 | Word_16: 0 | Нет | Только запись. Команда аналогична команде Aply, но перестройка сетевых параметров не выполняется |
Оперативные параметры | ||||
Измеренное значение iRD | 0x100 – 1 канал; 0x101 – 2 канал; 0x102 – 3 канал; 0x103 – 4 канал; 0x104 – 5 канал; 0x105 – 6 канал; 0x106 – 7 канал; 0x107 – 8 канал | Нет | int_16 – рез. изм. × 10dP | Только чтение |
Измеренное значение iRDt | 0x108, 0x109 – 1 канал; 0x10a, 0x10b – 2 канал; 0x10C, 0x10D – 3 канал; 0x10E, 0x10F – 4 канал; 0x110, 0x111 – 5 канал; 0x112, 0x113 – 6 канал; 0x114, 0x115 – 7 канал; 0x116, 0x117 – 8 канал | Нет | int_16 – рез. изм. × 10dP + Word_16 (метка относительного времени, дискретность 10 мс) | Только чтение |
Чтение статуса результатов измерения SRD | 0x118 – 1 канал; 0x119 – 2 канал; 0x11A – 3 канал; 0x11B – 4 канал; 0x11C – 5 канал; 0x11D – 6 канал; 0x11E – 7 канал; 0x11f – 8 канал | Нет | int_16: Кодирование статуса в таблице | Только чтение |
Измеренное значение Read | 0x120, 0x121, 0x122 – 1 канал; 0x123, 0x124, 0x125 – 2 канал; 0x126, 0x127, 0x128 – 3 канал; 0x129, 0x12A, 0x12B – 4 канал; 0x12C, 0x12D, 0x12E – 5 канал; 0x12F, 0x130, 0x131 – 6 канал; 0x132, 0x133, 0x134 – 7 канал; 0x135, 0x136, 0x137 – 8 канал | Нет | Float_32 (IEEE 754) – рез. изм. + Word_16 (метка относительного времени, дискретность 10 мс) | Только чтение |
Примечание На некорректные данные типа Int_16 возвращается значение минус 32768. На некорректные данные типа Float_32 возвращается значение NaN. Причину некорректности измеренных данных выясняют чтением статуса (SRD). Кодирование статуса приведено в таблице. |
Кодирование статуса
Статус измерения | Кодирование статуса SRD |
---|---|
Измерение успешно | 0x0000 |
Значение заведомо неверно | 0xF000 |
Данные не готовы | 0xF006 |
Датчик отключен | 0xF007 |
Измеренное значение слишком велико | 0xF00A |
Измеренное значение слишком мало | 0xF00B |
Обрыв датчика | 0xF00D |
Некорректный калибровочный коэффициент | 0xF00F |
Структура запроса и ответа для функции 17
Функция позволяет получить имя прибора и версию программного обеспечения.
Запрос на чтение имени и версии программного обеспечения прибора с адресом 12
Адрес | Функция | Контрольная сумма |
---|---|---|
12 | 17 | ZZ |
Ответ на функцию 17
Адрес | Функция | Количество байт данных | Данные 15 байт | Контрольная сумма |
---|---|---|---|---|
12 | 17 | 15 | MB110-8AC VX.YY | ZZ |