gup_up86_1500_langmushan.yaml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # 数据契约 — 朗目山风电场 (大唐, 云南) — 联合动力 GUP UP86-1500, 1.5MW DFIG geared
  2. # schema: docs/OEM_KB §3. 校验器: scripts/validate_contract.py (CT-2). lint: scripts/contract_lint.py (CT-1)
  3. # 单OEM清爽场: 全33台 A01-A33 同型 联合动力 UP86-1500 (一期, 3回线)。
  4. # 复用 repo gup_up77_1500_gaobenshan (同UP家族/1.5MW/云南高原) 语义层; UP86变体(叶轮86.086m vs 77m)重建; 列名双体系(min英文 / sec s-code)。
  5. meta:
  6. farm: 朗目山风电场
  7. farm_code: LMS
  8. oem: 联合动力 GUODIAN UNITED POWER (GUP)
  9. model: UP86-1500 (1.5MW DFIG geared; 云南高海拔~2350m; COD 2011-12~2012; 叶轮86.086m/轮毂65m)
  10. topology: dfig_geared
  11. rated_kw: 1500 # nameplate; 实测plateau active_power p50=1555 max=1579 (高原ρ<1.225)
  12. rotor_diameter_m: 86.086
  13. hub_height_m: 65
  14. n_turbines_nameplate: 33
  15. n_turbines_with_data: 33 # ✅ 全33台 A01-A33 有 min+sec (单OEM, 无多OEM子集; 台数双键MATCH)
  16. province: 云南
  17. altitude_m: [2330, 2420] # 🔴 高海拔 → ρ~0.93-0.98(barometric; 收资功率曲线表有场站密度曲线, 待读) → 功率曲线必用场站曲线
  18. benchmark: [A05, A16, A31] # 风机列表"是否标杆风机"标"是"
  19. reuse: "联合动力家族复用 gup_up77_1500_gaobenshan(语义层); UP86-1500变体(86m rotor)重建; 列名异(min英文/sec+filter_min s-code)"
  20. sampling:
  21. sec_s: 15 # ✅ 真15秒栅格 (A01 t.diff中位=15s实测, 227万行/2025整年); 异高本山1s/唐珍15s — 本场真15s
  22. min_s: 600 # 真10分钟 (t.diff=600s实测)
  23. windows:
  24. sec: "2025-01-01 ~ 2026-01-01 (整年, 33台)"
  25. min: "2025-01-01 ~ 2025-12-31 23:50 (整年, 33台)"
  26. filter_min: "同min窗, s-code列名滤后版"
  27. sec_alt: "2秒级(15s)/_整理 = 2025 + 部分台(A22-25/28-30/32/33)延2026-02"
  28. mast: "2025 (待验与SCADA重叠)"
  29. met_mast: present_untested # 🟡 3测风塔数据2025年/朗目山.csv 1文件; 与SCADA同2025年 → 绝对功率曲线候选; ⚠必验切变物理性(高层>低层)+方向与SCADA地理风向一致, 过验才做绝对(唐珍80m坏为戒), 未过→绝对INSUFFICIENT
  30. power_curve_table: present # 🟢 收资表"功率曲线表"sheet + 合同功率曲线模版.xlsx; 场站密度曲线待读 → 绝对达成率可锚(配mast自由来流)
  31. event_table: absent_status_code # 🔴 无干净状态码 (lab={0:48093,1,2,4}各lab都正功率=非状态机, 疑清理标签) + 有故障查询/启停机查询csv(事件级) → 可用率/态 物理派生(高本山/金华山式)
  32. encoding: {min: utf-8-sig, sec: utf-8-sig, filter_min: utf-8-sig} # ⚠min按gbk读糊表头'锘縯ime_stamp'→必utf-8-sig
  33. data_source: "/Volumes/WINDDATA/DATA2/大唐/朗目山风电场-云南-大唐/收资数据 (原T5盘重挂为WINDDATA/DATA2去空格). min/=英文列名10min; sec/=s-code 15s; filter_min/=s-code 10min滤后; 逐台A01-A33单文件。"
  34. provenance: "scripts/intake_scan.py→disk_manifest.json(291文件/9层/117材料); §1.2实证=本会话 min/sec describe+采样率+lab+wind_dir frame; 风机列表+UP86-1500基本参数.doc双证机型台数"
  35. # ============ sec 层 (21列; 真15s; 33台; s-code命名) ============
  36. turbine_sec:
  37. required: [s15003_converter_power, s11301_wind_speed_1]
  38. columns:
  39. 时间: {canonical_id: timestamp, parse: datetime, note: "15秒栅格"}
  40. s15003_converter_power: {canonical_id: WAPC_active_power, unit: kW, valid_range: [-50, 1600], note: "变流器侧功率; plateau~1569; rated1500"}
  41. s11301_wind_speed_1: {canonical_id: WMET_wind_speed_nacelle, unit: m/s, valid_range: [0, 40], self_ref_risk: true, note: "机舱风; 绝对性能需mast"}
  42. s11304_wind_direction_1: {canonical_id: WMET_wind_direction_geo, unit: deg, frame: geographic, valid_range: [0, 360], note: "🟢真地理(集中135-225°西南主导); 偏航/扇区/尾流可用"}
  43. s11501_rotor_speed: {canonical_id: WROT_speed, unit: rpm, valid_range: [0, 25], note: "rotor 9.7-19.5额定17.4; geared"}
  44. s15001_converter_motor_speed: {canonical_id: WGEN_speed, unit: rpm, valid_range: [-50, 2000], note: "发电机/变流器电机转速 DFIG ~1000-1800; ~2.8%小负值=idle噪声界外→NaN"}
  45. s12504_yaw_deviation_wind_nacelle_position: {canonical_id: WYAW_error, unit: deg, valid_range: [-180, 180], self_ref_risk: true, note: "🟢真对风偏差直读 p50≈0.5; 控制器跟随vane(self_ref)→真静偏须dome-fit"}
  46. s12501_yaw_position: {canonical_id: WYAW_nacelle_position_cumulative, unit: deg, valid_range: [-3600, 3600], note: "🟡累积位置(实测bulk[-562,659], 2%<-360真per台偏置); 野值-39179界外→NaN; 偏航误差重构需mod360+绝对风向验证"}
  47. s13701_pitch_position_target_1: {canonical_id: WROT_pitch_target_1, unit: deg, valid_range: [-2, 92], note: "叶片1桨距目标"}
  48. s13702_pitch_position_target_2: {canonical_id: WROT_pitch_target_2, unit: deg, valid_range: [-2, 92]}
  49. s13703_pitch_position_target_3: {canonical_id: WROT_pitch_target_3, unit: deg, valid_range: [-2, 92], note: "🔴sec仅桨距target(无per-blade实测)→叶片不平衡不能靠桨距; 且无机舱振动列"}
  50. s12901_generator_winding_temperature_u1: {canonical_id: WGEN_winding_temp, unit: degC, valid_range: [-40, 150], note: "绕组U1 max114.8 F级155阈内"}
  51. s12908_generator_bearing_temperature_a: {canonical_id: WGEN_bearing_a_temp, unit: degC, valid_range: [-40, 120]}
  52. s12909_generator_bearing_temperature_b: {canonical_id: WGEN_bearing_b_temp, unit: degC, valid_range: [-40, 120]}
  53. s13402_main_bearing_gearbox_side_temperature: {canonical_id: WROT_main_bearing_temp, unit: degC, valid_range: [-40, 120], note: "主轴承齿箱侧"}
  54. s12805_gearbox_oil_temperature_gearbox: {canonical_id: WGBX_oil_temp, unit: degC, valid_range: [-40, 120]}
  55. s12801_gearbox_temperature_input_shaft1: {canonical_id: WGBX_lss_bearing_temp, unit: degC, valid_range: [-40, 120], note: "齿箱输入轴(低速轴)"}
  56. s12803_gearbox_temperature_output_shaft2: {canonical_id: WGBX_hss_bearing_temp, unit: degC, valid_range: [-40, 120], note: "齿箱输出轴(高速轴)"}
  57. s13001_nacelle_outdoor_temperature: {canonical_id: WMET_ambient_temp, unit: degC, valid_range: [-40, 55]}
  58. s13002_nacelle_temperature: {canonical_id: WNAC_temp, unit: degC, valid_range: [-40, 80]}
  59. s13207_operation_data_energy_yield: {canonical_id: WTUR_energy_yield, unit: kWh, note: "🔴累积计数器; 野值~1.1e9(vs p99.9=56.5M)→clip/diff前剔"}
  60. no_status_code: "🔴 sec无状态码列 → 可用率/态 物理派生 (P>~20kW∧rotor>thr=发电 / P~0低风=待机 / P~0有风rotor停=停机); 限电=同步性判别器(有绝对风向可加扇区; §4.3)"
  61. # ============ min 层 (23列; 真10min; 33台; 英文命名) ============
  62. turbine_10min:
  63. required: [active_power, wind_velocity]
  64. columns:
  65. time_stamp: {canonical_id: timestamp, parse: datetime, note: "utf-8-sig BOM; 10分钟栅格"}
  66. active_power: {canonical_id: WAPC_active_power, unit: kW, valid_range: [-50, 1600], note: "电网侧 plateau p50=1555 max=1579"}
  67. wind_velocity: {canonical_id: WMET_wind_speed_nacelle, unit: m/s, valid_range: [0, 40], self_ref_risk: true}
  68. s11304_wind_direction_1: {canonical_id: WMET_wind_direction_geo, unit: deg, frame: geographic, valid_range: [0, 360]}
  69. rotor_speed: {canonical_id: WROT_speed, unit: rpm, valid_range: [0, 25]}
  70. generator_speed: {canonical_id: WGEN_speed, unit: rpm, valid_range: [-50, 2000], note: "max实测1866; ~2.8%小负值=idle噪声界外→NaN"}
  71. yaw_error1: {canonical_id: WYAW_error, unit: deg, valid_range: [-180, 180], self_ref_risk: true, note: "🟢对风偏差直读 p50=-0.39"}
  72. s12501_yaw_position: {canonical_id: WYAW_nacelle_position_cumulative, unit: deg, valid_range: [-3600, 3600], note: "🔴累积位置; 野值-39179界外→NaN; 实测bulk[-562,659]"}
  73. pitch_angle_blade_1: {canonical_id: WROT_pitch_1, unit: deg, valid_range: [-2, 92], note: "🟢实测叶片1桨距(唯一per-blade实测)"}
  74. s13702_pitch_position_target_2: {canonical_id: WROT_pitch_target_2, unit: deg, valid_range: [-2, 92]}
  75. s13703_pitch_position_target_3: {canonical_id: WROT_pitch_target_3, unit: deg, valid_range: [-2, 92]}
  76. generator_winding1_temperature: {canonical_id: WGEN_winding_temp, unit: degC, valid_range: [-40, 150]}
  77. generatordrive_end_bearing_temperature: {canonical_id: WGEN_bearing_de_temp, unit: degC, valid_range: [-40, 120]}
  78. generatornon_drive_end_bearing_temperature: {canonical_id: WGEN_bearing_nde_temp, unit: degC, valid_range: [-40, 120]}
  79. main_bearing_temperature: {canonical_id: WROT_main_bearing_temp, unit: degC, valid_range: [-40, 120]}
  80. gearbox_oil_temperature: {canonical_id: WGBX_oil_temp, unit: degC, valid_range: [-40, 120]}
  81. gearbox_low_speed_shaft_bearing_temperature: {canonical_id: WGBX_lss_bearing_temp, unit: degC, valid_range: [-40, 120]}
  82. gearbox_high_speed_shaft_bearing_temperature: {canonical_id: WGBX_hss_bearing_temp, unit: degC, valid_range: [-40, 120]}
  83. outside_cabin_temperature: {canonical_id: WMET_ambient_temp, unit: degC, valid_range: [-40, 55]}
  84. cabin_temperature: {canonical_id: WNAC_temp, unit: degC, valid_range: [-40, 80]}
  85. s13207_operation_data_energy_yield: {canonical_id: WTUR_energy_yield, unit: kWh, note: "累积计数器; 野值clip"}
  86. lab: {canonical_id: _quality_label, note: "🔴非状态码(各lab都正功率, 无停机对应)→勿当ground-truth态; 疑清理/质量标签"}
  87. turbine_name: {canonical_id: turbine_id, parse: str}
  88. # ============ 测风塔 ============
  89. mast:
  90. file: "朗目山风电场2025年收资/3测风塔数据2025年/朗目山.csv (单文件) + 收资表'测风塔数据点表'sheet"
  91. window: "2025 (待验与SCADA重叠)"
  92. note: "🟡 单塔; 必验切变物理性(层高>低层? α合理?)+ 实测风向与SCADA绝对风向方向一致, 过验才做绝对功率曲线(唐珍80m坏=有塔≠可用为戒). 轮毂65m; 未过验→绝对达成率INSUFFICIENT (承 §0.9 独立性+代表性)"
  93. cleaning:
  94. physical:
  95. - "全层 utf-8-sig 读 (min勿按gbk否则表头糊'锘縯ime_stamp')"
  96. - "有功 clip[-50,1600]; 桨距 clip[-2,92]; rotor clip[0,25]; 发电机转速 clip[0,2100]; 温度按各 valid_range clip"
  97. - "s12501_yaw_position 野值(-39179)必 clip[-360,720]; s13207_energy_yield 野值(~1.1e9)diff前剔"
  98. - "无标准哨兵值(-99/9999等0命中); 坏值靠 valid_range 界外→NaN(非clamp)"
  99. semantic:
  100. - "wind_speed=机舱风 self_ref → 绝对功率曲线/Cp 用 mast 自由来流(过切变验); 相对/自比 可机舱风但标 self_ref (§0.9)"
  101. - "无干净状态码 → 物理派生态(P/rotor/wind); lab 非状态码勿用; 可用率非内置"
  102. - "yaw_error1/s12504 真对风偏差 p50≈0 = 控制器跟随(self_ref) → 真静偏须 dome-fit P-yaw (§4.4); s12501累积位置需mod360+绝对风向重构"
  103. - "高原~2350m: 绝对功率曲线用场站密度曲线(收资功率曲线表), 非1.225标准, 否则达成率虚高"
  104. derive_10min: "sec(15s)清洗后派生10min真时均层(§3.4, 非瞬时快照)+ 秒级原生四件套(事件区间/启停/满发std/湍流ws-std); min/filter_min 已是10min可直用"
  105. traps:
  106. - "★ 列名双体系: min=英文(active_power/wind_velocity/yaw_error1) / sec+filter_min=s-code(s15003/s11301/s12504) → 契约双映射到同canonical, 分析前统一"
  107. - "★ min编码 utf-8-sig(BOM): 按gbk读糊表头'锘縯ime_stamp' → 必 utf-8-sig"
  108. - "★ 真采样率 sec=15s / min=10min (实测, 非命名陷阱); 秒级'_整理'/(15s)冗余多套+部分台延2026-02"
  109. - "★ lab 非状态码(各lab都正功率)→ 可用率/限电物理派生(高本山式); 有故障/启停机查询csv=事件级弱监督"
  110. - "★ 桨距仅叶片1实测(2/3为target)+ 无机舱振动列 → 叶片不平衡难判(不像高本山有振动x/y)"
  111. - "🟡 高海拔ρ<1.225 → 功率曲线必用场站密度曲线, 否则达成率虚高"
  112. - "🟡 单塔 met_mast: 必验切变+方向一致 才做绝对(唐珍为戒); 未过验→绝对 INSUFFICIENT (承 §0.9)"
  113. - "🟡 s12501_yaw_position 累积(min野值-39179/sec偏置)→ 偏航位置重构需mod360+绝对风向验证再报(候选非直接)"