К содержанию
Меню

Обзор vPLC

В дереве документирован только ST. Языков LD, FBD и SFC в этом руководстве нет.

vPLC — программный (виртуальный) контроллер стандарта IEC 61131-3 для сервера автоматизации СА-02м. Он выполняет прикладную программу на языке Structured Text (ST, МЭК 61131-3) с постоянным периодом скана и обменивается данными с полевыми устройствами и внешними системами по MQTT, Modbus TCP, OPC UA и REST.

vPLC работает как обычная служба Linux рядом с остальным программным обеспечением СА-02м: веб-панелью устройства, брокером MQTT, мостом Modbus RTU → MQTT и, при необходимости, средой MPLC4.

Для кого этот продукт:

Роль Что делает с vPLC
Оператор объекта Смотрит состояние установки, пускает и останавливает её, меняет уставки и квитирует аварии в веб-интерфейсе «ЦИНТРОН · Установка»
Наладчик Устанавливает пакет, задаёт состав установки, привязывает входы и выходы модулей, проверяет работу
Программист ПЛК Пишет программы на ST в VS Code, компилирует и загружает их в рантайм
Интегратор Подключает SCADA, облако и другие системы через REST, Modbus TCP, MQTT, OPC UA

Рантайм ведёт скан программы universal, веб «ЦИНТРОН · Установка» показывает мнемосхему и уставки, справочник аварий — 64 бита, включая пожар и защиту калорифера от замерзания.

Компонент Что это Где работает
Рантайм vplc Служба на C++17: цикл скана, загрузка программы, хранилище переменных, сохранение переменных (dump), REST/WebSocket/SSE, встроенная страница мониторинга, Modbus TCP slave и master, MQTT, OPC UA СА-02м, служба vplc
Компилятор ST Конвейер .vplc → program.so: MATIEC (iec2c) переводит ST в C, кросс-компилятор GCC собирает разделяемую библиотеку для ARM (armhf). Запускается в Docker или локально Компьютер разработчика
Расширение VS Code Редактор проекта и ST с подсветкой, команды «Compile & Deploy», пуск/стоп, монитор переменных Компьютер разработчика
Веб «ЦИНТРОН · Установка» Сервер на Python 3 (server.py) и страницы: мнемосхема, окна «Установка», «Параметры», «Аварии», журналы, энергопотребление, настройки, карта I/O СА-02м, служба vplc-plant-ui
Программа universal Готовая прикладная программа для пяти типов установок, переключается без перекомпиляции Загружается в рантайм как program.so

Одна программа содержит пять типов установок. В скане активен один тип — его выбирает переменная PlantType:

PlantType Тип установки
1 Вентиляция (приточная, вытяжная, приточно-вытяжная — задаётся UnitType 0/1/2)
2 Освещение
3 ИТП / отопление
4 Водоснабжение и насосы
5 Холодоснабжение

Период скана программы — 100 мс. По умолчанию включена встроенная модель объекта (SimEnable = TRUE): входы ведёт модель, реальные датчики не нужны. Для работы с реальным оборудованием модель выключают и привязывают входы и выходы к каналам модулей — см. Настройка установки.

Модули на RS-485 опрашивает мост панели СА-02м. Мост публикует каналы в брокер MQTT; рантайм vPLC читает входы из топиков и пишет выходы обратно. Веб «ЦИНТРОН · Установка» ходит в REST рантайма на порту 1234. Панель СА-02м может открывать веб установки по маршруту /vplc/ через unix-сокет. Внешние системы подключаются к REST, Modbus TCP, MQTT и OPC UA.

Порядок одного цикла скана:

  1. Входы: значения из MQTT, регистры, записанные клиентами Modbus, данные опрашиваемых устройств Modbus копируются в переменные программы.
  2. Выполняется код программы (plc_run).
  3. Выходы: изменившиеся переменные публикуются в MQTT, записываются в регистры Modbus slave и в опрашиваемые устройства, рассылаются подписчикам WebSocket/SSE. Узлы OPC UA обновляет отдельный поток сервера OPC UA.

Период скана задаётся от 1 до 60 000 мс. Если скан не укладывается в период, рантайм считает это перегрузкой (overrun) и пишет предупреждение в журнал.

Модули МР-02м и другие устройства на шине RS-485 опрашивает мост Modbus RTU → MQTT панели СА-02м — он единственный владелец портов RS-485. vPLC порты COM не открывает: входы читает из топиков /devices/<id>/controls/<name>, команды выходам публикует в /devices/<id>/controls/<name>/on без флага retain. Соответствие топиков переменным задаёт карта mqtt_io_map проекта .vplc; для программы universal её строит веб установки по привязкам из окна «Карта I/O».

