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 提供高效传输。

设备数据采集五层技术栈与边缘实时接入信号链 传感器层 4–20mA / 0–10V RTD / 热电偶 / 脉冲 PLC 层 PV / SP / MV 扫描周期 1–100ms SCADA 层 报警 / 趋势 / 画面 Modbus / IEC 104 OPC UA 层 地址空间 / 语义模型 订阅 / 安全通道 边缘计算节点(Edge Gateway) 协议转换 · 数据清洗 · 时间戳对齐 · 本地缓存 · 断点续传 · 规则引擎 OPC UA Client / MQTT Broker / Modbus TCP Master / 边缘数据库 采样频率:1Hz–1kHz | 缓存窗口:≥ 24h | 上行带宽:按需压缩 OPC UA 订阅 Modbus / OPC DA MQTT 发布/订阅层 Topic: factory/line1/plc01/temperature | QoS 0/1/2 | Sparkplug B 载荷 TLS 加密 | 遗嘱消息 | 保留消息 | 会话保持 边缘转发 工业数据湖 / 实时流处理平台 采集关键参数 采样周期 / 死区 时间戳精度 / 质量码 实时性指标 端到端延迟 < 500ms 丢包率 < 0.1%

二、方法流程:从现场信号到数据湖的六步接入

一个可复用的采集接入流程通常包含六个步骤,每一步都有明确的输入输出和验收标准。

  1. 设备盘点与协议识别:列出 PLC 型号、通信口、支持的协议(Modbus TCP、S7、EtherNet/IP、OPC UA),确认是否具备语义化接口。
  2. 点位建模与命名规范:按“产线-设备-部件-测点”四级命名,例如 L1.CNC01.SPINDLE.TEMP,并绑定单位、量程、精度。
  3. 采集频率与死区设置:高频振动用 1kHz,温度用 1Hz;模拟量设置死区(如 0.5%),避免无效数据洪泛。
  4. 边缘网关部署:在靠近设备的工控机或边缘盒子上运行采集服务,完成协议转换、缓存和预处理。
  5. MQTT 主题规划与 QoS 选择:按业务重要性选择 QoS,关键报警用 QoS 2,普通趋势用 QoS 0。
  6. 数据湖入湖与校验:通过流处理引擎写入数据湖,校验时间戳单调性、点位完整率和数值范围。

关键原则:采集层只做“忠实搬运 + 轻量清洗”,复杂计算下沉到边缘或数据湖,避免在 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 校验。

实践建议:先在一条产线做试点,验证时间戳一致性、点位完整率和端到端延迟三项指标,再横向复制到其他产线。采集层的稳定性,决定了数据湖的上限。