siemens_swt40_rudong.yaml 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. # 数据契约 — 西门子(上海电气许可) SWT-4.0-130 (如东海上, 中广核如海)
  2. # schema_v2 SOP 标准件 (2026-07-25, G-OEM 五路多agent实证: goem_g1..g5 + goem.json 汇总)。
  3. # ★ 本库首个海上场 + 首个西门子OEM (G3可迁移性门: 判别器对本OEM须标U/P/OEM级, 阴性带检测下限)。
  4. # ★ 层裁定[G4]: 原生WPS 10min族(mdb 9种×38台×19月)=主层(限电/可用率/独立温度面独有), 本契约v1先行覆盖
  5. # 已解压两层(1min转发+10min counter); native mdb 装配管线=工项(见 native_wps 节注册)。
  6. # ⚠ 列序per台随机[G1] → 一切读取按列名绑定, 禁位置索引。
  7. schema_version: 2
  8. meta:
  9. oem: 西门子/上海电气 SWT (Siemens licensed)
  10. model: SWT-4.0-130 (4.0MW, D=130m, hub 87m=73塔筒+14平台)
  11. topology: async_fullconverter_geared_hydraulic_pitch
  12. rated_kw: 4000 # ✅实证[G1]: 6组plateau p50=3988~3992kW, P>4300占比0, 无boost
  13. source_farm: 如东海上 (江苏, 中广核如海; 海上→盐雾/可达性/尾流先验)
  14. n_machines: 38 # ✅实证: 1min 38csv=10min 38csv; A-F=集电线路string[G5 邻接0.816 TRUE], 台号组内不连续→邻域分析用坐标(风机坐标.xlsx+升压站)
  15. pitch_type: hydraulic_collective # ✅实证[G1]: 三桨|diff|p99≤0.4°=集中变桨; 运行恒压237bar, 顺桨88.2-89.6° → 独立变桨/三叶不平衡变桨轴不适用
  16. layout:
  17. format_1min: "extracted/1分钟数据/<NN><G>.csv (NN=01..38, G=A..F string; utf-8-sig; 79列中英混合转发点表)"
  18. format_10min_cnt: "extracted/10分钟数据/WTG<NN>.csv (西门子WTC counter层)"
  19. time_format: "YYYY-MM-DD HH:MM:SS"
  20. column_binding: name_based_only # ★38台同列集但顺序互不相同[G1]
  21. sampling:
  22. turbine_1min_s: 60 # ✅实证[G1]: 684台月 diff.median 全=60s; 缺口0.126%/台, 38台行数全同=同步断录
  23. turbine_10min_cnt_s: 600
  24. window: "1min 2025-01-01~2026-06-30 (99.87%); cnt ~2026-07-07 (97.4-99%); 交叠546天; ⚠跨136号文断点(2025旧机制/2026新机制)"
  25. # native_wps/materials 注册节(挂meta豁免lint数据节校验)
  26. native_wps:
  27. status: REGISTERED_NOT_ASSEMBLED
  28. source: "如东风场数据.zip/scada数据(如东)/YYYYMM/YYYY-MM-{12种}.zip (每zip=WPS月度Access mdb, mdbtools -T可读)"
  29. layers: "tur(主运行93列:5风速族含SecAnemo原值+PowerRef+塔频)/tmp(温度118列:HSS/IMS四轴承)/grd(电网52列:ActPower净+RawPower毛+ActRegSt)/prs(液压54)/cnt(71)/flg(状态机44:Turbstat+四类停机+偏航解缆计数)/din(95:PowerRed削减位+雷电烟感)/dot(执行器命令71:加热冷却)/sum(AlarmLog事件+ParkPilot限电指令流水+DailySummary206列)/int/std(站级电表非10min统计)/scd"
  30. unique_signals: "限电套装(PowerRef/ActRegSt/RawPower/PowerRed/ParkPilot流水, 2025-06激活13415h)/WndIRHr独立分母/TI阵风(SecAnemo_stddev/GustWnd)/变桨给定实际双列/偏航解缆计数 — 转发层零覆盖[G4]"
  31. sid_mapping: "StationId 4800167..4800204 连号≡台01..38[G4实证]; 事件层StationNr=4800166+台号[G5]"
  32. assemble_todo: "mdb→parquet装配管线(9种×19月); 优先级: grd+sum(限电线)>tur(SecAnemo/PowerRef)>flg(偏航计数)>tmp"
  33. # ---- 外部锚 [G5] ----
  34. materials:
  35. coordinates: "风机坐标.xlsx 38台+升压站; A-F=string TRUE; 间距中位6.54D; 可研表6.3-1=逐台设计基线(2660h/尾流6.8%)可提取"
  36. fault_code_dict: "如海代码表2793条(实际用码322个100%覆盖); 三表直译族一致"
  37. guarantee_curve: "合同附件图2-1(ρ=1.223, TI0.1, shear0.2)+推力图2-3; K≥95%/6月整改/违约金条款; ⚠图片级须描点提取"
  38. mast: "FALSE — 测风塔目录零交付(须催缴; 可研有2009-12史料塔100m×6层非运行期)"
  39. events: "故障记录⊇报警季度件(同一WPS日志, ID全重合); 字段ID/TimeOn/TimeOff/Alarmcode; 首发标识缺席须自算; fastlog=10Hz事件快照仅4台"
  40. om: "检修记录2025+2026/油样2025/出保备件台账(L3出质保场景信号)/日粒度发电账555天/全寿命月账2016-06起(投运锚)"
  41. # ---- 1min 转发层 (从层[G4]; 纯净无缩放但: 风速=补偿风(-1.35m/s vs 原生SecAnemo)/温度1℃量化/功率1kW量化) ----
  42. turbine_1min:
  43. sampling_s: 60
  44. required: [active_power, wind_velocity, rotor_speed, pitch_angle_blade_1]
  45. dead_columns_16: # ✅[G1]全场级死列 ⚠2026-07-26修正: 原17条含误杀'刹车状态AI'(实为活状态位, 见下), 现16条
  46. [yaw_error1, cabin_position, twisted_cable_angle,
  47. generator_winding1_temperature, generator_winding2_temperature, generator_winding3_temperature,
  48. 发电量遥测转发, 扭矩设定值, 网侧L1相功率因数, 1#桨电机温度, 2#桨电机温度, 3#桨电机温度,
  49. 自定义可利用率, 航空灯状态AI, 接地刀闸闭合状态AI, 接地刀闸打开状态AI]
  50. dead_note: "★2026-07-26 跨会话告警+主Claude data-first复现修正2处误判: ①刹车状态AI **非死列**(5取值/notna100%/语义: 61=发电态P均值1227-1446kW, 80·98=停机态P≈−10kW)=**稀疏事件列被误判死**(与独立审R1逮的flg列同根, 判据缺陷第2次命中) → 已移出死列, 语义卡见下; ②齿轮箱油路入口油压(重复)**非副本**(逐值相等率仅0.705-0.741/均值系统低0.26-0.29bar=第二独立测点或寄存器; 原按corr0.97判'真重复'错——corr高≠同一列, 同伪地理陷阱型) → 已移出drop_columns。 原文: 偏航三通道死→对风/扭缆须原生层或wrap(风向重复−true_wind)瞬时失配代理[G2]; winding123死→定子温唯一活源=UVW'(重复)'列(择列反转)"
  51. columns:
  52. active_power:
  53. canonical_id: WAPC_active_power
  54. observed_range: [-199, 4400]
  55. unit: kW
  56. valid_range: [-200, 4400] # ✅实证: 负端夜间自耗-16..-29; plateau 3988-3992
  57. sentinel: [999] # 999族[G1]
  58. wind_velocity:
  59. canonical_id: WMET_wind_speed_compensated
  60. observed_range: [0, 48.09]
  61. unit: m/s
  62. valid_range: [0, 45]
  63. self_ref_risk: true
  64. note: "★≠风速计原值: ≡原生AcWindSp补偿风(功率曲线反推补偿), 较SecAnemo差约-1.35m/s[G4] → NTF/功率曲线用原生层SecAnemo, 本列只作运行参考"
  65. 第二风速:
  66. canonical_id: WMET_wind_speed_nacelle2
  67. observed_range: [0, 27]
  68. unit: m/s
  69. valid_range: [0, 45]
  70. self_ref_risk: true
  71. note: "独立第二风速计1m/s粗转发[G2]; 03E/10F间歇死(卡0达177/108天)→liveness按台按窗"
  72. true_wind_direction:
  73. canonical_id: WYAW_wind_direction_pseudo
  74. observed_range: [0, 360]
  75. unit: deg
  76. frame: nacelle_encoder_base_NOT_north_aligned # ★[G2]伪地理: 共机舱编码器基准未对北, 跨台offset±161°散布
  77. semantic: "偏航系统滤波绝对风向估计=lowpass(风向(重复)); 禁绝对扇区闸/风玫瑰/绝对偏航锚; 相对/时序可用; 6台冬检窗基准阶跃(05C 2025-12 −43°等)→用必分段"
  78. 风向(重复):
  79. canonical_id: WYAW_wind_direction_inst
  80. observed_range: [-1, 360]
  81. unit: deg
  82. frame: nacelle_encoder_base_NOT_north_aligned
  83. sentinel: [-1]
  84. semantic: "同基准瞬时风向(1°量化); wrap(本列−true_wind_direction)=瞬时对风失配代理(IQR 5.7°@高风)[G2]"
  85. rotor_speed:
  86. canonical_id: WROT_rotor_speed
  87. observed_range: [0, 16]
  88. unit: rpm
  89. valid_range: [-1, 20]
  90. generator_speed:
  91. canonical_id: WGEN_generator_speed
  92. observed_range: [0, 1785]
  93. unit: rpm
  94. valid_range: [-10, 2000]
  95. sentinel: [999]
  96. pitch_angle_blade_1: {canonical_id: WROT_pitch1, unit: deg, valid_range: [-5, 95], observed_range: [-65.9, 89.69]}
  97. pitch_angle_blade_2: {canonical_id: WROT_pitch2, unit: deg, valid_range: [-5, 95], observed_range: [-65.9, 98]}
  98. pitch_angle_blade_3: {canonical_id: WROT_pitch3, unit: deg, valid_range: [-5, 95], observed_range: [-65.9, 98.69]}
  99. 桨叶A油压: {canonical_id: WROT_pitch_hyd_A, unit: bar, valid_range: [-5, 400], observed_range: [-621, 286], sentinel_note: "负压族(-621等)→NaN; 运行恒压~237bar[G1]"}
  100. 桨叶B油压: {canonical_id: WROT_pitch_hyd_B, unit: bar, valid_range: [-5, 400], observed_range: [-616, 287]}
  101. 桨叶C油压: {canonical_id: WROT_pitch_hyd_C, unit: bar, valid_range: [-5, 400], observed_range: [-617, 286]}
  102. 风机状态遥测转发:
  103. canonical_id: WTUR_state_static
  104. observed_range: [8, 19]
  105. dead_channel: constant_per_turbine # CT-2 WARN对应: 跨机恒值=台常数元数据(保留非弃, 无时序信息)
  106. semantic: "台常数{01E:8, 04E/05C/17B:19, 余34台:10}[G1] 无时序信息 → 非状态机, 只作台元数据"
  107. 风机SC状态:
  108. canonical_id: WTUR_fault_code
  109. observed_range: [0, 19094]
  110. semantic: "220值事件/故障码(0=无故障主态86.4% P_med711; 1xxx停机码; 2006/19094/2132发电中信息码)[G1]; 语义须如海代码表(2793条100%覆盖[G5]); 事件驱动→ffill语义"
  111. 风机可利用率:
  112. canonical_id: WTUR_avail_builtin_daily
  113. observed_range: [0, 100]
  114. unit: pct
  115. semantic: "日粒度快照(per-day unique=1)[G3]; 口径近责任剥离式, 参考级; 采信序: counter重建>本列>自定义(死)"
  116. generatordrive_end_bearing_temperature: {canonical_id: WGEN_bearing_DE_temp, unit: degC, valid_range: [-20, 150], observed_range: [0, 101]}
  117. generatornon_drive_end_bearing_temperature: {canonical_id: WGEN_bearing_NDE_temp, unit: degC, valid_range: [-20, 150], observed_range: [0, 200]}
  118. 发电机定子U相线圈温度(重复): {canonical_id: WGEN_stator_U_temp, unit: degC, valid_range: [-20, 200], observed_range: [0, 149], note: "★唯一活定子源(winding123死)[G1]"}
  119. 发电机定子V相线圈温度(重复): {canonical_id: WGEN_stator_V_temp, unit: degC, valid_range: [-20, 200], observed_range: [0, 149]}
  120. 发电机定子W相线圈温度(重复): {canonical_id: WGEN_stator_W_temp, unit: degC, valid_range: [-20, 200], observed_range: [0, 149]}
  121. gearbox_oil_temperature: {canonical_id: WTRM_gbx_oil_temp, unit: degC, valid_range: [-20, 100], observed_range: [0, 67]}
  122. gearboxmedium_speed_shaftbearing_temperature: {canonical_id: WTRM_gbx_IMS_temp, unit: degC, valid_range: [-20, 120], observed_range: [0, 68]}
  123. 齿轮箱中间轴非驱动端轴承温度: {canonical_id: WTRM_gbx_IMS_NDE_temp, unit: degC, valid_range: [-20, 120], observed_range: [0, 67], note: "与上列corr中等=独立测点对[G1]"}
  124. main_bearing_temperature: {canonical_id: WROT_main_bearing_temp, unit: degC, valid_range: [-20, 100], observed_range: [0, 94]}
  125. 主轴承外圈温度(重复): {canonical_id: WROT_main_bearing_outer_temp, unit: degC, valid_range: [-20, 100], observed_range: [0, 65], note: "corr0.67=独立测点非重复[G1]"}
  126. outside_cabin_temperature: {canonical_id: WMET_ambient_temp, unit: degC, valid_range: [-30, 50], observed_range: [-5, 31], note: "global_max 200=哨兵尖刺(p99=31)"}
  127. cabin_temperature: {canonical_id: WNAC_cabin_temp, unit: degC, valid_range: [-20, 60], observed_range: [-50, 39]}
  128. 舱内温度: {canonical_id: WNAC_cabin_temp2, unit: degC, valid_range: [-20, 60], observed_range: [0, 47], note: "与cabin_temperature diff~10℃=不同位置独立测点[G1]; max200=哨兵尖刺"}
  129. 刹车状态AI:
  130. canonical_id: WTUR_brake_state
  131. observed_range: [0, 112]
  132. semantic: "★活状态位(2026-07-26修正, 原误判死): 取值{0,61,80,98,112}; **61=发电态**(P均值1227-1446kW, 占比~90%)/80·98=停机态(P≈−10kW自耗)/0·112低频; 位域语义须图纸(61=0b111101等待解); 可作停机态交叉判据(与SC状态/事件层三源交叉)"
  133. 齿轮箱油路入口油压(重复):
  134. canonical_id: WTRM_gbx_oil_inlet_prs_2
  135. unit: bar
  136. valid_range: [-2, 20]
  137. observed_range: [-4, 16]
  138. note: "★第二独立测点(2026-07-26修正, 原误判纯重复): 与主列 corr 0.975-0.980 但**逐值相等率仅0.705-0.741**+均值系统低0.26-0.29bar → 不同测点/寄存器; 配对可用于油压传感一致性核(同主轴承双点型)"
  139. 齿轮箱油路入口油压: {canonical_id: WTRM_gbx_oil_inlet_prs, unit: bar, valid_range: [-2, 20], observed_range: [-4, 16]}
  140. drop_columns:
  141. # ⚠2026-07-26 撤回: 齿轮箱油路入口油压(重复) 原判"真重复"FALSE — 逐值相等率0.705-0.741/均值系统低0.26-0.29bar → 第二独立测点(或不同寄存器), 保留可用
  142. - {col: "_none_", reason: "本契约当前无确认的纯重复弃用列(原唯一条目已撤回)"}
  143. registered_only: "其余~30列(网侧三相电流电压/频率/变压器×2/轮毂/塔底/湿度/塔筒频率/液压站/刹车族/偏航制动/source_file/数据分布算法标记等)语义卡全在 goem_g1_1min_semantics.json, 分析需用时从卡取(不逐卡防契约膨胀); '数据分布算法标记'=INSUFFICIENT"
  144. # ---- 10min WTC counter 层 (可用率账权威源) ----
  145. turbine_10min_cnt:
  146. sampling_s: 600
  147. key_counters: # ✅[G3] 59列全卡在 goem_g3_counters.json; 此处核心账列
  148. - {col_pattern: "cnt_wtc_TurOkHr*_endvalue", semantic: "机组OK小时(lifetime T/月S)", verify: "H10: TurOkHr+ErrHrCn+WindFau=日历时(99.2%守恒)"}
  149. - {col_pattern: "cnt_wtc_ErrHrCn*_endvalue", semantic: "故障小时; A_op推荐口径=(cal−ErrHrCn)/cal"}
  150. - {col_pattern: "cnt_wtc_ExtErHr*", semantic: "外部错误小时; ⚠与Err平行分类账部分重叠非嵌套(月corr0.95)→IEC责任剥离须事件层去重[G3]"}
  151. - {col_pattern: "cnt_wtc_GrdFaHrT_endvalue", semantic: "电网故障小时; ⚠GridFaCT=AvailHrT−GridOKHT派生差值列(小时量纲非count, 命名证伪)[G3]; WTG01/32净增399/352h=限电嫌疑移交"}
  152. - {col_pattern: "cnt_wtc_AvailPc*", semantic: "可用率%; AvailHrT=电网轴(=GridOK+GridFaC)故障月照走满→无判别力, 勿当机组可用率"}
  153. - {col_pattern: "cnt_wtc_kW*G1Tot*", semantic: "发电量净值(=E−I, 夜间自耗回落); _accum=独立高分辨率窗增量, endvalue=8kWh量化快照"}
  154. discipline: "累计计数器三验(单调/增量物理界/跨台共模)已全过[G3]: 零系统性复位; S类=日历月子期(月初午夜drop); 月账用netdiff法(锯齿=回读相位抖动0.01h非复位)"
  155. dead: "LifeTime_*/ErLWHCn*/Boost*恒0, BostkWhS 99.3%NaN"
  156. # ---- 逐列量程/哨兵 (2026-08-09 U3v2 齿轮箱线补: 原 10min 段只有计数器语义, 无 columns → 清洗未做逐列 clip 与哨兵转 NaN;
  157. # 实证缺口 = GFilB2/B3 恒 200 哨兵原样留在清洗层, 由分析侧 preflight 才逮到。本段补齐分析关键列, 余列 registered_only) ----
  158. columns:
  159. # 齿轮箱温度族 (即时热汇=GeOilTmp; ΔT 判据主用)
  160. tmp_wtc_GeOilTmp_mean: {canonical_id: WGBX_oil_temp, unit: degC, valid_range: [-20, 120], observed_range: [4.0, 66.1]}
  161. tmp_wtc_HSGenTmp_mean: {canonical_id: WGBX_hss_gen_temp, unit: degC, valid_range: [-20, 120], observed_range: [4.0, 78.7]}
  162. tmp_wtc_HSRotTmp_mean: {canonical_id: WGBX_hss_rot_temp, unit: degC, valid_range: [-20, 120], observed_range: [4.0, 72.0]}
  163. tmp_wtc_IMSGenTm_mean: {canonical_id: WGBX_ims_gen_temp, unit: degC, valid_range: [-20, 120], observed_range: [4.0, 67.3]}
  164. tmp_wtc_IMSRotTm_mean: {canonical_id: WGBX_ims_rot_temp, unit: degC, valid_range: [-20, 120], observed_range: [6.0, 67.0]}
  165. tmp_wtc_GFilB1Tm_mean: {canonical_id: WGBX_oilfilter_b1_temp, unit: degC, valid_range: [-20, 120], observed_range: [0.0, 56.0],
  166. note: "冷却回路冷侧测点; GeOil−GFilB1 = 冷却器温降口径(全场发电态现窗中位约 12℃)"}
  167. tmp_wtc_GFilB2Tm_mean: {canonical_id: WGBX_oilfilter_b2_temp, unit: degC, valid_range: [-20, 120], sentinel: [200.0],
  168. dead: true, note: "★全场 38 台恒 200 哨兵(唯一值仅 8 个: 0/1.86/27.4/44.9/151.3/178.7/187.2/200), 未接线或未标定 → 判读禁用, 滤芯回路只用 B1"}
  169. tmp_wtc_GFilB3Tm_mean: {canonical_id: WGBX_oilfilter_b3_temp, unit: degC, valid_range: [-20, 120], sentinel: [200.0],
  170. dead: true, note: "同 B2, 逐值与 B2 完全相同"}
  171. # 主轴承 / 发电机 / 环境 (跨单元共用参考)
  172. tmp_wtc_MBearHTm_mean: {canonical_id: WROT_mainbrg_H_temp, unit: degC, valid_range: [-20, 120], observed_range: [2.0, 65.0]}
  173. tmp_wtc_MBearGTm_mean: {canonical_id: WROT_mainbrg_G_temp, unit: degC, valid_range: [-20, 120], observed_range: [4.0, 69.0]}
  174. tmp_wtc_GenBeRTm_mean: {canonical_id: WGEN_bearing_DE_temp, unit: degC, valid_range: [-20, 150], observed_range: [0.0, 99.9]}
  175. tmp_wtc_GenBeGTm_mean: {canonical_id: WGEN_bearing_NDE_temp, unit: degC, valid_range: [-20, 150], observed_range: [0.0, 123.8]}
  176. tmp_wtc_Gen1U1Tm_mean: {canonical_id: WGEN_stator_U_temp, unit: degC, valid_range: [-20, 200], observed_range: [0.0, 148.7]}
  177. tmp_wtc_Gen1V1Tm_mean: {canonical_id: WGEN_stator_V_temp, unit: degC, valid_range: [-20, 200], observed_range: [0.0, 148.1]}
  178. tmp_wtc_Gen1W1Tm_mean: {canonical_id: WGEN_stator_W_temp, unit: degC, valid_range: [-20, 200], observed_range: [0.0, 148.5]}
  179. tmp_wtc_AmbieTmp_mean: {canonical_id: WMET_ambient_temp, unit: degC, valid_range: [-20, 50], observed_range: [-4.1, 123.4],
  180. note: "★实测上界 123.4℃ 物理不可能(仅 1 行, WTG35) → 需 clip; 海上如东历史极值约 −5~40℃"}
  181. tmp_wtc_NacelTmp_mean: {canonical_id: WNAC_nacelle_temp, unit: degC, valid_range: [-20, 80], observed_range: [0.0, 122.9], note: "上界越界仅 1 行"}
  182. tmp_wtc_HubTemp_mean: {canonical_id: WROT_hub_temp, unit: degC, valid_range: [-20, 80], observed_range: [-26.7, 38.3], note: "下界越界仅 1 行"}
  183. tmp_wtc_HydOilTm_mean: {canonical_id: WHYD_oil_temp, unit: degC, valid_range: [-20, 120], observed_range: [0.0, 146.6], note: "上界越界 2 行"}
  184. # 齿轮箱油路压力族 (主滤压差/旁路压/油压)
  185. prs_wtc_GearPres_mean: {canonical_id: WGBX_oil_pressure, unit: bar, valid_range: [-1, 10], observed_range: [-0.1, 5.1]}
  186. prs_wtc_InlPrBef_mean: {canonical_id: WGBX_filter_p_before, unit: bar, valid_range: [-1, 30], observed_range: [-0.1, 14.2],
  187. note: "主滤压差 = InlPrBef − InlPrAft, 物理应 ≥0"}
  188. prs_wtc_InlPrAft_mean: {canonical_id: WGBX_filter_p_after, unit: bar, valid_range: [-1, 30], observed_range: [-0.1, 13.8]}
  189. prs_wtc_OfflPres_mean: {canonical_id: WGBX_offline_filter_p, unit: bar, valid_range: [-1, 10], observed_range: [-0.6, 3.2]}
  190. # 其余液压/轮毂压力 (本单元未用, 但实测有明显越界 → 用前必 clip)
  191. prs_wtc_HubPresA_mean: {canonical_id: WROT_hub_p_A, unit: bar, valid_range: [0, 320], observed_range: [-353.1, 286.0],
  192. note: "★负值越界 11,964 行(0.40%), 集中 WTG18/11/36 → 用前必 clip"}
  193. prs_wtc_HubPresB_mean: {canonical_id: WROT_hub_p_B, unit: bar, valid_range: [0, 320], observed_range: [-349.9, 286.5]}
  194. prs_wtc_HubPresC_mean: {canonical_id: WROT_hub_p_C, unit: bar, valid_range: [0, 320], observed_range: [-349.2, 286.0]}
  195. prs_wtc_HydPress_mean: {canonical_id: WHYD_pressure, unit: bar, valid_range: [0, 300], observed_range: [-100.0, 256.4],
  196. note: "★越界 14,776 行(0.50%)"}
  197. prs_wtc_YawPress_mean: {canonical_id: WYAW_pressure, unit: bar, valid_range: [0, 250], observed_range: [-100.0, 184.0], note: "越界 725 行"}
  198. # ── 2026-08-12 补录 12 列 (U8 电气并网线体检发现: 变压器族与网侧电气族原不在 columns 内,
  199. # 即未过 CL-1「界外→NaN + 哨兵→NaN」门; U8/U5 两条分析线都在用) ──────────────
  200. # 定界依据 = 物理/设计, 非观测拟合。观测范围仅作旁注。
  201. tmp_wtc_TraOilTF_mean: {canonical_id: WTRF_oil_temp, unit: degC, valid_range: [-20, 150], sentinel: [0.0], observed_range: [0.0, 100.91], note: "机变酯油温. 上界按 H 级绝缘/耐热材料 180℃ 留裕, 接点整定 95(警告)/100(高). ★0.0 = 采集掉线填充非真值: 与 TraRooTF/TrafoTMa/A1ExtTmp **同时刻同时为 0** 共 15 行(3 个连续块, 同刻环温 12~25℃ 且 P=0), 夏夜带电变压器 0℃ 物理不可能 ⇒ 判哨兵. >0 的最小值 0.49℃"}
  202. tmp_wtc_TrafoTMa_mean: {canonical_id: WTRF_oil_temp_dup, unit: degC, valid_range: [-20, 150], sentinel: [0.0], observed_range: [0.0, 100.95], note: "★与 TraOilTF **同一条信号**: 完全相等 69.67%, Pearson r=0.99998757, |差| 中位 0.000K / p99 0.126K (n=2,971,324). **禁作第二独立证据**"}
  203. tmp_wtc_TraRooTF_mean: {canonical_id: WTRF_room_air_temp, unit: degC, valid_range: [-20, 120], sentinel: [0.0], observed_range: [0.0, 75.0], note: "变压器层空气温. 通风闸 UP12210/11 = 70/80℃. ★22#/36# 该探头读数系统性偏低约 -7K(与 A1Ext 反向同偏, |z| 9.5/10.9) ⇒ 该两台的『油温-室温』温升禁作跨机横比, 改用『油温-环温』"}
  204. tmp_wtc_A1ExtTmp_mean: {canonical_id: WNAC_cabinet_ext_temp, unit: degC, valid_range: [-20, 120], sentinel: [0.0], observed_range: [0.0, 82.51], note: "A21 主开关板柜外温 (原厂图纸 p146 803-B1). ★22#/36#/27# 读数偏高(+7.8/+9.8/+11.2K)"}
  205. grd_wtc_ActPower_mean: {canonical_id: WTUR_active_power, unit: kW, valid_range: [-500, 4400], observed_range: [-55.66, 4064.0], note: "网侧 690V 有功. 额定 4000kW, 上界留 10% 过冲; 下界为寄生耗电(停机态). ★本列是 gen_mask 输入, 全场每条分析线依赖它 —— 定界须保证零误杀"}
  206. grd_wtc_RawPower_mean: {canonical_id: WTUR_available_power, unit: kW, valid_range: [-500, 4400], observed_range: [0.0, 4000.0], note: "可用功率参照. =0 共 319,381 行为合法(停机态), **禁设 0 哨兵**"}
  207. grd_wtc_AmpPhR_mean: {canonical_id: WTUR_current_phase_r, unit: A, valid_range: [0, 6000], observed_range: [0.0, 4242.9], note: "690V 侧相电流. 额定 ≈ 4000e3/(√3×690) = 3347A, 上界留变流器过流裕度. =0 合法(停机), 禁设哨兵"}
  208. grd_wtc_AmpPhS_mean: {canonical_id: WTUR_current_phase_s, unit: A, valid_range: [0, 6000], observed_range: [0.0, 4249.22], note: "同 R 相"}
  209. grd_wtc_AmpPhT_mean: {canonical_id: WTUR_current_phase_t, unit: A, valid_range: [0, 6000], observed_range: [0.0, 4259.87], note: "同 R 相"}
  210. grd_wtc_VoltPhR_mean: {canonical_id: WTUR_voltage_phase_r, unit: V, valid_range: [0, 800], observed_range: [0.0, 434.52], note: "★本列为**相电压非线电压**: 标称 690/√3 = 398V, 实测 max 434.5 = 1.09×. 上界按过压保护 1.2PU=478V 留裕. ★=0 合法且**有诊断意义**(全失压事件记录: 5104/5110-13 触发桶 vmin p50 ≈ 0.1V), **禁设 0 哨兵**"}
  211. grd_wtc_VoltPhS_mean: {canonical_id: WTUR_voltage_phase_s, unit: V, valid_range: [0, 800], observed_range: [0.0, 434.0], note: "同 R 相"}
  212. grd_wtc_VoltPhT_mean: {canonical_id: WTUR_voltage_phase_t, unit: V, valid_range: [0, 800], observed_range: [0.0, 433.21], note: "同 R 相"}
  213. columns_note: |
  214. ★本段为 2026-08-09 补录, 覆盖分析关键列 (齿箱温度族 8 + 主轴承/发电机/环境 11 + 压力族 9);
  215. 600 列宽表其余为 registered_only (计数器族语义见 goem_g3_counters.json)。
  216. 语义 = **界外→NaN (非 clamp)** + 哨兵→NaN, 见 src/sop/contract_gate.py
  217. (越物理界 = 无效测量; clamp 会把界外值压到边界上、扭曲统计)。
  218. ⚠ 缺口是双重的, 补 columns 只解其一:
  219. ① 本段原无 columns;
  220. ② assemble_rudong_v1.py 的 10min 段原为纯 concat, **从未调用 apply_contract_gate**
  221. (原注释"小, 全列直合") → 即便契约有 columns 也不生效。两处已于 2026-08-09 同修。
  222. ✅ 产物状态 (2026-08-09 **换役已完成**): 现役 turbine_10min_cnt.parquet = 过门版 (sha256 afae366d..),
  223. 账见 sop/clean_gate_10min.json, 指纹见 cleaned/turbine_10min_cnt_fingerprint.json。
  224. 换役前的未过门版 (sha256 1462dc06..) 已改名留底为 turbine_10min_cnt.v1_pre_gate.parquet (同目录, gitignored)。
  225. 换役后复核: 行/列与旧版一致 (2,974,317 × 600); GFilB2/B3 200 哨兵已清零 (现 100% NaN, 非 NaN 各 18 行);
  226. **U3v2 报告数字逐项复现、零改动** (四通道 fleet 中位与 MAD 全等, 命中名单不变)。
  227. ⚠ 影响面实测 (2026-08-09 补跑账, 逐列):
  228. GFilB2/B3 各 2,971,985 行 (99.92%) 转 NaN —— 该两列实为整列废值, 仅约 2.3 千行非哨兵值幸存;
  229. 液压/轮毂/偏航压力 0.02~0.50%; 温度族 1~2 行/列 (中位数分毫不动)。
  230. **三条分析线实用的 17 列 (齿箱 6 + 发电机 5 + 主轴承 2 + 齿箱油路压力 4) 零改动** →
  231. U3 齿轮箱 / U4 发电机 / U8 主轴承 报告数字均不受换役影响。
  232. # ---- 事件层 (WPS sum 层 AlarmLog 装配; 事件驱动非固定采样) [2026-07-25 事件层契约 agent] ----
  233. # 证据: outputs/rudong/sop/event_layer_contract.json (结构实证/分类/责任面/首发) + fault_code_dict.json (合并字典资产)
  234. event_log:
  235. sampling_s: null # 事件驱动: TimeOn/TimeOff 激活-复位时间戳, 无固定采样率
  236. asset: "outputs/rudong/cleaned/native_alarmlog.parquet (2047592×16; TimeOn 2025-01-01~2026-07-06; 源=mdb sum 层×19月)"
  237. primary_key: "ID (WPS 全场库自增, 全表唯一 ✅跨月装配零重复)"
  238. entity_filter: "机组行=StationNr∈[4800167,4800204]≡台01..38(=4800166+台号, tid 前缀全量一致✅); 非机组: 9999=场级(49%行)/91=Elspec01 电能质量仪/88·90·100001=场控子实体(≤549行, INSUFFICIENT) — 机组分析必先过此滤"
  239. columns:
  240. TimeOn: {role: timestamp, semantic: "激活时刻 datetime64[us]"}
  241. TimeOff: {role: timestamp, semantic: "复位时刻 str 'MM/DD/YY HH:MM:SS' 美式秒级; 解析 format='%m/%d/%y %H:%M:%S' 零损失✅; LT1 全空 by design; LT0 机组未闭合仅 16 条(0.03%: 13条=2026-07 装配窗截断仍持续, 3条丢失); 时长负值 0"}
  242. LogType: {role: state_enum, semantic: "行为实证[非表头]: 0=告警区间账(TimeOff 99.98%非空; 机组∧AG1 切片≡故障记录xls导出, 39115行对齐✅) / 1=瞬时事件·操作日志(TimeOff 全空; 机组行走 event 命名空间0-178: 55偏航动作619k=轴1磨损剂量流水·20/25发电机切入切出·67-69 WSS; 场级=OPC 50200采样+ParkPilot 50301指令流水) / 2=停机相关状态区间账[候选](纯机组, dur p50=777s vs LT0=33s, top码全停机语义: 1005风速低/1015手动/1022维护)"}
  243. AlarmGroup: {role: state_enum, semantic: "行为实证: 0=OPC信号·远程操作日志(QReference采样+Remote Stop/Reset Fault) / 1=Turbine机组本体告警事件 / 5=HP ParkPilot 场控(无功指令50301+单机挂靠区间50346/50344+Elspec区间)"}
  244. StationNr: {observed_range: [88, 4800204], semantic: "见 entity_filter; 100001 例外大于上界(OPC杂项549行)"}
  245. Alarmcode: {observed_range: [2, 73019], semantic: "★三命名空间禁混判: alarm(LT0∪LT2 机组, 364用码, 如海表覆盖356/364=97.8%—未覆盖8个全是50xxx平台码混入) / event(LT1 机组, 66用码, 工作表event sheet 60/66—缺170·172-178低频扩展码) / 平台50xxx·73xxx(OPC/ParkPilot 19码, 三表全无字典, 行为注记 json §s4_platform_code_notes); 字典=fault_code_dict.json(如海骨架+对译en+分类category)"}
  246. Parameter: {observed_range: "str 定宽右填空格(须strip); LT1场级=QReference数值流水, AG0机组=远程操作详情, LT2全空格", semantic: "辅助文本"}
  247. UserName: {observed_range: "str: OPCSignals/HP Park Pilot/test_cn/sha_mac/空", semantic: "记录来源通道(非人名为主)"}
  248. idKey: {observed_range: [0, 25489], semantic: "部分行状态索引, 48-100%非空 per LogType; 语义 INSUFFICIENT 未用"}
  249. Comment: {observed_range: "str 近全空; 14条='TIC Timeout'系统注记", semantic: "dead 级"}
  250. MailSend: {observed_range: [0, 0], semantic: "dead: 恒0"}
  251. Acknowledge: {observed_range: [0, 0], semantic: "dead: 仅AG0行非空且恒0.0"}
  252. Reset: {observed_range: [0, 0], semantic: "dead: 同上"}
  253. tid: {observed_range: "str 'NN'+string组字母(01E..38B); 非机组行=NaN", semantic: "装配加列; ⚠pandas str backend: 取uniq前dropna"}
  254. _ym: {observed_range: "str 202501..202607", semantic: "装配加列: 源mdb月份"}
  255. duration_caveats:
  256. - "闩锁戒[SOP §4.6]: LT0/LT2 区间时长≠真停机时长; 真停机三源(SCADA 持续P≈0∧运行记录∧事件末条人工停机), 本契约只交事件账口径"
  257. - "LT2 互斥性 FALSE(同台重叠率0.95: 三叶制转杆同挂/风速低与手动并存)→停机账必 per台区间union, 禁 sum(duration) 直加"
  258. - "LT2 与 LT0 行级(台+码+TimeOn)零重合=独立两面: LT0=原因链/告警密度面, LT2=停机状态面, 分账勿跨面双算"
  259. first_fault: "首发标识缺席[G5]须自算: per台 LT0∧AG1 按TimeOn升序, 链尾=max(TimeOff)累计, TimeOn>链尾+30min⇒新链首=首发; X∈{10,30,60}敏感性 cascade_ratio 3.49~3.83 稳定; 2025-01~2026-07 首发10506链, per台 p50=257, 离群台 33(666)/19(512)/08(422)"
  260. responsibility_note: "如海表'故障责任方'98.7%单值+枚举语义未交付=无判别力; IEC 责任剥离走 码分类侧(grid/ambient→外部, external_cmd→指令, manual_service→运维, 部件类→机组; derate 族逐码判: 2006本地限功率≠13905变频器内因) + WPS月报官方科目对账; 经济数字前置条件=SCADA交叉+ParkPilot 50346/50344语义定谳"
  261. # 发电机轴承 native 温度列侧别注记 (2026-07-31, U4 三证定谳):
  262. # GenBeRTm = DE(前/驱动端, 朝齿轮箱), GenBeGTm = NDE(后, 朝风扇端)。
  263. # 三证: 告警文本 DE/NDE × 温度通道 7/7 错误级事件对齐 + 配对差 R−G 38/38 台全正(DE=热侧物理自洽) + 8# 前轴承温度高工单↔GenBeR 通道。
  264. # M1 旧配对键名 'G-R (DE-NDE)' 为误标(实为 NDE-DE), z/残差数值不受影响; 详见 outputs/rudong/units/U4_发电机.md §勘误。