4. 数据采集与传感器技术

异常告警系统的第一道门槛不是算法,而是数据。没有稳定、实时、语义清晰的数据源接入,再灵敏的告警规则也只能在空数据上打转。智慧工厂的数据源天然是异构的:底层有PLC的毫秒级过程量,中间层有SCADA的集中监控与历史归档,现场还散布着温振、电流、气体等IoT传感器,而上层MES、能源管理系统又需要统一语义的数据接口。本节围绕这四类数据源,讲清它们的接入方式、协议选择与工程落地要点。

一、核心原理:四类数据源的分层与语义差异

从数据产生的物理位置看,PLC位于控制层,直接连接执行器与传感器,数据以寄存器、线圈、数据块的形式存在,刷新周期常在10~100ms;SCADA位于监控层,通过轮询PLC获得数据,并附加报警、趋势、操作记录等上下文;IoT传感器通常独立组网,通过MQTT、LoRa、Modbus RTU等方式上报,采样频率从秒级到分钟级不等;OPC UA则是一种跨层的信息建模与通信标准,它不产生数据,而是把上述数据统一成带类型、带语义的地址空间。

理解这一分层,才能回答“告警系统该从哪一层取数”。高频振动、急停信号应从PLC直取;设备综合效率、批次状态可从SCADA或MES获取;环境温湿度、电机表面温度等辅助量适合走IoT网关;而需要跨系统关联的告警,则优先通过OPC UA统一建模后订阅。

智慧工厂数据源接入分层与协议路径 控制层 监控层 现场层 PLC 控制器 寄存器 / 线圈 / DB块 周期 10~100 ms S7 / Modbus TCP / EtherNet-IP SCADA 系统 轮询采集 + 报警 + 趋势 历史库 / 操作记录 OPC DA / OPC UA / 数据库 IoT 传感器 温振 / 电流 / 气体 / 液位 秒级~分钟级上报 MQTT / LoRa / Modbus RTU 边缘采集网关 协议转换 数据缓存 / 断点续传 时间戳对齐 边缘过滤与限流 统一为 MQTT / OPC UA OPC UA 信息模型 地址空间 / 类型 / 语义 订阅 + 发布 安全证书 / 用户鉴权 异常告警引擎 规则匹配 / 阈值判断 时序关联 / 去抖 告警分级与推送 直读 订阅 上报 建模 推送 采集频率与语义层级不同,接入路径必须按告警实时性要求分别设计

二、方法流程:从协议选型到告警可用数据

接入工作可以按五步推进。第一步是盘点数据源,明确每个测点的物理含义、量程、单位、采样周期和告警等级。第二步是选择协议:PLC侧优先使用原生协议或Modbus TCP;跨厂商、跨层级则用OPC UA;无线传感器用MQTT。第三步是部署采集服务或边缘网关,完成协议转换、时间戳对齐和本地缓存。第四步是建立统一命名空间,例如“车间/产线/设备/测点”的层级路径。第五步是接入告警引擎,配置阈值、持续时间和去抖窗口。

以Modbus TCP读取PLC寄存器为例,采集配置通常包含从站地址、功能码、起始地址和寄存器数量:

# Modbus TCP 采集点配置示例
device: PLC-Line3
protocol: modbus-tcp
host: 192.168.10.21
port: 502
unit_id: 1
points:
  - name: motor_temp
    function: 3          # 保持寄存器
    address: 40001
    data_type: int16
    scale: 0.1           # 原始值 × 0.1 = ℃
    unit: "℃"
    poll_interval_ms: 500
  - name: run_state
    function: 1          # 线圈
    address: 00001
    data_type: bool
    poll_interval_ms: 200

若使用OPC UA订阅,则更关注节点ID、采样间隔和死区:

# OPC UA 订阅参数示例
endpoint: opc.tcp://192.168.10.30:4840
security: Basic256Sha256
subscription:
  publishing_interval_ms: 1000
  monitored_items:
    - node_id: "ns=2;s=Line3.Motor1.Temperature"
      sampling_interval_ms: 500
      deadband: 0.5

三、案例场景:一条产线的多源接入

某汽车零部件车间有3条冲压线。PLC负责压力、行程、急停信号,采样200ms;SCADA汇总设备运行状态与班次产量;每台电机加装振动与温度IoT传感器,通过MQTT网关每5秒上报一次。告警系统需要同时判断“压力超限”“电机温升异常”“连续3个班次OEE下降”。

落地时,PLC数据经Modbus TCP进入边缘网关,SCADA通过OPC UA暴露设备状态节点,IoT数据经MQTT Broker进入消息队列。三类数据在告警引擎中按设备ID和时间窗口对齐。压力超限走毫秒级规则,温升异常走分钟级滑动平均,OEE下降则走批次聚合规则。这样既保证了实时性,又避免了把所有数据都塞进同一条高频通道。

四、常见误区与复盘要点

误区一:所有数据都从SCADA取。SCADA轮询周期通常为1~5秒,急停、超压等安全相关信号会明显滞后,应从PLC直取。

误区二:忽略时间戳来源。PLC、网关、MQTT Broker各自打时间戳,若不对齐,多源告警关联会出现“因果倒置”。

误区三:Modbus地址偏移未核对。不同厂商对40001与0基地址的解释不同,配置错误会导致读到相邻寄存器,产生看似随机实则错位的告警。

误区四:OPC UA只当通道用。若不在地址空间中建立类型和语义,告警规则仍要硬编码节点ID,后期维护成本极高。

数据源 典型协议 采样/刷新周期 适用告警类型 接入注意点
PLC Modbus TCP、S7、EtherNet/IP 10~200 ms 急停、超压、超行程 地址偏移、字节序、轮询负载
SCADA OPC DA/UA、历史数据库 1~5 s 设备停机、批次异常 接口授权、历史库查询压力
IoT传感器 MQTT、LoRa、Modbus RTU 5 s~5 min 温升、振动、气体泄漏 电池寿命、丢包、网关覆盖
OPC UA OPC UA TCP/HTTPS 订阅发布,可配置 跨系统关联告警 证书管理、命名空间规划

复盘时建议检查三项指标:数据到达延迟P95、单点采集失败率、告警触发到推送的端到端耗时。若延迟主要来自轮询周期,应把该测点迁移到更高频通道;若失败率集中在某个网关,优先排查网络与电源,而不是先改告警规则。

数据采集不是一次性接线,而是持续治理。把协议选型、时间对齐、语义建模和采集健康度监控纳入日常运维,异常告警系统才能建立在可信的数据地基之上。