ModBus широко применяемый в промышленности протокол для связи электронных устройств. Используется для передачи данных по последовательным интерфейсам передачи RS-232, RS-485, RS-422 и TCP/IP. Первые два интерфейса реализованы в дисплеях DWIN.
Прошлые статьи:
DWIN человеко-машинный интерфейс. Введение
DWIN. Подготовка дисплея к работе и загрузка демо-проекта
DWIN. Знакомство с программным обеспечением DWIN Graphic Utilized Software. Hello World
Рассмотрим протокол ModBus:
Slave ID - номер устройства с которым происходит взаимодействие;
Код функции представляет стандартную команду поддерживаемую протоколом Modbus;
Код функции - команда определяющая действия с данными;
Данные - передаваемые данные;
CRC - контрольная сумма для проверки целостности доставленного пакета.
Рассмотрим подобнее код функции поддерживаемые дисплеем:
1 - Чтение DO Read Coil Status
2 - Чтение DI Read Input Status
3 - Чтение AO Read Holding Registers
4 - Чтение AI Read Input Registers
5 -Запись одного DO Force Single Coil
6 -Запись одного AO Preset Single Register
10 - Команда работает когда дисплей настроен в качестве ведущего устройства, данные в этой команде будут отправлены после включения питания для инициализации ведомого устройства.
Для реализации проекта будет использован дисплей DMG80480C050_03WTC. Обладающий TN матрицей с разрешением 800х480, напряжением питания 5В, интерфейсом UART TTL.
На изображении ниже можно наблюдать что дисплей имеет два интерфейса UART с переключением режимов работы RS-232/TTL. RX2/TX2 относятся к интерфейсу UART2. RX4/TX4 относятся к интерфейсу UART4, данный интерфейс будет задействован для связи по Modbus.
Дисплей поддерживает как работу в качестве ведомого так и в качестве ведущего устройства. Разберем оба режима.
Работа дисплея DWIN в режиме "Slave"
Используем проект из прошлой статьи. Чтобы использовать Modbus, необходимо загрузить файл обновления ядра, для этого переходим в папку загруженную с GitHub, \Docs\Modbus и выбираем подходящий архив с файлами. В нашем случае это "DWIN_T5L_115200_UART4_MODBUS_Slave", дисплей на ядре T5L, с Modbus на UART4 с скоростью 115200 Baud. Из архива нужны файлы:
DWIN_T5L_115200__UART4_ModBus.asm - ассемблерный файл с кодом;
DWINOS_DWIN_T5L_115200__UART4_ModBus.bin бинарный скомпилированный файл.
Рассмотрим файл DWINOS_DWIN_T5L_115200__UART4_ModBus.bin через Notepad++ с плагином hex-editor, также можно воспользоваться UltraEdit-32.
e0 00 - Начальный адрес (слово) первой инструкции в файле 22 = 0xE000
ff 04 - FF - 255 максимальное количество инструкций в файле 22*.bin, 04 - настроен как ведомый, RTU формат.
- (0x00 = Сконфигурирован как мастер, RTU формат.
- 0x01 = Сконфигурирован как мастер, , ascii формат (в настоящее время не поддерживается).
- 0x02 = Сконфигурирован как мастер (RTU), ведомый отвечает часами в данных.
- 0x03 = Сконфигурирован как мастер (ascii), ведомый отвечает часами в данных (в настоящее время не поддерживается).
- 0x04 = Сконфигурирован как ведомый, RTU формат.
- 0x05 = Сконфигурирован как ведомый, ascii формат (в настоящее время не поддерживается).)
05 ff - 05 - Количество повторений отправки команды, FF время задержки между командами FF = 255мс.
01 40 - 01 - идентификатор дисплея в режиме ведомого (ID Slave 0x01-0x7F (1 - 127)). 0x40=8N1, 0x41= 8E1, 0x42=8O1,0x43=8N2 (для UART5 значения будут 0x5*).
00 e0 - Делитель скорости порта Modbus 0x00E0 = 224, 25804800/224 = 115 200 Baud.
Если нет необходимости изменять ID slave дисплея и скорость 115200 или 9600 подходит для использования, то просто загружаем подходящий файл без изменений.
Загружаем на uSD карту папку DWIN_SET с прошлого проекта с добавлением файла DWINOS_DWIN_T5L_115200__UART4_ModBus.bin, вставляем в дисплей и обновляем прошивку.
Программа Modbus Poll будет использована как эмулятор для ПК в виде мастера.
ID Slave 1 115200 бод
Как видно в таблице имеются значения, считанные с дисплея, кроме считывания значений их можно и изменять, для этого необходимо нажать на интересующий адрес, пусть будет 5002, и в поле Value вписать новое значение.
На дисплее отображается следующая картинка:
ID Slave 2 9600 бод
Возьмем готовый файл DWINOS_DWIN_T5L_9600__UART4_ModBus и изменим в нем ID Slave на 02.
Файл DWINOS_DWIN_T5L_9600__UART4_ModBus.bin загрузим на дисплей не через uSD карту, а используя UART2. Для этого открываем DGUS и выбираем файл проекта, далее в вкладке "Welcome" находим "UART Download Tool".
В появившемся окне выбираем Select Files и выбираем файл DWINOS_DWIN_T5L_9600__UART4_ModBus.bin, после чего нажимаем на Start Download, предварительно убедившись, что Serial Port и Baud Rate выбраны правильно.
Перезагружаем дисплей и видим, что Modbus Poll теперь не может получить данные.
Настраиваем Modbus Poll на скорость 9600 Baud и Slave ID равным 2 и видим, что информация начала обновляться.
Считанные данные совпадают с отображаемыми данными на дисплее.
Работа дисплея DWIN в режиме "Master"
Для создания проекта также воспользуемся наработками с предыдущей статьи и используем готовый бинарный файл DWIN_T5L_115200_UART4_MODBUS из соответствующего архива. Также в архиве появился дополнительный файл 22*.bin, в который нужно будет записывать команды, которые должен отправлять дисплей к ведомым устройствам. В качестве ведомого устройства будет использоваться эмулятор Modbus Slave.
Пример записанной команды в файле 22*.bin:
5A 01 03 06 02 01 00 02 10 00 00 01
D0: 5A - стартовый байт команды;
D1: 01 - Идентификационный номер ведомого устройства;
D2: 03 - команда (может быть 1,2,3,4,5,6,10);
D3: 06 - длина данных;
D4: 02 - время ожидания приема (2 мс) (2 ~ 255);
D5: 01 - Режим отправки выполнения команды триггера (0-4)
- 0x00 = Безусловное выполнение.
- 0x01 = Выполнить на странице, указанной в D6.D7.
- 0x02 = Выполнить, когда значение ключа, указанное в D6.D7, не равно нулю, значение ключа будет очищено после выполнения инструкции.
- 0x03 = В инструкции 0x06, когда значение переменной, на которую указывает D8.D9, не равно нулю, оно будет отправлено автоматически.
После завершения связи очистите значение переменной, указанной в D8.D9. - 0x04 = В инструкции 0x05,0x06; 0x10 он будет отправлен автоматически при изменении указанной переменной D8.D9.
D6, D7:
- D5 = 0, настройка не требуется.
- D5 = 1, он настроен как номер страницы (0x0002).
- D5 = 2, он настраивается как ключевой адрес, запускающий отправку.
- D5 = 3, настройка не требуется.
- D5 = 4, настройка не требуется.
D8, D9: Эта инструкция используется для управления адресом исходной переменной или начальным адресом (0x1000) данных, размещенных на экране DGUS.
D10, D11: таблица адресов подчиненного устройства (0x0001), управляемая этой инструкцией.
D12, D13, D14, D15: Не используются.
Эта команда предназначена для чтения данных из 6 последовательных слов в таблице точек, начиная с 0x0001 ведомого (id = 0x01), когда экран является ведущим, и отображения их по адресу 0x1000_0x1005 экрана.
Запишем 4 команды, 2 команды на считывание данных с ведомого устройства и запись их в ячейки с адресами 5002 и 5004. И 2 команды на запись данных в ведомое устройство из ячеек 5000 и 5006
Команда на чтение:
5A 01 03 01 30 01 00 00 50 02 00 02 00 00 00 00 - чтение из ячейки 0002 Slave устройства(01) и запись в ячейку 5002 дисплея.
5A 01 03 01 30 01 00 00 50 04 00 04 00 00 00 00 - чтение из ячейки 0004 Slave устройства(01) и запись в ячейку 5004 дисплея.
5A 01 06 01 30 04 00 00 50 06 00 06 00 00 00 00 - автоматическая отправка данных на запись из ячейки 5006 при изменении данных, отправление происходит в ячейку памяти 0006 Slave устройства (01).
5A 01 06 01 30 04 00 00 50 00 00 00 00 00 00 00 - автоматическая отправка данных на запись из ячейки 5000 при изменении данных, отправление происходит в ячейку памяти 0000 Slave устройства(01).
Для записи данных команд в файл 22*.bin откроем файл через Notepad++ с плагином hex-editoк или UltraEdit-32. И начнём записывать команды в строки с адреса 0001C000.
Если записывать команды в файл сконфигурированный DGUS то значения инициализации останутся прежними, если файл будет новый то все переменные инициализируются нулями. В данном примере мы будем записать в новый файл без начальных значений переменных.
Загрузим проект на uSD карту, обновим прошивку дисплея, включим программу Modbus Slave, выставим настройки порта и подключимся к дисплею.
При изменении полей 5000 и 5006 на дисплее видно что данные в программе обновляются. Если в Modbus Slave изменить поля 0004 и 0002 то изменения отобразятся на дисплее.
На дисплее отобразится следующая информация:
Видео версия демонстрации использования протоколов Modbus в дисплеях DWIN.
Ссылка на GitHub: https://github.com/VB-Radchenko/DWIN-Project/
По вопросам закупок, технической поддержкой и общим вопросам обращайтесь на электронную почту: Info_dwin@mail.ru
Скидочный купон для официального магазина AliExpress - DWVLPRO
#iot #diy #сенсорная панель #modbus #ПЛК #PLC #dwin #dgus