OpenPLC

Hardware & Industrial v4.1.8 · 03.07.2026 активный

Открытая программная реализация ПЛК (Programmable Logic Controller). Поддерживает все 5 языков IEC 61131-3: Ladder Diagram, ST, FBD, IL, SFC. Запускается на Linux/Raspberry Pi. Используется security-исследователями для создания тестовых ICS-окружений и изучения атак на ПЛК.

v4.1.8
03.07.2026 current
Добавлен 13.07.2026 · Обновлён 13.07.2026 · Hardware & Industrial
Установка
git clone https://github.com/Autonomy-Logic/openplc-runtime
cd openplc-runtime && sudo ./install.sh
./openplc  # REST API на :8443 — не браузерный UI
# Подключаться через десктопное приложение OpenPLC Editor
переведено ИИ

OpenPLC Runtime v4

OpenPLC Runtime v4 — это серверная среда выполнения промышленных программно-логических контроллеров (ПЛК), предназначенная для запуска программ стандарта IEC 61131-3 на стандартном вычислительном оборудовании. Она разработана для управления через приложение OpenPLC Editor v4 с помощью REST API или через Autonomy Edge Cloud.

Компоненты OpenPLC Runtime

OpenPLC Runtime v4 состоит из двух основных компонентов:

  1. Сервер REST API (Python/Flask) — интерфейс HTTPS на порту 8443 для приложения OpenPLC Editor, позволяющий загружать программы, отслеживать компиляцию и управлять выполнением.
  2. Ядро среды выполнения ПЛК (C/C++) — реалтайм-движок выполнения с детерминированными циклами сканирования.

Среда выполнения исполняет программы, созданные в OpenPLC Editor, поддерживая языки программирования IEC 61131-3 (логические диаграммы, структурированный текст, блок-схемы функций и т.д.).

Быстрый старт

Docker (Рекомендуемый способ)

Самый быстрый способ начать работу:

docker pull ghcr.io/autonomy-logic/openplc-runtime:latest

docker run -d \
  --name openplc-runtime \
  -p 8443:8443 \
  --cap-add=SYS_NICE \
  --cap-add=SYS_RESOURCE \
  -v openplc-runtime-data:/var/run/runtime \
  ghcr.io/autonomy-logic/openplc-runtime:latest

Среда выполнения запустится и будет слушать соединения от OpenPLC Editor на порту 8443. Не открывайте https://localhost:8443 в браузере — в отличие от среды выполнения v3, здесь нет веб-интерфейса. Вместо этого откройте приложение OpenPLC Editor для настольных компьютеров и настройте IP-адрес среды выполнения и учетные данные для подключения.

Предварительно собранные бинарные файлы: amd64, arm64, armv7

Установка в Linux

Для нативной установки в Linux:

# Clone repository
git clone https://github.com/Autonomy-Logic/openplc-runtime.git
cd openplc-runtime
git checkout development

# Install dependencies and compile
sudo ./install.sh

# Start the runtime
sudo ./start_openplc.sh

Среда выполнения запустится и будет слушать порт 8443. Подключитесь к ней из приложения OpenPLC Editor для настольных компьютеров, настроив IP-адрес среды выполнения и выполнив вход из редактора.

Поддерживаемые дистрибутивы: Ubuntu, Debian, Fedora, CentOS, RHEL

Требования: - Компилятор GCC - CMake - Python 3.8+ - Права суперпользователя (для планирования реального времени и привязки к порту)

Принцип работы

  1. Создание программы — Разработайте программу ПЛК в OpenPLC Editor v4 с использованием логических диаграмм, FBD, ST или других языков IEC 61131-3.
  2. Компиляция в редакторе — Редактор выполняет локальную компиляцию (JSON → XML → ST → файлы C) и упаковывает исходные коды в файл program.zip.
  3. Загрузка — Редактор загружает ZIP-файл в среду выполнения через HTTPS POST на /api/upload-file с аутентификацией JWT.
  4. Компиляция в среде выполнения — Среда выполнения проверяет, извлекает и компилирует программу с помощью CMake (редактор опрашивает /api/compilation-status для отслеживания прогресса).
  5. Управление — Редактор управляет выполнением ПЛК через эндпоинты /api/start-plc и /api/stop-plc.
  6. Отладка — Редактор подключается к отладочному интерфейсу WebSocket на /api/debug для отслеживания переменных в реальном времени.

