项目背景
某某某新能源科技有限公司是一家专注于动力锂电池生产的高新技术企业,拥有多条自动化涂布、辊压、分切和化成产线。随着产能扩张和客户对品质追溯要求的提高,客户面临以下核心痛点:
数据孤岛严重:各产线PLC品牌不统一(西门子S7-1200、三菱FX5U、汇川H5U混用),数据无法集中采集和管理。 人工巡检效率低:温湿度、压力、流量等环境和工艺参数依赖人工抄表,异常发现严重滞后。 缺乏边缘智能:所有数据上传云端处理,网络带宽压力大、延迟高,无法满足实时控制需求。 现场缺少可视化:操作工只能通过PLC自带小屏查看有限信息,缺乏全局视角。
客户希望在每条产线部署一套智能HMI边缘终端,既能替代传统触摸屏实现设备监控与操作,又能在边缘端完成数据处理和AI推理,同时将关键数据同步至云端MES/SCADA系统。
方案架构
整体架构采用"端-边-云"三层协同模式:
设备层(端):PLC控制器、温湿度/压力/流量传感器、视觉检测相机 边缘层(边):RK3568 HMI终端,运行数据采集、协议转换、AI推理、HMI界面 * 云平台层(云):接收结构化数据,提供远程监控大屏、历史趋势分析、告警管理
硬件选型与设计
核心板方案
选用基于瑞芯微RK3568的工业级核心板,关键参数如下:
CPU:ARM Cortex-A55 四核 @ 2.0GHz NPU:0.8TOPS 算力(支持 INT8/FP16 推理) RAM:4GB LPDDR4 存储:32GB eMMC + TF 卡扩展 显示:LVDS/HDMI 双显输出,主屏 10.1 英寸工业电容触摸屏(1280×800) 通信接口:2× 千兆以太网、2× RS485、1× CAN Bus、4× USB、1× Mini-PCIe(4G 模块)
外围电路
4-20mA 模拟量采集模块(8通道,16位ADC) 隔离RS485收发器(自动流控) CAN Bus 收发器(支持 CANopen 协议) 硬件看门狗(WDT),掉电数据保护
软件架构
整个软件系统在Linux环境下运行,采用多进程+消息队列的解耦架构:
| 模块 | 职责 | 进程 | | ------------ | ------------------------------------ | ------------ | | HMI 主程序 | PySide6 界面渲染、触控交互、告警弹窗 | hmi\_main | | 数据采集引擎 | PLC 轮询、传感器读取、协议转换 | collector | | 边缘计算引擎 | 数据清洗、特征提取、AI 推理 | edge\_engine | | 云端同步服务 | MQTT 发布、断网缓存、补传机制 | cloud\_sync | | 设备控制服务 | 接收 HMI/云端指令,下发 PLC 写操作 | controller | | 系统守护进程 | 看门狗喂狗、日志管理、OTA 升级代理 | watchdog |
各进程通过 ZeroMQ(IPC 模式)进行高效的本地消息传递,避免多进程共享内存带来的同步问题。
PLC 对接与设备控制
多协议适配层
为解决多品牌PLC混用问题,我们设计了统一的协议适配层:
西门子 S7-1200:通过 python-snap7 库实现 S7 协议通信,直接读写 DB 块数据。 三菱 FX5U:采用 Modbus TCP 协议,通过 pymodbus 库进行寄存器级读写。 * 汇川 H5U:同样走 Modbus TCP,但寄存器映射表与三菱不同,独立维护点位配置文件。
所有PLC通信统一抽象为标准接口:
class PLCDriver(ABC):
@abstractmethod
def connect(self) -> bool: ...
@abstractmethod
def read_tags(self, tag_list: list[str]) -> dict[str, Any]: ...
@abstractmethod
def write_tag(self, tag: str, value: Any) -> bool: ...
点位配置采用 YAML 文件管理,支持热加载:
plc_devices:
- name: "涂布机主PLC"
brand: siemens_s7
ip: "192.168.1.10"
rack: 0
slot: 1
tags:
- name: "涂布速度"
address: "DB1.DBD0"
type: REAL
unit: "m/min"
- name: "烘箱温度"
address: "DB1.DBD4"
type: REAL
unit: "℃"
设备控制
HMI界面上提供设备启停、参数设定等控制操作。控制指令通过安全校验机制下发:
- 操作员在HMI点击控制按钮
- 系统弹出二次确认弹窗(关键操作需密码验证)
- 指令经过权限校验和参数范围检查
- 通过 ZeroMQ 发送至 controller 进程
- controller 调用对应 PLCDriver 写入目标寄存器
- 写入结果回传 HMI 并记录操作日志
传感器数据采集
采集通道
| 传感器类型 | 接口 | 协议 | 采样率 | | -------------------- | ------- | ---------- | ------ | | 温湿度(SHT30) | RS485 | Modbus RTU | 1Hz | | 压力变送器 | 4-20mA | 模拟量 | 10Hz | | 流量计 | RS485 | Modbus RTU | 5Hz | | 振动传感器 | CAN Bus | CANopen | 200Hz | | 涂布厚度(激光测距) | RS485 | 自定义协议 | 50Hz |
数据归一化
不同传感器数据经过统一的数据归一化管道处理:
- 原始帧解析:根据协议规范解析字节流为物理量
- 量程校准:应用传感器标定系数(线性/多项式校准)
- 滤波降噪:卡尔曼滤波(振动数据)、滑动平均(温湿度数据)
- 时间戳对齐:统一为 UTC 毫秒级时间戳
- 结构化输出:封装为标准数据帧,发布至内部消息总线
边缘计算与 AI 算法
实时数据处理
边缘计算引擎在本地完成以下数据处理任务:
统计特征提取:滑动窗口内的均值、方差、峰值、RMS 趋势预测:基于轻量级 ARIMA 模型的短期趋势外推(5分钟窗口) 异常检测:基于动态阈值和3σ原则的多维度异常检测 SPC 控制图:自动计算 UCL/LCL/CL,生成 X̄-R 控制图数据
AI 视觉检测
利用 RK3568 内置 NPU 进行涂布缺陷检测:
模型:YOLOv5s → 量化为 INT8 RKNN 格式 输入:产线相机抓取的涂布面图像(640×640) 检测目标:气泡、划痕、厚度不均、边缘毛刺 推理性能:单帧<15ms,满足产线 60m/min 速度下的全检需求 * 结果处理:检测到缺陷后立即触发HMI告警、记录缺陷图片、上报云端
class EdgeAIEngine:
def __init__(self):
self.rknn = RKNNLite()
self.rknn.load_rknn("yolov5s_defect.rknn")
self.rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0)
def detect(self, frame: np.ndarray) -> list[Detection]:
img = preprocess(frame, target_size=(640, 640))
outputs = self.rknn.inference(inputs=[img])
detections = postprocess(outputs, conf_thres=0.5, iou_thres=0.45)
return detections
HMI 界面设计
界面架构
基于 PySide6 构建的 HMI 界面采用主从式导航布局:
主导航栏(左侧):产线总览、设备监控、趋势图表、告警中心、AI检测、系统设置 内容区域(右侧):根据导航切换不同功能面板 状态栏(顶部):网络状态、云端连接指示、当前时间、登录用户 告警条(底部):滚动显示最新告警信息,可点击展开详情
核心界面
- 产线总览:以动态工艺流程图展示整条产线运行状态,设备状态用颜色编码(绿/黄/红)
- 设备监控:单设备详细参数面板,支持实时数值显示、控制按钮、历史趋势曲线
- 趋势图表:基于
pyqtgraph绘制的高性能实时曲线,支持多通道叠加、时间窗口缩放
- 告警中心:分级告警列表(信息/警告/严重/紧急),支持确认、屏蔽、导出
- AI 检测面板:实时缺陷检测画面、缺陷统计仪表盘、历史缺陷图库
性能优化
为保证嵌入式平台上的流畅体验,进行了以下优化:
GPU 加速渲染:启用 Qt 的 OpenGL ES 后端,利用 RK3568 Mali-G52 GPU 懒加载策略:非当前页面组件延迟初始化,降低内存占用 数据降采样:趋势图表超过屏幕分辨率时自动降采样,避免无谓的绘制开销 双缓冲刷新:关键数值组件采用双缓冲机制,避免闪烁
云端对接
通信方案
上行数据:通过 MQTT 协议将结构化数据发布至云端 EMQ X Broker,Topic 按 {工厂ID}/{产线ID}/{设备ID}/{数据类型} 层级组织 下行指令:云端通过 MQTT 下发远程控制指令、参数配置更新 大文件传输:缺陷图片等大文件通过 RESTful API + MinIO 对象存储上传 时序数据:边缘端 InfluxDB 缓存最近 72 小时数据,按策略压缩上传
断网续存
针对工厂网络不稳定场景,设计了完善的断网续存机制:
- MQTT 客户端检测到连接断开
- 待发送数据写入本地 SQLite 缓存队列(FIFO)
- 后台线程持续检测网络连通性
- 网络恢复后,按时间顺序逐批补传缓存数据
- 补传完成后清理本地缓存,释放存储空间
部署与运维
容器化部署
所有应用进程采用 Docker 容器化部署,简化环境管理:
hmi-app:HMI 主程序容器(需挂载 framebuffer 和触摸屏设备) collector:数据采集容器(需映射串口和网络设备) edge-engine:边缘计算容器(需映射 NPU 设备节点) cloud-sync:云端同步容器 * influxdb:时序数据库容器
通过 docker-compose 统一编排,一键启动全部服务。
OTA 远程升级
支持从云端远程推送固件和应用更新:
差分升级包(bsdiff),相比全量升级减少 70% 传输量 A/B 分区方案,升级失败自动回滚 * 升级前自动快照当前配置,确保数据安全
项目成果
该边缘计算HMI终端已在客户3条产线共计18个工位完成部署。通过边缘端的智能数据处理和AI检测能力,显著减少了数据上云的带宽压力(原始数据量缩减约85%,仅上传结构化结果)。同时,操作人员通过直观的HMI界面即可全面掌握产线运行状态,结合实时告警和AI缺陷检测,将异常响应时间从原来的人工巡检平均15分钟缩短至3秒内自动告警。整体方案支持后续产线扩展,新增工位只需修改YAML配置文件即可快速接入,无需重新开发。
