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),这是数据清洗中必须过滤的典型异常值。
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”的数据点,无需额外逻辑判断。
- 数据变化订阅: 支持按数据变化或周期上报,避免了轮询带来的冗余数据,但也可能因死区设置不当导致数据稀疏,影响时间序列分析。
2.2 数据点(Tag)的概念
在PLC和上位机系统中,一个数据点(Tag) 代表一个具体的、可寻址的物理量或状态量。它是数据采集的最小逻辑单元。例如,一个温度传感器的当前值、一个水泵的运行状态、一个阀门的开度指令,都可以映射为一个Tag。
一个完整的Tag定义通常包含以下属性:
- Tag名称: 唯一标识,如
Boiler_Temperature_001。 - 数据地址: 协议层面的寻址信息,如Modbus的寄存器地址
40001,或OPC UA的节点IDns=2;i=1234。 - 数据类型: 如
Float、Integer、Boolean、String。 - 工程单位: 如
℃、kPa、m³/h。 - 读写属性: 只读(Read Only)、读写(Read/Write)。
在数据清洗流程中,Tag的命名规范和数据类型一致性至关重要。混乱的命名(如大小写混用、中英文混搭)会极大增加清洗脚本的复杂度。
[设备编号]_[物理量]_[序号]。数据清洗阶段,可以通过正则表达式或字符串解析自动提取Tag的元信息。
2.3 时间序列的概念
当PLC数据点(Tag)按照时间顺序被连续采集并存储时,就形成了时间序列。时间序列是厂务数据清洗的核心处理对象。一个典型的时间序列数据点包含三个要素:时间戳、数值、质量戳。
在工业物联网场景下,时间序列具有以下特征:
- 等间隔 vs 非等间隔: 理想情况下,数据按固定周期(如1秒、1分钟)采集。但由于网络延迟、PLC扫描周期抖动、OPC UA订阅死区等因素,实际数据往往是非等间隔的。
- 多维度: 一个厂务系统可能同时采集数千个Tag,每个Tag都是一个独立的时间序列,它们之间可能存在强关联(如温度与压力)。
- 数据质量标签: 每个时间点都应附带质量信息,用于区分“正常数据”、“可疑数据”和“无效数据”。
下面的SVG图展示了从PLC物理世界到时间序列数据存储的完整链路,以及数据清洗在其中的位置。
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之间的关联关系(如压力与流量的物理约束)进行交叉验证。