4. 设备数据采集
设备数据采集是工业数据湖的“进水口”。如果采集层不稳定、语义不统一、时间戳不可信,后续的存储、治理和分析都会变成“垃圾进、垃圾出”。本章围绕传感器、PLC、SCADA、OPC UA、MQTT 五类关键技术,讲清它们各自在数据链路中的位置、职责与协作方式,并给出边缘计算与实时数据接入的落地方法。
一、核心原理:五层采集技术栈的分工
工业现场的数据并非从设备直接“飞”进数据湖,而是经过一条逐级抽象的信号链。理解这条链,才能判断故障出在哪一层。
- 传感器层:把物理量(温度、压力、振动、电流)转换为电信号,输出 4–20mA、0–10V、RTD、热电偶或数字脉冲。它决定数据的“物理真实性”。
- PLC 层:可编程逻辑控制器周期性扫描 I/O,形成过程变量(PV)、设定值(SP)、输出值(MV)和设备状态字。它是控制闭环的核心,也是采集的主要数据源。
- SCADA 层:监控与数据采集系统,负责画面监视、报警、历史趋势和远程调度,通常通过 Modbus、Profibus、IEC 104 等协议与 PLC 通信。
- OPC UA 层:提供跨厂商、带语义模型和安全通道的统一接口,支持地址空间浏览、订阅发布和复杂数据类型,是“语义化采集”的关键。
- MQTT 层:轻量级发布/订阅消息协议,适合高并发、弱网络、边缘到云的异步传输,常与 Sparkplug B 规范配合实现设备状态与载荷的标准化。
这五层不是替代关系,而是互补关系:传感器提供原始信号,PLC 提供控制级数据,SCADA 提供监控级数据,OPC UA 提供语义与安全,MQTT 提供高效传输。
二、方法流程:从现场信号到数据湖的六步接入
一个可复用的采集接入流程通常包含六个步骤,每一步都有明确的输入输出和验收标准。
- 设备盘点与协议识别:列出 PLC 型号、通信口、支持的协议(Modbus TCP、S7、EtherNet/IP、OPC UA),确认是否具备语义化接口。
- 点位建模与命名规范:按“产线-设备-部件-测点”四级命名,例如
L1.CNC01.SPINDLE.TEMP,并绑定单位、量程、精度。 - 采集频率与死区设置:高频振动用 1kHz,温度用 1Hz;模拟量设置死区(如 0.5%),避免无效数据洪泛。
- 边缘网关部署:在靠近设备的工控机或边缘盒子上运行采集服务,完成协议转换、缓存和预处理。
- MQTT 主题规划与 QoS 选择:按业务重要性选择 QoS,关键报警用 QoS 2,普通趋势用 QoS 0。
- 数据湖入湖与校验:通过流处理引擎写入数据湖,校验时间戳单调性、点位完整率和数值范围。
关键原则:采集层只做“忠实搬运 + 轻量清洗”,复杂计算下沉到边缘或数据湖,避免在 PLC 中写业务逻辑。
三、案例场景:汽车焊装车间的实时数据接入
某汽车焊装车间有 12 台焊接机器人、8 台 PLC 和 1 套 SCADA。改造前,数据仅存在于 SCADA 历史库,无法支撑实时质量分析。改造方案如下:
- 每台机器人通过 OPC UA 暴露焊接电流、电压、节拍、故障码,采样周期 100ms。
- PLC 通过 Modbus TCP 提供夹具状态、安全门信号,采样周期 50ms。
- 边缘网关运行 OPC UA Client 和 Modbus Master,统一转换为 Sparkplug B 格式。
- 通过 MQTT 发布到
factory/welding/robot01/current等主题,QoS 1。 - 流处理平台消费后写入数据湖,同时触发实时质量告警。
改造后端到端延迟从分钟级降到 300ms 以内,焊接虚焊缺陷追溯时间从 2 小时缩短到 5 分钟。
四、误区与复盘:采集层最常见的五个坑
| 误区 | 表现 | 后果 | 纠正方法 |
|---|---|---|---|
| 时间戳由云端生成 | 数据到达服务器才打时间戳 | 网络抖动导致时序错乱 | 边缘侧打时间戳,保留设备原始时标 |
| 所有点位同频率采集 | 温度也按 1kHz 采集 | 带宽和存储浪费,数据湖膨胀 | 按物理量特性分级设置采样周期 |
| 忽略质量码 | 只传数值不传状态 | 把故障值当正常值分析 | 采集 OPC UA 的 StatusCode 或 PLC 状态字 |
| MQTT 主题随意命名 | topic 无层级、无规范 | 订阅混乱,无法按产线过滤 | 采用 厂区/车间/设备/测点 四级主题 |
| 边缘无缓存 | 断网即丢数据 | 关键批次数据缺失 | 边缘本地缓存 ≥ 24h,支持断点续传 |
排障提示:当数据湖出现“数据断流”时,按“传感器→PLC→SCADA→OPC UA→MQTT→边缘缓存→入湖”顺序逐段排查,优先检查边缘网关的 CPU、内存和磁盘队列,80% 的断流源于边缘资源耗尽或网络抖动。
五、配置示例:边缘网关 MQTT 接入片段
# edge-gateway.yaml
mqtt:
broker: "ssl://mqtt.factory.local:8883"
client_id: "edge-gw-line1"
qos: 1
keepalive: 30
tls:
ca: "/etc/certs/ca.pem"
cert: "/etc/certs/edge.pem"
key: "/etc/certs/edge.key"
opcua:
endpoint: "opc.tcp://plc01:4840"
subscription_interval: 100
nodes:
- id: "ns=2;s=Robot01.Current"
topic: "factory/welding/robot01/current"
deadband: 0.5
- id: "ns=2;s=Robot01.Voltage"
topic: "factory/welding/robot01/voltage"
deadband: 0.5
buffer:
path: "/var/lib/edge/buffer"
max_hours: 24
flush_interval: 5
该配置实现了 OPC UA 订阅、死区过滤、TLS 加密传输和 24 小时本地缓存,是边缘实时接入的最小可用模板。实际部署时还需根据现场网络质量调整 keepalive 和 flush_interval,并在数据湖侧配置对应的主题订阅和 schema 校验。
实践建议:先在一条产线做试点,验证时间戳一致性、点位完整率和端到端延迟三项指标,再横向复制到其他产线。采集层的稳定性,决定了数据湖的上限。