2、PLC数据采集基础:PLC通讯协议概述(Modbus、OPC UA)、数据点(Tag)与时间序列的概念

在厂务数据清洗流程中,PLC(可编程逻辑控制器)是数据产生的源头。理解PLC如何通过通讯协议对外发送数据、数据点(Tag)的组织方式以及时间序列的基本结构,是后续进行异常值过滤与处理的前提。本章将围绕这三个核心概念展开,为数据清洗建立坚实的认知基础。

2.1 PLC通讯协议概述

PLC与上位机(如SCADA系统、数据采集服务器)之间的数据交换依赖标准的通讯协议。在工业物联网场景下,Modbus 和 OPC UA 是最主流的两种协议,它们在数据模型、传输方式和适用场景上存在显著差异。

核心观点: 协议决定了数据如何被“打包”和“解读”。理解协议特性,有助于在数据清洗阶段识别因通讯中断、数据包错位或协议转换错误导致的异常值。

2.1.1 Modbus协议

Modbus是一种应用层报文传输协议,诞生于1979年,因其简单、开放、易于部署的特点,至今仍是工业现场设备互联的首选。它主要采用主从(Master/Slave)架构,即一个主站(如数据采集服务器)发起请求,多个从站(如PLC、传感器)响应。

Modbus支持多种物理层传输方式,最常见的是串行链路(Modbus RTU/ASCII)和TCP/IP网络(Modbus TCP)。

特性 Modbus RTU Modbus TCP
物理层 RS-232 / RS-485 以太网 (TCP/IP)
传输模式 二进制编码,紧凑高效 在TCP报文基础上封装MBAP头
地址空间 0-247 (从站地址) IP地址 + 单元标识符
数据模型 离散量输入、线圈、输入寄存器、保持寄存器 同上,通过功能码访问
典型应用 短距离、低速、抗干扰强的现场总线 长距离、高速、与IT系统集成

在数据清洗视角下,Modbus协议存在以下关键点:

  • 数据粒度: 寄存器(16位)是基本数据单元,一个浮点数或32位整数需要占用2个连续寄存器,存在字节序(Big-Endian / Little-Endian)问题,配置错误会导致数据“乱码”或异常跳变。
  • 无时间戳: Modbus协议本身不携带时间戳,数据到达时间由上位机打标。这意味着网络延迟或抖动会引入时间序列的不均匀性,是清洗时需要处理的“时间戳抖动”问题。
  • 通讯中断: 主站超时未收到从站响应时,通常会返回一个预设的“坏值”(如-9999或NaN),这是数据清洗中必须过滤的典型异常值。
数据清洗提示: 在采集Modbus数据时,务必记录每个数据点的“质量戳”(Quality Flag)。如果协议层未提供,建议在采集程序中增加“通讯超时”和“数据刷新时间”字段,作为后续异常值判定的辅助依据。

2.1.2 OPC UA协议

OPC统一架构(OPC UA, Unified Architecture)是新一代的工业通讯标准,它不再局限于Windows平台,而是面向服务架构(SOA),支持跨平台、高安全性和丰富的信息模型。与Modbus相比,OPC UA更像是一个“数据平台”而非简单的传输协议。

OPC UA的核心优势在于其信息模型:它允许服务器(如PLC)以对象、变量、方法的形式暴露数据,并附带丰富的元数据(如工程单位、数据范围、时间戳、质量戳)。

特性 Modbus OPC UA
数据模型 扁平寄存器地址 面向对象、层次化节点
元数据 无(需外部映射) 自带工程单位、描述、范围
时间戳 无(由客户端生成) 服务器端时间戳(高精度)
安全性 弱(无认证加密) 强(支持签名与加密)
发现机制 手动配置从站地址 自动发现、浏览地址空间

对于数据清洗而言,OPC UA提供了更“干净”的数据基础:

  • 自带时间戳: 服务器端时间戳通常与PLC扫描周期同步,减少了因网络传输引入的时间不确定性。
  • 质量戳(Quality): OPC UA的每个数据值都附带一个质量属性(Good/Uncertain/Bad),清洗程序可以直接根据质量戳过滤掉“Bad”或“Uncertain”的数据点,无需额外逻辑判断。
  • 数据变化订阅: 支持按数据变化或周期上报,避免了轮询带来的冗余数据,但也可能因死区设置不当导致数据稀疏,影响时间序列分析。
