Добро пожаловать на сайт компании AdVentX ГлавнаяКонтактыКарта сайта
Поиск:
  Промышленная Автоматизация » Статьи

Работа с модулем управления светодиодным освещением в ModBus RTU

   В этой статье хочу поделиться с Вами, некоторыми практическими аспектами использования модуля управления светодиодным освещением в ModBusRTU.

Немного теории:

   В данном протоколе работа реализована по принципу один Master(Ведущий) и остальные устройства подключенные в сети Slave (Ведомые). Таким образом Master может инициировать все транзакции, которые происходят в сети. Он обращается к нужному устройству Slave в сети по адресу, каждый Slave в сети имеет свой уникальный адрес. Master обменивается со Slave пакетами информации, которые включают в себя адрес устройства, к которому обращается Master, данные и контрольная сумма пакета информации. Ниже в примерах мы более подробно разберем, что это за данные. После этого устройства Slave, проверяют целостность пакета по контрольной сумме. Если пакет информации целый и адрес Slave совпал, данные содержащиеся в пакете обрабатываются и потом дается ответ Master, тоже в виде пакета информации с адресом Slave отправившего этот пакет, данные и контрольная сумма.

   Какие же данные содержаться в информационном пакете? Для начала надо понимать каким образом организованы данные.Если упрощенно, в устройстве Slave есть массив 16 битовых регистров, эти регистры могут содержать считанные с датчиков показания (давления, температура, влажность и пр.), которые подключены к устройству Slave. Также они могут быть связаны с выходами устройства (реле, аналоговый 0..10В, токовый 4-20мА и пр.),т.е. записывая в эти регистры значения это сказывается на состоянии этих выходов, допустим при записи значения 1 в регистр - замыкается выходное реле, при записи 0 - выход реле размыкается, и т.п. Исходя из всего этого есть несколько различных функций в ModBus RTU, которые производят запись или считывание значений этих регистров.

   Это - упрощенная теория, более подробно и расширенно обращайтесь к google, теперь что касательно нашего модуля управления светодиодным освещением.

Контроллер поддерживает команды ModBus RTU:

0х03 – считывание содержимого регистров

0x06 – запись в регистр

0x10 – групповая запись в регистры

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

Регистры устройства

№ регистра Описание Операция
REG[0] текущее значение уровня яркости канала RED [0..255] запись / чтение
REG[1] текущее значение уровня яркости канала GREEN [0..255] запись / чтение
REG[2] текущее значение уровня яркости канала BLUE [0..255] запись / чтение
REG[3] режим [CMD] запись / чтение
REG[4] установка максимального уровня при плавном включении RED [0..255] запись / чтение
REG[5] установка максимального уровня при плавном включении GREEN [0..255] запись / чтение
REG[6] установка максимального уровня при плавном включении BLUE [0..255] запись / чтение
REG[7] временная константа для RED (плавного включения/выключения) [0..255] запись / чтение
REG[8] временная константа для GREEN (плавного включения/выключения) [0..255] запись / чтение
REG[9] временная константа для BLUE (плавного включения/выключения) [0..255] запись / чтение
REG[10] текущая температура модуля (только чтение) чтение

Описание [CMD] режим

ст.байт[00000000] мл. байт[00000RGB] плавное выключение
Где флаги R,G,B - если установлен какой либо флаг будет произведено плавное выключение данного канала с предустановленного текущего уровня в регистрах REG[0], REG[1], REG[2] освещения до нуля. После того как будет выполнено плавное выключение, будет выполнен переход в режим прямой предустановки уровней яркости каналов RGB.

ст.байт[00000001] мл. байт[00000RGB] плавное включение
Где флаги R,G,B - если установлен какой либо флаг будет произведено плавное включение данного канала от нуля либо предустановленного значения в регистрах REG[0], REG[1], REG[2] до уровня установленного в регистрах REG[4], REG[5], REG[6]. После того как будет выполнено плавное включение, будет выполнен переход в режим прямой предустановки уровней яркости каналов RGB.

