Обзор vPLC
This page is not translated yet. The text below is the Russian source. Facts are unchanged.
В дереве документирован только 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 |
Программа universal
Заголовок раздела «Программа universal»Одна программа содержит пять типов установок. В скане активен один тип — его выбирает переменная
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.
Порядок одного цикла скана:
- Входы: значения из MQTT, регистры, записанные клиентами Modbus, данные опрашиваемых устройств Modbus копируются в переменные программы.
- Выполняется код программы (
plc_run). - Выходы: изменившиеся переменные публикуются в 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.
Рядом с панелью СА-02м
Заголовок раздела «Рядом с панелью СА-02м»- 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 веб установки не занимает: на устройстве его могут использовать другие службы.
Рядом со средой MPLC4
Заголовок раздела «Рядом со средой MPLC4»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 в том сабмодуле.