注意: 虽然OPC UA提供了丰富的元数据,但实际部署中,PLC工程师可能未正确配置工程单位或数据范围。数据清洗专家仍需对原始数据进行合理性校验,不能完全依赖元数据。

2.2 数据点(Tag)的概念

在PLC和上位机系统中,一个数据点(Tag) 代表一个具体的、可寻址的物理量或状态量。它是数据采集的最小逻辑单元。例如,一个温度传感器的当前值、一个水泵的运行状态、一个阀门的开度指令,都可以映射为一个Tag。

一个完整的Tag定义通常包含以下属性:

  • Tag名称: 唯一标识,如 Boiler_Temperature_001。
  • 数据地址: 协议层面的寻址信息,如Modbus的寄存器地址 40001,或OPC UA的节点ID ns=2;i=1234。
  • 数据类型: 如 Float、Integer、Boolean、String。
  • 工程单位: 如 ℃、kPa、m³/h。
  • 读写属性: 只读(Read Only)、读写(Read/Write)。

在数据清洗流程中,Tag的命名规范和数据类型一致性至关重要。混乱的命名(如大小写混用、中英文混搭)会极大增加清洗脚本的复杂度。

最佳实践: 建议在PLC编程或SCADA组态阶段,就建立统一的Tag命名规范。例如:[设备编号]_[物理量]_[序号]。数据清洗阶段,可以通过正则表达式或字符串解析自动提取Tag的元信息。

2.3 时间序列的概念

当PLC数据点(Tag)按照时间顺序被连续采集并存储时,就形成了时间序列。时间序列是厂务数据清洗的核心处理对象。一个典型的时间序列数据点包含三个要素:时间戳、数值、质量戳。

在工业物联网场景下,时间序列具有以下特征:

  • 等间隔 vs 非等间隔: 理想情况下,数据按固定周期(如1秒、1分钟)采集。但由于网络延迟、PLC扫描周期抖动、OPC UA订阅死区等因素,实际数据往往是非等间隔的。
  • 多维度: 一个厂务系统可能同时采集数千个Tag,每个Tag都是一个独立的时间序列,它们之间可能存在强关联(如温度与压力)。
  • 数据质量标签: 每个时间点都应附带质量信息,用于区分“正常数据”、“可疑数据”和“无效数据”。

下面的SVG图展示了从PLC物理世界到时间序列数据存储的完整链路,以及数据清洗在其中的位置。

PLC数据采集与时间序列形成链路 PLC数据采集与时间序列形成链路 物理世界 传感器 / 执行器 PLC 控制器 扫描周期 100ms 通讯协议 Modbus / OPC UA 数据采集服务 打标 / 缓存 信号 数据包 报文 时间序列数据库(TSDB) Tag: Temp_01 值: 25.3 ℃ Tag: Press_01 值: 101.2 kPa Tag: Flow_01 值: 12.5 m³/h Tag: Status_01 值: 1 (运行) Tag: Level_01 值: 55.0 % T1 T2 T3 T4 T5 T6 数据清洗引擎 异常值过滤 / 缺失值填充 / 重采样 原始时间序列 清洗后数据 分析 / 报表 / 告警

2.4 数据点与时间序列的关系

数据点(Tag)是时间序列的“列”,而时间戳是时间序列的“行”。一个完整的时间序列数据集,可以看作是一个二维表格:

时间戳 (Timestamp) Tag_Temp_01 (℃) Tag_Press_01 (kPa) Tag_Status_01 质量戳 (Quality)
2025-01-15 10:00:00.000 25.3 101.2 1 Good
2025-01-15 10:00:00.100 25.4 101.3 1 Good
2025-01-15 10:00:00.200 25.3 101.1 1 Good
2025-01-15 10:00:00.300 25.5 101.4 0 Uncertain
2025-01-15 10:00:00.400 25.3 101.2 1 Good

在数据清洗过程中,我们通常以时间戳为索引,对每个Tag列进行独立的异常值检测,同时也会利用多Tag之间的关联关系(如压力与流量的物理约束)进行交叉验证。

清洗策略: 对于OPC UA采集的数据,优先使用质量戳(Quality)进行第一轮过滤;对于Modbus采集的数据,需要结合时间戳间隔的均匀性和数值的物理范围进行第二轮过滤。两种协议的数据在进入清洗引擎前,应统一转换为标准的时间序列格式(如Pandas DataFrame)。

2.5 本章小结