当前位置:首页 > 物联网 > 智能应用
[导读]传统PLC做IO扫描、联锁、PID很稳,但跑振动频谱、视觉缺陷、负荷预测类AI算力不够。合理架构是“PLC管实时控制与安全,ARM Linux网关管协议采集、特征提取、模型推理、建议回写”:网关不直接驱执行机构,只把AI结果写成保持寄存器/OPC UA变量,PLC按自身联锁、上下限再决定是否采用。


传统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扫描周期。



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