Программирование контроллера Wiren Board с помощью CODESYS
Общая информация
CODESYS — это инструментальный программный комплекс промышленной автоматизации, который позволяет писать программы на языках МЭК(IEC) 61131-3: FBD, ST, LD, SFC.
Чтобы использовать CODESYS с контроллером Wiren Board, требуется приобрести необходимые лицензии, иначе можно будет работать только в демо-режиме, что актуально только для ознакомления с продуктом.
В демонстрационном режиме программное обеспечение работает без лицензии в течение двух часов. После этого требуется ручной перезапуск. Лицензия распространяется на одно устройство: лицензию можно использовать на целевом устройстве/ПЛК, на котором установлена исполнительная система CODESYS.
Какие лицензии необходимы? Есть несколько вариантов использования исполнительной системы CODESYS на контроллере Wiren Board:
- Реализация с доступом к MQTT-брокеру контроллера. В этом случае будет максимальная интеграция с контроллером, т.к. все сервисы контроллера общаются между собой по общей «шине», в роли которой и выступает MQTT-брокер. Необходимы следующие лицензии:
- базовая лицензия CODESYS Control Basic S или выше. Выбирать в зависимости от дополнительных требований системы;
- пакет CODESYS IIoT Libraries SL.
- Реализация с использованием протокола Modbus RTU. В этом случае будет интеграция с контроллером только для работы с шиной RS-485. Необходима следующая лицензия:
- базовая лицензия CODESYS Control Basic M или выше. Выбирать в зависимости от дополнительных требований системы.
CODESYS — это сторонний продукт, за технической поддержкой обращайтесь к производителю ПО.
Установка
Процесс установки среды разработки и необходимых пакетов:
- Скачать CODESYS Development System V3, установить и запустить.
- Перейти в меню Tools → CODESYS Installer. Закрыть CODESYS Development System V3.
- В панели Add-ons перейти во вкладку Browse. Ввести в поисковой строке CODESYS Control for Linux ARM и отметить для установки пакет CODESYS Control for Linux ARM64 SL (для Wiren Board 8) или CODESYS Control for Linux ARM SL (для Wiren Board 6, 7). Автоматически будут выбраны зависимости: CODESYS Control SL Deploy Tool, CODESYS Edge Gateway for Linux, CODESYS Control SL Extension Package.
- Нажать кнопку Install Selected. В открывшемся окне подтвердить действие — OK. Далее принять лицензионное соглашение — Continue.
- Установка пакетов для работы с контроллером Wiren Board
Процесс установки исполнительной системы на контроллер Wiren Board:
- Запустить CODESYS Development System V3.
- Перейти в меню Tools → Update Linux ARM64 для WB8. Для WB6 и WB7 выбрать Update Linux ARM.
- В открывшейся панели Linux ARM64 ввести:
- User name — root,
- Password — ssh пароль,
- IP address — IP-адрес контроллера.
- Нажать кнопку Install.
- Установка исполнительной среды на контроллер Wiren Board
Среда разработки настроена, исполнительная система установлена на контроллер, можно переходить к разработке.
Создание проекта
Процесс создания проекта:
- Выбрать в меню File → New Project.
- В настройках проекта указать:
- Device — CODESYS Control for Linux ARM64 SL для WB8. Для WB6 и WB7 выбрать CODESYS Control for Linux ARM SL.
- PLC_PRG in — предпочитаемый язык разработки.
- Перейти в Devices. Двойным нажатием выбрать Devices (CODESYS Control for Linux ARM64 SL). Перейти во вкладку Scan Network и выбрать контроллер.
- Авторизоваться.
- Создание проекта
Пример работы через MQTT
Создадим минимальный проект для демонстрации использования контроллера Wiren Board с CODESYS. Допустим, нам необходимо управлять включением/выключением нагрузкой с помощью кнопки без фиксации. Нажатие на первую кнопку должно включать нагрузку, на вторую - выключать. Управлять нагрузкой будем с помощью модуля WB-MR6C v.3. Для программирования будем использовать язык FBD.
Подготовка:
- Запустить CODESYS Installer и установить IIoT Libraries SL.
- Добавить библиотеку MQTT Client SL.
- Если есть недостающие библиотеки, то загрузить их.
- Добавить в проект новый объект Action.
- Создание проекта
Определение переменных:
PROGRAM PLC_PRG
VAR
MQTTClient: MQTT.MQTTClient;
MQTTPub_K1: MQTT.MQTTPublish;
MQTTSub_In1: MQTT.MQTTSubscribe;
MQTTSub_In2: MQTT.MQTTSubscribe;
//MQTT Client
xEnable : BOOL;
wsUsername : WSTRING;
wsPassword : WSTRING;
uiPort : UINT := 1883;
eMQTTVersion : MQTT.MQTT_VERSION := MQTT.MQTT_VERSION.V3_1_1;
sHostname : STRING(255) := 'localhost';
//MQTT Publisher
xPublish_K1 : BOOL;
sPayload_K1 : STRING;
wsTopic_K1 : WSTRING(1024) := "/devices/wb-mr6cv3_1/controls/K1/on";
//MQTT Subscriber
xSubscribe : BOOL;
sPayloadSub_In1 : STRING;
sPayloadSub_In2 : STRING;
wsTopicSub_In1 : WSTRING(1024) := "/devices/wb-mr6cv3_1/controls/Input 1";
wsTopicSub_In2 : WSTRING(1024) := "/devices/wb-mr6cv3_1/controls/Input 2";
// MAIN ROUNTINE
R_TRIG_On: R_TRIG;
R_TRIG_Off: R_TRIG;
RS_On: RS;
RS_Off: RS;
END_VAR
Настройка MQTT-клиента:
Алгоритм управления:
В данном примере мы подписываемся на топики входов модуля: "/devices/wb-mr6cv3_1/controls/Input 1" и "/devices/wb-mr6cv3_1/controls/Input 2" и после отработки алгоритма публикуем сообщение на включение/выключение нагрузки в топик "/devices/wb-mr6cv3_1/controls/K1/on".
Логика работы:
- Замыкание входа 1 приводит к замыканию реле К1.
- Замыкание входа 2 приводит к размыканию реле К1.
Пример работы через Modbus RTU
Зададимся той же задачей, что и в примере выше с MQTT-клиентом.
Подготовка
Для корректной работы портов необходимо их настроить. В конфигурационный файл /etc/codesyscontrol/CODESYSControl.cfg
прописать порты:
[SysCom]
Linux.Devicefile.1=/dev/ttyRS485-1
Linux.Devicefile.2=/dev/ttyRS485-2
По умолчанию порты контроллера заняты и работают через свой драйвер wb-mqtt-serial, поэтому используемые порты в исполнительной системе CODESYS необходимо отключить через веб-интерфейс контроллера.
Перезагрузить сервисы:
systemctl restart codesyscontrol.service
systemctl restart codesysedge.service
Добавление Modbus-устройства:
- Добавить устройство Modbus COM. Указать параметры порта.
- Добавить устройство Modbus-master (Client).
- Добавить устройство Modbus-slave (Server). Указать адрес устройства.
- Добавить необходимые каналы. Сопоставить каналы с переменными программы.
- Добавление Modbus-устройства
Алгоритм управления:
В данном примере мы считываем состояния входов из Discrete input регистров (Вход 1 и Вход 2) и после отработки алгоритма записываем в Coil регистр (Канал 1) необходимое состояние реле K1.
Логика работы:
- Замыкание входа 1 приводит к замыканию реле К1.
- Замыкание входа 2 приводит к размыканию реле К1.
Карта регистров используемого модуля.
Полезные ссылки
- Сайт CODESYS
- Тема на портале поддержки МЭК 61131-3, ST, CoDeSys & Co
- Примеры проектов: WB_CODESYS.zip