4. SCADA数据采集与预处理

SCADA系统采集到的原始数据,几乎不可能直接用于能源报表统计。现场RTU/PLC上传的遥测值往往夹杂着重复记录、瞬时跳变、通信中断造成的空档,以及各站点时钟不一致带来的时间错位。如果跳过预处理直接做班次能耗、日累计或同比分析,报表数字会出现明显偏差。本节围绕采集周期、死区设置、异常值识别、缺失值处理、时间戳对齐和数据清洗六个环节,说明从原始点值到可用数据集的完整处理链路。

采集周期与死区设置:决定数据密度与存储成本

采集周期指SCADA轮询或设备主动上送的时间间隔。周期越短,数据越密,越能捕捉负荷波动,但存储和计算压力也越大。工程上通常按用途分层:电参量(有功功率、电流)用1s~5s周期,用于趋势和需量分析;温度、压力等慢变量用10s~60s;电能量累计值(kWh)用1min或更长周期,因为累计值本身单调递增,短周期采集只会产生大量重复值。

死区(Deadband)是抑制无效存储的关键参数。当新采样值与上次存储值之差小于死区阈值时,不写入历史库。死区分为绝对死区和百分比死区:绝对死区如“功率变化超过0.5kW才记录”,百分比死区如“变化超过量程的0.2%才记录”。死区设置过小,历史库被噪声填满;设置过大,会漏掉真实的小幅爬坡。对能耗报表而言,累计电能量点通常不设死区或设极小死区,因为累计值一旦漏记,积分结果就会偏小。

异常值识别:先定义“正常”的边界

异常值识别不能只靠“超出量程”这一条。常见异常包括:量程越限(如功率为负、温度为-999)、物理不可能跳变(1s内功率从10kW跳到500kW)、长时间恒定不变(传感器卡死)、以及通信恢复后的补传重复值。实操中常用三类判据:

  • 范围判据:设定每个测点的合理上下限,如有功功率0~800kW,超出即标记为可疑。
  • 变化率判据:计算相邻点差值,超过“量程×允许变化率×时间间隔”则判为跳变。例如量程800kW、允许每分钟变化20%,则1min内变化超过160kW即异常。
  • 持续不变判据:连续N个采集周期数值完全一致且非零,标记为疑似卡死,N通常取10~30。

识别出的异常值不应直接删除,而应先打标签,再决定是置空、插值还是保留待人工确认。这样既保留可追溯性,也避免误杀真实工况。

缺失值处理与时间戳对齐

缺失值主要来自通信中断、设备重启和采集程序异常。处理前先区分“真缺失”和“假缺失”:如果历史库中因死区未记录,但实际值未变,应视为保持值而非缺失。真缺失的常用处理方式有:前值填充(适用于温度等缓变量)、线性插值(适用于功率等连续量)、均值填充(适用于短时中断)和标记剔除(适用于长时间中断)。对能耗累计值,缺失期间不能用插值,应按前后累计值差补算,或标记该时段为无效。

时间戳对齐解决的是多站点时钟不一致问题。SCADA各RTU时钟可能相差数秒到数分钟,若直接按本地时间聚合,同一时刻的功率会被分到不同分钟。对齐方法通常以服务器时间为基准,对每个点值记录“采集时间”和“服务器接收时间”,聚合时统一使用服务器接收时间;对支持对时的设备,先通过NTP或SNTP将时钟偏差控制在1s内,再按整分钟、整5分钟或整15分钟做时间片归集。对齐后,每个时间片内可能有多个值,需明确取值规则:取首值、末值、均值或最大值,能耗报表中功率通常取均值,累计值取末值。

SCADA原始数据 → 预处理 → 可用数据集 原始采集点值 RTU/PLC 上送 含重复、跳变、空档 各站时钟不一致 预处理核心环节 异常值识别 范围/变化率/卡死 缺失值处理 插值/前值/剔除 时间戳对齐 NTP/时间片 死区过滤 → 打标签 → 归集 → 取值规则 可用数据集 统一时间片 无异常、无缺失 供报表聚合 时间戳对齐与时间片归集示意(示例) 站点A 10:00:02 10:01:01 10:02:03 10:03:00 10:04:02 站点B 10:00:35 10:01:33 10:02:36 10:03:34 10:04:35 10:00 片 10:01 片 10:02 片 10:03 片 10:04 片 对齐后:每站每片取均值(功率)或末值(累计电量),再进入报表聚合

数据清洗实战:从原始点到报表可用值

下面以一个10kV配电回路的日能耗统计为例,说明完整清洗过程。假设某测点“有功功率”量程0~800kW,采集周期5s,死区0.5kW,历史库中某日10:00~10:05的原始记录如下(示例数据):

时间(服务器)      功率(kW)   状态
10:00:02          120.3     正常
10:00:07          120.6     正常
10:00:12          120.4     正常
10:00:17          999.9     越限
10:00:22          121.0     正常
10:00:27          121.2     正常
10:00:32          --        通信中断
10:00:37          --        通信中断
10:00:42          121.5     正常
10:00:47          121.5     正常
10:00:52          121.5     正常
10:00:57          121.5     正常
10:01:02          121.5     正常
10:01:07          121.5     正常
10:01:12          121.5     正常
10:01:17          121.5     正常
10:01:22          121.5     正常
10:01:27          121.5     正常
10:01:32          121.5     正常
10:01:37          121.5     正常
10:01:42          121.5     正常
10:01:47          121.5     正常
10:01:52          121.5     正常
10:01:57          121.5     正常
10:02:02          121.5     正常

清洗步骤:第一步,标记10:00:17的999.9为越限异常,置空;第二步,10:00:32和10:00:37为通信中断缺失,因中断仅10s,采用线性插值,补为121.3和121.4;第三步,10:00:47之后连续多个121.5完全一致,触发“持续不变”判据,标记为疑似卡死,需结合电流或开关状态确认,若确认传感器卡死则整段置空;第四步,按1min时间片归集,10:00片取均值,10:01片因卡死标记为无效,10:02片正常。最终进入报表的10:00片功率均值约为121.1kW,10:01片标记无效不参与能耗积分。

注意:累计电能量点(kWh)不能做线性插值。若10:00:32~10:00:37中断,应取中断前末值和恢复后首值,按时间比例补算电量,或直接标记该时段无效,避免能耗被低估或高估。

清洗质量检查与可追溯

清洗完成后,应输出一份质量摘要,至少包含:原始点数、异常标记数、缺失补全数、无效时段数、最终有效点数。对每个被修改的点,保留原始值、修改值、修改原因和修改时间,写入清洗日志。这样在报表数字被质疑时,可以快速定位是采集问题、死区问题还是清洗规则问题。能源报表的可信度,最终取决于这条从原始点值到统计值的链路是否每一步都有据可查。

实操建议:把异常判据、死区值、插值规则、时间片长度做成配置表,按测点类型分别维护,而不是写死在代码里。这样新增站点或调整量程时,只需改配置,不必重新发版。