智能制造、新能源、工业物联网某某某新能源科技有限公司2026/02/28

智能边缘计算HMI终端 — 锂电池产线自动化数据采集与控制系统

为某新能源锂电池生产企业定制开发基于RK3568嵌入式平台的智能边缘计算HMI终端,通过PySide6构建工业人机交互界面,实现PLC设备对接、多源传感器数据采集、边缘端AI算法实时处理及云端系统协同,大幅提升产线自动化水平和数据决策效率。

智能边缘计算HMI终端 — 锂电池产线自动化数据采集与控制系统
数据采集周期
PLC 轮询周期≤50ms,传感器采样率达 200Hz
设备对接数量
单终端同时对接 6 台 PLC + 32 路传感器通道
边缘推理延迟
NPU 缺陷检测推理延迟<15ms(YOLOv5s 量化模型)
本地缓存能力
断网续存≥72 小时数据,网络恢复后自动补传
云端同步延迟
MQTT 消息端到端延迟<200ms
HMI 帧率
PySide6 界面渲染稳定 30FPS,触控响应<100ms
系统可用性
7×24h 连续运行,平均无故障时间≥6000 小时
产线效率提升
人工巡检频次降低 80%,异常响应时间从分钟级缩短至秒级
RK3568
PySide6
RS485(Modbus RTU)
NumPy
Pandas
MQTT

项目背景

某某某新能源科技有限公司是一家专注于动力锂电池生产的高新技术企业,拥有多条自动化涂布、辊压、分切和化成产线。随着产能扩张和客户对品质追溯要求的提高,客户面临以下核心痛点:

数据孤岛严重:各产线PLC品牌不统一(西门子S7-1200、三菱FX5U、汇川H5U混用),数据无法集中采集和管理。 人工巡检效率低:温湿度、压力、流量等环境和工艺参数依赖人工抄表,异常发现严重滞后。 缺乏边缘智能:所有数据上传云端处理,网络带宽压力大、延迟高,无法满足实时控制需求。 现场缺少可视化:操作工只能通过PLC自带小屏查看有限信息,缺乏全局视角。

客户希望在每条产线部署一套智能HMI边缘终端,既能替代传统触摸屏实现设备监控与操作,又能在边缘端完成数据处理和AI推理,同时将关键数据同步至云端MES/SCADA系统。


方案架构

整体架构采用"端-边-云"三层协同模式:

设备层(端):PLC控制器、温湿度/压力/流量传感器、视觉检测相机 边缘层(边):RK3568 HMI终端,运行数据采集、协议转换、AI推理、HMI界面 * 云平台层(云):接收结构化数据,提供远程监控大屏、历史趋势分析、告警管理

graph TB subgraph 设备层 PLC1["西门子 S7-1200<br/>涂布机"] PLC2["三菱 FX5U<br/>辊压机"] PLC3["汇川 H5U<br/>分切机"] S1["温湿度传感器<br/>RS485"] S2["压力变送器<br/>4-20mA"] S3["振动传感器<br/>CAN Bus"] S4["激光测距仪<br/>RS485"] CAM["工业相机<br/>USB3.0"] end subgraph 边缘层["边缘层 — RK3568 HMI 终端"] COLLECT["数据采集引擎<br/>Modbus TCP / RTU / CAN"] EDGE["边缘计算引擎<br/>统计分析 + AI推理"] HMI["HMI 界面<br/>PySide6"] CTRL["设备控制服务"] SYNC["云端同步服务<br/>MQTT"] DB_LOCAL["本地存储<br/>SQLite + InfluxDB"] end subgraph 云平台层 BROKER["MQTT Broker<br/>EMQ X"] MES["MES 系统"] SCADA["SCADA 大屏"] MINIO["MinIO 对象存储"] TSDB["时序数据库<br/>TDengine"] end PLC1 -->|S7协议| COLLECT PLC2 -->|Modbus TCP| COLLECT PLC3 -->|Modbus TCP| COLLECT S1 -->|RS485| COLLECT S2 -->|ADC| COLLECT S3 -->|CAN| COLLECT S4 -->|RS485| COLLECT CAM -->|USB| EDGE COLLECT -->|ZeroMQ| EDGE COLLECT -->|ZeroMQ| HMI EDGE -->|ZeroMQ| HMI EDGE -->|ZeroMQ| SYNC HMI -->|ZeroMQ| CTRL CTRL -->|协议适配层| PLC1 CTRL -->|协议适配层| PLC2 CTRL -->|协议适配层| PLC3 COLLECT --> DB_LOCAL EDGE --> DB_LOCAL SYNC --> DB_LOCAL SYNC -->|MQTT| BROKER SYNC -->|REST API| MINIO BROKER --> MES BROKER --> SCADA BROKER --> TSDB

硬件选型与设计

核心板方案

选用基于瑞芯微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),掉电数据保护

graph LR subgraph RK3568核心板 CPU["Cortex-A55 × 4<br/>2.0GHz"] NPU["NPU 0.8TOPS"] GPU["Mali-G52"] RAM["4GB LPDDR4"] EMMC["32GB eMMC"] end subgraph 通信接口 ETH1["千兆以太网 ×2<br/>PLC通信"] RS485_1["RS485 ×2<br/>传感器"] CAN["CAN Bus<br/>振动传感器"] USB["USB3.0<br/>工业相机"] PCIE["Mini-PCIe<br/>4G模块"] end subgraph 显示与交互 LCD["10.1寸 IPS 电容屏<br/>1280×800"] TOUCH["电容触摸控制器"] HDMI_OUT["HDMI 副屏输出"] end subgraph 扩展模块 ADC["8通道 4-20mA<br/>16位ADC"] WDT["硬件看门狗"] RTC["实时时钟<br/>断电保持"] TF["TF卡槽<br/>日志扩展"] end CPU --- NPU CPU --- GPU CPU --- RAM CPU --- EMMC CPU --- ETH1 CPU --- RS485_1 CPU --- CAN CPU --- USB CPU --- PCIE GPU --- LCD LCD --- TOUCH GPU --- HDMI_OUT CPU --- ADC CPU --- WDT CPU --- RTC CPU --- TF

软件架构

整个软件系统在Linux环境下运行,采用多进程+消息队列的解耦架构:

| 模块 | 职责 | 进程 | | ------------ | ------------------------------------ | ------------ | | HMI 主程序 | PySide6 界面渲染、触控交互、告警弹窗 | hmi\_main | | 数据采集引擎 | PLC 轮询、传感器读取、协议转换 | collector | | 边缘计算引擎 | 数据清洗、特征提取、AI 推理 | edge\_engine | | 云端同步服务 | MQTT 发布、断网缓存、补传机制 | cloud\_sync | | 设备控制服务 | 接收 HMI/云端指令,下发 PLC 写操作 | controller | | 系统守护进程 | 看门狗喂狗、日志管理、OTA 升级代理 | watchdog |

各进程通过 ZeroMQ(IPC 模式)进行高效的本地消息传递,避免多进程共享内存带来的同步问题。

graph TB subgraph 应用层 HMI["HMI 主程序<br/>PySide6 + pyqtgraph"] end subgraph 服务层 COL["数据采集引擎<br/>多协议驱动"] EDGE_E["边缘计算引擎<br/>RKNN + NumPy"] CLOUD["云端同步服务<br/>Paho MQTT"] CTRL_S["设备控制服务<br/>指令校验+下发"] WD["守护进程<br/>WDT + OTA"] end subgraph 中间件层 ZMQ["ZeroMQ<br/>IPC 消息总线"] SQLITE["SQLite<br/>操作日志+缓存队列"] INFLUX["InfluxDB<br/>时序数据缓存"] end subgraph 驱动层 S7["Snap7 驱动"] MODBUS["PyModbus 驱动"] SERIAL["Serial 串口驱动"] CANDRV["CAN Socket 驱动"] RKNN_D["RKNN Runtime"] end subgraph 系统层 LINUX["Linux Kernel 5.10"] DRM["DRM 显示驱动"] FB["FrameBuffer"] NPU_DRV["NPU 内核驱动"] end HMI <-->|ZeroMQ| ZMQ COL <-->|ZeroMQ| ZMQ EDGE_E <-->|ZeroMQ| ZMQ CLOUD <-->|ZeroMQ| ZMQ CTRL_S <-->|ZeroMQ| ZMQ COL --> SQLITE COL --> INFLUX CLOUD --> SQLITE EDGE_E --> INFLUX COL --- S7 COL --- MODBUS COL --- SERIAL COL --- CANDRV EDGE_E --- RKNN_D S7 --- LINUX MODBUS --- LINUX SERIAL --- LINUX CANDRV --- LINUX RKNN_D --- NPU_DRV HMI --- DRM DRM --- FB NPU_DRV --- LINUX

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界面上提供设备启停、参数设定等控制操作。控制指令通过安全校验机制下发:

  1. 操作员在HMI点击控制按钮
  1. 系统弹出二次确认弹窗(关键操作需密码验证)
  1. 指令经过权限校验和参数范围检查
  1. 通过 ZeroMQ 发送至 controller 进程
  1. controller 调用对应 PLCDriver 写入目标寄存器
  1. 写入结果回传 HMI 并记录操作日志
flowchart TD A["操作员点击控制按钮"] --> B{"是否关键操作?"} B -->|是| C["弹出密码验证弹窗"] B -->|否| D["弹出二次确认弹窗"] C --> E{"密码正确?"} E -->|否| F["提示密码错误<br/>记录安全日志"] E -->|是| G["参数范围检查"] D --> H{"用户确认?"} H -->|取消| I["取消操作"] H -->|确认| G G --> J{"参数合法?"} J -->|否| K["提示参数超限<br/>拒绝下发"] J -->|是| L["通过 ZeroMQ 发送至 Controller"] L --> M["Controller 调用 PLCDriver.write_tag()"] M --> N{"写入成功?"} N -->|是| O["HMI 更新状态为已执行<br/>记录操作日志"] N -->|否| P["HMI 提示控制失败<br/>触发告警<br/>记录异常日志"]

传感器数据采集

采集通道

| 传感器类型 | 接口 | 协议 | 采样率 | | -------------------- | ------- | ---------- | ------ | | 温湿度(SHT30) | RS485 | Modbus RTU | 1Hz | | 压力变送器 | 4-20mA | 模拟量 | 10Hz | | 流量计 | RS485 | Modbus RTU | 5Hz | | 振动传感器 | CAN Bus | CANopen | 200Hz | | 涂布厚度(激光测距) | RS485 | 自定义协议 | 50Hz |

数据归一化

不同传感器数据经过统一的数据归一化管道处理:

  1. 原始帧解析:根据协议规范解析字节流为物理量
  1. 量程校准:应用传感器标定系数(线性/多项式校准)
  1. 滤波降噪:卡尔曼滤波(振动数据)、滑动平均(温湿度数据)
  1. 时间戳对齐:统一为 UTC 毫秒级时间戳
  1. 结构化输出:封装为标准数据帧,发布至内部消息总线

边缘计算与 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
flowchart LR subgraph 数据输入 RAW_PLC["PLC 原始数据"] RAW_SENSOR["传感器原始数据"] RAW_IMAGE["相机图像帧"] end subgraph 数据预处理 PARSE["协议解析<br/>字节流→物理量"] CALIB["量程校准<br/>标定系数修正"] FILTER["滤波降噪<br/>卡尔曼/滑动平均"] ALIGN["时间戳对齐<br/>UTC统一"] end subgraph 边缘分析 STAT["统计特征提取<br/>均值/方差/RMS"] TREND["趋势预测<br/>ARIMA短期外推"] ANOMALY["异常检测<br/>动态阈值+3σ"] SPC["SPC控制图<br/>UCL/LCL计算"] AI["NPU AI推理<br/>YOLOv5s缺陷检测"] end subgraph 输出 HMI_OUT["HMI 实时显示"] ALARM["告警触发"] CLOUD_OUT["结构化数据上云"] LOG_OUT["本地存储归档"] end RAW_PLC --> PARSE RAW_SENSOR --> PARSE PARSE --> CALIB --> FILTER --> ALIGN ALIGN --> STAT ALIGN --> TREND ALIGN --> ANOMALY ALIGN --> SPC RAW_IMAGE --> AI STAT --> HMI_OUT TREND --> HMI_OUT ANOMALY --> ALARM SPC --> HMI_OUT AI --> ALARM STAT --> CLOUD_OUT TREND --> CLOUD_OUT ANOMALY --> CLOUD_OUT SPC --> CLOUD_OUT AI --> CLOUD_OUT ALIGN --> LOG_OUT AI --> LOG_OUT

