Написание модуля 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

VPD-130-H2

Особенностью работы с HMI Works является наличие встроенных модулей для управления с внешними устройствами. В модуле прописывается то, какие переменные стоит создать и как они обрабатываются. Также прописывается какой интерфейс и протокол используется для данного устройства, какие адреса регистров нужно прочитать или записать.

Поскольку я не нашел модуля для управления своим частотным преобразователем, то мне пришлось разбираться как написать его с нуля. И это стало проблемой, я не нашел документации о том, какие внутренние функции за что отвечают. В официальной документации есть только поверхностные упоминания ориентированные на то, что будут использоваться именно встроенные модули. В следствии чего появилась идея написания данной статьи.

Начнем с установки программного обеспечения для работы с HMI панелью.

Скачиваем последнюю версию ПО для нашей панели, а также обновление для него. https://www.icpdas.com/en/download/show.php? num=944&model=VPD-130N-H2

ca0d6a6cfabe0efe8a13e08955f1d1a3.png

После установки ПО и драйвера (устанавливается вместе с ПО) создаем новый проект, указываем нашу панель

fe4bbc8842421b121dc4235e3487a43d.png

Перейдем к самой панели. Нужно включить режим «USB Force Update» (в моем случае положение крутилки 9), этот режим позволяет записывать программу в нашу панель.

Важное уточнение, перед тем как загрузить программу необходимо обесточить панель, а затем снова включить и только потом загружать программу, иначе будет возникать ошибка в HMI Works

7c718fd2daef628d1ea558e51d8bfbbc.jpg

Как уже упоминалось ранее, для связи панели с другими устройствами нужны модули. Для моих задач встроенных по умолчанию модулей не достаточно, поэтому перейдем к его написанию.

Написание модуля

Для того чтобы добавить свой модуль в список, нужно перейти по пути установки вашей программы в папку bin/Modules, у меня C:\ICPDAS\HMIWorks_Standard\bin\Modules. Рассмотрим файл Modules.ini. В нем указываются серии устройств, а также протокол по которым устройства общаются.

Добавим в этот список название модуля, в моем случае Frequency

8b658e78acee46bce91207c307bd7597.png

В этом же файле пропишем протокол по которому наш модуль будет общаться. Frequency — название нашего модуля, MRTUM — протокол Modbus RTU Master

287903f82e969d2ce1d99fcef385db13.png

Остальные настройки можете настроить по вашему усмотрению

c3a6ecb5c5f7b8a1c6f7d66bf46aa2c6.png

В той же папке (где лежит файл Modules.ini) создаем папку куда запишем конфигурацию нашего устройства.

bb93f8e1c8d17940d310a36cefd9151b.png

Внутри новосозданной папки добавим файл Frequency.ini где пропишем Модель нашего устройства (Frequency_motor), а также его теги (теги по умолчанию имеют тип WORD)

c81be37c81eb1e338d8d5594334d922a.png

Осталось прописать поведение нашей Модели. Создаем папку с именем устройства (Frequency_motor)

b45ab5e386bf0ccb33e66ee62e1baff0.png

Внутри Frequency_motor добавим файл IO.hsf, в нем прописывается поведение модуля (отправка, получение данных, обработка тегов) на языке C.

Так как обработка тегов у каждого устройства разная, то я лишь упомяну некоторые важные функции, весь мой проект доступен по ссылке в конце статьи.

0ab2e543d8488a50f7fa85ab9d66e8e4.png

Добавление нового устройства

Перейдем к дереву нашего проекта. Первым что следует сделать, это создать новое соединение (Connection). Нажимаем на Connection правой кнопкой мыши, выбираем New Connection. Здесь можем выбрать нужные параметры протокола и порт на котором будет осуществляться связь, в моем случае все стоит так как нужно. нажимаем окей и переходим дальше.

e959e9648bfd0b4e5643c7952e75779d.png

Теперь нужно добавить новое устройство. В дереве проекта нажимаем правой кнопкой мыши по надписи Device и выбираем New Device. Здесь мы можем выбрать наш только что написанный модуль.

bd5fe5cfa10131a80bbe4799bfaea437.png

В TouchPAD is указываем наш интерфейс связи, то есть Modbus RTU Master (когда мы прописывали конфигурацию то указывали Protocol=MRTUM). Если мы сделали все правильно, то в Device Series должен появится наш модуль Frequency. Далее указываем Connection который создали, и в Model Name выбираем модель Frequency_motor. Теперь можем дать произвольное имя и идентификатор slave устройства, у меня устройство с Id 1. Как мы видим, справа список тегов который мы прописывали в Frequency.ini.

Загрузка проекта в панель

Загрузка проекта проходит в 3 этапа:

  1. Сборка или рендер (Render), здесь компилятор читает файлы IO.hsf, заменяет указатели тегов которые начинаются с знака $ на значение тег + название модуля которые мы присвоили. Т.е компилятор заменит $SPEED_GET в коде на Frequencymotor_1_SPEED_GET. Таким образом мы можем добавлять десятки идентичных модулей, и они не будут конфликтовать.

  2. Компиляция (Compile), здесь уже будет проверка на наличие синтаксических ошибок, и если таковых не имеется, то сборка кода в язык, понятный самой панельке

  3. Загрузка (Download), здесь загрузка только что скомпилированного кода в саму панель, перед загрузкой необходимо перезагрузить панель обесточив на 1–2 секунды.

30207e78149be27252ce6d53334a36d5.png

Вывод

Я рассказал некоторые подводные камни при работе с программой HMI Works. Мы также разобрались как написать полноценный модуль для работы с Modbus устройствами. Пример готового проекта лежит на gitHub.

© Habrahabr.ru