2. SCADA实时数据库与历史数据存储机制
SCADA系统的数据存储并不是“把采集到的值写进一张表”这么简单。它通常由两层协同完成:实时数据库负责当前值的高速读写与快速刷新,历史数据库负责长期归档、压缩与追溯查询。理解这两层之间的分工,是后续做异常诊断与数据治理的前提——因为很多“数据异常”并非现场设备故障,而是测点模型、时间戳或质量标记在存储环节被处理成了另一种形态。
一、测点模型:数据的“身份证”
SCADA中每一个可采集的量都对应一个测点(Tag / Point)。测点模型定义了该点的身份与行为,典型字段包括:
- 测点标识:如
SUB1.BAY03.PA101,通常按“厂站-间隔-设备-量测类型”分层命名,便于批量检索与权限划分。 - 数据类型与量纲:模拟量(float)、状态量(bool)、累计量(int64)等,以及单位(kV、A、MW、℃)。
- 工程转换:原始码值与工程量之间的线性或分段映射,例如
Eng = Raw × 0.1 + 0。 - 死区(Deadband):变化量小于阈值时不入库,用于抑制噪声、降低存储量。
- 量程与限值:用于越限判断和坏值识别。
- 时标来源:由RTU/测控装置打时标,还是由前置采集程序打时标。
测点模型一旦定义错误,后续所有数据都会“带病运行”。例如把累计电量点误配为瞬时量,历史曲线会出现锯齿;把时标来源配错,则同一事件在不同系统中会落在不同时刻。
二、时间戳对齐:让不同来源的数据可比
SCADA数据来自不同装置、不同通信通道,到达前置机的时刻并不等于现场发生的时刻。因此需要区分三类时间:
- 事件时间(Source Timestamp):现场装置记录的变化时刻,最接近真实物理事件。
- 采集时间(Acquisition Time):前置程序收到报文的时刻。
- 入库时间(Storage Time):写入历史库的时刻。
诊断时应优先使用事件时间。当装置不支持时标或时标精度不足时,才退化为采集时间。多源数据对齐常用两种方式:最近邻对齐(取最接近目标时刻的样本)和插值对齐(线性插值到统一时间栅格)。对于开关量,插值没有意义,只能采用保持(前值保持)或最近邻。
三、压缩存储:旋转门与死区
历史库不可能保存每一个原始采样点。工业上最常用的是旋转门压缩(Swinging Door Trending, SDT):为每个测点维护一个以当前保留点为起点的“门”,新点若落在门内则丢弃,落在门外则保留该点并重新开门。压缩精度由压缩偏差控制,偏差越大,保留点越少,曲线越“折线化”。
压缩带来的副作用是:历史曲线上的“突变”可能只是压缩后的折线拐点,而非真实跳变。因此诊断异常时,不能只看压缩后的归档值,必要时应回查原始采样缓存或提高该测点的压缩精度。
四、数据质量标记:区分“真值”与“可疑值”
SCADA数据必须携带质量码,否则无法判断一个值是真实测量、通信中断还是人工置数。常见质量标记包括:
- Good:正常有效。
- Bad / Invalid:通道中断、装置故障、越量程。
- Questionable:超时未刷新、时钟异常、疑似漂移。
- Substituted:人工置数或仿真值。
- Stale:值长时间未更新,可能已过期。
质量码通常与数值一起存储。查询接口应支持按质量过滤,例如只取 Good 数据做统计,避免坏值污染平均值、电量累计和趋势分析。
五、读取接口:实时与历史的访问方式
实时库通常提供订阅/推送接口(如OPC UA Subscription、IEC 61850报告),适合画面刷新与告警;历史库提供查询接口(如SQL、REST、OPC HDA),适合趋势、报表与事后分析。读取时需关注:查询时间范围、采样间隔、聚合方式(原始/平均/最大/最小)、质量过滤条件、返回点数上限。
六、一个可复用的诊断检查顺序
当发现某条曲线“异常”时,建议按以下顺序排查,而不是直接怀疑设备:
- 看质量码:若为 Bad 或 Stale,说明数据本身不可信,应先查通道与装置。
- 核对时间戳:确认事件时间与采集时间是否被混用,各站时钟是否一致。
- 检查压缩设置:折线拐点是否由压缩偏差造成,必要时回查原始采样。
- 确认测点模型:类型、量纲、工程转换、死区是否与现场一致。
- 最后才分析物理量本身:在数据可信的前提下,再判断是否真实越限或漂移。