3. 设备层数据采集与协议适配

设备层是工厂数据链路的起点,也是数据质量最容易失控的地方。PLC、传感器、CNC、机器人四类设备在数据形态、更新频率、接口能力上差异极大:PLC 以周期性过程数据为主,传感器多为高频模拟量或开关量,CNC 关注程序号、刀具补偿、坐标与报警,机器人则关心关节角、TCP 位姿、运行模式与任务状态。采集方案不能只考虑“能不能读到”,还要考虑“读到的数据是否具备时间一致性、语义一致性和可追溯性”。

一、四类设备的数据源特征

PLC 是最典型的数据源。以西门子 S7-1200/1500 为例,过程映像区中的 I/Q 区、DB 数据块、M 存储区都可以被采集。采集时通常按“地址 + 数据类型 + 字节长度”描述一个点位,例如 DB100.DBD0 表示 DB100 中偏移 0 的双字,若按浮点解释则对应一个 32 位实数。PLC 数据具有强周期性,扫描周期通常在 1~20 ms,但采集侧不必也不应完全跟随扫描周期,否则会造成网络与网关过载。

传感器分为模拟量与数字量。模拟量如 4~20 mA 压力变送器,需要经过量程换算:若量程为 0~1.6 MPa,对应 4~20 mA,则 12 mA 对应 (12-4)/(20-4)×1.6 = 0.8 MPa。数字量如接近开关、光电开关,通常以布尔量或计数脉冲形式进入 PLC 或采集模块。传感器数据的关键是量程、单位、滤波与断线判断,例如 4 mA 以下应判定为断线而非零值。

CNC 与机器人属于“控制器型设备”。CNC 常见数据包括当前程序名、主轴转速、进给倍率、刀具号、机床坐标、报警号;机器人常见数据包括运行模式、程序号、关节角、TCP 坐标、IO 状态、报警码。这类设备往往不开放底层内存,而是通过厂商协议、OPC UA 服务器或 FOCAS、ADS、KRL 等专用接口暴露数据。采集时要注意“状态量”与“过程量”的区分:报警号是事件型数据,适合变化上报;关节角是周期型数据,适合定时采样。

二、工业协议适配:Modbus、OPC UA、Profinet、EtherCAT

Modbus 是最常见的轻量协议,分 RTU 与 TCP 两种。Modbus TCP 报文结构简单,功能码 03 读保持寄存器、04 读输入寄存器、01 读线圈。它的局限是语义弱:寄存器地址本身不携带单位、量程和数据类型,必须由采集侧维护“点位表”完成语义映射。例如寄存器 40001 读回 800,若点位表定义“0.1 ℃/字”,则实际温度为 80.0 ℃。

OPC UA 面向语义互操作,具备信息模型、类型系统和安全通道。它适合把 CNC、机器人、PLC 统一暴露为带命名空间和节点 ID 的地址空间,例如 ns=2;s=Machine1.SpindleSpeed。OPC UA 支持订阅与死区(Deadband),可以显著降低无效上报。配置时应关注采样间隔、发布间隔、队列深度和死区值四个参数,它们共同决定数据新鲜度与网络负载。

Profinet 与 EtherCAT 属于实时工业以太网。Profinet 常用于西门子生态,通过 GSDML 文件描述设备,采集侧通常以 IO 控制器或嗅探方式获取过程数据;EtherCAT 采用主从站与分布式时钟,周期可低至 100 μs 级,适合运动控制与高速 IO。二者都不是为“通用数据采集”设计的,直接接入需要专用网卡或主站栈,工程上更常见的做法是在控制器侧做数据镜像,再通过 OPC UA 或 MQTT 向上转发。

