嵌入式Linux下PLC软逻辑运行:在ARM平台上实现软PLC的控制功能
传统PLC硬件专机价格高、扩展性受限,而ARM+Linux平台成本低、生态丰富。将PLC的梯形图/ST逻辑解释为软件运行时,在ARM Linux上执行,既能保留PLC的可靠性思维,又能利用Linux的网络、存储和图形能力。本文以OpenPLC Runtime在树莓派4B上的部署为例,展示从安装到运行一个简单启保停逻辑的全过程。
为什么选择软PLC
软PLC的核心价值在于解耦:控制逻辑与硬件平台分离。同一份梯形图程序,可以在树莓派上跑,也可以在RK3588工控板上跑,甚至迁移到x86服务器。对于小批量、多品种的设备,软PLC省去了采购专用PLC的周期和成本。此外,Linux的丰富驱动库让软PLC轻松接入Wi-Fi、MQTT、数据库等现代IoT组件。
方案选型:OpenPLC Runtime
OpenPLC是遵循IEC 61131-3标准的开源软PLC项目,支持LD(梯形图)、ST(结构化文本)、FBD等功能。它的Runtime可编译到ARM Linux,通过Modbus TCP/RTU或本地GPIO控制外部设备。树莓派4B上运行Raspbian OS,GPIO可直接映射为软PLC的输入输出变量。
部署步骤
安装依赖:
sudo apt update
sudo apt install git build-essential cmake libmodbus-dev libssl-dev
编译OpenPLC Runtime:
git clone https://github.com/thiagoralves/OpenPLC_v3.git
cd OpenPLC_v3
./build.sh linux
编译完成后,webserver目录下生成可执行文件openplc和Web管理页面。
配置硬件层:
编辑config.ini,将GPIO引脚映射到软PLC变量:
[HardwareLayer]
type = PiGPIO
pin_00 = 17 ; 输入:启动按钮
pin_01 = 27 ; 输入:停止按钮
pin_02 = 22 ; 输出:继电器
编写梯形图逻辑
通过浏览器访问树莓派IP:8080,进入OpenPLC Web Editor。创建一个新工程,添加一个简单的启保停电路:
输入:START(常开触点)、STOP(常闭触点)
输出:RUN(线圈)
逻辑:RUN = (START OR RUN) AND STOP
在ST语言中等效为:
RUN := (START OR RUN) AND STOP;
保存并编译,生成.mb文件。在Runtime页面上传该文件,点击“Start PLC”。
硬件接线与测试
将树莓派的GPIO17接一个按钮到3.3V(上拉),GPIO27接另一个按钮(下拉),GPIO22接LED串联220Ω电阻到GND。按下启动按钮,LED点亮;按下停止按钮,LED熄灭。软PLC以约50ms的周期扫描输入、执行逻辑、更新输出,响应时间足以满足大多数离散控制需求。
性能与实时性
树莓派4B运行OpenPLC,典型扫描周期约1-5ms(纯逻辑,无I/O等待)。若需更严格的实时性,可启用PREEMPT_RT内核补丁,或将OpenPLC绑定到特定CPU核心。对于1ms以内的控制需求,建议使用硬件PLC或FPGA方案;但对于产线输送带、包装机等常规应用,软PLC完全胜任。
写在最后
在ARM Linux上运行软PLC,本质是用软件复现了PLC的执行引擎。OpenPLC将梯形图编译为字节码,由Runtime解释执行,同时通过Modbus或GPIO与物理世界交互。这套方案让嵌入式开发者可以用熟悉的Linux工具链,构建出符合IEC 61131-3标准的控制系统。当你的项目需要“PLC的可靠性 + Linux的灵活性”时,软PLC是性价比最高的答案。





