gup_up2000_fushan.yaml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. # 数据契约 — 国电联合动力 GUP UP2000 2.0MW DFIG (阜山, 山东招远 / 国电招远)
  2. # schema_v2 SOP 标准件 (2026-07-17, legacy-completion onboard). data-first §1.2 实证 (A1/A5/A11/A20 冬夏池, ~36k行 + 全月抽样)。
  3. # 复用基 lineage = gup_up2000_2mw.yaml(旧阜山18台base) + gup_up2000_fengxiang.yaml(同OEM); 本场中文列名 + 独立实证 override。
  4. # ★★ 本场独有价值: 唯一真·多高度测风塔 (10/30/50/70m 全年实测 + 轮毂高层Oct2023起) → 绝对性能/达成率/NTF/Cp 可做 (区别所有 self_ref-only 场; 见 mast section + power-curve-ntf skill)。
  5. # ⚠ legacy 产物别扰: outputs/fushan/*.parquet (E映射/DEL/塔振 ad-hoc) 保留; 本契约只驱动 cleaned/turbine_10min.parquet + cleaned/mast.parquet。
  6. schema_version: 2
  7. meta:
  8. oem: 国电联合动力 GUP
  9. model: UP2000 2.0MW DFIG (geared)
  10. topology: dfig_geared
  11. rated_kw: 2080 # ✅实证: 功率设定plateau=2080000W(2080kW); 变频器有功 p99.9≈2081-2103kW, max~2160kW. 铭牌名义2000, 运行封顶/设定=2080
  12. source_farm: 阜山 (山东招远, 国电招远/国网)
  13. reuse_base: gup_up2000_2mw.yaml + gup_up2000_fengxiang.yaml (同OEM; 中文列名/单位/哨兵本场重验)
  14. n_machines: 18 # ✅实证: A1-A25 目录名义25台, 实际有数据=18台 (A1,A2,A3,A4,A5,A6,A7,A11,A12,A13,A15,A16,A17,A18,A19,A20,A22,A25; 缺A8,A9,A10,A14,A21,A23,A24). ON-1⑤ 台数双键: 目录名≠有数据台数
  15. layout:
  16. format: "SCADA_Minute_阜山[风场|风电场]_<tid>[号风机]_<YYYYMM|YYYYMMDD>.csv (GBK); 2表头行(行1=中文名/行2=英文SCADA码 UNIT.CI_*/SCADAUSE.CI_*) + rows: 时间,值..."
  17. encoding: GBK
  18. time_format: "YYYY-MM-DD HH:MM:SS"
  19. assemble: "scripts/fushan_assemble.py (per台per月 name-based concat; skiprows=[1] 用中文表头; tid=re _(A\\d+); 冬夏schema漂移 name-based 容差)"
  20. schema_drift: "主集(A1-A25目录 1-9月)=51信号; 后期月列数漂移(10月=50/11月=57/12月=62)但CORE(功率/风速/变桨/温度)全在 → name-based映射, 多出列(发电机空冷温度/高速轴刹车压力/电能质量/额外桨叶反馈)本cleaned不纳(记account, 需时另取)"
  21. sampling:
  22. turbine_10min_s: 600 # ✅实证: t.diff().median()=600s per文件 per月 (全月抽样, 单台=600s; 多台long格式全局diff=0是交织伪影, sampling真值=per台)
  23. mast_s: 300 # ✅实证: 测风塔 5-min (00:00/00:05/00:10)
  24. caveat: "10min turbine 覆盖 2023-01~2023-12(+2024-01首日); mast 覆盖 2023-01~2024-01(13月度文件)"
  25. # ---- 机组 SCADA 10-min (raw 中文列名; canonical 换算在 assembler: 功率/设定 /1000→kW, 风向1/2 *57.2958→deg; 余列已 canonical 单位) ----
  26. turbine_10min:
  27. sampling_s: 600
  28. required: [变频器有功, 风速1, 变桨轴1位置反馈]
  29. columns:
  30. 变频器有功:
  31. canonical_id: WAPC_active_power
  32. raw_unit: W # ✅实证 raw max ~2.16e6 = W (瓦特陷阱; 盲用差1000×)
  33. to_canonical: "/1000" # → kW (assembler 预换算)
  34. valid_range_canonical: [-150, 2200] # ✅实证(池36k): kW; 负端=停机辅助耗电 min -119kW; 上端 max~2161<2200
  35. observed_range: [-120, 2160]
  36. block_if_raw_exceeds: 50000 # raw>5e4 = 仍瓦特未换算 → BLOCK
  37. 功率设定:
  38. canonical_id: WAPC_setpoint
  39. raw_unit: W
  40. to_canonical: "/1000"
  41. valid_range_canonical: [0, 2200]
  42. observed_range: [0, 2080]
  43. semantic: "<2080kW = 限电/降功率标志 (设定枚举 {0,1829,2029,2030,2050,2080}kW; plateau 2080=额定)"
  44. 风速1:
  45. canonical_id: WMET_wind_speed_nacelle
  46. unit: m/s
  47. valid_range: [-2, 40]
  48. observed_range: [0, 22]
  49. self_ref_risk: true # ★ 机舱风自指; 但本场有真测风塔 → 绝对性能改用 mast (非 INSUFFICIENT)
  50. 风速2:
  51. canonical_id: WMET_wind_speed_nacelle2
  52. unit: m/s
  53. valid_range: [-2, 40]
  54. observed_range: [0, 23]
  55. self_ref_risk: true
  56. note: "第二机舱风速计; ✅实证 per台liveness: 16/18台活(med~5), A12死(med0.43 nuniq23), A13降级(med0.47) → 跨机死列判定按台, 非全局死"
  57. 风向1:
  58. canonical_id: WYAW_yaw_error
  59. raw_unit: rad # ✅实证 ±3.14 主体 = rad
  60. to_canonical: "*57.2958"
  61. frame: nacelle # nacelle-frame → 偏航不作地理扇区
  62. valid_range_canonical: [-180, 180]
  63. observed_range: [-180, 180]
  64. note: "★ raw min-4.71rad(>π, 同红阳)=wrap/量程artifact; *57.3后>180°者界外→NaN. 无-99哨兵. nacelle-frame不可作地理(伪地理三件套: 无独立地理列)"
  65. 风向2:
  66. canonical_id: WYAW_yaw_error_2
  67. raw_unit: rad
  68. to_canonical: "*57.2958"
  69. frame: nacelle
  70. valid_range_canonical: [-180, 180]
  71. observed_range: [-180, 180]
  72. note: "第二对风角; 与风向1交叉"
  73. 机舱位置:
  74. canonical_id: WYAW_nacelle_position
  75. frame: na
  76. unusable: true
  77. valid_range: [-360, 360]
  78. observed_range: [-6, 12]
  79. note: "★ 实证范围 -3.5~10.8 = 非0-360航向(编码器局部偏移/未标定) → 不可作地理heading/绝对偏航锚 (同旧阜山base)"
  80. 发电机转速(pcs):
  81. canonical_id: WGEN_generator_speed
  82. unit: rpm
  83. valid_range: [-60, 2000]
  84. observed_range: [-45, 1880]
  85. note: "权威发电机转速; 负端=停机传感器偏置 min-42"
  86. 发电机转速反馈:
  87. canonical_id: WGEN_speed_fb_scaled
  88. valid_range: [-60, 2000]
  89. observed_range: [-5, 200]
  90. note: "⚠标度异于pcs(p50~128 vs 1219, 比~9.5)→单位/标度待核; 用『发电机转速(pcs)』为权威转速"
  91. 叶轮转速1:
  92. canonical_id: WROT_rotor_speed
  93. unit: rpm
  94. valid_range: [-1, 25]
  95. observed_range: [0, 16]
  96. note: "-6.99坏值簇 <-1 → NaN; 近零偏置保留; rated~14rpm"
  97. 叶轮转速2:
  98. canonical_id: WROT_rotor_speed_2
  99. unit: rpm
  100. valid_range: [-1, 25]
  101. observed_range: [0, 16]
  102. 变桨轴1位置反馈:
  103. canonical_id: WROT_pitch_1
  104. raw_unit: deg # ✅实证 [-0.05,89.08]=度 (本场度, 同枫香; 异于红阳/旧阜山base的rad → 照搬差57×)
  105. valid_range: [-5, 95]
  106. observed_range: [-2, 90]
  107. 变桨轴2位置反馈: { canonical_id: WROT_pitch_2, raw_unit: deg, valid_range: [-5, 95], observed_range: [-2, 90] }
  108. 变桨轴3位置反馈: { canonical_id: WROT_pitch_3, raw_unit: deg, valid_range: [-5, 95], observed_range: [-2, 90] }
  109. 变桨轴1位置指令:
  110. canonical_id: WROT_pitch_demand_1
  111. raw_unit: deg
  112. valid_range: [-5, 95]
  113. observed_range: [-2, 90]
  114. note: "★集距(collective)铁证: 三轴指令极差 p50=p95=0 (广播单指令); 反馈三叶极差 p95=0.07°<<1° → 非IPC. per-blade反馈存在(3真传感器)→三叶不平衡诊断可做, 但控制=集距"
  115. 变桨轴2位置指令: { canonical_id: WROT_pitch_demand_2, raw_unit: deg, valid_range: [-5, 95], observed_range: [-2, 90] }
  116. 变桨轴3位置指令: { canonical_id: WROT_pitch_demand_3, raw_unit: deg, valid_range: [-5, 95], observed_range: [-2, 90] }
  117. 齿轮箱入口油温: { canonical_id: WGBX_oil_inlet_temp, unit: degC, valid_range: [-20, 90], observed_range: [5, 60] }
  118. 齿轮箱输入轴轴温: { canonical_id: WGBX_lss_shaft_temp, unit: degC, valid_range: [-20, 110], observed_range: [15, 85], note: "低速轴(输入轴)温" }
  119. 齿轮箱油槽温度: { canonical_id: WGBX_oil_sump_temp, unit: degC, valid_range: [-20, 90], observed_range: [15, 70], note: "NBM齿箱轴承冷浸参照候选(同浴)" }
  120. 齿轮箱输出轴轴温: { canonical_id: WGBX_hss_bearing_temp, unit: degC, valid_range: [-20, 110], observed_range: [15, 82], note: "输出轴≈高速轴承" }
  121. 齿箱润滑油内部油压:
  122. canonical_id: WGBX_oil_pressure
  123. raw_unit: Pa
  124. valid_range: [-500000, 2000000]
  125. observed_range: [-400000, 1400000]
  126. note: "raw~Pa (标称p50~5.9bar); 负值=停机; 非核心信号"
  127. 发电机轴承A温度: { canonical_id: WGEN_bearing_a, unit: degC, valid_range: [-20, 100], observed_range: [3, 75], note: "A/B配对差可做; A=DE还是NDE待坐实" }
  128. 发电机轴承B温度: { canonical_id: WGEN_bearing_b, unit: degC, valid_range: [-20, 100], observed_range: [1, 86] }
  129. 发电机定子绕组温度U1: { canonical_id: WGEN_winding_u1, unit: degC, valid_range: [-20, 155], observed_range: [10, 120], note: "全套U1/U2/V1/V2/W1/W2 → 三相不对称判据解锁; F级155; 无325哨兵" }
  130. 发电机定子绕组温度U2: { canonical_id: WGEN_winding_u2, unit: degC, valid_range: [-20, 155], observed_range: [10, 120] }
  131. 发电机定子绕组温度V1: { canonical_id: WGEN_winding_v1, unit: degC, valid_range: [-20, 155], observed_range: [10, 120] }
  132. 发电机定子绕组温度V2: { canonical_id: WGEN_winding_v2, unit: degC, valid_range: [-20, 155], observed_range: [10, 120] }
  133. 发电机定子绕组温度W1: { canonical_id: WGEN_winding_w1, unit: degC, valid_range: [-20, 155], observed_range: [10, 120] }
  134. 发电机定子绕组温度W2: { canonical_id: WGEN_winding_w2, unit: degC, valid_range: [-20, 155], observed_range: [10, 120] }
  135. 主轴齿箱侧温度: { canonical_id: WMBR_temp_gbx_side, unit: degC, valid_range: [-20, 90], observed_range: [8, 50], note: "主轴脂润滑无油浴 → NBM不配冷浸参照" }
  136. 主轴叶轮侧侧温度: { canonical_id: WMBR_temp_rotor_side, unit: degC, valid_range: [-20, 90], observed_range: [1, 40], note: "与齿箱侧配对差可做 (原始列名双'侧'非笔误)" }
  137. 机舱空气温度: { canonical_id: WNAC_air_temp, unit: degC, valid_range: [-40, 70], observed_range: [-9, 41] }
  138. 机舱柜温度: { canonical_id: WNAC_cabinet_temp, unit: degC, valid_range: [-40, 70], observed_range: [-3, 41] }
  139. 机舱外环境温度:
  140. canonical_id: WMET_ambient_temp
  141. unit: degC
  142. sentinel: [311.7] # ✅实证: 311.7 饱和哨兵 (p999=max=311.7) → NaN
  143. valid_range: [-40, 55]
  144. observed_range: [-27, 40]
  145. note: "环境温度; 311.7哨兵→NaN; 冬季实测低至-26℃"
  146. 塔底柜温度: { canonical_id: WTUR_tower_base_cabinet_temp, unit: degC, valid_range: [-40, 80], observed_range: [-2, 57] }
  147. 变桨轴1轮毂温度: { canonical_id: WROT_pitch_hub_temp_1, unit: degC, valid_range: [-40, 70], observed_range: [-4, 36] }
  148. 变桨轴2轮毂温度: { canonical_id: WROT_pitch_hub_temp_2, unit: degC, valid_range: [-40, 70], observed_range: [-4, 36] }
  149. 变桨轴3轮毂温度: { canonical_id: WROT_pitch_hub_temp_3, unit: degC, valid_range: [-40, 70], observed_range: [-4, 36] }
  150. 变频器转矩反馈: { canonical_id: WCNV_torque_fb, valid_range: [-2000, 15000], observed_range: [0, 11300], note: "发电转矩反馈(Nm级); 削峰/控制律参考" }
  151. 变频器转矩给定: { canonical_id: WCNV_torque_demand, valid_range: [-2000, 15000], observed_range: [0, 11300] }
  152. 变频器无功:
  153. canonical_id: WAPC_reactive_power
  154. raw_unit: var
  155. valid_range: [-1500000, 1500000]
  156. observed_range: [-620000, 580000]
  157. note: "无功功率 raw var (±~610kvar); A25台缺此列"
  158. 变频器无功给定反馈: { canonical_id: WAPC_reactive_setpoint, raw_unit: var, valid_range: [-1500000, 1500000], observed_range: [-620000, 580000] }
  159. 机舱前后振动加速度:
  160. canonical_id: WNAC_vib_foreaft_raw
  161. sentinel: [-1]
  162. valid_range: [30000, 50000]
  163. observed_range: [38000, 42000]
  164. note: "★raw counts (~39000偏置, 非物理m/s²; 勿入mean); -1哨兵→NaN; 振动统计须median. 秒级层另有真塔振(legacy fushan_wind用)"
  165. 机舱左右振动值:
  166. canonical_id: WNAC_vib_sidebyside
  167. dead_channel: true
  168. valid_range: [-1, 1]
  169. observed_range: [0, 0]
  170. note: "✅实证恒0 死通道 (弃, 勿当缺失填补)"
  171. 机舱X轴振动值: { canonical_id: WNAC_vib_x, valid_range: [-1, 1], observed_range: [-0.05, 0.05], note: "小幅g级; 少量-0.75离群" }
  172. 机舱Y轴振动值: { canonical_id: WNAC_vib_y, valid_range: [-1, 1], observed_range: [-0.05, 0.05] }
  173. 总电量:
  174. canonical_id: WTUR_total_energy
  175. observed_range: [0, 100000000]
  176. note: "累计发电量计数器 (kWh, ~24.9-37M区间, per台各自累积); 差分得区间发电; 非valid_range门(单调累积)"
  177. 发电量统计:
  178. canonical_id: WTUR_energy_stat
  179. observed_range: [0, 200000000000000]
  180. note: "累计发电量统计计数器 (~1e14; 与'发电量统计.1'重列同值); 累积量非门"
  181. 无功统计:
  182. canonical_id: WTUR_reactive_stat
  183. observed_range: [0, 10000000000000]
  184. note: "累计无功统计计数器 (~4e12; 50%liveness); 累积量非门"
  185. # ---- 测风塔 (国电招远阜山风场测风塔数据/, 13月度csv UTF-8-BOM, 5-min, 设备编号=1单塔) ----
  186. # ★★ 本场核心价值: 唯一真·多高度实测测风塔 → 绝对功率曲线/达成率/NTF/Cp 可做 (self_ref-only 场做不了)
  187. mast:
  188. sampling_s: 300
  189. required: [10米瞬时风速(m/s), 70米瞬时风速(m/s)]
  190. n_masts: 1 # ✅实证 设备编号=1 单塔 → 18台共用 → power-curve-ntf 空间代表性门必过后才 per-turbine 绝对裁决
  191. height_layers: "10/30/50/70m 全年实测(-99=0, 单调剪切 p50 3.8/4.5/5.1/5.7); 轮毂高层 -99至2023-09, Oct2023起活(51%)→Dec全活(0%-99)"
  192. columns:
  193. 10米瞬时风速(m/s): { canonical_id: WMET_ws_10m, unit: m/s, sentinel: [-99], valid_range: [0, 50], observed_range: [0, 25], frame: geographic }
  194. 10米瞬时风向(°): { canonical_id: WMET_wd_10m, unit: deg, sentinel: [-99], valid_range: [0, 360], observed_range: [0, 360], frame: geographic }
  195. 30米瞬时风速(m/s): { canonical_id: WMET_ws_30m, unit: m/s, sentinel: [-99], valid_range: [0, 50], observed_range: [0, 25], frame: geographic }
  196. 30米瞬时风向(°): { canonical_id: WMET_wd_30m, unit: deg, sentinel: [-99], valid_range: [0, 360], observed_range: [0, 360], frame: geographic }
  197. 50米瞬时风速(m/s): { canonical_id: WMET_ws_50m, unit: m/s, sentinel: [-99], valid_range: [0, 50], observed_range: [0, 25], frame: geographic }
  198. 50米瞬时风向(°): { canonical_id: WMET_wd_50m, unit: deg, sentinel: [-99], valid_range: [0, 360], observed_range: [0, 360], frame: geographic }
  199. 70米瞬时风速(m/s): { canonical_id: WMET_ws_70m, unit: m/s, sentinel: [-99], valid_range: [0, 50], observed_range: [0, 25], frame: geographic, note: "最高全年实测层; <90m轮毂 → shear外推补轮毂高" }
  200. 70米瞬时风向(°): { canonical_id: WMET_wd_70m, unit: deg, sentinel: [-99], valid_range: [0, 360], observed_range: [0, 360], frame: geographic }
  201. 轮毂高瞬时风速(m/s):
  202. canonical_id: WMET_ws_hub
  203. unit: m/s
  204. sentinel: [-99]
  205. valid_range: [0, 50]
  206. observed_range: [0, 25]
  207. frame: geographic
  208. note: "轮毂高层; -99(全NaN)至2023-09; Oct2023起活(51%)→2024-01全活. 与SCADA重叠活窗=Oct-Dec2023; 全年可 10/30/50/70m shear外推补"
  209. 轮毂高瞬时风向(°): { canonical_id: WMET_wd_hub, unit: deg, sentinel: [-99], valid_range: [0, 360], observed_range: [0, 360], frame: geographic }
  210. 瞬时温度(℃): { canonical_id: WMET_ambient_temp_mast, unit: degC, valid_range: [-40, 50], observed_range: [-20, 35] }
  211. 瞬时湿度(%): { canonical_id: WMET_humidity, unit: "%", valid_range: [0, 100], observed_range: [15, 100] }
  212. 瞬时气压(KPa):
  213. canonical_id: WMET_pressure
  214. unit: kPa
  215. valid_range: [80, 110]
  216. observed_range: [95, 102]
  217. note: "★×10污染子集 (~1005 KPa, 实为100.5) >110 → NaN; rho 计算前必过此门 (同旧阜山base rho污染教训)"
  218. cleaning:
  219. physical:
  220. - "功率/功率设定 raw W → /1000 kW (assembler预换算); raw>50000未换算=BLOCK"
  221. - "变桨=度(本场) → 勿套红阳/旧base的rad"
  222. - "对风 风向1/2 rad*57.3→deg; raw>π(max4.71)wrap artifact → *57.3后>180界外NaN; nacelle-frame不作地理"
  223. - "机舱外环境温度 311.7哨兵→NaN; 叶轮转速-6.99簇<-1→NaN; 前后振动-1哨兵→NaN"
  224. - "mast: -99哨兵→NaN (全高度层); 气压∉[80,110]→NaN (×10污染)"
  225. semantic:
  226. - "功率设定<2080kW = 限电/降功率标志 (非坏值)"
  227. - "机舱左右振动=死通道弃; 机舱位置非地理弃作heading; 发电机转速反馈标度待核用pcs"
  228. - "风速2 per台死列判定(A12死/A13降级), 非全局"
  229. - "n=18台(非目录名义25); 达成率/功率曲线分母按18台"
  230. traps:
  231. - "功率=瓦特: 盲用差1000× (同枫香/红阳/旧阜山)"
  232. - "★变桨单位: 阜山=度, 红阳/旧base=rad — 同OEM不同场单位变, 照搬差57×"
  233. - "采样混采名义: turbine=600s(真), mast=300s; 多台long格式全局t.diff=0是交织伪影(sampling真值per台)"
  234. - "轮毂高mast层 Jan-Sep全-99, 误当0/缺失填补=错; 真活窗Oct2023起"
  235. - "机舱外环境温度311.7 / 前后振动-1 / 叶轮转速-6.99 = 场内哨兵, 统计前必转NaN"
  236. - "★self_ref例外: 本场有真测风塔 → 绝对性能非天然INSUFFICIENT (区别所有self_ref-only场); 但单塔18台 → power-curve-ntf空间代表性门必过 + 结论带不确定度带"