Среда выполнения компилирует загруженные программы в разделяемые библиотеки и загружает их динамически. Ядро ПЛК выполняется с приоритетом реального времени (SCHED_FIFO) для детерминированного тайминга.

Подробности интеграции редактора и среды выполнения смотрите в docs/EDITOR_INTEGRATION.md.

Основные возможности

  • Сервис без интерфейса (Headless) — Управляется из OpenPLC Editor через REST API.
  • Выполнение в реальном времени — Детерминированные циклы сканирования с приоритетным планированием SCHED_FIFO.
  • Отладочный интерфейс WebSocket — Отладка переменных в реальном времени и принудительная установка их значений через редактор.
  • Система плагинов — Расширяемые драйверы ввода/вывода для различных аппаратных платформ.
  • Мультиархитектурность — Предварительно собранные бинарные файлы для платформ x86_64, ARM64 и ARM32. Может работать практически на любом устройстве, capable of running Linux.
  • Поддержка Docker — Официальные мультиархитектурные контейнерные образы.
  • Безопасность — Шифрование TLS, аутентификация JWT, комплексная проверка загружаемых файлов.

Архитектура

OpenPLC Runtime v4 использует двухпроцессную архитектуру:

  • Процесс сервера REST API — Приложение Flask, управляющее REST API и отладочным интерфейсом WebSocket для связи с OpenPLC Editor.
  • Процесс среды выполнения ПЛК — Реалтайм-движок на C/C++, выполняющий программы ПЛК с приоритетом SCHED_FIFO.

Процессы общаются через доменные сокеты Unix (/run/runtime/plc_runtime.socket) для передачи команд/управления и потоков журналов.

Подробную информацию об архитектуре смотрите в docs/ARCHITECTURE.md.

Документация

Начало работы

Расширенные темы

Дополнительные ресурсы

REST API

Среда выполнения предоставляет внутренний REST API, используемый OpenPLC Editor. Этот API не предназначен для прямого взаимодействия конечным пользователем, но может использоваться для расширенной интеграции или диагностики.

Требуется аутентификация: Все эндпоинты, кроме /api/create-user (для первого пользователя), /api/login и /api/get-users-info, требуют аутентификации JWT через заголовок Authorization: Bearer <token>.

Основные эндпоинты: - POST /api/create-user — Создание учётной записи пользователя. - POST /api/login — Вход и получение JWT-токена. - POST /api/upload-file — Загрузка ZIP-файла программы (multipart/form-data). - GET /api/compilation-status — Получение статуса компиляции и журналов. - GET /api/status — Получение статуса среды выполнения ПЛК. - GET /api/start-plc — Запуск выполнения ПЛК. - GET /api/stop-plc — Остановка выполнения ПЛК. - GET /api/runtime-logs — Получение журналов среды выполнения.

Полную документацию по API с описанием процесса аутентификации и примерами смотрите в docs/API.md.

Отладочный интерфейс WebSocket

OpenPLC Editor использует интерфейс WebSocket для отладки в реальном времени. Продвинутые интеграторы также могут использовать этот интерфейс:

import { io } from 'socket.io-client';

// Connect with JWT authentication
const socket = io('https://localhost:8443', {
  path: '/socket.io',
  transports: ['websocket'],
  auth: { token: jwt_token },
  rejectUnauthorized: false  // For self-signed certificates
});

// Listen for connection
socket.on('connect', () => {
  console.log('Connected to runtime');
});

// Send debug command (hex-encoded)
socket.emit('debug_command', {
  command: '44 00 03 00 00 00 01 00 02'  // Get variables 0, 1, 2
});

// Receive response
socket.on('debug_response', (response) => {
  console.log(response.data);
});

Полную документацию по протоколу отладки смотрите в docs/DEBUG_PROTOCOL.md и webserver/DEBUG_WEBSOCKET.md.

Использование Docker

Базовое использование

# Pull image
docker pull ghcr.io/autonomy-logic/openplc-runtime:latest

# Run with persistent storage
docker run -d \
  --name openplc-runtime \
  -p 8443:8443 \
  -v openplc-runtime-data:/var/run/runtime \
  ghcr.io/autonomy-logic/openplc-runtime:latest

# View logs
docker logs -f openplc-runtime

