Главная  /  On-line руководство  /  Протокол MODBUS. Регистры устройства

Протокол MODBUS.
Регистры устройства


Содержание

Общие данные
Доступ к данным
Адресация регистров
Действие «modbus_SetSlaveRegAddr()»
Действие «modbus_SetRegFormat()»
Порядок следования байт регистров (справочная информация)



Общие данные

Обмен данными с Modbus-устройствами происходит через регистры. Данные в модуле хранятся в 4-х таблицах регистров (смотри таблицу ниже). Две таблицы доступны только для чтения и две для чтения-записи. В каждой таблице помещается 9999 значений.


Смаконт. Таблица регистров

Таблица регистров

Доступ к элементам в каждой таблице осуществляется с помощью 16-битного адреса, первой ячейке соответствует адрес 0. Таким образом, каждая таблица может содержать от 0 (как правило, в нулевое значение не используется) до 65535 элементов.

Coils (Регистры флагов) - хранят одно битные значения, т.е. могут находиться в состоянии 0 или 1. Такие регистры могут обозначать текущее состояние выхода (включено/отключено). Регистры флагов допускают как чтение, так и запись.
Discrete Inputs (Дискретные входы) - также являются одно битными регистрами, описывающими состояние входа устройства. Эти регистры поддерживают только чтение.
Holding Registers (Регистры хранения) и Input Registers (Регистры ввода) - представлены двухбайтовым словом и могут хранить значения от 0 до 65535 (0x0000 — 0xFFFF). Регистры ввода допускают только чтение (например, текущее значение температуры). Регистры хранения поддерживают как чтение, так и запись (например, для хранения настроек).

Спецификация не определяет, что физически должны представлять собой элементы таблиц и по каким внутренним адресам устройства они должны быть доступны. Например, допустимо организовать перекрывающиеся таблицы. В этом случае команды, работающие с дискретными данными и с 16-битными регистрами, будут фактически обращаться к одним и тем же данным.

В настоящее время, в прошивке «Smacont-ESP», регистры не разделяются. Команды на чтение регистра хранения (Holding Registers) 0xXXXX и регистра ввода (Input Registers) 0xXXXX обратятся к одному и тому же значению в адресном пространстве устройства.

Чтение регистров и запись в регистры (доступ к данным) осуществляется при помощи команд (функций).



Доступ к данным

Коды функций чтения и записи регистров, поддерживаемых прошивкой «Smacont-ESP», приведены в таблице ниже.


Смаконт. Таблица функций чтения и записи регистров

Таблица функций чтения и записи регистров





Адресация регистров

Адресация регистров протокола Modbus совпадает с нумерацией переменных «Vx». Например, при запросе значения регистра по адресу 0x0007, в ответ будет передано значение переменной «V7», и, наоборот, при изменении регистра по адресу 0x0007, будет изменено значение переменной «V7».

Важным моментом при работе с регистрами, является то, что по протоколу Modbus регистры имеют разрядность 16 бит (два байта), в то время как разрядность переменных «Vx» составляет 64 бита (8 байт, тип dooble).

Данную особенность можно не учитывать, если значение переменной «Vx» является положительным 16-ти битным числом (u16, unsigned int 16 bit, диапазон значений 0...65535).



Действие «modbus_SetSlaveRegAddr()» (только для Slave-устройств)

Действие «modbus_SetSlaveRegAddr()» предназначено для определения массивов переменных «Vx», которые доступны для запроса от Master-устройства.


Smacont. Действие «modbus_SetSlaveRegAddr()»     Smacont. Действие «modbus_SetSlaveRegAddr()»

Действие «modbus_SetSlaveRegAddr()»

Примечания
- При включении устройства, действие выполняется автоматически (Autorun).
- При изменении параметров или при удалении действия, необходимо выполнить перезагрузку устройства.
- Диапазоны адресов задаются только для Slave-устройств.
- Диапазоны адресов задаются для того, чтобы исключить доступ Master-устройства к рабочим регистрам устройства.
- Пересечение диапазонов адресов modbus-регистров, программой не отслеживается (не проверяется).
- Допускается использовать ТОЛЬКО ОДНО ДЕЙСТВИЕ (можно назначить ТОЛЬКО ТРИ ГРУППЫ ДИАПАЗОНА АДРЕСОВ).



Действие «modbus_SetRegFormat()»

