4. 数据采集原理
工业物联网网关位于OT与IT的交汇点,其核心职责是将现场设备层(PLC、传感器、CNC、电表、变频器等)产生的物理量或寄存器数据,转换为上层平台可识别的结构化信息。理解数据采集原理,是设计稳定、高效、可维护网关系统的前提。本章将围绕采集的三种基本流程(轮询、订阅、上报)、采样周期的设定逻辑、数据格式与字节序的解析、数据类型转换的陷阱,以及采集精度与实时性之间的工程权衡展开深入讲解。
4.1 数据采集的三种基本流程:轮询、订阅与上报
核心原理:工业数据采集本质上是网关与设备之间的一种“信息协商”过程。根据设备通信能力、协议特性以及数据实时性要求,采集流程可分为三种典型模式:轮询(Polling)、订阅(Subscription)和上报(Report-by-Exception)。轮询是网关主动发起请求,设备被动响应,适用于Modbus RTU/TCP、S7comm、三菱MC等传统请求-响应型协议。订阅则是网关向设备注册感兴趣的数据项,设备在数据变化时主动推送,OPC UA的订阅机制和MQTT的发布/订阅模型是典型代表。上报模式则更强调设备端的主动性,设备根据自身逻辑(如定时、事件触发)主动向网关发送数据,常见于DL/T645电表主动上报、某些无线传感器网络。
判断方法与操作流程:选择哪种模式,需要从设备能力、网络拓扑和实时性要求三个维度综合判断。具体操作流程如下:
- 设备能力评估:查阅设备手册,确认其支持的协议类型。若仅支持Modbus RTU,则只能采用轮询;若支持OPC UA,则优先考虑订阅。
- 网络拓扑分析:若设备位于同一局域网且数量较少(<50台),轮询即可满足;若设备分散在多个子网或通过4G/5G无线接入,订阅/上报模式可显著节省带宽。
- 实时性需求确认:对于需要毫秒级响应的联锁保护信号,必须采用订阅或上报模式;对于温度、液位等缓变信号,轮询周期可放宽至秒级。
| 对比维度 | 轮询(Polling) | 订阅(Subscription) | 上报(Report) |
|---|---|---|---|
| 发起方 | 网关主动 | 网关注册,设备推送 | 设备主动 |
| 典型协议 | Modbus, S7comm, MC | OPC UA, MQTT | DL/T645, 私有协议 |
| 实时性 | 受轮询周期限制 | 事件驱动,实时性高 | 设备自主决定,不可控 |
| 带宽占用 | 高(周期请求) | 低(仅变化时传输) | 低(按需上报) |
| 适用场景 | PLC寄存器读取、传统仪表 | OPC UA服务器、现代PLC | 智能电表、无线传感器 |
4.2 采样周期设定:从设备时序到业务需求的映射
核心原理:采样周期决定了数据采集的时间分辨率。根据奈奎斯特采样定理,采样频率必须大于信号最高频率的两倍才能无失真地重建信号。但在工业场景中,采样周期并非越短越好——过短的周期会加重设备通信负担、增加网关CPU占用率、产生大量冗余数据。合理的采样周期应基于信号变化速率、业务决策粒度和设备通信能力三者之间的平衡。
操作流程:设定采样周期可遵循以下步骤:
- 第一步:信号分类。将采集点分为快速变化(振动、电流、压力波动)、中速变化(温度、流量、液位)和慢速变化(累计量、状态字)。
- 第二步:确定最小采样周期。快速信号建议100-500ms,中速信号1-5s,慢速信号10-60s。
- 第三步:考虑设备通信端口数量。若网关通过串口连接多台设备,总轮询时间 = 单台设备轮询时间 × 设备数量,采样周期必须大于该总时间。
- 第四步:与业务需求对齐。若上层MES系统只需要分钟级聚合数据,则无需秒级采样,可适当放宽周期以降低系统负载。
4.3 数据格式、字节序与数据类型转换
核心原理:工业设备的数据存储格式千差万别,网关必须正确解析才能避免“数据错位”或“数值异常”。三个关键概念是:数据格式(如16位有符号整数、32位浮点数、BCD码)、字节序(大端Big-Endian与小端Little-Endian)以及数据类型转换(如原始值到工程值的缩放)。Modbus协议中,寄存器是16位(2字节)为单位,32位数据(如浮点数)需占用两个连续寄存器,其字节排列顺序由设备厂商决定,常见的有ABCD(大端)、CDAB(中端)、BADC(小端)等。
判断方法与操作流程:
- 确认数据格式:查阅设备寄存器表,确认每个地址对应的数据类型(如40001是16位无符号整数,40003-40004是32位浮点数)。
- 确定字节序:通过读取已知值来验证。例如,写入一个已知浮点数1.0(十六进制0x3F800000),观察设备返回的字节顺序,即可判断是大端还是小端。
- 实施类型转换:在网关中配置转换规则,包括:
- 缩放:原始值 × 系数 + 偏移量 = 工程值(如4-20mA对应0-100℃)。
- 位操作:提取状态字中的某一位作为布尔量。
- BCD解码:将BCD码转换为十进制整数。
// 示例:Modbus 32位浮点数解析(大端模式)
// 寄存器40003 = 0x3F80, 寄存器40004 = 0x0000
uint16_t reg_high = 0x3F80;
uint16_t reg_low = 0x0000;
uint32_t combined = (reg_high << 16) | reg_low; // 0x3F800000
float value = *(float*)&combined; // 1.0
// 若为小端模式,则 combined = (reg_low << 16) | reg_high;
| 字节序类型 | 寄存器顺序 | 示例(浮点数1.0) | 常见设备 |
|---|---|---|---|
| 大端(ABCD) | 高字节在前 | 3F80 0000 | 西门子S7、施耐德 |
| 小端(CDAB) | 低字节在前 | 0000 3F80 | 罗克韦尔、部分国产仪表 |
| 中端(BADC) | 字内交换 | 803F 0000 | ABB、部分电力仪表 |
4.4 采集精度与实时性的权衡
核心原理:采集精度和实时性是一对天然矛盾。高精度往往意味着更长的采样时间(如高分辨率ADC需要更多转换时间)、更大的数据量(如32位浮点数比16位整数多一倍字节)以及更复杂的处理逻辑。而高实时性则要求快速响应、低延迟传输,可能牺牲数据完整性或精度。在网关设计中,需要根据应用场景建立分级策略。
权衡策略:
- 分级采集:将数据分为控制级(毫秒级,高实时)、监视级(百毫秒级,中等精度)和统计级(秒级,高精度)。不同级别采用不同的采样周期和传输优先级。
- 死区设置:对于模拟量,设置变化死区(如温度变化超过0.5℃才上报),可大幅减少无效数据传输,同时保证关键变化不丢失。
- 数据压缩:在网关本地进行数据预处理(如取平均值、最大值、最小值),将原始数据压缩为统计特征值后上传,既降低带宽需求,又保留数据特征。
总结复盘:数据采集原理的核心在于理解设备通信的底层机制,并根据实际业务需求做出合理的工程决策。轮询、订阅、上报三种模式各有适用场景,采样周期需要结合设备能力和业务需求综合设定,字节序和数据类型转换是数据正确性的基石,而精度与实时性的权衡则需要通过分级采集、死区设置和边缘计算等手段来实现。在实际项目中,建议先进行小范围试点,验证采集配置的正确性和系统稳定性,再全面推广。