OpenPLC V4 实操:Docker 拉起 Runtime 并跑通第一个启保停电路
理论说完,动手。本篇目标:在你自己的机器上把 OpenPLC Runtime v4 跑起来,并在仿真器里验证一个经典的电机启保停(seal-in)电路——这是检验你 PLC 环境是否真正可用的”Hello World”。
图:左为电机启保停(seal-in)梯形图逻辑,右为容器化 Runtime 与桌面 Editor 的连接拓扑。
一、拉起 Runtime(Docker)
docker pull ghcr.io/autonomy-logic/openplc-runtime:latest
docker run -d --name openplc \
-p 8443:8443 \
ghcr.io/autonomy-logic/openplc-runtime:latest
V4 运行时监听 8443(HTTPS,自签证书),且没有网页前端——浏览器开 https://localhost:8443 看到 404 是正常的。所有图形化操作都在 Editor 里完成。
没有 Docker 的环境(如笔者的 LuckFox 板,464MB RAM、无 Docker)走原生编译:
git clone https://github.com/Autonomy-Logic/openplc-runtime && cd openplc-runtime && ./install.sh --native。低内存 ARM 板务必把make -j$(nproc)改成make -j1并扩 swap,否则 C++ 编译会 OOM 静默失败。详见笔者另一篇部署记录。
二、安装 OpenPLC Editor v4
按操作系统从官方下载页取对应包:
- Windows 10/11 x64(Windows on ARM 暂不支持)
- macOS:Apple Silicon 与 Intel 分发包
- Linux:x64 AppImage(ARM 暂不支持)
装完启动 Editor,先确认版本号,再用内置 Simulator 跑一个空项目,确认环境正常再接真实目标。
三、第一个程序:启保停电路
需求(自检标准):
- 按 Start →
RunCmd置位;松开 Start →RunCmd保持; - 按 Stop →
RunCmd复位;Start 与 Stop 同时为真时 Stop 优先; MotorOut跟随RunCmd。
变量(仿真阶段用未定位变量,物理地址留给目标配置):
| 名 | 类型 | 初值 | 角色 |
|---|---|---|---|
StartPB | BOOL | FALSE | 启动(常开) |
StopPB | BOOL | FALSE | 停止(TRUE=停) |
RunCmd | BOOL | FALSE | 内部保持位 |
MotorOut | BOOL | FALSE | 仿真输出 |
梯形图(LD):
|----[/ StopPB ]----+----[ StartPB ]--------( RunCmd )----|
| | |
| +----[ RunCmd ]----------------------|
|----[ RunCmd ]-----------------------------( MotorOut )---|
要点:NOT StopPB 同时包住启动支路与自保持支路,所以 Stop 永远优先。
结构化文本(ST)等价:
RunCmd := (StartPB OR RunCmd) AND NOT StopPB;
MotorOut := RunCmd;
四、关键陷阱:POU 不挂任务就不会执行
很多新手编译通过、监控却看不到变量变化——根因是 POU 没有挂到循环任务。务必确认:
- 存在一个 Cyclic Task;
- 主 Program 实例已挂到该任务;
- 扫描间隔合理(实验室简单逻辑 10–50ms 即可)。
没有任务调度的 POU 会被编译进镜像,但扫描周期永不调用它。
五、在仿真器里验证
Editor 里选 Simulator 目标 → 编译 → 启动。手动 toggle StartPB / StopPB,观察 RunCmd / MotorOut 是否符合上面的自检标准。全部通过,说明你的 V4 工具链是健康的。
六、下一步
跑通仿真后,下一篇我们接真实硬件:树莓派 GPIO 与 OpenPLC V4,以及把未定位变量映射到物理引脚(注意 3.3V 与 24V 的鸿沟)。
配套代码与参考仓库
- OpenPLC Runtime v4(Autonomy-Logic,MIT):https://github.com/Autonomy-Logic/openplc-runtime
- OpenPLC Editor v4(Autonomy-Logic,GPL-3.0):https://github.com/Autonomy-Logic/openplc-editor
- 本系列配套示例(Docker Compose / 启保停 ST / GPIO 接线 / AI agent):https://gitcode.com/linjian19901122/openplc-v4-samples
- 本文配套:
docker-compose.yml与启保停 ST 源文件,见上方 GitCode 示例库realtime/与seal-in/
系列导航 · 双向链接(OpenPLC V4 系列 · 共 12 篇)
- ① 定位:从教学玩具到工业级 vPLC
- ② 协议栈变迁
- ③ 实战入门:Docker + 启保停
- ④ 树莓派 GPIO 与隔离
- ⑤ 编译器管线:MatIEC → STruC++
- ⑥ 安全设计:TLS/JWT/8443
- ⑦ 插件系统实战
- ⑧ AI 增强 PLC(预测性维护)
- ⑨ vPLC 与 Autonomy Edge
- ⑩ 实时性 vPLC:实验室→车间
- ⑪ 为什么选 SOEM(EtherCAT 主站)
- ⑫ Edge Control 机遇与挑战
本系列当前均为草稿(
draft: true)。建议发布序:① → ③ → ② → ④ → ⑧ 打头,⑩⑪⑫ 作深度延展按读者反馈穿插。