Агент позволяет передавать переменные программы и другие данные из одного
места в другое. Например, есть группа контроллеров CX8090. На отдельном ПК
устанавливается
TC3 IoT Data Agent. Он настраивается на проброс данных через интернет на сервер-брокер MQTT. Из
брокера данные забираются в базу данных. Позже аналитики анализируют, а
сервисный отдел мониторит и бдит. Версия TwinCAT, разрядность и тип процессора, древность контроллеров — все это не важно. Переменные из контроллера можно передавать куда угодно, в обе стороны.
Изображение: Beckhoff Automation
Современные протоколы типа MQTT–AMQTT–RabbitMQ не требуют входящего
подключения. Агент и контроллеры могут находится за NAT, файерволом или другой
сетевой инфраструктурой. IP-адрес может быть серым и динамическим, но
подключение к брокеру всегда исходящее. Поэтому переменные контроллера легко
отдавать и легко забирать. В обе стороны.
Лицензии
Для ПК, на котором установливается Агент, необходимы минимум две лицензии:
TC1000 | TC3 ADS и
TF6720 | TC3 IoT Data Agent.
Доступна пробная лицензия на 7 дней.
Лицензирование основано на группах порталов. Порталы объединяются в пакеты
(Gate packs). Порталом называют одно подключение. Например, подключение к
устройству через ADS или OPC UA. Лицензия TF6720 обеспечивает работу с
четырьмя порталами. Большее количество порталов можно получить после покупки
дополнительных лицензий (TF6721-TF6724). Количество порталов складываются:
TF6720 + TF6721 = 8 порталов.
Принципы работы
Open local, Save local работают со схемой в локальной конфигурации Агента
C:\TwinCAT\3.1\Boot\TcIotDataAgentConfig.xml. Эта схема будет использована при старте Агента на этом локальном ПК. Во
время работы рядом будет лежать лог TcIotDataAgent.log. По нему
можно проводить диагностику работы Агента.
Open file, Save file импорт/экспорт схемы из отдельного файла.
С помощью кнопки "активировать конфигурацию", можно активировать схему на
удаленном контроллере. На кнопке изображена традиционная горка кубиков (Save
to selected target and activate).
В окне `Topology` создаем схему передачи данных. Нужно запомнить
два простых принципа: создаем правой кнопкой мыши (ПКМ), а затем соединяем
элементы с помощью Ctrl + тащим и бросаем. Например:
-
ПКМ по пустому месту → Add Gate (ADS) → получился круг — это ADS-портал,
ведущий к переменным контроллера.
-
Затем, ПКМ → Add Gate (MQTT) → появилось облако — это брокер MQTT,
источник данных.
-
ПКМ ADS портал → Add Channel (Subscriber) → создается
подписчик (subscriber) в виде прямоугольника. Стрелка вниз 🡇
указывает направление подключения.
-
ПКМ Подписчик → Add Symbol → добавляется новая переменная (symbol) для
чтения из контроллера. Можно сделать проще: открыть окно `Target Browser`, перетащить и бросить переменную на "подписчика".
Схему можно создавать и редактировать через другие окна программы. Исследуйте
их. Выберите удобный способ работы с программой.
Аналогично поступаем с порталом MQTT Broker, где вместо `Add Gate` доступен `Add Channel`. Брокер работает не с переменными, а с
каналами. Через них идут потоки переменных.
Дальше тащим прямоугольник подписчика ADS: Ctrl + левая клавиша мыши (ЛКМ).
Бросаем его на прямоугольник канала MQTT. Между элементами появляются связи.
Настройки всех элементов собраны в окне `Properties`.
Пример программы
Необходимо проработать четыре момента:
-
ПЛК программу как источник данных. Подойдет любая версия TwinCAT. Я брал как
вторую, так и третью версию TwinCAT. Меняется номер порта ADS 801 → 851, но
принципы создания схемы остается прежним.
- Создать схему передачи данных для Агента.
- Выбрать MQTT брокер данных.
-
Создать клиента для брокера MQTT. Я напишу простую программу на C#. Она
будет читать данные из брокера. Здесь можно воспользоваться готовыми
клиентами MQTT и запустить их на смартфоне.
ПЛК программа примитивная:
PROGRAM MAIN
VAR
iCount: INT;
rCount: REAL;
END_VAR
iCount := iCount + 1;
rCount := rCount + 0.1;
Схема Агента
Пора выбрать бесплатного брокера на тестирование. Мне понравился
HiveMQ. Кроме него проверил Mosquitto. Он работал, но
значительно медленнее.
Пришло время создать схему:
Разбивка по каналам позволяет устанавливать единые сетевые настройки для
нескольких переменных сразу. Можно создать один единственный канал и
транслировать в нем сразу несколько переменных. Чтобы было интереснее, я
разбил трансляцию от брокера на два канала (см. картинку выше, правая часть):
-
Ads_Mqtt_11_19 — транслирует переменную
MAIN.rCount;
-
Ads_Mqtt_11_17 — передает целое число из переменной
MAIN.iCount.
Внутри канала данные брокера можно раскидать по темам (Topic). Это
настраивается в окне `Properties`. Например, пусть `rCount` как
бы передается из жилой комнаты
GOT/TWINCAT/ROOM, а переменная
`iCount` приходит из офиса
GOT/TWINCAT/OFFICE. В клиенте
брокера я смогу выбрать или одну конкретную, интересующую меня тему, или сразу
несколько тем. Темы фильтруются с помощью спец. символов `*`, `?` или `#`.
Например, я хочу в одном канале получать данные ROOM+OFFICE: GOT/TWINCAT/#.
Клиент брокера
Для C# я использовал библиотеку
MQTTnet. Она
легко устанавливается из
NuGet.
Раскомментируйте строку и подставьте название своего топика-комнаты в
константу `MQTT_TOPIC`.
Результат работы клиента:
Одновременно я установил на телефон бесплатный клиент `MQTT Dash` и он
также смог отображать данные с ПЛК. Трансляция идет через интернет, можно
сходить на обед и одним глазом посматривать как контроллер продолжает
работать: