3. EAP采集架构设计

EAP(Equipment Application Process)设备参数采集系统要同时面对几十到上千台设备、毫秒级到秒级不等的采集周期、多种工业协议以及上层 MES/SPC/看板对实时数据的并发消费需求。如果把这些职责全部塞进一个进程,任何一处阻塞都会拖垮整条链路。因此工程上普遍采用四层解耦架构:边缘采集层负责“把设备数据拿到手”,消息中间件负责“把数据可靠地搬运”,数据存储层负责“把数据按用途落位”,应用服务层负责“把数据变成业务价值”。四层之间通过明确的接口与背压机制隔离,使系统在单点故障、流量突增和横向扩容时都能保持稳定。

现场设备 SECS/GEM 设备 Modbus PLC OPC UA 服务器 串口仪表 文件/日志源 边缘采集层 协议驱动插件 SECS/Modbus/OPC UA 采集调度器 周期/事件触发 数据清洗与标准化 单位/时间戳/质量码 本地缓存队列 断网续传 边缘计算规则 阈值/去重/聚合 消息中间件 Topic 分区 按设备/产线 副本与 ISR acks=all 消费组 存储/告警/看板 死信队列 异常数据隔离 背压与限流 防止雪崩 数据存储层 时序数据库 原始参数/高频 关系数据库 设备台账/配置 缓存层 最新值/热点 对象存储 日志/文件/归档 数据生命周期 热/温/冷分层 应用服务层 实时看板 WebSocket 推送 SPC 分析 Cpk/控制图 告警引擎 规则/通知 MES 接口 工单/追溯 API 网关 鉴权/限流 高可用与可扩展要点: 边缘节点双活 + 本地缓存断网续传 | 消息分区多副本 + 消费组水平扩展 | 存储读写分离 + 冷热分层 | 应用无状态 + 网关限流熔断

边缘采集层:把不确定性挡在车间侧

边缘层是整条链路中环境最恶劣、协议最杂的一层。它的核心职责不是“采集”本身,而是把设备侧的不确定性收敛成统一、可传输的数据格式。典型实现是在一台工控机或边缘网关上运行采集服务,内部按“驱动插件 + 调度器 + 标准化管道 + 本地队列”组织。

以一台支持 SECS/GEM 的刻蚀设备为例,采集服务通过 HSMS 连接设备,订阅 S1F3 状态变量和 S6F11 事件报告。假设采集周期为 500 ms,每次读取 12 个参数(腔体压力、RF 功率、气体流量等),单台设备每秒产生约 24 条记录。采集服务在本地完成三件事:一是给每条记录打上设备时间戳与采集时间戳,两者不一致时以设备时间为准并标记偏差;二是附加质量码(Good/Bad/Uncertain),通信超时或数值越界时置为 Bad;三是按设备 ID 做本地去重与死区压缩,例如温度变化小于 0.1 ℃ 时不重复上报,可降低 30%~60% 的无效流量。

边缘层的高可用关键是断网续传。本地队列建议使用嵌入式数据库或磁盘队列,容量按“最长断网时间 × 峰值速率”估算。若单台设备峰值 50 条/秒、要求断网 2 小时不丢数,则队列至少需容纳 36 万条记录。恢复联网后按时间顺序回放,并在消息头中标记 replay=true,便于下游区分实时数据与补传数据。

消息中间件:可靠搬运与流量削峰

消息中间件承担“解耦、缓冲、广播”三重角色。选型上,Kafka 适合高吞吐与多消费组场景,RabbitMQ 适合复杂路由与低延迟,Pulsar 则在多租户和分层存储上有优势。无论选哪种,Topic 设计都应遵循按设备或产线分区的原则,例如 eap.raw.{site}.{line}.{equipmentId},这样同一台设备的数据严格有序,不同设备可并行消费。

可靠性由三个参数共同决定:生产者 acks=all 确保消息写入所有同步副本;Topic 副本数设为 3、min.insync.replicas=2,允许单 broker 故障而不丢数据;消费者采用手动提交位点,先写库再提交,避免“提交成功但数据未落库”的丢数窗口。当存储层写入变慢时,消费滞后(Lag)会上升,此时应通过增加分区数和消费者实例来水平扩展,而不是无限堆积。

数据存储层:按用途分层落位

采集数据不能只进一个库。工程上通常分四类存储:时序数据库(如 TDengine、InfluxDB)存原始参数与高频曲线,按设备建超级表、按天分区;关系数据库存设备台账、参数定义、采集配置等低频变更数据;缓存(Redis)存每台设备的最新值与热点查询结果,供看板毫秒级读取;对象存储存原始日志、SECS 报文和归档文件。

生命周期策略建议:原始秒级数据保留 30 天,1 分钟聚合数据保留 1 年,1 小时聚合数据长期保留。这样既满足 SPC 追溯,又控制存储成本。写入侧采用批量提交,例如每 500 条或每 200 ms 触发一次 flush,可在吞吐与实时性之间取得平衡。

应用服务层:无状态与可扩展

应用层应保持无状态,会话与中间结果放入 Redis,使任意实例可被替换或扩容。实时看板通过 WebSocket 订阅消息中间件,SPC 分析服务按消费组独立消费,告警引擎基于规则窗口计算。所有对外接口经 API 网关统一鉴权、限流与熔断,单实例故障不影响整体可用性。

高可用设计的一条实用原则:每一层都要能独立降级。边缘层断网时本地缓存继续工作;消息中间件不可用时边缘层暂存;存储层变慢时消息中间件缓冲;应用层故障时数据仍在管道中,恢复后可重新消费。任何一层都不应成为“必须同时在线”的单点。

可扩展性则体现在分区键与无状态化上:边缘节点按设备分组横向增加,消息分区按设备 ID 扩展,存储按时间分区滚动,应用实例按消费组扩容。四层各自独立伸缩,整条链路才能随产线数量增长而平滑扩展,而不是被迫整体重构。