С чего все началось. Мне поставили задачу связать панель VPD-130-H2 с 2 частотными преобразователями DC1-344D1NN-A20N. На панели и частотнике встроен интерфейс RS485, поэтому для управления я буду использовать протокол Modbus. В данном случае частотники будут выступать в роли Slave-устройств с адресами 11 и 22, а панель в качестве Master-устройства.
В этой статье я сделал акцент на настройке HMI панели и написании модуля на языке С. Работа с частотными преобразователями рассматриваться не будет.
HMI Works - это программный инструмент, предназначенный для разработчиков, работающих с контроллерами сенсорного экрана TPD и VPD от ICP DAS USA . Это программное обеспечение основано на HMI, Ladder Logic и языке C. Является основным инструментом для работы с панелькой VPD-130-H2.
Особенностью работы с HMI Works является наличие встроенных модулей для управления с внешними устройствами. В модуле прописывается то, какие переменные стоит создать и как они обрабатываются. Также прописывается какой интерфейс и протокол используется для данного устройства, какие адреса регистров нужно прочитать или записать.
Поскольку я не нашел модуля для управления своим частотным преобразователем, то мне пришлось разбираться как написать его с нуля. И это стало проблемой, я не нашел документации о том, какие внутренние функции за что отвечают. В официальной документации есть только поверхностные упоминания ориентированные на то, что будут использоваться именно встроенные модули. В следствии чего появилась идея написания данной статьи.
Начнем с установки программного обеспечения для работы с HMI панелью.
Скачиваем последнюю версию ПО для нашей панели, а также обновление для него. https://www.icpdas.com/en/download/show.php?num=944&model=VPD-130N-H2
После установки ПО и драйвера (устанавливается вместе с ПО) создаем новый проект, указываем нашу панель
Перейдем к самой панели. Нужно включить режим "USB Force Update" (в моем случае положение крутилки 9), этот режим позволяет записывать программу в нашу панель.
Важное уточнение, перед тем как загрузить программу необходимо обесточить панель, а затем снова включить и только потом загружать программу, иначе будет возникать ошибка в HMI Works
Как уже упоминалось ранее, для связи панели с другими устройствами нужны модули. Для моих задач встроенных по умолчанию модулей не достаточно, поэтому перейдем к его написанию.
Написание модуля
Для того чтобы добавить свой модуль в список, нужно перейти по пути установки вашей программы в папку bin/Modules, у меня C:\ICPDAS\HMIWorks_Standard\bin\Modules. Рассмотрим файл Modules.ini. В нем указываются серии устройств, а также протокол по которым устройства общаются.
Добавим в этот список название модуля, в моем случае Frequency
В этом же файле пропишем протокол по которому наш модуль будет общаться. Frequency - название нашего модуля, MRTUM - протокол Modbus RTU Master
Остальные настройки можете настроить по вашему усмотрению
В той же папке (где лежит файл Modules.ini) создаем папку куда запишем конфигурацию нашего устройства.
Внутри новосозданной папки добавим файл Frequency.ini где пропишем Модель нашего устройства (Frequency_motor), а также его теги (теги по умолчанию имеют тип WORD)
Осталось прописать поведение нашей Модели. Создаем папку с именем устройства (Frequency_motor)
Внутри Frequency_motor добавим файл IO.hsf, в нем прописывается поведение модуля (отправка, получение данных, обработка тегов) на языке C.
Так как обработка тегов у каждого устройства разная, то я лишь упомяну некоторые важные функции, весь мой проект доступен по ссылке в конце статьи.
Добавление нового устройства
Перейдем к дереву нашего проекта. Первым что следует сделать, это создать новое соединение (Connection). Нажимаем на Connection правой кнопкой мыши, выбираем New Connection. Здесь можем выбрать нужные параметры протокола и порт на котором будет осуществляться связь, в моем случае все стоит так как нужно. нажимаем окей и переходим дальше.
Теперь нужно добавить новое устройство. В дереве проекта нажимаем правой кнопкой мыши по надписи Device и выбираем New Device. Здесь мы можем выбрать наш только что написанный модуль.
В TouchPAD is указываем наш интерфейс связи, то есть Modbus RTU Master (когда мы прописывали конфигурацию то указывали Protocol=MRTUM). Если мы сделали все правильно, то в Device Series должен появится наш модуль Frequency. Далее указываем Connection который создали, и в Model Name выбираем модель Frequency_motor. Теперь можем дать произвольное имя и идентификатор slave устройства, у меня устройство с Id 1. Как мы видим, справа список тегов который мы прописывали в Frequency.ini.
Загрузка проекта в панель
Загрузка проекта проходит в 3 этапа:
Сборка или рендер (Render), здесь компилятор читает файлы IO.hsf, заменяет указатели тегов которые начинаются с знака $ на значение тег + название модуля которые мы присвоили. Т.е компилятор заменит $SPEED_GET в коде на Frequencymotor_1_SPEED_GET. Таким образом мы можем добавлять десятки идентичных модулей, и они не будут конфликтовать.
Компиляция (Compile), здесь уже будет проверка на наличие синтаксических ошибок, и если таковых не имеется, то сборка кода в язык, понятный самой панельке
Загрузка (Download), здесь загрузка только что скомпилированного кода в саму панель, перед загрузкой необходимо перезагрузить панель обесточив на 1-2 секунды.
Вывод
Я рассказал некоторые подводные камни при работе с программой HMI Works. Мы также разобрались как написать полноценный модуль для работы с Modbus устройствами. Пример готового проекта лежит на gitHub.
mlnw
Не вполне по теме статьи (автору сказали - он сделал), но вот интересно, есть ли хоть один повод юзать Modbus в 2023 году в новых дизайнах (если не учитывать доводы типа "на RS485 скопилось огромное количество legacy оборудования..." итд итп).
Azavr Автор
Modbus больше подходит для не больших сетей, преимуществом является его низкая стоимость реализации и простая разработка. Правда, зачем нам комать ямку для 1 ростка целым экскаватором, если можно обойтись более простым протоколом. И что вы имеете ввиду под "Не вполне по теме статьи (автору сказали - он сделал)...", это моя первая статья, хочу получить больше критики