当前位置:首页 > 工业控制 > 工业控制
[导读]ARM工业网关跑软PLC,适合把“少量逻辑控制+协议转换+上云”合并到一台设备:本地用IEC 61131-3做启停/联锁/计数,外接DI/DO、RS485、CAN、以太网,再通过Modbus TCP/OPC UA/MQTT把数据送SCADA和MES。RK3562/RK3576/RK3588、AM62x、STM32MP1等ARM Linux板都能装开源运行时,小批量点位比单独PLC+网关更省。


ARM工业网关跑软PLC,适合把“少量逻辑控制+协议转换+上云”合并到一台设备:本地用IEC 61131-3做启停/联锁/计数,外接DI/DO、RS485、CAN、以太网,再通过Modbus TCP/OPC UA/MQTT把数据送SCADA和MES。RK3562/RK3576/RK3588、AM62x、STM32MP1等ARM Linux板都能装开源运行时,小批量点位比单独PLC+网关更省。

一、运行时选型与安装

轻量逻辑用OpenPLC,完整IEC开发用Beremiz,商业运动/多轴用CODESYS Runtime。OpenPLC在Debian/Ubuntu ARM安装:

sudo apt update

sudo apt install -y git build-essential cmake libmodbus-dev libssl-dev

git clone https://github.com/thiagoralves/OpenPLC_v3.git

cd OpenPLC_v3

./build.sh linux

sudo ./start_openplc.sh

启动后浏览器访问网口IP:8080,建工程选LD/ST/FBD,上传后Start PLC。若网关带工业IO扩展,在HardwareLayer把物理DI/DO、Modbus从站、串口设备映射成%IX/%QX/%MW;纯GPIO开发板按BCM编号映射,24V现场信号必须加光耦/IO HAT,别直接进3.3V口。

二、ST控制逻辑示例

传送带防堵料:启动自锁、急停常闭、电机运行反馈超时报警、堵料光电触发降速。

VAR

 StartCmd:BOOL; StopCmd:BOOL; EStop:BOOL; RunFb:BOOL;

 JamPhoto:BOOL; Run:BOOL; Alarm:BOOL; JamSlow:BOOL;

 TONfb:TON; TONjam:TON;

END_VAR

IF StartCmd AND EStop AND NOT StopCmd THEN Run:=TRUE; END_IF;

IF NOT EStop OR StopCmd THEN Run:=FALSE; Alarm:=FALSE; END_IF;

TONfb(IN:=Run AND NOT RunFb, PT:=T#3S);

IF TONfb.Q THEN Alarm:=TRUE; Run:=FALSE; END_IF;   // 运行反馈超时,停机报故障

TONjam(IN:=JamPhoto AND Run, PT:=T#1S5MS);

IF TONjam.Q THEN JamSlow:=TRUE; END_IF;             // 堵料超1秒切慢速并报警

IF NOT JamPhoto THEN JamSlow:=FALSE; END_IF;

把Run、Alarm、JamSlow映射到%QX输出和%MW状态字,HMI只读%MW,不直读内部变量。

三、网关IO与Modbus对外

ARM网关通常既要控本地IO,又要给上位做数据服务器。OpenPLC内置Modbus TCP,%QX0.0对应线圈0、%IX0.0对应离散输入0、%MW0对应保持寄存器0;多协议网关可用Python边车补齐MQTT/OPC UA:

from pymodbus.client import ModbusTcpClient

import json, paho.mqtt.client as mqtt


def report(plc_ip, mqttc, topic):

   c = ModbusTcpClient(plc_ip, port=502, timeout=2)

   if not c.connect(): return

   coils = c.read_coils(0, 8).bits[:8]

   mw = c.read_holding_registers(0, 10).registers

   c.close()

   mqttc.publish(topic, json.dumps({"do": coils, "mw": mw}), qos=1)


# 边缘定时轮询,断网缓存本地,恢复后补传;PLC扫描周期设50~100ms,

# 网关上报周期按业务设500ms~1s,避免Modbus轮询抢占控制线程。

RS485仪表、变频器走Modbus RTU,由网关进程转TCP/保持寄存器,再交给OpenPLC统一逻辑;EtherCAT多轴另装主站,软PLC只下发目标位置和状态字。

四、Linux实时性调优

标准Linux做非严格离散控制可用;要求稳定扫描、低抖动,换PREEMPT_RT内核并把运行时绑核:

# grub/cmdline:隔离2核给软PLC,关闭隔离核tick和RCU回调

isolcpus=2,3 nohz_full=2,3 rcu_nocbs=2,3

# 启动OpenPLC实时线程

chrt -f 80 taskset -c 2 ./openplc_runtime &

# 关CPU调频省电模式

cpufreq-set -g performance -c 2

limits.conf给运行用户rtprio、memlock;用cyclictest压测,观察平均/最大延迟,目标按工况定,一般离散IO几十微秒到几百微秒可接受,亚毫秒硬运动再考虑EtherCAT+RT或外挂MCU。 OpenPLC v4核心可用SCHED_FIFO实时优先级执行扫描,但产线关键安全回路仍建议硬接线急停,软逻辑只做辅助联锁。

五、落地避坑

IO电压隔离:ARM GPIO不等于工业24V,DI用电平转换/光耦,DO用继电器/晶体管模块;

扫描与通信分离:PLC逻辑周期、Modbus轮询、MQTT上云分线程/分进程,互不影响;

看门狗:系统级watchdog+应用心跳,运行时崩溃自动重启并恢复上次工程;

版本管理:ST/LD工程、HardwareLayer映射、Modbus地址表、MQTT点表一起入库,升级先灰度一台;

安全:Modbus 502不映射公网,远程维护走VPN/SSH证书,OPC UA开证书认证,避免匿名写线圈。

按“ARM Linux+OpenPLC/RT补丁+工业IO映射+Modbus/MQTT上联”落地,小型车间网关可同时承担软逻辑控制与数据边缘处理,扩点只需改工程和点表,不必新增硬件PLC。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