# Stop container
docker stop openplc-runtime

Docker Compose

Создайте файл docker-compose.yml:

version: '3.8'

services:
  openplc-runtime:
    image: ghcr.io/autonomy-logic/openplc-runtime:latest
    container_name: openplc-runtime
    ports:
      - "8443:8443"
    volumes:
      - openplc-runtime-data:/var/run/runtime
    restart: unless-stopped

volumes:
  openplc-runtime-data:

Запустите командой: docker-compose up -d

Полную документацию по Docker смотрите в docs/DOCKER.md.

Сборка из исходного кода

Предварительные требования

Установите зависимости:

# Ubuntu/Debian
sudo apt-get install build-essential gcc make cmake \
  python3-dev python3-pip python3-venv

# Fedora/RHEL/CentOS
sudo dnf install gcc gcc-c++ make cmake \
  python3 python3-devel python3-pip python3-venv

Этапы сборки

# Clone repository
git clone https://github.com/Autonomy-Logic/openplc-runtime.git
cd openplc-runtime
git checkout development

# Run installation script
sudo ./install.sh

Скрипт установки выполнит: 1. Определит ваш дистрибутив Linux. 2. Установит системные зависимости. 3. Создаст виртуальное окружение Python в venvs/runtime/. 4. Установит зависимости Python. 5. Скомпилирует ядро среды выполнения ПЛК с помощью CMake.

Ручная сборка

Для ручной компиляции:

# Create Python virtual environment
python3 -m venv venvs/runtime
source venvs/runtime/bin/activate
pip install -r requirements.txt
pip install -e .

# Compile runtime core
mkdir -p build
cd build
cmake ..
make -j$(nproc)
cd ..

Запуск среды выполнения

sudo ./start_openplc.sh

Скрипт запуска: 1. Проверит статус установки. 2. Настроит виртуальные окружения для плагинов (если у плагинов есть файл requirements.txt). 3. Активирует виртуальное окружение среды выполнения. 4. Запустит веб-сервер (который автоматически управляет процессом среды выполнения ПЛК).

Примечание: Права суперпользователя требуются для: - Планирования реального времени (приоритет SCHED_FIFO). - Привязки к порту 8443. - Создания доменных сокетов Unix в /run/runtime/.

Система плагинов

OpenPLC Runtime поддерживает плагины для аппаратного ввода/вывода:

Типы плагинов: - Python-плагины (с изолированными виртуальными окружениями). - C/C++ плагины.

Настройка: Редактируйте файл plugins.conf для включения/отключения плагинов.

Пример:

# name,path,enabled,type,config_path,venv_path
modbus_slave,./core/src/drivers/plugins/python/modbus_slave_plugin/simple_modbus.py,1,0,./config.json,./venvs/modbus_slave

Управление виртуальными окружениями плагинов:

# Create venv for plugin
sudo bash scripts/manage_plugin_venvs.sh create plugin_name

# Install dependencies
sudo bash scripts/manage_plugin_venvs.sh install plugin_name

# List all plugin venvs
sudo bash scripts/manage_plugin_venvs.sh list

Полную документацию по плагинам смотрите в docs/PLUGIN_VENV_GUIDE.md и core/src/drivers/README.md.

Безопасность

TLS/HTTPS

Среда выполнения автоматически генерирует самоподписанные TLS-сертификаты при первом запуске: - Сертификат: webserver/certOPENPLC.pem - Закрытый ключ: webserver/keyOPENPLC.pem

OpenPLC Editor автоматически работает с самоподписанными сертификатами. Для продвинутых интеграторов, использующих API напрямую, потребуется настроить HTTP-клиент на приём самоподписанных сертификатов (например, curl -k или rejectUnauthorized: false).

Безопасность загрузки файлов

Загружаемые ZIP-файлы проходят комплексную проверку безопасности: - Предотвращение пересечения каталогов - Ограничения размера (10 МБ на файл, 50 МБ суммарно) - Обнаружение ZIP-бомб (проверка коэффициента сжатия) - Белый список расширений (блокируются .exe, .dll, .sh, .bat, .js, .vbs, .scr) - Удаление метаданных macOS

Аутентификация

