С чего все началось. Мне поставили задачу связать панель 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

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

Перейдем к самой панели. Нужно включить режим "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 этапа:

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

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

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

Вывод

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

Комментарии (7)


  1. mlnw
    27.11.2023 14:51

    Не вполне по теме статьи (автору сказали - он сделал), но вот интересно, есть ли хоть один повод юзать Modbus в 2023 году в новых дизайнах (если не учитывать доводы типа "на RS485 скопилось огромное количество legacy оборудования..." итд итп).


    1. Azavr Автор
      27.11.2023 14:51

      Modbus больше подходит для не больших сетей, преимуществом является его низкая стоимость реализации и простая разработка. Правда, зачем нам комать ямку для 1 ростка целым экскаватором, если можно обойтись более простым протоколом. И что вы имеете ввиду под "Не вполне по теме статьи (автору сказали - он сделал)...", это моя первая статья, хочу получить больше критики


  1. Yukr
    27.11.2023 14:51
    +1

    ну мы же продолжаем использовать лопаты при наличии экскаваторов..


    1. mlnw
      27.11.2023 14:51

      Ваш пример несколько некорректен ввиду разности масштабов. Я бы переформулировал так "оправдано ли рыть землю руками при наличии лопаты?"...


      1. Yukr
        27.11.2023 14:51
        +1

        если сажать цветы - вполне


    1. TaPX
      27.11.2023 14:51

      А что сейчас используют вместо Modbus?


      1. mlnw
        27.11.2023 14:51
        +1

        CAN(/LIN)