HMI 界面设计

界面架构

基于 PySide6 构建的 HMI 界面采用主从式导航布局:

主导航栏(左侧):产线总览、设备监控、趋势图表、告警中心、AI检测、系统设置 内容区域(右侧):根据导航切换不同功能面板 状态栏(顶部):网络状态、云端连接指示、当前时间、登录用户 告警条(底部):滚动显示最新告警信息,可点击展开详情

核心界面

  1. 产线总览:以动态工艺流程图展示整条产线运行状态,设备状态用颜色编码(绿/黄/红)
  1. 设备监控:单设备详细参数面板,支持实时数值显示、控制按钮、历史趋势曲线
  1. 趋势图表:基于 pyqtgraph 绘制的高性能实时曲线,支持多通道叠加、时间窗口缩放
  1. 告警中心:分级告警列表(信息/警告/严重/紧急),支持确认、屏蔽、导出
  1. AI 检测面板:实时缺陷检测画面、缺陷统计仪表盘、历史缺陷图库

性能优化

为保证嵌入式平台上的流畅体验,进行了以下优化:

GPU 加速渲染:启用 Qt 的 OpenGL ES 后端,利用 RK3568 Mali-G52 GPU 懒加载策略:非当前页面组件延迟初始化,降低内存占用 数据降采样:趋势图表超过屏幕分辨率时自动降采样,避免无谓的绘制开销 双缓冲刷新:关键数值组件采用双缓冲机制,避免闪烁


云端对接

通信方案

上行数据:通过 MQTT 协议将结构化数据发布至云端 EMQ X Broker,Topic 按 {工厂ID}/{产线ID}/{设备ID}/{数据类型} 层级组织 下行指令:云端通过 MQTT 下发远程控制指令、参数配置更新 大文件传输:缺陷图片等大文件通过 RESTful API + MinIO 对象存储上传 时序数据:边缘端 InfluxDB 缓存最近 72 小时数据,按策略压缩上传

断网续存

针对工厂网络不稳定场景,设计了完善的断网续存机制:

  1. MQTT 客户端检测到连接断开
  1. 待发送数据写入本地 SQLite 缓存队列(FIFO)
  1. 后台线程持续检测网络连通性
  1. 网络恢复后,按时间顺序逐批补传缓存数据
  1. 补传完成后清理本地缓存,释放存储空间
flowchart TB subgraph 边缘终端 PUB["MQTT Publisher<br/>数据发布"] SUB["MQTT Subscriber<br/>指令接收"] CACHE["SQLite 缓存队列<br/>断网续存"] REST["REST Client<br/>大文件上传"] HEALTH["网络检测<br/>心跳线程"] end subgraph 云平台 BROKER_C["EMQ X Broker<br/>MQTT消息路由"] API_GW["API Gateway<br/>鉴权+限流"] MINIO_C["MinIO<br/>缺陷图片存储"] TSDB_C["TDengine<br/>时序数据存储"] MES_C["MES 系统<br/>生产管理"] SCADA_C["SCADA 大屏<br/>远程监控"] ALERT["告警服务<br/>短信/邮件/钉钉"] end PUB -->|"TLS 加密<br/>Topic: {工厂}/{产线}/{设备}/{类型}"| BROKER_C BROKER_C -->|"下发指令"| SUB PUB -.->|"断网时"| CACHE CACHE -.->|"恢复后补传"| PUB HEALTH -->|"检测连通性"| CACHE REST -->|"HTTPS"| API_GW --> MINIO_C BROKER_C --> TSDB_C BROKER_C --> MES_C BROKER_C --> SCADA_C BROKER_C --> ALERT

部署与运维

容器化部署

所有应用进程采用 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配置文件即可快速接入,无需重新开发。

需要类似项目建议?

您可以把设备协议、现场约束和时间要求告诉我们,我们会先评估可复用部分和交付边界。

联系我们