Если требуется передавать значения переменных других типов (s08; u08; s16; s32; u32; s64; u64; f32; где: s - signed int; u - unsigned int; 08, 16, 32, 64 - разрядность числа), рекомендуется использовать действие «modbus_SetRegFormat()».


Smacont. Действие «modbus_SetRegFormat()»     Smacont. Действие «modbus_SetRegFormat()»

Действие «modbus_SetRegFormat()»

Примечания
- Действие только задает формат регистров – выполнение действия ни к чему не приводит.
- При передаче по протоколу Mobdus, значение переменной «Vx» делиться на константу «Cx» и сохраняется в регистрах передающего буфера (Vx/Cx->Reg).
- При приеме по протоколу Mobdus, значение принятого регистра умножается на константу «Cx» и сохраняется в переменной «Vx» (Reg*Cx->Vx).



Порядок следования байт регистров (справочная информация)

В современной вычислительной технике и цифровых системах связи информация обычно представлена в виде последовательности байтов. В том случае, если число не может быть представлено одним байтом, имеет значение, в каком порядке байты записываются в памяти компьютера или передаются по линиям связи. Часто выбор порядка записи байтов произволен и определяется только соглашениями.

big-endian

Порядок от старшего к младшему (англ. big-endian — с большого конца). Этот порядок подобен привычному порядку записи (например арабскими цифрами) слева направо, например, число сто двадцать три было бы записано при таком порядке как 123. В этом же порядке принято записывать байты в технической и учебной литературе, если другой порядок явно не обозначен.

Этот порядок является стандартным для протоколов TCP/IP, он используется в заголовках пакетов данных и во многих протоколах более высокого уровня, разработанных для использования поверх TCP/IP. Поэтому порядок байтов от старшего к младшему часто называют «сетевым порядком байтов» (англ. network byte order).

Пример:
• Исходное число 0x11223344 (hex), 287454020 (dec)
• big-endian (0x (11H 22L)H (33H 44L)L)

little-endian

Порядок от младшего к старшему (англ. little-endian — с малого конца). Это обратный привычному порядку записи чисел арабскими цифрами, например, число сто двадцать три было бы записано при таком порядке как 321. Иными словами этот порядок подобен правилу записи справа налево.

Этот порядок записи принят в памяти персональных компьютеров с процессорами архитектуры x86, в связи с чем иногда его называют интеловским порядком байтов. Современные процессоры x86 позволяют работать с одно-, двух-, четырёх- и восьмибайтовыми операндами. В таком порядке следования байтов очень удобно то, что при увеличении размера (количества байтов) операнда, значение его первого байта неизменно: 3210 → 3210’0000. При порядке от старшего к младшему значение изменилось бы, например: 0123 → 0000’0123;

Также порядок «от младшего к старшему» применяется в USB, PCI, таблице разделов GUID, он рекомендован FidoNet. Но в целом соглашение little-endian поддерживают меньше кросс-платформенных протоколов и форматов данных, чем big-endian.

Пример:
• Исходное число 0x11223344 (hex), 287454020 (dec)
• little-endian (0x (44L 33H)L (22L 11H)H)

big-endian byte swap

Пример:
• Исходное число 0x11223344 (hex), 287454020 (dec)
• big-endian byte swap (0x (22L 11H)H (44L 33H)L)

little-endian byte swap

Пример:
• Исходное число 0x11223344 (hex), 287454020 (dec)
• little-endian byte swap (0x (33H 44L)L (11H 22L)H)



Программы

Прошивка «Smacont-ESP»:
скачать

«Программа Настройки»:
запусить (только браузер Firefox)
скачать zip-архив

Телеграм канал

Новости

Энергонезависимая память (EEPROM)

Переменные «Vx» (карта переменных «Vx»)

WEB-интерфейс

Действие «wifi_CheckConn()». После подключения к WiFi-сети, выполнить действие с задержкой

Обмен данными. Open Monitoring

Датчики температуры и влажности AHT10/AHT15/AHT20/AHT21/AHT25

Датчик температуры и влажности SHT30 (SHT31/SHT35)

Действие «valueToVx()», «valueToArrVx()». Отслеживание заданного уровня в диапазоне значений

Действие «termostat()». Термостат

ESP-NOW. Датчик температуры и влажности с питанием от батареек

Последовательные интерфейсы (UART, I2C, SPI)

Управление одноканальным модулем реле

Протокол MQTT

Обмен данными. NarodMon

Обмен данными. ioControl



Программы для модулей ESP     Программы     Применения     Справочник         Контакты     SMACONT. Напишите нам smacont@ya.ru