Установка и обновление
Все команды на устройстве выполняются от имени root по SSH. В примерах <IP-адрес СА-02м> —
адрес вашего устройства, <пароль> — пароль администратора устройства.
Что ставится и куда
Заголовок раздела «Что ставится и куда»vPLC состоит из двух частей, которые ставятся отдельно:
- Рантайм — пакет
vplc_<версия>_armhf.deb(в репозитории —packaging/vplc_<версия>_armhf.deb). - Веб «ЦИНТРОН · Установка» — каталог файлов и служба
vplc-plant-ui. Ставится скриптомtools/deploy_plant.pyиз репозитория vPLC (см. раздел «Веб «ЦИНТРОН · Установка»» ниже).
| Путь на устройстве | Что это | Кто создаёт |
|---|---|---|
/usr/bin/vplc |
Исполняемый файл рантайма | Пакет |
/usr/lib/systemd/system/vplc.service |
Служба vplc |
Пакет |
/etc/vplc.conf.default |
Конфигурация по умолчанию | Пакет |
/etc/vplc.conf |
Рабочая конфигурация | Копируется из .default при первой установке, если файла нет |
/usr/lib/arm-linux-gnueabihf/libopen62541.so* |
Библиотека OPC UA | Пакет |
/var/lib/vplc/program.so |
Загруженная программа | Вы (загрузка программы) |
/var/lib/vplc/dump.bin |
Сохранённые значения переменных | Рантайм |
/var/lib/vplc/project.vplc |
Проект с картой MQTT (mqtt_io_map) и устройствами Modbus |
Рантайм при загрузке проекта |
/var/lib/vplc/plant_config.json |
Конфигурация объектов веба установки | Веб установки при первом сохранении настроек |
/opt/vplc-plant-ui/ |
Сервер и страницы веба, контракты, привязки bindings.json, журнал событий events.jsonl |
Скрипт выкладки веба |
/etc/systemd/system/vplc-plant-ui.service |
Служба веба установки | Скрипт выкладки веба |
/run/vplc-plant-ui/ui.sock |
Unix-сокет веба для маршрута панели /vplc/ |
Служба vplc-plant-ui при запуске |
/etc/systemd/system/vplc.service.d/10-rt.conf |
Дополнение службы: право на приоритет реального времени для скана | Вы (необязательно) |
Службы systemd
Заголовок раздела «Службы systemd»| Служба | Что запускает | Перезапуск при сбое | Журнал |
|---|---|---|---|
vplc |
/usr/bin/vplc --config /etc/vplc.conf от root |
Restart=on-failure, через 5 с |
journalctl -u vplc |
vplc-plant-ui |
python3 /opt/vplc-plant-ui/server.py от root, группа www-data |
Restart=on-failure, через 5 с |
journalctl -u vplc-plant-ui |
Служба vplc стартует после сети и брокера MQTT (After=network.target mosquitto.service).
Служба vplc-plant-ui стартует после vplc и брокера и подтягивает vplc (Wants=vplc.service).
После установки обе службы включены в автозапуск.
Установка рантайма
Заголовок раздела «Установка рантайма»-
Скопируйте пакет на устройство:
Окно терминала scp vplc_<версия>_armhf.deb root@<IP-адрес СА-02м>:/tmp/ -
Установите пакет и запустите службу:
Окно терминала ssh root@<IP-адрес СА-02м>dpkg -i /tmp/vplc_<версия>_armhf.debsystemctl enable --now vplcПакет создаёт каталоги
/var/lib/vplcи/var/log/vplc, копирует/etc/vplc.conf.defaultв/etc/vplc.conf(только если файла ещё нет) и включает службу в автозапуск. -
Настройте
/etc/vplc.conf— см. рекомендуемую конфигурацию. После правки файла перезапустите службу:Окно терминала systemctl restart vplc -
Необязательно: разрешите скану приоритет реального времени. Это нужно, если в
/etc/vplc.confзаданscan_rt_priorityбольше 0, а в журнале появляется строкаSCHED_FIFO priority N refused. Создайте дополнение службы:Окно терминала mkdir -p /etc/systemd/system/vplc.service.dcat > /etc/systemd/system/vplc.service.d/10-rt.conf <<'EOF'[Service]AmbientCapabilities=AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_SYS_NICEEOFsystemctl daemon-reloadsystemctl restart vplcjournalctl -u vplc -n 40 --no-pager | grep -E 'SCHED|scan_rt'После пуска скана (при
"scan_rt_priority": 10) ожидаемая строка:Scan thread tid N: SCHED_FIFO priority 10. Приоритет получает только поток скана; REST, MQTT и OPC UA остаются обычными потоками.
Веб «ЦИНТРОН · Установка»
Заголовок раздела «Веб «ЦИНТРОН · Установка»»Веб ставится с компьютера, на котором есть копия репозитория vPLC, Python 3 и SSH-клиент
(ssh/scp; либо модуль Python paramiko). Скрипт входит на устройство как root; пароль берёт
из переменной окружения SA02M_PASS.
-
Посмотрите план (ничего не записывает, печатает полный список файлов):
Окно терминала export SA02M_PASS='<пароль>'python3 tools/deploy_plant.py --host <IP-адрес СА-02м> -
Выложите веб:
Окно терминала python3 tools/deploy_plant.py --host <IP-адрес СА-02м> --apply
Что делает --apply:
- копирует страницы, сервер и файлы модели (контракты,
schema_gen.json,tags_gen.json,bindings.json) в/opt/vplc-plant-ui; - ставит или обновляет
/etc/systemd/system/vplc-plant-ui.service(прежний отличающийся файл сохраняется рядом какvplc-plant-ui.service.bak-<время>), выполняетdaemon-reload,enableиrestart vplc-plant-ui; - проверяет unix-сокет (тип, права
0660, владелецroot:www-data, каталог0750) и запросGET /через него; - не трогает nginx,
/etc/vplc.conf, брокер MQTT, порты RS-485,plant_config.jsonиdump.bin; - не перезаписывает
bindings.jsonна устройстве, если в нём уже есть привязки к топикам (чтобы заменить его копией из репозитория, добавьте--replace-bindings).
Веб доступен:
- напрямую:
http://<IP-адрес СА-02м>:8088/; - через панель устройства по пути
/vplc/— если ваша версия панели СА-02м содержит этот маршрут. Панель пропускает запросы только после входа.
Параметры запуска сервера (--host, --port, --socket, --plant-config и другие) описаны в
справочнике конфигурации.
Первый запуск и проверка
Заголовок раздела «Первый запуск и проверка»-
Проверьте службы:
Окно терминала systemctl status vplc vplc-plant-ui --no-pagerОбе должны быть
active (running). -
Проверьте рантайм:
Окно терминала curl -s http://127.0.0.1:1234/api/status | python3 -m json.toolВ ответе:
"version": "<версия сборки>";"state"—IDLE, если программа ещё не загружена, илиRUNNING, если программа загружена и запущена. -
Откройте в браузере:
Адрес Что должно быть http://<IP-адрес СА-02м>:1234/Встроенная страница рантайма: состояние, переменные, журнал http://<IP-адрес СА-02м>:8088/Веб «ЦИНТРОН · Установка» -
Проверьте журнал запуска:
Окно терминала journalctl -u vplc -n 30 --no-pagerОжидаемые строки:
vPLC runtime v… starting,Config loaded: …,REST+WS server on port 1234.
Загрузка программы
Заголовок раздела «Загрузка программы»Программа — файл program.so для armhf (для типовых установок — universal_armhf.so). Как
собрать свою программу — Программирование.
Через REST API
Заголовок раздела «Через REST API»curl -X POST http://<IP-адрес СА-02м>:1234/api/program/upload \ -H "Content-Type: application/octet-stream" \ --data-binary @universal_armhf.socurl -X POST http://<IP-адрес СА-02м>:1234/api/startЗагрузка останавливает скан, записывает файл в program_path (/var/lib/vplc/program.so) и
загружает программу. Скан после загрузки нужно запустить командой /api/start. Если сохранённые
значения переменных (dump.bin) принадлежат программе с тем же именем, они восстанавливаются.
Копированием файла
Заголовок раздела «Копированием файла»scp universal_armhf.so root@<IP-адрес СА-02м>:/var/lib/vplc/program.so.newssh root@<IP-адрес СА-02м>curl -s -X POST http://127.0.0.1:1234/api/dump/savemv -f /var/lib/vplc/program.so.new /var/lib/vplc/program.socurl -s -X POST http://127.0.0.1:1234/api/program/reload/api/program/reload перечитывает программу с диска; если скан работал, он запускается снова.
Перед перезагрузкой программы сохраните переменные (/api/dump/save): при перезагрузке значения
берутся из dump.bin, несохранённые изменения теряются.
Из VS Code
Заголовок раздела «Из VS Code»Команда vPLC: Compile & Deploy (Ctrl+Shift+D в редакторе ST) компилирует проект, загружает
.vplc и .so через REST и запускает скан — см. Программирование.
Вместе с вебом
Заголовок раздела «Вместе с вебом»python3 tools/deploy_plant.py --host <IP-адрес СА-02м> --apply --so universal_armhf.soСкрипт сохраняет прежний program.so как program.so.bak-before-universal (если такая копия уже
есть — с меткой времени), заменяет файл и вызывает /api/program/reload.
Пуск после перезагрузки устройства
Заголовок раздела «Пуск после перезагрузки устройства»Чтобы после перезагрузки СА-02м программа загружалась и запускалась сама, задайте в
/etc/vplc.conf "autostart": true (по умолчанию false) и перезапустите службу.
Карта ввода-вывода
Заголовок раздела «Карта ввода-вывода»Для работы с модулями рантайму нужен ещё проект .vplc с картой mqtt_io_map: в program.so карты
нет. Для программы universal проект строит и загружает веб установки кнопкой «Применить в ПЛК» в
окне «Карта I/O» — см. Настройка установки. Свой проект можно загрузить
вручную:
curl -X POST http://<IP-адрес СА-02м>:1234/api/project/upload --data-binary @project.vplccurl -X POST http://<IP-адрес СА-02м>:1234/api/program/reloadПроект — файл SQLite размером до 8 МБ. Если project_path в конфигурации пуст, рантайм сохраняет
проект в /var/lib/vplc/project.vplc и сам записывает этот путь в /etc/vplc.conf.
Резервные копии
Заголовок раздела «Резервные копии»Перед любым обновлением сохраните переменные и сделайте копию:
curl -s -X POST http://127.0.0.1:1234/api/dump/saveB=/var/lib/vplc/backup-$(date +%Y%m%d-%H%M%S)mkdir -p "$B"cp -a /var/lib/vplc/program.so /var/lib/vplc/dump.bin "$B"/cp -a /var/lib/vplc/project.vplc /var/lib/vplc/plant_config.json "$B"/ 2>/dev/nullcp -a /etc/vplc.conf /usr/bin/vplc "$B"/cp -a /opt/vplc-plant-ui "$B"/opt-vplc-plant-uils -la "$B"| Что сохранено | Зачем |
|---|---|
program.so |
Откат программы |
dump.bin |
Значения параметров и уставок, состав установки, наработки |
project.vplc |
Карта ввода-вывода (MQTT) |
plant_config.json |
Объекты, счётчики, тарифы, расписания веба |
vplc.conf |
Конфигурация рантайма |
vplc |
Откат исполняемого файла рантайма |
opt-vplc-plant-ui/ |
Веб, в том числе привязки bindings.json и журнал событий events.jsonl |
Обновление
Заголовок раздела «Обновление»Рантайм
Заголовок раздела «Рантайм»-
Сделайте резервную копию.
-
Установите новый пакет и перезапустите службу:
Окно терминала dpkg -i /tmp/vplc_<версия>_armhf.debsystemctl restart vplc
Перед заменой файлов пакет останавливает службу (при остановке работающий рантайм сам сохраняет
переменные в dump.bin); после установки служба только включается в автозапуск, поэтому
systemctl restart vplc обязателен. Файлы /etc/vplc.conf и /var/lib/vplc/* при обновлении не
перезаписываются.
Проверка: curl -s http://127.0.0.1:1234/api/status — поле version.
Программа
Заголовок раздела «Программа»Загрузите новый program.so любым способом из раздела Загрузка программы.
Переменные восстанавливаются из dump.bin, если имя программы не изменилось (у universal оно
всегда universal).
Повторите python3 tools/deploy_plant.py --host <IP-адрес СА-02м> --apply. Привязки
bindings.json с топиками и plant_config.json сохраняются. Старые файлы первой поставки
(app.js, style.css, setup_*.js в корне /opt/vplc-plant-ui) переносятся в
/opt/vplc-plant-ui/_old-<дата>/.
Сначала остановите рантайм: при остановке он записывает dump.bin, и восстановленная копия иначе
будет перезаписана.
systemctl stop vplcB=/var/lib/vplc/backup-<метка>cp -a "$B"/vplc /usr/bin/vplccp -a "$B"/vplc.conf /etc/vplc.confcp -a "$B"/program.so /var/lib/vplc/program.socp -a "$B"/dump.bin /var/lib/vplc/dump.bincp -a "$B"/project.vplc /var/lib/vplc/project.vplc 2>/dev/nullsystemctl start vplcОткат только программы — без остановки службы:
cp -a /var/lib/vplc/program.so.bak-<метка> /var/lib/vplc/program.socurl -s -X POST http://127.0.0.1:1234/api/program/reloadОткат веба: верните файлы из "$B"/opt-vplc-plant-ui/ в /opt/vplc-plant-ui/ и выполните
systemctl restart vplc-plant-ui. Прежний файл службы — /etc/systemd/system/vplc-plant-ui.service.bak-<время>
(после замены — systemctl daemon-reload).
Чтобы заменить работающий исполняемый файл без пакета, положите новый файл рядом
(/usr/bin/vplc.new) и переименуйте его командой mv, а не копируйте cp поверх работающего файла:
scp vplc root@<IP-адрес СА-02м>:/usr/bin/vplc.new # на компьютереcp -a /usr/bin/vplc /usr/bin/vplc.bak-$(date +%Y%m%d-%H%M%S)mv -f /usr/bin/vplc.new /usr/bin/vplcsystemctl restart vplcУдаление
Заголовок раздела «Удаление»systemctl disable --now vplc-plant-uirm /etc/systemd/system/vplc-plant-ui.servicesystemctl daemon-reloaddpkg -r vplcdpkg -r останавливает службу vplc и выключает её автозапуск. Не удаляются (их создаёт не пакет):
/etc/vplc.conf, /var/lib/vplc/ (программа, переменные, проект, plant_config.json, резервные
копии), /opt/vplc-plant-ui/, /etc/systemd/system/vplc.service.d/. Если они больше не нужны,
сделайте копию и удалите их вручную.
Сосуществование с MPLC4
Заголовок раздела «Сосуществование с MPLC4»vPLC ставится рядом с MPLC4 и не мешает ему:
- порты REST (1234) и веба (8088) не пересекаются с портами MPLC4;
- обе среды подключаются к общему брокеру MQTT
127.0.0.1:1883со своими идентификаторами клиента; - vPLC не открывает порты RS-485, модули опрашивает мост панели;
- Modbus TCP slave vPLC по умолчанию выключен; если включаете — на порту 1502, не 502;
- OPC UA vPLC по умолчанию выключен; порт 4840 оставьте для CODESYS, для vPLC используйте 4842.
Облегчённый профиль служб (ниже) отключает MPLC4. Если MPLC4 нужен, не применяйте профиль или
верните службы ключом --undo.
Облегчённый профиль служб СА-02м
Заголовок раздела «Облегчённый профиль служб СА-02м»Скрипт tools/sa02m_lite_services.sh отключает службы СА-02м, которые не нужны vPLC и вебу
установки, чтобы освободить память и процессор. Запускается на устройстве от root.
| Режим | Команда | Что делает |
|---|---|---|
| Отчёт | bash sa02m_lite_services.sh |
Ничего не меняет: показывает загрузку, память, состояние служб и список к отключению |
| Применить | bash sa02m_lite_services.sh --apply |
Отключает (disable --now + mask) службы из списка, записывает их в /var/lib/sa02m-lite/disabled |
| Вернуть | bash sa02m_lite_services.sh --undo |
Снимает mask и включает (enable --now) все службы из /var/lib/sa02m-lite/disabled |
| Удалить пакеты | bash sa02m_lite_services.sh --apply --purge |
Дополнительно удаляет пакеты — необратимо без переустановки |
Запуск с компьютера без копирования файла:
ssh root@<IP-адрес СА-02м> 'bash -s' < tools/sa02m_lite_services.sh # отчётssh root@<IP-адрес СА-02м> 'bash -s -- --apply' < tools/sa02m_lite_services.sh # применитьssh root@<IP-адрес СА-02м> 'bash -s -- --undo' < tools/sa02m_lite_services.sh # вернутьЧто отключается (если служба есть на устройстве и включена или запущена):
| Группа | Службы |
|---|---|
| Облако и умный дом | sa02m-cloud-agent, sa02m-cloud-frpc, sa02m-cloud-control, sa02m-alice-client, sa02m-homekit, sa02m-homeconnect |
| Сценарии, телеметрия, шлюз | sa02m-rules, sa02m-telemetry, sa02m-serial-gateway, sa02m-kernel-service-guard |
| Другие среды исполнения | mplc4, codesys, codesyscontrol, codemeter, codemeter-webadmin, nodered, node-red, docker (служба и сокет), containerd |
| Прочее | ModemManager, lighttpd, postfix |
| Таймеры | sa02m-web-update-check, man-db, dpkg-db-backup, lighttpd-maint, e2scrub_all |
Кроме того, --apply увеличивает интервал проверки CHECK_INTERVAL до 30 с и убирает mplc4 из
списков в конфигурации sa02m-failure-monitor и sa02m-userspace-watchdog (если файлы есть) и
перезапускает эти службы.
Что не трогается: mosquitto, nginx, chrony, ssh, сеть и net-watchdog,
sa02m-modbus-mqtt, sa02m-devices-*, sa02m-flasher, sa02m-agent-api, sa02m-rs485-roster,
udev и порты COM, часы RTC, службы vplc*, службы загрузки и оборудования СА-02м.
С --purge удаляются пакеты docker.io, containerd, runc, nodejs, node-red,
codemeter-lite, codemeter, zsh, aptitude, aptitude-common, mc, git, python3-pip,
btrfs-progs и каталоги /opt/mplc4, /opt/vendor-installers/*.
Ожидаемый эффект — освобождение оперативной памяти: занятая память снижается примерно со 157 до 70–90 МБ, нагрузка служб надзора и MPLC4 на процессор — в несколько раз.
Минимальные требования к ресурсам
Заголовок раздела «Минимальные требования к ресурсам»| Ресурс | Значение |
|---|---|
| Процессор | ARMv7 (armhf). Паспорт изделия — СА-02м |
| Оперативная память рантайма | Несколько мегабайт: 2,5–5 МБ резидентной памяти без программы или с тестовой программой |
| Процессор рантайма | Около 0,5–6 % одного ядра без программы или с тестовой программой |
Скан программы universal |
При периоде 100 мс на СА-02м: 95-й процентиль около 12 мс, максимум около 20 мс (поток скана с scan_rt_priority 10) |
| Диск | Пакет — около 0,6 МБ; веб — около 160 файлов в /opt/vplc-plant-ui |
| Программное окружение | Python 3 для веба; брокер MQTT и мост панели для модулей; NTP для расписаний |
Памяти СА-02м достаточно, если на устройстве не включена компиляция программ. Компилятор на СА-02м не нужен: программы собираются на компьютере.