设备层数据采集与协议适配链路 设备数据源 PLC I/Q、DB、M 区 周期 1~20 ms 传感器 4~20 mA / 开关量 量程换算、断线判断 CNC 程序号、坐标、报警 FOCAS / OPC UA 机器人 关节角、TCP、模式 ADS / KRL / OPC UA 协议适配 Modbus TCP/RTU 功能码 03/04/01 点位表映射语义 OPC UA 节点 ID、订阅、死区 采样/发布/队列 Profinet GSDML、IO 过程数据 控制器侧镜像转发 EtherCAT 主从站、分布式时钟 周期 100 μs 级 采集网关 点位表 地址、类型、单位 量程、死区、周期 采集调度 轮询 / 订阅 / 变化上报 超时重试、断线缓存 数据预处理 滤波、去重、单位换算 时间戳、质量码 北向输出 MQTT / OPC UA / HTTP JSON 统一模型 上层应用 实时监控 秒级刷新 历史存储 时序数据库 报警分析 事件与阈值 MES / 看板 统一语义模型 原始 数据 协议 解析 统一 模型 采集侧不追求“最快”,而追求“时间一致、语义一致、可追溯”

三、采集网关配置的关键参数

采集网关的核心是一张点位表。每个点位至少包含:设备标识、协议类型、地址表达式、数据类型、字节序、单位、量程下限/上限、采集周期、死区、质量码规则。以 Modbus TCP 读取一台变频器输出频率为例,点位表可写成:

device: VFD-01
protocol: Modbus TCP
ip: 192.168.10.21  port: 502  unitId: 1
point: OutputFrequency
function: 03
address: 40001
dataType: uint16
scale: 0.01
unit: Hz
deadband: 0.05
period: 1000ms
quality: 若读超时或异常码非0,质量码=Bad

这里 scale: 0.01 表示寄存器原始值乘以 0.01 得到工程值。若读回 5000,则频率为 50.00 Hz。死区 0.05 Hz 表示变化小于该值不上报,避免稳态时产生大量重复数据。采集周期 1000 ms 是工程折中:变频器频率本身变化不快,1 s 足够反映趋势,又不会给网关和网络带来压力。

OPC UA 的配置重点不同。以采集一台机器人的关节角为例,需要先浏览地址空间找到节点,再设置订阅参数:

Endpoint: opc.tcp://192.168.10.50:4840
NodeId: ns=2;s=Robot1.Joint[1].ActualPosition
SamplingInterval: 100 ms
PublishingInterval: 200 ms
QueueSize: 5
Deadband: 0.01 deg

采样间隔决定服务器多久读一次节点值,发布间隔决定多久向客户端推送一次,队列深度决定网络抖动时能缓存多少个采样值。若采样 100 ms、发布 200 ms、队列 5,则正常情况下每次发布携带约 2 个采样值;若网络中断 1 s,队列最多保留 5 个值,超出部分被丢弃。因此队列深度不是越大越好,需要与业务对数据完整性的要求匹配。

四、数据预处理:从原始值到可用数据

预处理通常包含五类操作。第一是单位与量程换算,把寄存器整数、模拟量电流转换为工程量。第二是滤波,对压力、温度等慢变量可用一阶低通或滑动平均,例如 y[n] = 0.8×y[n-1] + 0.2×x[n],系数 0.2 越大响应越快、平滑越弱。第三是去重与死区,抑制稳态重复上报。第四是时间戳与质量码,每个数据点应携带采集时刻和设备质量状态,便于后续判断“是设备停了还是网络断了”。第五是异常标记,例如 4~20 mA 信号低于 3.6 mA 标记为断线,高于 21 mA 标记为超量程。

工程建议:采集周期、发布周期、死区三者要联合整定。先按业务最小可接受刷新率确定发布周期,再按信号变化速度确定采样周期,最后用死区压掉稳态噪声。不要为了“看起来实时”把周期设到 10 ms,否则网关 CPU、网络带宽和上层存储都会被无意义数据占满。

五、一个可执行的配置检查清单

检查项判断依据常见问题
点位地址与类型读回值与设备面板一致字节序错误导致浮点数乱码
量程与单位工程量与现场仪表一致忘记乘 scale,数值差 100 倍
采集周期网关 CPU 低于 60%周期过短导致轮询堆积
死区稳态无重复上报死区为 0,数据量暴涨
质量码断线时上层能识别断线仍上报旧值且质量码为 Good
时间戳与 NTP 偏差小于 100 ms网关本地时间未同步

完成上述配置后,判断采集是否成功不能只看“有数据”。应同时观察三点:数值是否与设备本地显示一致,质量码是否在断线时变为 Bad,时间戳是否连续且与上层服务器偏差可控。只有这三者同时成立,设备层数据才真正具备进入分层协同工程的基础。