Linux+PLC混合控制方案:用ARM网关补充传统PLC的AI分析能力
传统PLC做IO扫描、联锁、PID很稳,但跑振动频谱、视觉缺陷、负荷预测类AI算力不够。合理架构是“PLC管实时控制与安全,ARM Linux网关管协议采集、特征提取、模型推理、建议回写”:网关不直接驱执行机构,只把AI结果写成保持寄存器/OPC UA变量,PLC按自身联锁、上下限再决定是否采用。
一、分层与数据通路
现场PLC通过Modbus TCP、OPC UA、Profinet/EtherNet/IP把电流、温度、编码器、报警字暴露出来;ARM网关轮询或订阅,做去抖、时标对齐、滑窗特征,送TFLite/ONNX Runtime推理,输出健康分、缺陷类、建议设定值。结果回写专用建议区,例如40001起存AI占空比建议、40002存报警等级、40003存模型版本。
网关系统用Buildroot/Yocto定制,关键采集进程绑核、开PREEMPT_RT,模型进程限cgroup;硬实时闭环仍留PLC。若网关死机,PLC看门狗超时自动切本地PID/固定参数,避免产线停摆。
二、Python采集与推理示例
以振动+电流预测电机磨损为例,Modbus读16个保持寄存器,做RMS和简单频域特征,再调轻量模型:
from pymodbus.client import ModbusTcpClient
import numpy as np, joblib
client = ModbusTcpClient('192.168.10.20', port=502)
model = joblib.load('motor_health.pkl') # 训练阶段用sklearn导出
WIN = 256
def read_block(reg=0, count=16):
r = client.read_holding_registers(reg, count, slave=1)
return r.registers if not r.isError() else [0]*count
buf = []
while True:
raw = read_block(0, 16) # 电流/振动原始量,0.1单位定点
buf.append([x/10.0 for x in raw])
if len(buf) >= WIN:
arr = np.array(buf[-WIN:])
feat = [arr.mean(), arr.std(),
np.sqrt((arr**2).mean()), # RMS
np.max(np.abs(arr))) # 峰值
score = float(model.predict([feat])[0])
# 写回AI建议区:40001健康分 40002报警 40003建议降载百分比
client.write_registers(0, [int(score*100),
1 if score < 0.6 else 0,
int(max(0, 0.8-score)*100)])
buf.pop(0)
PLC侧只新增一段ST:读AI健康分,若在允许区间且与本机电流上限不冲突,再把“建议降载”折算成频率给定;若网关通信丢失,置AI_VALID=FALSE,沿用上次设定值或本地保守值。
三、C守护做高可靠轮询
Python适合快速迭代,量产可用C做采集代理,Python只负责模型更新:
modbus_t *mb = modbus_new_tcp("192.168.10.20", 502);
modbus_set_slave(mb, 1);
uint16_t reg[16];
while (run) {
if (modbus_read_registers(mb, 0, 16, reg) == 16) {
push_feature(reg, 16); // 滑窗、RMS、滤波
if (infer_ready()) {
int score = infer_score(); // 调TFLite C API/NPU
modbus_write_register(mb, 0, score);
modbus_write_register(mb, 1, score < 60 ? 1 : 0);
}
watchdog_kick(); // 喂看门狗,PLC检测网关存活
} else { modbus_reconnect(mb); }
usleep(10000); // 100Hz采集,AI按批推理
}
watchdog_kick通过GPIO或Modbus写心跳字;PLC周期性读心跳,超1.5s无更新即降级。
四、工程落地要点
协议选型:老设备用Modbus TCP最省事;多品牌、要自描述信息模型用OPC UA订阅;实时结果回写用EtherNet/IP implicit或Profinet RT,配置/配方用OPC UA、MQTT。
时间同步:网关与PLC统一NTP,多节点高精度用PTP;日志、特征窗、回写事件都打时标,否则故障回溯会错位。
模型轻量化:振动类用TFLite/ONNX INT8,视觉类用YOLO量化;ARM带NPU走RK/NXP/瑞芯微SDK,无NPU用Cortex-A72/A53跑定点,避免浮点大模型占满CPU。
安全回写:AI只写“建议设定值+置信度+有效期”,PLC做上下限、变化率、联锁三重校验;过流、急停、限位仍由PLC硬逻辑/安全继电器处理,Linux不参与硬实时切断。
可维护性:模型文件放/opt/ai,SHA256校验后热加载;异常回滚上一版本。网关用工业级eMMC、宽温、无风扇,系统服务加看门狗和A/B分区,断网可本地闭环。
按“PLC实时控制+ARM网关多协议采集+边缘特征/模型推理+建议寄存器回写+PLC限幅联锁”落地,既保留传统PLC确定性,又把振动预测、视觉质检、能耗优化等AI能力下沉到现场。相比纯上位机或全云方案,链路更短、断网可运行,且不影响原有IO扫描周期。





