|
@@ -26,6 +26,15 @@ try:
|
|
|
except Exception:
|
|
except Exception:
|
|
|
_RAW_STR = os.environ.get('WINDSCADA_RUDONG_SRC') or str(ROOT / 'data' / 'raw')
|
|
_RAW_STR = os.environ.get('WINDSCADA_RUDONG_SRC') or str(ROOT / 'data' / 'raw')
|
|
|
RAW = pathlib.Path(_RAW_STR)
|
|
RAW = pathlib.Path(_RAW_STR)
|
|
|
|
|
+# ★2026-09-11 用户令 A2: 四项数据层源改为 data/raw/<场站名称>/…。场站目录名只在场配置里写
|
|
|
|
|
+# (src/windscada/config.py 的 raw_station), 这里取用不另抄 —— 抄一份就会出现"页面指着一个
|
|
|
|
|
+# 不存在的目录让人补数据"。
|
|
|
|
|
+try:
|
|
|
|
|
+ from src.windscada.config import raw_station_dir as _station_dir
|
|
|
|
|
+ STATION = _station_dir()
|
|
|
|
|
+except Exception:
|
|
|
|
|
+ STATION = RAW / '如东'
|
|
|
|
|
+# 机理层: 技术资料仍在原始件根下 (A2 只点名数据层那四项, 机理层不动)
|
|
|
TECH = RAW / '西门子4.0技术资料'
|
|
TECH = RAW / '西门子4.0技术资料'
|
|
|
|
|
|
|
|
|
|
|
|
@@ -65,19 +74,27 @@ SOURCES = [
|
|
|
摄入='python -m src.ontology.trend_ingest',
|
|
摄入='python -m src.ontology.trend_ingest',
|
|
|
频率='振动线每轮出件后', 责任='振动线 → 图谱',
|
|
频率='振动线每轮出件后', 责任='振动线 → 图谱',
|
|
|
说明='在升(末三窗/早三窗≥1.3)与换件闭环两类实证入图谱; 补前这类信息只在链盘里, 图谱检索不到'),
|
|
说明='在升(末三窗/早三窗≥1.3)与换件闭环两类实证入图谱; 补前这类信息只在链盘里, 图谱检索不到'),
|
|
|
- # ── 数据层 ──
|
|
|
|
|
|
|
+ # ── 数据层 (2026-09-11 A2: 四项数据源目录 = data/raw/<场站名称>/{scada_10min,故障报警,风机故障记录,油样报告}) ──
|
|
|
dict(层='数据', 名='SCADA 10min 月度衍生', 产物=ST / 'loss_monthly.parquet', 时间列='month',
|
|
dict(层='数据', 名='SCADA 10min 月度衍生', 产物=ST / 'loss_monthly.parquet', 时间列='month',
|
|
|
- 位置=disp(RAW / '(按场) 10min 导出'), 摄入='python scripts/windscada_report.py (内含 availability.summary 产 loss_monthly)',
|
|
|
|
|
- 频率='月', 责任='数据线', 说明='五态/损失/可用率的底座; 换月必重跑下游判级'),
|
|
|
|
|
|
|
+ 位置=disp(STATION / 'scada_10min') + os.sep,
|
|
|
|
|
+ 摄入='python scripts/windscada_report.py (内含 availability.summary 产 loss_monthly)',
|
|
|
|
|
+ 频率='月', 责任='数据线',
|
|
|
|
|
+ 说明='逐台平铺 WTG01.csv…WTG38.csv (放目录本身, 不是压缩包); '
|
|
|
|
|
+ '五态/损失/可用率的底座; 换月必重跑下游判级'),
|
|
|
dict(层='数据', 名='报警事件', 产物=ST / 'alarms.parquet', 时间列='t_on',
|
|
dict(层='数据', 名='报警事件', 产物=ST / 'alarms.parquet', 时间列='t_on',
|
|
|
- 位置=disp(RAW / '风机故障记录/*年至今.xls (XML 导出)'), 摄入='python scripts/windscada_alarms_ingest.py',
|
|
|
|
|
|
|
+ 位置=disp(STATION / '故障报警') + os.sep,
|
|
|
|
|
+ 摄入='python scripts/windscada_alarms_ingest.py',
|
|
|
频率='月', 责任='数据线', 说明='码级事件; 注意年度总表 .xls 实为 XML 报警导出非工单'),
|
|
频率='月', 责任='数据线', 说明='码级事件; 注意年度总表 .xls 实为 XML 报警导出非工单'),
|
|
|
dict(层='数据', 名='检修工单台账', 产物=ST / 'workorders.parquet', 时间列='t_report',
|
|
dict(层='数据', 名='检修工单台账', 产物=ST / 'workorders.parquet', 时间列='t_report',
|
|
|
- 位置=disp(RAW / '风机故障记录/{年}年故障记录/'), 摄入='scripts/windscada_workorder_ingest.py',
|
|
|
|
|
- 频率='季/年', 责任='现场提供', 说明='★当前止 2024-11-21; 2025-26 六类源已 data-first 核过确无 — 缺口需现场补'),
|
|
|
|
|
|
|
+ 位置=disp(STATION / '风机故障记录') + os.sep,
|
|
|
|
|
+ 摄入='scripts/windscada_workorder_ingest.py',
|
|
|
|
|
+ 频率='季/年', 责任='现场提供',
|
|
|
|
|
+ 说明='目录内按 {年}年故障记录/ 分年; ★当前止 2024-11-21; 2025-26 六类源已 data-first 核过确无 — 缺口需现场补'),
|
|
|
dict(层='数据', 名='油液化验', 产物=ST / 'oil_samples_index.parquet', 时间列='date',
|
|
dict(层='数据', 名='油液化验', 产物=ST / 'oil_samples_index.parquet', 时间列='date',
|
|
|
- 位置=disp(RAW / '油样报告/'), 摄入='python scripts/windscada_watch_channels_build.py (产 oil_samples_index)',
|
|
|
|
|
- 频率='半年', 责任='化验机构', 说明='SGS + 华标两家; 新一轮到货后重跑, 时效胶囊自动翻绿'),
|
|
|
|
|
|
|
+ 位置=disp(STATION / '油样报告') + os.sep,
|
|
|
|
|
+ 摄入='python scripts/windscada_watch_channels_build.py (产 oil_samples_index)',
|
|
|
|
|
+ 频率='半年', 责任='化验机构',
|
|
|
|
|
+ 说明='SGS + 华标两家, 报告按台号/部件分目录; 新一轮到货后重跑, 时效胶囊自动翻绿'),
|
|
|
dict(层='数据', 名='CMS 振动评估报告', 产物=CMS / '报告_CMS振动状态评估报告_*.md', 时间列=None,
|
|
dict(层='数据', 名='CMS 振动评估报告', 产物=CMS / '报告_CMS振动状态评估报告_*.md', 时间列=None,
|
|
|
位置=disp(CMS), 摄入='windcms analyze (振动线会话)',
|
|
位置=disp(CMS), 摄入='windcms analyze (振动线会话)',
|
|
|
频率='月/事件驱动', 责任='振动线', 说明='设备状态五级来源; 观澜自动取最新版不写死日期'),
|
|
频率='月/事件驱动', 责任='振动线', 说明='设备状态五级来源; 观澜自动取最新版不写死日期'),
|