4. 工业数据采集与设备联网实战

在智能制造系统工程师的日常工作中,数据采集与设备联网是最贴近现场、也最容易“踩坑”的一环。面试官在这一节通常不会只问“OPC UA 和 Modbus 有什么区别”,而是会追问:现场有 12 台不同品牌的 PLC,你怎么把它们的数据稳定地送进 MES?采集上来的温度值偶尔跳变成 3276.7,你怎么处理?这些问题背后,考的是协议选型、边缘计算、数据清洗和实时性保障的综合能力。

一、先厘清协议栈的分工

很多候选人会把 OPC UA、Modbus、MQTT 混为一谈,其实它们处在不同层级。Modbus(RTU/TCP)是典型的现场总线协议,解决的是“PLC 与采集程序之间怎么读写寄存器”;OPC UA 是面向信息建模的工业通信标准,解决的是“不同厂商设备如何用统一语义交换数据”;MQTT 是轻量级消息中间件协议,解决的是“边缘侧如何把数据高效、可靠地送到云端或平台”。SCADA 则是上位监控系统,它既可以通过 Modbus 驱动直连 PLC,也可以通过 OPC UA 客户端订阅数据。

面试中一个高频场景是:车间有西门子 S7-1200、三菱 FX5U、欧姆龙 NX1P2 三种 PLC,如何统一采集?合理的回答是:边缘网关分别用 S7 协议、MC 协议、FINS 协议与各 PLC 通信,在网关内部统一映射为 OPC UA 信息模型或 MQTT 主题,再向上层发布。这样上层系统不需要关心底层差异。

二、边缘网关的采集配置实战

以一台支持 Modbus TCP 的温控仪表为例,假设其 IP 为 192.168.1.50,端口 502,从站地址 1,温度值存放在保持寄存器 40001(对应协议地址 0x0000),数据类型为 16 位有符号整数,缩放系数 0.1。在边缘网关中,采集点配置通常包含以下字段:

点位名称: Reactor_Temp
协议: Modbus TCP
从站地址: 1
功能码: 03 (读保持寄存器)
起始地址: 0
寄存器数量: 1
数据类型: int16
字节序: 大端 (Big-Endian)
缩放: raw * 0.1
单位: ℃
采集周期: 500 ms
死区: 0.2 ℃

这里有两个容易被忽略的细节。第一是字节序。Modbus 协议本身规定大端,但部分仪表厂商会按小端存放 32 位浮点数,如果读出来是乱码,需要调整字节序或字序。第二是死区设置。如果温度稳定在 85.0℃,每 500ms 都上报一次,一天就是 17 万条重复数据。设置 0.2℃ 死区后,只有变化超过阈值才上报,能显著降低带宽和存储压力。

三、数据清洗的典型规则

采集上来的原始数据往往不能直接用。常见问题包括:量程溢出(如 3276.7 表示传感器断线)、瞬时跳变、时间戳缺失、重复上报。数据清洗通常在边缘侧完成,规则可以这样设计:

问题类型判断依据处理动作
量程溢出raw 值等于 32767 或 -32768标记为 Bad,不参与计算
瞬时跳变相邻两点变化 > 量程的 20%暂存,连续 3 点确认后才上报
时间戳缺失网关本地时间与 NTP 偏差 > 1s用网关接收时间补全并标记
重复上报同一时间戳、同一值连续出现去重,仅保留首条

以跳变过滤为例,假设反应釜温度量程为 0~200℃,当前值为 85.0℃,下一采集周期读到 160.0℃,变化量 75℃ 超过 20% 量程(40℃),则暂存该值。若后续两点分别为 160.2℃、160.1℃,则确认跳变有效并补发;若下一点回到 85.1℃,则判定为干扰,丢弃 160.0℃。这种“连续确认”策略能有效抑制电磁干扰导致的毛刺。

四、实时性保障的关键手段

面试中常问“如何保证数据实时性”,回答不能停留在“用 MQTT 就快了”。实时性取决于采集周期、网络传输、处理链路和上报机制四个环节。具体手段包括:

  • 采集周期分级:安全相关点位 100ms,工艺参数 500ms,能耗数据 5s,避免所有点位一刀切。
  • 边缘缓存与断线续传:网关本地用 SQLite 或环形缓冲区暂存,网络恢复后按时间顺序补发,QoS 设为 1。
  • 时间同步:网关与 PLC 均通过 NTP 对时,偏差控制在 10ms 内,否则时序分析会失真。
  • MQTT 主题设计:采用 factory/workshop/line/device/telemetry 层级,配合 QoS 和 retained 标志,避免订阅风暴。
  • 背压处理:当上行带宽不足时,网关应优先丢弃死区内的重复数据,而不是阻塞采集线程。

一个可量化的判断依据是端到端延迟。假设采集周期 500ms,网关处理 20ms,MQTT 上行 80ms,平台入库 50ms,则端到端约 650ms。如果面试官问“能否做到 200ms”,就需要把采集周期降到 100ms,并采用边缘侧规则引擎先做聚合,只上报变化和告警。

五、SCADA 与 OPC UA 的协同

在实际项目中,SCADA 通常作为 OPC UA 客户端订阅边缘网关发布的节点。网关把 Modbus 寄存器映射为 OPC UA 变量节点,例如 ns=2;s=Reactor.Temp,SCADA 只需订阅该节点即可。这样做的好处是:SCADA 不再直接依赖 PLC 地址,更换 PLC 时只需修改网关映射,上位画面无需改动。面试中如果能说出“关注点分离”和“信息模型解耦”,会明显加分。

六、可直接使用的采集点配置检查表

以下检查表可用于现场调试前的自检,也可作为面试中回答“你如何保证采集质量”的结构化依据:

检查项合格标准常见问题
协议与地址功能码、寄存器地址、从站号与仪表手册一致40001 与 0x0000 混淆
数据类型与字节序int16/float32 与字节序匹配浮点数读出乱码
缩放与单位raw × 系数 = 工程量,单位统一忘记乘 0.1
采集周期按点位分级,无统一 100ms全量高频采集
死区模拟量设置合理死区重复数据泛滥
时间同步NTP 偏差 < 10ms时间戳跳变
断线续传本地缓存 + QoS 1网络恢复后数据丢失
异常值处理溢出、跳变有明确规则脏数据直接入库

把这套检查表走一遍,基本能覆盖 80% 的现场采集问题。面试时如果能把“协议选型—网关配置—数据清洗—实时性保障—SCADA 协同”这条链路讲清楚,并给出具体的寄存器地址、缩放系数和死区参数,就说明你不仅懂概念,而且真正动手做过。