Рантайм следит за качеством входов: если сообщений нет дольше заданного времени (по умолчанию 125 с), устройство помечено мостом как неисправное или потеряна связь с брокером, признак качества входа сбрасывается. Связь с брокером и с мостом программа видит в переменных MQTT_ok и BRIDGE_ok.

  • vPLC и веб установки — отдельные службы systemd (vplc, vplc-plant-ui); конфигурацию панели и nginx они не меняют.
  • Общий брокер MQTT панели (127.0.0.1:1883) используется для обмена с модулями.
  • Веб установки слушает TCP-порт 8088 и unix-сокет /run/vplc-plant-ui/ui.sock. Через сокет его открывает панель по маршруту /vplc/ (в версиях панели, где этот маршрут есть) — с входом и проверкой сессии панели.
  • Панель СА-02м работает на порту 9999. Порт 80 веб установки не занимает: на устройстве его могут использовать другие службы.

vPLC работает параллельно с MPLC4. Порты vPLC с портами MPLC4 не пересекаются, порты RS-485 MPLC4 не занимает. Обе среды могут обмениваться данными через общий брокер MQTT, каждая со своим идентификатором клиента. Чтобы не мешать другим средам на СА-02м:

  • Modbus TCP slave vPLC не включайте на порту 502 — используйте 1502;
  • OPC UA vPLC не включайте на порту 4840 (зарезервирован для CODESYS) — используйте 4842 или оставьте OPC UA выключенным.

Подробнее — Установка и обновление.

Интерфейс Что даёт По умолчанию
REST API Состояние, переменные (чтение с фильтром и запись), загрузка программы и проекта, пуск/стоп/перезапуск, конфигурация, журнал, сохранение и восстановление переменных, состояние MQTT и Modbus Включён, порт 1234
WebSocket /ws/variables — поток значений переменных, /ws/logs — поток журнала Порт 1234
SSE /api/events/variables — поток переменных, /api/events/status — состояние примерно раз в секунду Порт 1234
Встроенная страница http://<IP-адрес СА-02м>:1234/ — состояние, переменные, журнал Порт 1234
Modbus TCP slave Регистры и катушки для SCADA. Режим packed (автоматическая раскладка переменных) или mp02 (карта адресов, совместимая с контроллером MP-02) Выключен
Modbus master Опрос устройств Modbus TCP/RTU (чтение и запись holding-регистров, функции 3 и 16) Нет устройств
MQTT Входы и выходы по карте mqtt_io_map, собственное дерево устройства /devices/<mqtt_client_id>/…, запись переменных через …/controls/<имя>/on Выключен
OPC UA Сервер open62541, все переменные — узлы ns=2;s=<имя> Выключен

Описание протоколов — Интеграция: REST, Modbus, MQTT, OPC UA.

Порт Служба Назначение Примечание
1234/TCP vplc REST, WebSocket, SSE, встроенная страница Слушает все интерфейсы
502/TCP vplc Modbus TCP slave Выключен; на СА-02м рекомендуется 1502
4840/TCP vplc OPC UA Выключен; на СА-02м рекомендуется 4842
1883/TCP брокер панели MQTT (vPLC — клиент) 127.0.0.1
8088/TCP vplc-plant-ui Веб «ЦИНТРОН · Установка» Плюс unix-сокет /run/vplc-plant-ui/ui.sock
Требование Значение
Устройство Сервер автоматизации СА-02м. Паспорт изделия — на странице устройства
Варианты устройства СА-02м и СА-02м-2. Какое исполнение стоит в щите, смотрите на странице устройства
ОС Armbian (Ubuntu 24.04 noble), архитектура armhf; пакет vPLC — .deb для armhf
Зависимости пакета libc6, libstdc++6, libmodbus5, libpaho-mqtt1.3, libsqlite3-0; библиотека OPC UA open62541 входит в пакет
Для модулей ввода-вывода Модули МР-02м на шине RS-485, брокер MQTT и мост Modbus RTU → MQTT панели СА-02м
Для веба установки Python 3 на устройстве
Время Синхронизация часов (NTP) и часовой пояс: по местному времени работают расписания и учёт энергии по суткам
Для разработки программ Компьютер с VS Code и Docker (или Linux с кросс-компилятором armhf)

Ресурсы — Установка и обновление.

  • Поле version в GET /api/status и строка журнала vPLC runtime v… starting показывают версию той сборки, которая установлена на устройстве.
  • Лицензия кода vPLC — MIT, правообладатель — CYNTRON.
  • Вместе с рантаймом: Mongoose (HTTP/WebSocket; GPL-2.0-only или коммерческая лицензия Cesanta), open62541 (OPC UA), Eclipse Paho (MQTT). Блоки OSCAT в библиотеке lib/devices — по лицензии OSCAT в том сабмодуле.