gup_up2000_fengxiang.yaml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. # 数据契约 — 国电 GUP UP2000 2.0MW DFIG (枫香, 贵州; 混机型 UP2000-96 + UP2000-103)
  2. # 复用基 = gup_up2000_2mw.yaml (阜山); 本场英文SCADA码 + §1.2 实证修正 (2026-07-06, 台17 2023.06 proof)
  3. # ⚠ 草案: 待 contract_lint(CT-1) + validate_contract(CT-2) 过门; [待验]项须扩验后定稿
  4. meta:
  5. oem: 国电联合动力 GUP
  6. model: UP2000-96 + UP2000-103 (混机型, 2MW/90m轮毂)
  7. topology: dfig_geared
  8. rated_kw: 2000
  9. source_farm: 枫香 (贵州, 海拔~1380-1466m 高原)
  10. reuse_base: gup_up2000_2mw.yaml (阜山; 语义/陷阱复用, 列名/单位本场重验)
  11. mixed_model: # ★ 分机型铁律: 达成率/功率曲线必按叶轮变体分组
  12. UP2000-96: "编号低 (1,2,...); 叶轮96m"
  13. UP2000-103: "编号高 (17,18,...); 叶轮103m"
  14. caveat: "分母按机型; 型内独立; 不 pool (同郭家店 W2000 三型)"
  15. layout: # ★ 本场特殊: 一文件一(台×信号)
  16. format: "<tid>_<signal_code>.csv; 2表头行(IO名称/描述) + rows: 时间戳,值"
  17. time_format: "DD-MM-YYYY HH:MM:SS (dayfirst)"
  18. assemble: "scripts/fengxiang_assemble.py (per-台 join 19信号 → 宽表)"
  19. sampling:
  20. layers: "10min(2023.06-2024.05) / 秒级1s或5s(2024.03-05) / 测风塔(2023.06-2024.02)"
  21. caveat: "混采; 秒级窗仅3月; 逐时段 t.diff() 测 (§1.2); 2023.06 实测部分月(06-12~06-19 8天)"
  22. # ---- 机组 SCADA (raw 列名 = 英文 SCADA 码; §1.2 台17 实证) ----
  23. turbine:
  24. sampling_s: 600 # ✅实证: t.diff().median()=600s per月 (10min 层; 层A/B 同)
  25. required: [UNIT.CI_PcsActivePower, UNIT.CI_WindSpeed1, SCADAUSE.CI_RotorSpeed]
  26. columns:
  27. UNIT.CI_PcsActivePower:
  28. canonical_id: WAPC_active_power
  29. raw_unit: W # ✅实证: max 1533200 → W
  30. to_canonical: "/1000"
  31. valid_range_canonical: [-100, 2200] # ✅实证(531k行): 负端=停机辅助耗电 min -53kW(<-100:0行), 上端 max 2148<2200. [0]floor会NaN 6.2%停机点=丢idle态
  32. block_if_raw_exceeds: 50000
  33. UNIT.CI_WindSpeed1:
  34. canonical_id: WMET_wind_speed_nacelle
  35. unit: m/s
  36. valid_range: [-2, 40] # ✅实证: 负端=风速计零点偏置 密集带-0.8~-0.9(6.5%); <-2 仅0.04%(230行=真坏值→NaN). [0]floor会NaN 8%偏置点
  37. self_ref_risk: true # ★ 机舱风自指 (但本场有测风塔 → 可交叉, §power-curve-ntf)
  38. SCADAUSE.CI_RotorSpeed:
  39. canonical_id: WROT_rotor_speed
  40. unit: rpm
  41. valid_range: [-1, 28] # ✅实证: 近零偏置带保留; -7坏值簇(296行)<-1→NaN; 上端26-27rpm瞬态2点保留(rated~17)
  42. SCADAUSE.CI_PcsMeasuredGeneratorSpeed:
  43. canonical_id: WGEN_generator_speed
  44. unit: rpm
  45. valid_range: [-60, 2000] # ✅实证: 负端=停机传感器偏置 min -52(<-100:0行); [0]floor会NaN 1.8%idle点
  46. SCADAUSE.CI_PitchPositionA1: { canonical_id: WROT_pitch_1, raw_unit: deg, valid_range: [-2, 95] } # ✅实证[0,89]=度, 非阜山rad
  47. SCADAUSE.CI_PitchPositionA2: { canonical_id: WROT_pitch_2, raw_unit: deg, valid_range: [-2, 95] }
  48. SCADAUSE.CI_PitchPositionA3: { canonical_id: WROT_pitch_3, raw_unit: deg, valid_range: [-2, 95] }
  49. # --- 变桨电机电流 (motor parity 轴; §1.2 实证 2026-07-16, 层B 4周×9台 pooled) ---
  50. # ✅实证: 单位=安培A; 广播集控机 83% idle=0 (集距三电机同动, 低占空); 无负值/无哨兵; 活跃 p99.9≈280-290A, max 370-420A.
  51. # valid_range 保 idle 0 (非[0]floor), 上界500=物理天花板(>500=坏值→NaN, 非clamp); max420<500 无真值被切.
  52. UNIT.CI_PitchMotorCurrentS1: { canonical_id: WROT_pitch_motor_cur_1, unit: A, valid_range: [-5, 500], note: "变桨轴1电机电流; 集控广播机三电机同动 83%idle=0" }
  53. UNIT.CI_PitchMotorCurrentS2: { canonical_id: WROT_pitch_motor_cur_2, unit: A, valid_range: [-5, 500], note: "变桨轴2电机电流" }
  54. UNIT.CI_PitchMotorCurrentS3: { canonical_id: WROT_pitch_motor_cur_3, unit: A, valid_range: [-5, 500], note: "变桨轴3电机电流" }
  55. UNIT.CI_YawError1:
  56. canonical_id: WYAW_yaw_error
  57. raw_unit: rad # ✅实证: ±3.14 = rad
  58. to_canonical: "*57.2958"
  59. frame: nacelle # nacelle-frame; 偏航不作地理扇区
  60. valid_range_canonical: [-180, 180]
  61. note: "★ 本场无 -99 哨兵 (异于阜山72.8%); 但 nacelle-frame 仍不可作地理"
  62. UNIT.CI_GearboxInletOilTemperature: { canonical_id: WGBX_oil_temp, unit: degC, valid_range: [-20, 90] }
  63. UNIT.CI_GearboxOutputShaftTemperature: { canonical_id: WGBX_hss_bearing_temp, unit: degC, valid_range: [-20, 110], note: "输出轴≈高速轴承; 探头偏分解参考=入口油" }
  64. UNIT.CI_GeneratorBearingTemperatureA: { canonical_id: WGEN_bearing_de, unit: degC, valid_range: [-20, 100] }
  65. UNIT.CI_GeneratorBearingTemperatureB: { canonical_id: WGEN_bearing_nde, unit: degC, valid_range: [-20, 100], note: "A/B=DE/NDE配对差可做; 待坐实A=DE还是NDE" }
  66. UNIT.CI_GeneratorWindingTemperatureU1: { canonical_id: WGEN_winding_u, unit: degC, valid_range: [-20, 155], note: "定子绕组U1; 全套U1/U2/V1/V2/W1/W2 已补 → 三相不对称判据解锁 (2026-07-16)" }
  67. # --- 更全温度套 (§1.2 实证 2026-07-16; 全 100% 非NaN liveness) ---
  68. # ✅实证绕组: U2/V1/V2/W1/W2 连续分布 p50≈56 p99≈124-127 max 134-141°C; F级155; 无325哨兵(绕组走独立DAQ路).
  69. UNIT.CI_GeneratorWindingTemperatureU2: { canonical_id: WGEN_winding_u2, unit: degC, valid_range: [-20, 155], note: "定子绕组U2" }
  70. UNIT.CI_GeneratorWindingTemperatureV1: { canonical_id: WGEN_winding_v1, unit: degC, valid_range: [-20, 155], note: "定子绕组V1" }
  71. UNIT.CI_GeneratorWindingTemperatureV2: { canonical_id: WGEN_winding_v2, unit: degC, valid_range: [-20, 155], note: "定子绕组V2" }
  72. UNIT.CI_GeneratorWindingTemperatureW1: { canonical_id: WGEN_winding_w1, unit: degC, valid_range: [-20, 155], note: "定子绕组W1" }
  73. UNIT.CI_GeneratorWindingTemperatureW2: { canonical_id: WGEN_winding_w2, unit: degC, valid_range: [-20, 155], note: "定子绕组W2" }
  74. # ✅实证: 非绕组温 4 通道共享 325.2 saturation 哨兵 (15行/0.043% 同行触发 = 传感总线故障), valid_range上界<325.2 → 界外NaN(非clamp)吞掉.
  75. UNIT.CI_GeneratorCoolingAirTemperature: { canonical_id: WGEN_cooling_air_temp, unit: degC, valid_range: [-20, 120], note: "发电机空冷温度; p99.9=95; 325.2哨兵→NaN" }
  76. UNIT.CI_GearboxOilSumpTemperature: { canonical_id: WGBX_oil_sump_temp, unit: degC, valid_range: [-20, 90], note: "齿箱油槽温度; p99.9=76; 325.2哨兵→NaN; NBM齿箱轴承冷浸参照候选" }
  77. UNIT.CI_MainBearingGearboxSideTemperature: { canonical_id: WMBR_temp_gbx_side, unit: degC, valid_range: [-20, 90], note: "主轴齿箱侧温度(脂润滑, 无油浴→NBM不配冷浸); p99.9=56; 325.2哨兵→NaN" }
  78. UNIT.CI_MainBearingRotorSideTemperature: { canonical_id: WMBR_temp_rotor_side, unit: degC, valid_range: [-20, 90], note: "主轴叶轮侧温度; 与齿箱侧配对差可做; p99.9=45; 325.2哨兵→NaN" }
  79. UNIT.CI_NacelleAirTemperature: { canonical_id: WNAC_air_temp, unit: degC, valid_range: [-40, 70] }
  80. UNIT.CI_OutsideAirTemperature: { canonical_id: WMET_ambient_temp, unit: degC, valid_range: [-40, 55] }
  81. UNIT.CI_NacellePosition: { canonical_id: WYAW_nacelle_position, frame: "[待验]", note: "阜山不可用(-5.7~10.7); 枫香范围待验" }
  82. UNIT.CI_IprTotalEnergyReal: { canonical_id: WTUR_total_energy, note: "累计量; 差分得区间发电" }
  83. UNIT.D_TotalTimeAvailable: { canonical_id: WAVL_avail_time, note: "可用时间累计" }
  84. UNIT.D_TotalTimeErrorShutDown: { canonical_id: WAVL_fault_time, note: "故障停机时间累计" }
  85. # ---- 测风塔 (3.测风塔数据 2023.06-2024.06) — ✅实证: 无实测塔, 仅 NWP 预报 (2026-07-06 分析⑤) ----
  86. mast:
  87. status: "❌无可用实测塔 → 绝对功率曲线/达成率/Cp = INSUFFICIENT (power-curve-ntf 铁律)"
  88. actual: "3.测风塔数据/ 唯一文件=天气预报报表(15分钟).xlsx = NWP预报(预报风速/风向/温度/湿度/气压, 10/30/50/70m, 场站级单点)。非实测。"
  89. point_table_note: "风电场收资表::测风塔数据点表 声明应有 YC0001-YC0013 实测通道, 但未交付; 且点表坐标(123.4E/44.7N=吉林)=模板污染(枫香在贵州106E/27N)。"
  90. caveat: "最高层 70m < 90m 轮毂; 预报单点对9台零空间分辨率 → 不可替代自由来流。破 ws_nac 自指改用 rotor/power 双锚 (scripts/fengxiang_rotor_anchor.py)。"
  91. cleaning:
  92. physical:
  93. - "功率 raw W → /1000 kW; raw>50000 未换算 = BLOCK"
  94. - "变桨=度(本场), 勿套阜山 rad"
  95. - "对风 rad*57.3; 本场无-99哨兵但仍 nacelle-frame"
  96. semantic:
  97. - "分机型: UP2000-96 vs 103 达成率/功率曲线分组不 pool"
  98. traps:
  99. - "功率=瓦特: 盲用差1000倍 (同阜山)"
  100. - "变桨单位阜山=rad 本场=度: 照搬契约会差57倍 (§1.2 实证逮)"
  101. - "单位/哨兵/布局逐场重验: 同OEM(GUP)不同场 列名(中文↔英文码)+单位(rad↔deg)+哨兵(有↔无) 都变"
  102. - "混机型: 96/103 分母不可 pool (分机型铁律)"
  103. - "秒级窗仅2024.03-05 3月; 10min 2023.06起有断月(缺数说明.xlsx)"