结合时序数据仓库设计方案,可以大幅优化之前的故障分类方案。TimescaleDB的超表结构非常适合电力设备的故障分析,因为它高效支持时间序列数据处理和分析。
FactPowerReadings
超表中的历史数据建立设备正常运行基线TimestampKey
进行时间维度聚合分析(小时、日、周趋势)DimXTU
和DimFTU
中的设备属性进行分层分类分析电压波动模式分析
负载变化模式分析
不平衡度时序分析
结合维度表中的地理位置信息(Latitude, Longitude)和时间信息:
区域关联分析
设备类型关联
利用TimescaleDB的时间序列功能分析故障发展过程:
实时分析层
短期分析层
长期分析层
利用TimescaleDB特有功能:
关联分析框架
FactPowerReadings
与遥信数据的时间关联设备状态转移模型
-- 为每个FTU建立工作日正常运行期间的电流基线
SELECT
ftu_key,
time_bucket('1 hour', reading_timestamp) AS hour_bucket,
percentile_cont(0.5) WITHIN GROUP (ORDER BY ia_current) AS median_ia,
percentile_cont(0.1) WITHIN GROUP (ORDER BY ia_current) AS p10_ia,
percentile_cont(0.9) WITHIN GROUP (ORDER BY ia_current) AS p90_ia,
percentile_cont(0.5) WITHIN GROUP (ORDER BY ib_current) AS median_ib,
percentile_cont(0.1) WITHIN GROUP (ORDER BY ib_current) AS p10_ib,
percentile_cont(0.9) WITHIN GROUP (ORDER BY ib_current) AS p90_ib,
percentile_cont(0.5) WITHIN GROUP (ORDER BY ic_current) AS median_ic,
percentile_cont(0.1) WITHIN GROUP (ORDER BY ic_current) AS p10_ic,
percentile_cont(0.9) WITHIN GROUP (ORDER BY ic_current) AS p90_ic
FROM factpowerreadings r
JOIN dimtime t ON r.timestampkey = t.timestampkey
WHERE
t.isweekend = FALSE AND
-- 正常运行期间的数据
r.ia_current BETWEEN 5 AND 20 AND
r.ib_current BETWEEN 5 AND 20 AND
r.ic_current BETWEEN 5 AND 20
GROUP BY ftu_key, hour_bucket;
-- 检测三相电流不平衡模式
WITH current_stats AS (
SELECT
ftu_key,
reading_timestamp,
ia_current, ib_current, ic_current,
(ia_current + ib_current + ic_current)/3 AS avg_current,
greatest(
abs(ia_current - (ia_current + ib_current + ic_current)/3),
abs(ib_current - (ia_current + ib_current + ic_current)/3),
abs(ic_current - (ia_current + ib_current + ic_current)/3)
) / ((ia_current + ib_current + ic_current)/3) AS unbalance_ratio
FROM factpowerreadings
WHERE
reading_timestamp > NOW() - INTERVAL '3 hours' AND
ia_current > 0 AND ib_current > 0 AND ic_current > 0
)
SELECT
ftu_key,
reading_timestamp,
unbalance_ratio,
CASE
WHEN unbalance_ratio > 0.3 THEN 'AC02-严重不平衡'
WHEN unbalance_ratio > 0.2 THEN 'AC02-中度不平衡'
WHEN unbalance_ratio > 0.1 THEN 'AC02-轻度不平衡'
END AS imbalance_status
FROM current_stats
WHERE unbalance_ratio > 0.1
ORDER BY ftu_key, reading_timestamp;
-- 检测短路故障特征
WITH voltage_drops AS (
SELECT
ftu_key,
reading_timestamp,
ua_voltage, ub_voltage, uc_voltage,
ia_current, ib_current, ic_current,
LAG(ua_voltage) OVER (PARTITION BY ftu_key ORDER BY reading_timestamp) AS prev_ua,
LAG(ub_voltage) OVER (PARTITION BY ftu_key ORDER BY reading_timestamp) AS prev_ub,
LAG(uc_voltage) OVER (PARTITION BY ftu_key ORDER BY reading_timestamp) AS prev_uc,
LAG(ia_current) OVER (PARTITION BY ftu_key ORDER BY reading_timestamp) AS prev_ia,
LAG(ib_current) OVER (PARTITION BY ftu_key ORDER BY reading_timestamp) AS prev_ib,
LAG(ic_current) OVER (PARTITION BY ftu_key ORDER BY reading_timestamp) AS prev_ic
FROM factpowerreadings
WHERE reading_timestamp > NOW() - INTERVAL '30 minutes'
)
SELECT
ftu_key,
reading_timestamp,
CASE
WHEN (ua_voltage/NULLIF(prev_ua,0) < 0.5 AND ub_voltage/NULLIF(prev_ub,0) < 0.5 AND uc_voltage/NULLIF(prev_uc,0) < 0.5)
AND (ia_current/NULLIF(prev_ia,0) > 3 OR ib_current/NULLIF(prev_ib,0) > 3 OR ic_current/NULLIF(prev_ic,0) > 3)
THEN 'SC01-三相短路'
WHEN ((ua_voltage/NULLIF(prev_ua,0) < 0.5 AND ub_voltage/NULLIF(prev_ub,0) < 0.5) OR
(ub_voltage/NULLIF(prev_ub,0) < 0.5 AND uc_voltage/NULLIF(prev_uc,0) < 0.5) OR
(ua_voltage/NULLIF(prev_ua,0) < 0.5 AND uc_voltage/NULLIF(prev_uc,0) < 0.5))
AND (ia_current/NULLIF(prev_ia,0) > 3 OR ib_current/NULLIF(prev_ib,0) > 3 OR ic_current/NULLIF(prev_ic,0) > 3)
THEN 'SC02-两相短路'
ELSE NULL
END AS short_circuit_type
FROM voltage_drops
WHERE
(ua_voltage/NULLIF(prev_ua,0) < 0.7 OR ub_voltage/NULLIF(prev_ub,0) < 0.7 OR uc_voltage/NULLIF(prev_uc,0) < 0.7)
AND (ia_current/NULLIF(prev_ia,0) > 2 OR ib_current/NULLIF(prev_ib,0) > 2 OR ic_current/NULLIF(prev_ic,0) > 2);
数据分区策略
FactPowerReadings
表的数据量调整chunk_time_interval时序模型库
分布式部署
第一阶段:基础时序模式识别
FactPowerReadings
的基本异常检测第二阶段:多源数据融合
第三阶段:高级分析与优化
通过融合TimescaleDB的时序数据仓库,这一方案能够从电力设备的历史运行数据中提取更丰富的时序特征,建立更准确的故障分类模型,最终实现更精准的故障预警和分类。