Среда выполнения использует аутентификацию на основе JWT: - Создание первого пользователя через POST /api/create-user (аутентификация не требуется) - Вход через POST /api/login возвращает JWT access-токен - Все последующие запросы требуют заголовка Authorization: Bearer <token> - Секреты хранятся в /var/run/runtime/.env - Хэширование паролей с помощью PBKDF2-SHA256 (600 000 итераций), соль и перец

Полную документацию по безопасности смотрите в docs/SECURITY.md.

Устранение неполадок

Типичные проблемы

Невозможно подключиться из OpenPLC Editor:

# Check if runtime is running
ps aux | grep python3 | grep webserver

# Check if port 8443 is listening
sudo netstat -tlnp | grep 8443

# Check firewall
sudo ufw status

Ошибка компиляции:

# Check runtime logs
sudo journalctl -u openplc-runtime -n 50

# Check if runtime directory exists
ls -la /run/runtime/

Ошибки доступа:

# Ensure running with sudo
sudo ./start_openplc.sh

# Check socket directory permissions
ls -la /run/runtime/

Полное руководство по устранению неполадок смотрите в docs/TROUBLESHOOTING.md.

Разработка

Настройка среды разработки

git clone https://github.com/Autonomy-Logic/openplc-runtime.git
cd openplc-runtime
git checkout development
sudo ./install.sh

Запуск тестов

sudo bash scripts/setup-tests-env.sh
pytest tests/

Pre-commit хуки

pip install pre-commit
pre-commit install

Стиль кода

  • C/C++: Соблюдайте существующий стиль, отступы 4 пробела, без табуляции
  • Python: Соблюдайте PEP 8, аннотации типов, docstring'и
  • Без эмодзи где бы то ни было — в коде, комментариях или документации (стандарт проекта)

Участие в разработке

  1. Создайте форк репозитория
  2. Создайте ветку функциональности на основе development
  3. Внесите свои изменения
  4. Отправьте pull request

Полное руководство по разработке смотрите в docs/DEVELOPMENT.md.

Структура проекта

openplc-runtime/
├── webserver/              # Flask web application (Python)
│   ├── app.py             # Main application entry
│   ├── restapi.py         # REST API blueprint
│   ├── debug_websocket.py # WebSocket debug interface
│   └── ...
├── core/
│   ├── src/plc_app/       # PLC runtime source (C/C++)
│   │   ├── plc_main.c     # Main entry point
│   │   ├── plc_state_manager.c/h # State management
│   │   ├── unix_socket.c/h # IPC server
│   │   └── utils/         # Utilities (log, watchdog, timing)
│   └── src/drivers/       # Plugin driver system
├── scripts/               # Build and management scripts
│   ├── compile.sh         # Compile PLC program
│   ├── compile-clean.sh   # Clean and rename library
│   └── manage_plugin_venvs.sh # Plugin venv management
├── build/                 # Compilation output
│   ├── plc_main           # Compiled runtime executable
│   └── libplc_*.so        # Compiled PLC program libraries
├── docs/                  # Documentation
├── CMakeLists.txt         # CMake build configuration
├── Dockerfile             # Container definition
├── install.sh             # Installation script
└── start_openplc.sh       # Startup script

Системные требования

Минимальные требования

  • CPU: 1 ГГц, одно ядро
  • RAM: 512 МБ
  • Диск: 500 МБ свободного пространства
  • ОС: Linux (Ubuntu 20.04+, Debian 11+, Fedora, CentOS, RHEL)

Рекомендуемые требования

  • CPU: 2 ГГц, два ядра или лучше
  • RAM: 1 ГБ или больше
  • Диск: 1 ГБ свободного пространства
  • ОС: Ubuntu 22.04 LTS или Debian 12

Производительность реального времени

Для детерминированной производительности в реальном времени: - Рекомендуется выделенное ядро CPU - Ядро реального времени (PREEMPT_RT) необязательно, но желательно - Минимальное количество фоновых процессов - Привилегии root для планирования SCHED_FIFO

Лицензия

Подробности смотрите в файле LICENSE.

Поддержка

  • Проблемы: https://github.com/Autonomy-Logic/openplc-runtime/issues
  • Документация: Смотрите каталог docs/
  • OpenPLC Editor: https://github.com/Autonomy-Logic/openplc-editor

Связанные проекты

Благодарности

OpenPLC Runtime v4 разработан и поддерживается компанией Autonomy Logic.

Комментарии
Войдите, чтобы оставить комментарий