Решения
Smart Display с RS485 интерфейсом
Описание
I. Введение:
Smart Display - это серия дисплеев в сочетании с микроконтроллером, который может выполнять сложную загрузку графики, а также настройку, отображение и даже ввод. Внешнее устройство (т.е. хост) может выполнять интерактивные операции с помощью простых команд, что очень подходит для различных нужд, и широко используется в различных областях, таких как: медицина, промышленность, автомобилестроение и т.д.
Smart Display поддерживает множество коммуникационных интерфейсов, но наиболее распространенными и популярными в настоящее время являются CAN/CANopen и RS485/Modbus. Своей популярностью применения в промышленных устройствах, простотой управления, доступностью и сравнительно недорогой ценой выделяется RS485 интерфейс.
Интерфейс имеет довольно простую структуру, поскольку для передачи и приёма данных требуется одна витая пара (RS485_A/RS485_B) через которую происходит обмен данными с помощью дифференциальных сигналов. Кроме того, протокол Modbus довольно понятен и прост в использовании, поэтому в качестве иллюстрации, в данной статье мы рассмотрим принципы и методику управления RS485/Modbus для создания кросплатформенных приложений.
II. Требуемые компоненты:
■ Smart Display_RS485
Для проверки требуется Smart Display с поддержкой RS485
■ RS485 Dongle
Dongle (электронный ключ) на RS685
■ Рис. 2-1 Типы USB to RS485 Dongle
После того как мы подготовим все компоненты, у нас появится возможность выбора среды выполнения тестового стенда в качестве хоста. Единственным требуемым условием является возможность хоста читать и записывать через последовательный порт независимо от ОС: Windows, Mac OS, различные Linux (включая Raspbian для Raspberry Pi) или одноплатный компьютер, Arduino и т. д.
В качестве образца используется одноплатный компьютер (SBC) со встроенным портом RS485, который можно использовать непосредственно в качестве хост-устройства.
III. Проверка интерфейса управления:
■ Проверка интерфейса управления:
Чтобы понять как связать Smart Display с хостом, прежде всего нам нужно получить код управления, и для этого нам поможет программа GUI Builder. GUI Builder является отличным программным обеспечением для работы со Smart Display, которое позволяет создавать собственный дизайн интерфейса и отображать его без необходимости написания какой-либо программы. С помощью функций данной программы можно создать свой идеальный пользовательский интерфейс путем перетаскивания иконок на дисплей для отображения. Кроме всего прочего, встроенный симулятор и Smart Display используют одинаковый исходный код!
► Contact for Smart Display GUI Builder
Запустите программу GUI Builder в Windows OS и ввведите желаемое имя проекта в строке «Project Name». Если Вы создавали проект ранее, то можно выбрать сохраненный проект нажав на иконку «Open Project» в меню на правой стороне интерфейса. После выбираем иконку Device Type 5’’ TFT, затем нажмите на иконку «Create» для создания нового проекта.
После создания проекта в первую очередь выберите интерфейс
В качестве интерфейса по-умолчанию нужно выбрать RS485. Порт хоста RS485 должен быть установлен как фактический порт для подключения Dongle (электронный ключ). Проверить имя порта можно через диспетчер устройств, а значение Baudrate нужно оставить без изменений - 115200.
Если на руках образца Smart Display RS485 еще нет, то можно запустить GUI Builder в режиме симуляции для изучения возможностей программы.
Кликните Simulator и выберите Simulator with GUI для запуска режима симуляции:
После запуска симулятора Вы увидите экран моделирования, элементы управления каждого объекта и запись данных связи в правой части экрана. Измените значение любого объекта, чтобы увидеть содержимое команды соответствующей объекту.
Каждая операция будет выводить две команды TX/RX, так как устройство отображения отправит обратно ту же подтвержденную команду после получения команды, чтобы сообщить, что она была получена.
Имеется возможность записать несколько разных значений для разных объектов и использовать для управления физическим устройством.
■ Подключение выводов:
RS485 использует дифференциальную пару для передачи и приема сигналов, и если эти два провода подсоединены, заземляющий провод не требуется. Имя сигнальной линии RS485 — A/B (A соедините A, B соедините B).
Есть две вещи, о которых следует помнить, прежде чем приступать к тестированию.
1. Перед тестированием проверьте имена COM-портов, поскольку в разных операционных системах они различаются.
2. COM-портыв некоторых операционных систем не назначены по умолчанию, и требует предварительной настройки. В качестве примера возьмем Linux/Ubuntu; если имя COM-порта - ttyUSB0, и в терминале нужно назначить права:
sudo chmod 666 /dev/ttyUSB0
Два метода тестирования:
■ Управление терминалом последовательного порта
Используя терминал последовательного порта, поддерживающего шестнадцатеричный ввод, нужно введисти шестнадцатеричный код управления после подключения:
Если команда выполнена правильно, то можно увидеть, что объекты на устройстве действуют в соответствии с разными кодами управления.
Данный способ используется только для проверки соединения и не очень удобен в практическом применении, и чтобы получить правильный результат, операция должна быть выполнена через программу. Для начала давайте проделаем данную операцию на кроссплатформенном языке программирования python.
■ Использование Python
Следующие программы выполняются с использованием python3. Требуется записать три набора кодов управления на последовательный порт подавая сигнал каждую секунду.
import serial v000 = bytes.fromhex('7B06000600006251') ser = serial.Serial(COM_PORT, 115200) |
Исходный код Python может выполняться на различных платформах, и если последовательный порт назван правильно, то он должен корректно работать с тестовым стендом.
Однако фиксированные управляющие коды не подходят для практического применения, поэтому для того, чтобы полностью их использовать необходимо понять содержание команд.
IV. Анализ кодов управления
■ Сравнительный анализ
Сравнение команд с разными значениями для одного и того же объекта:
Значения выделенные синим — это значение установленного нами объекта.
Сравнение разных объектов с одинаковой командой значения
Значения, выделенные синим, относятся к индексу или адресу объекта.
Что касается последних двух байтов данных, то тут вроде правил нет, но что означают эти сообщения?
■ Анализ кодов управления
На самом деле содержимое этих 8 байт и есть так называемое сообщение Modbus. Таблица с кодовыми обозначениями показана ниже:
ID
Каждое Modbus устройство должно иметь идентификационный код. Идентификационный код Smart Display - 0x7B = 123
Код функции
Код функции указывающий назначение сообщения (например 06) —Запись единого регистра, который также записывает значение в указанное место.
Адрес регистра
Aдрес регистра — это место назначения для записи (то есть адрес объекта)
Данные
Записываемая информация (значение объекта)
Циклический избыточный код
Результат CRC (циклический избыточный код) первых 6 байтов используемый для проверки наличия ошибок в процессе передачи данных.
Do you have some concepts? If you want to know more, you have to look at what Modbus is.
V. Modbus Введение
■ Протокол Modbus
Протокол Modbus на самом деле является форматом данных, и в основном определяет коммуникационное содержание архитектуры ведущий-ведомый.
Поскольку это только определение структуры данных, она может обмениваться данными через различные физические интерфейсы, такие как RS232, RS422, RS485 и даже через сеть.
■ Концептуальная модель
Modbus рассматривает передачу данных как доступ к «Регистрации», так как каждое устройство должно определить свой собственный тип регистра и адрес для внешней ссылки. Так называемая передача данных на устройство — это запись в указанный регистр, а чтение данных — это чтение указанного регистра (16-бит).
■ Код функции
В соответствии с характеристиками данных, Modbus определяет несколько методов чтения и записи определяемых кодом функции в сообщении.
Для управления Smart Display чаще всего используется 06: запись значения единого регистра в указанное место (запись 16-битного значения) и, чтение регистров временного хранения (чтение значения нескольких регистров).
■ CRC (Циклический избыточный код)
CRC - циклический избыточный код, иногда называемый также контрольным кодом. По своей сути — это просто вычисленное на основе исходного передаваемого сообщения число (или можно сказать код), которое передаётся вместе с самим сообщением (дописывается в конец информационной части) и служит для контроля его безошибочной передачи.
VI. Контроль объектов Smart Display
Каждому Modbus требуется определить тип и адрес регистра, и ниже мы разберем данную тему.
■ Классификация регистров
Регистры Smart Display можно условно разделить на три категории:
1.)Информация об устройстве (версия, имя устройства и т. д.)
Отправить код 04 для чтения входных регистров. Данные будут изменены при обновлении прошивки, при подключении.
2.) Свойства объекта (вид, местоположение и т. д.)
Отправить код 03 для чтения регистров временного хранения/16: Запись нескольких регистров для чтения и записи. Эти данные влияют на внешний вид объектов и обычно не меняются вне стадии проектирования. Чтобы изменить содержимое, Smart Display должен быть временно отключен, прежде чем его можно будет обновить.
3.) Значения объекта (значения, которые представляет объект, например, число оборотов в минуту, включение или выключение, процент и т. д., варьируются от объекта к объекту).
Данный пункт является основным пунктом изменения в работе и каждый элемент использует 16-битное значение, поэтому для него установлено значение 06: запись в одиночный регистр.
Ниже приведен список этих регистров:
■ Регистры ввода
■ Регистры хранения
Ранняя версия прошивки Smart Display поддерживала только 10 объектов, поэтому диапазон идентификаторов виджета составлял от 0 до 9 (включительно). В новой версии прошивки данный диапазон был расширен до 64, но способ адресации был изменен.
Этих данных достаточно для сжатия и отправки на Smart Display для управления. Способ сжатия данных и добавления CRC кода будет описано ниже.
VII. Пользовательский интерфейс
Для практического применения Smart Display по-прежнему необходим подходящий человеко-машинный интерфейс, особенно графический пользовательский интерфейс, графический интерфейс пользователя. В настоящее время существует множество вариантов кроссплатформенных разработкок графического интерфейса, и мы используем Qt для ее реализации.
Многие люди думают, что Qt — это просто библиотека с графическим интерфейсом, но она является полноценной средой разработки (Framework). Предположим, что приложение полностью реализовано через кроссплатформенную библиотеку классов; проект может быть легко перенесен на несколько платформ (ПК/Windows, Mac/MacOS, Raspberry Pi/Raspbian, Android, iOS, Embedded и т. д.) с небольшими изменениями, поскольку программа представляет собой средство разработки программного обеспечения.
Более новая версия Qt уже поддерживает библиотеку классов Modbus, но чтобы облегчить переписывание на другие языки, мы реализуем эту тестовую программу для наиболее удобного чтения и записи последовательного порта.
Помимо предоставления функции выбора последовательного порта и передачи кода для управления, эта программа дополнительно предоставляет горизонтально рычажное приложение, которое может устанавливать значение указанного объекта. Если вы выбираете COM для последовательного порта, не забудьте указать фактический номер.
На изображении ниже показано выполнение программы на Raspberry Pi и Ubuntu, которая не требует модификации.
■ CRC (Циклический избыточный код)
Алгоритм циклического избыточного кода довольно прост в применении и в Qt выглядит в виде алгоритма ниже:
QByteArray SetWidgetValue::calculateCRC(QByteArray data) |
Контент таблицы циклического избыточного кода:
const uint16_t crcTable[] = |
Информация выше не является полной, и если требуется, то с ней можно ознакомиться на github.
■ Упаковка данных
Ниже приведена ключевая функция, которая вычисляет управляющий код в соответствии с пользовательским интерфейсом и отправляет его на Smart Display:
void SetWidgetValue::on_sbValue_valueChanged(int value) |
Если вы уже знакомы с Qt, приведенный выше код будет прост для понимания. Если вы не знакомы с Qt, найдите время, чтобы изучить его, так как некоторые из его концепций довольно интересны и заслуживают более глубокого изучения.
VIII. Расширенный пример
Предыдущий пример предназначен только для установки значения объекта, и для изучения наиболее полного примера, можно обаратиться к SmartDisplayConsole. На рис. ниже показан экран выполнения на Raspberry Pi:
В конце статьи есть URL-ссылка на github, и каждый может обратиться к нему для изучения.
IX. Заключение
В этой статья мы обсудили каждый шаг управления Smart Display, предоставили различные методы управления, и спользуя эти знания и богатое воображение, можно разработать уникальный интерфейс.
X. Ссылки
Serial Terminal Basics
https://learn.sparkfun.com/tutorials/terminal-basics/command-line-windows-mac-linux
Modbus
https://www.modbustools.com/modbus.html
https://www.modbusdriver.com/doc/mbusmaster.net/modbus.htm
XI. Пример исходного кода
GettingStartedWithSmartDisplay
https://github.com/Smart-Display-Series/GettingStartedWithSmartDisplay.git
SmartDisplayConsole
https://github.com/Smart-Display-Series/SmartDisplayConsole.git
Подписка
Подписаться на рассылку новостей Winstar
Свяжитесь с нами
Цена/Даташит/Общий запрос
Техподдержка
Служба поддержки Winstar