ст.байт[00000010] мл. байт[00000000] прямая текущая предустановка уровня яркости в регистрах REG[0], REG[1], REG[2]. В этом режиме можно устанавливать произвольно уровень яркости, не используя режим плавного включения/выключения.

Параметры настройки последовательного порта:

8 бит, без бита четности, 1 стартовый и 1 стоповый бит, скорость 115200Бод

Адрес устройства в сети, может меняться с помощью перемычек А0..А4, т.е от 0хA0..0xC0 (шестнадцатиричный) или 160 до 191 (десятичный)

Рекомендации и примеры использования:

Допустим необходимо включить каналы R на уровень яркости [120], G на уровень яркости [60], B на уровень яркости [255]. Для этого нам необходимо записать эти значения в регистры REG[0], REG[1], REG[2]. Воспользуемся для этого функцией 0x10 запись значений в несколько регистров.

Формируем запрос пакет MODBUS RTU от управляющего (Master):

Имя поля Пример

(Hex)
Адрес подчиненного 0xA0
Функция 0x10
Начальный адрес ст. 0x00
Начальный адрес мл. 0x00
Кол-во регистров ст. 0x00
Кол-во регистров мл. 0x03
Счетчик байт 0x06
Данные ст. 0x00
Данные мл. 0x78
Данные ст. 0x00
Данные мл. 0x3C
Данные ст. 0x00
Данные мл. 0xFF
Контрольная сумма 0x44

0xE6

ОТВЕТ
Нормальный ответ содержит адрес подчиненного, код функции, начальный адрес, и количество регистров.

Имя поля Пример

(Hex)
Адрес подчиненного 0xA0
Функция 0x10
Начальный адрес ст. 0x00
Начальный адрес мл. 0x00
Кол-во регистров ст. 0x00
Кол-во регистров мл. 0x03
Контрольная сумма -

-

Допустим необходимо включить только канал B на уровень яркости [200]. Для этого нам необходимо записать это значение в регистр REG[2]. Воспользуемся для этого функцией 0x06 запись одного регистра.

Формируем запрос пакет MODBUS RTU от управляющего (Master):

Имя поля Пример

(Hex)
Адрес подчиненного 0xA0
Функция 0x06
Адрес регистра ст. 0x00
Адрес регистра мл. 0x02
Данные ст. 0x00
Данные мл. 0xC8
Контрольная сумма 0x30

0xED

ОТВЕТ
Нормальный ответ повторяет запрос.

Имя поля Пример

(Hex)
Адрес подчиненного 0xA0
Функция 0x06
Адрес регистра ст. 0x00
Адрес регистра мл. 0x02
Данные ст. 0x00
Данные мл. 0xC8
Контрольная сумма 0x30

0xED

Допустим необходимо считать текущую температуру модуля. Для этого нам необходимо считать значение из регистра REG[10]. Воспользуемся для этого функцией 0x03 чтение значений из нескольких регистров.

Формируем запрос пакет MODBUS RTU от управляющего (Master):

Имя поля Пример

(Hex)
Адрес подчиненного 0xA0
Функция 0x03
Начальный адрес ст. 0x00
Начальный адрес мл. 0x0A
Кол-во регистров ст. 0x00
Кол-во регистров мл. 0x01
Контрольная сумма 0xBD

0x79

ОТВЕТ
Данные регистров в ответе передаются как два байта на регистр. Для каждого регистра, первый байт содержит старшие биты второй байт содержит младшие биты.

Это пример ответа на запрос представленный выше:

Имя поля Пример

(Hex)
Адрес подчиненного 0xA0
Функция 0x03
Счетчик байт 0x02
Данные ст. 0x00
Данные мл. 0x1B
Контрольная сумма 0x45

0x96

Таким образом температура модуля 27 градусов цельсия


За дополнительной информацией обращайтесь по телефону +38 063 440-76-01 (viber)
ВВЕРХ


comments powered by Disqus
© 2004-2021 AdVentX Компания "AdVentX", г. Бровары, тел.: +38 063 440-76-01