Написание модуля Modbus RTU Master для VPD-130-H2 в HMI Works
С чего все началось. Мне поставили задачу связать панель 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.
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.