gup_up77_1500_gaobenshan.yaml 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # 数据契约 — 高本山风电场 (farm#8, 大唐) — 联合动力 GUP UP77-1500, 1.5MW DFIG geared
  2. # schema: docs/OEM_KB §3. 校验器: scripts/validate_contract.py
  3. # 单OEM清爽场 (异和风/唐珍多OEM): 全33台 A01-A33 同型 联合动力 UP77-1500.
  4. meta:
  5. farm: 高本山风电场
  6. farm_code: GBS
  7. oem: 联合动力 GUODIAN UNITED POWER (GUP)
  8. model: UP77-1500 (1.5MW DFIG geared; 云南高海拔2827-3112m; COD 2016-2017; ρ场站0.886)
  9. topology: dfig_geared
  10. rated_kw: 1500 # 有功 max~1563; 曲线rated 1500(标准)/~1550(0.886场站)
  11. rotor_diameter_m: 77
  12. hub_height_m: 65
  13. n_turbines_nameplate: 33
  14. n_turbines_with_data: 33 # ✅ 全33台有秒级(单OEM, 无多OEM子集问题)
  15. province: 云南
  16. altitude_m: [2827, 3112] # 🔴 高海拔 → 空气密度0.886(非标准1.225); 功率曲线必用0.886场站曲线
  17. benchmark: [A16, A32] # 机台表标"是"标杆
  18. reuse: "联合动力家族复用 repo gup_up2000_2mw(语义层); ⚠ UP77-1500变体(1.5MW/77m vs UP2000 2MW)重建; 列名异(本场英文/中文SCADA导出)"
  19. sampling:
  20. sec_s: 1 # ✅ 真1秒栅格(22%行"无数据"gap, 剔后中位1.0s); 异和风30s/唐珍15s — 本场真1s
  21. min_s: 600 # 10分钟风机数据.zip
  22. windows:
  23. sec: "2023-09 ~ 2023-11 (3月, raw月度9/10/11 + 预清洗data_second_scada单文件/台)"
  24. min: "2023 (10分钟SCADA, 待核全年)"
  25. mast: "✅ 半年塔 2023-08起 → 与sec 9-11月重叠✓ (异金华山三窗错配)"
  26. met_mast: present_promising # 🟢 半年塔 wind5minute.csv(长格式): 4层(10/30/50/70m) 5分钟, 实测风速+绝对风向+温湿压+大气密度; 与SCADA重叠. → 绝对功率曲线首个真有希望; ⚠ 必验切变物理性(高层>低层)+方向一致 (唐珍80m坏为戒) 再用
  27. power_curve_table: present # 🟢 收资表功率曲线×2密度: ρ0.886(场站实际, rated~1550)+ ρ1.225(标准, rated1500). 高海拔必用0.886. → 绝对达成率可锚(配mast自由来流)
  28. event_table: absent_status_code # 🔴 无状态码列 + 无故障/限电日志 → 可用率/限电 物理派生(金华山/王家湾式: P/rotor_speed/wind)
  29. encoding: {raw: gbk, cleaned: utf-8}
  30. data_source: "用 数据转换及清洗/秒级SCADA数据/data_second_scada.zip (33单文件A01-A33, 中文列名, 无数据已转空NaN; 等价raw月度18列无丢字段, 验证过). raw月度=高本山风机数据-{9,10,11}yue.zip(英文列名gbk)."
  31. provenance: "scripts/gbs_survey.py(收资表/mast/zip), gbs_survey2.py(机台表/曲线/SCADA头), gbs_goem.py(采样/值域/偏航/跨33台)"
  32. # ============ sec 层 (18列; 有效1秒; 33台) ============
  33. turbine_sec:
  34. required: [有功功率, 风速1]
  35. columns:
  36. 时间: {canonical_id: timestamp, parse: datetime, note: "1秒栅格; '无数据'/'非数字'文本哨兵→剔/NaN"}
  37. 有功功率: {canonical_id: WAPC_active_power, unit: kW, valid_range: [-50, 1600], note: "max1563 rated1500"}
  38. 无功功率: {canonical_id: WAPC_reactive_power, unit: kVar, valid_range: [-2000, 2000], note: "🔴野哨兵±24万-48万必clip"}
  39. 风速1: {canonical_id: WMET_wind_speed_nacelle, unit: m/s, valid_range: [0, 40], self_ref_risk: true, note: "==风速2冗余; 机舱风, 绝对性能需mast"}
  40. 风速2: {canonical_id: WMET_wind_speed_nacelle_2, unit: m/s, note: "==风速1"}
  41. 绝对风向1: {canonical_id: WMET_wind_direction_geo, unit: deg, frame: geographic, valid_range: [0, 360], note: "🟢真地理0-360(fleet验); ==风向2; 偏航/扇区/对风可用"}
  42. 绝对风向2: {canonical_id: WMET_wind_direction_geo_2, note: "==风向1"}
  43. 风轮转速或主轴转速: {canonical_id: WROT_speed, unit: rpm, valid_range: [0, 25], note: "rotor~10-18; geared; 无发电机转速列"}
  44. rotor_speed_for_control: {canonical_id: WROT_speed_ctrl, unit: rpm, note: "≈风轮转速"}
  45. 机舱方向或位置:
  46. canonical_id: WYAW_nacelle_position_cumulative
  47. note: "🟡累积(per台>360不同偏置, A01[341,360]..A21[543,583]) → 偏航误差需 mod360 + 绝对风向重构(候选); ⚠验mod360 heading与风向对齐再用, 否则唐珍式弃"
  48. 桨距角1: {canonical_id: WROT_pitch_1, unit: deg, valid_range: [-1, 92], note: "🔴仅单叶片(无per-blade2/3) → 叶片不平衡不能靠桨距, 靠振动; A07/A25死"}
  49. pitch_position_target_1: {canonical_id: WROT_pitch_target_1, unit: deg}
  50. 机舱横向(左右)振动值(RMS): {canonical_id: WNAC_vibration_x, note: "🟢振动x RMS → 叶片不平衡(1P)+塔振候选; A07注意"}
  51. 机舱前后(俯仰)振动值(RMS): {canonical_id: WNAC_vibration_y, note: "🟢振动y RMS"}
  52. 发电机驱动端轴承温度: {canonical_id: WGEN_bearing_de_temp, unit: degC, valid_range: [-40, 120], note: "唯一发电机温度"}
  53. 机舱外温度: {canonical_id: WMET_ambient_temp, unit: degC, valid_range: [-40, 55], note: "🔴~7台死(A05/12/15/21/23/24/33)→跨台验"}
  54. converter_ctrl_converter_torque_setpoint: {canonical_id: WCNV_torque_setpoint, note: "转矩设定%"}
  55. converter_generator_torque: {canonical_id: WCNV_generator_torque, note: "发电机转矩%"}
  56. no_status_code: "🔴 无状态码列 → 可用率/态 物理派生(P>~20kW∧rotor>thr=发电 / P~0低风=待机 / P~0有风rotor停=停机); 限电=同步性判别器(景泰/昌平式, 有绝对风向可加扇区)"
  57. # ============ 测风塔 (半年塔, 长格式) ============
  58. mast:
  59. file: "高本山半年测风数据.zip + 数据转换及清洗/测风塔数据/wind5minute.csv"
  60. format: "长格式(层高为列), utf-8, 5分钟; 列: 时间,层高(10/30/50/70m),实测风速,实测风向,实测温度,实测湿度,实测气压,实测雨量,大气密度"
  61. heights_m: [10, 30, 50, 70]
  62. window: "2023-08起半年 → 与sec 9-11月重叠✓"
  63. note: "🟢 4层+实测风向(地理)+大气密度 → 自由来流功率曲线有希望; ⚠ 必验切变物理性(70>50>30>10? α合理?)+与SCADA绝对风向方向一致, 过验才做绝对达成率(唐珍80m坏=有塔≠可用为戒). 轮毂65m在50-70m层间, 切变外推"
  64. cleaning:
  65. physical:
  66. - "'无数据'/'非数字'文本 → NaN, 全数据列NaN行剔 (有效1秒)"
  67. - "有功 clip[-50,1600]; 无功 clip[-2000,2000](剔±24万野哨兵); 桨距 clip[-1,92]; rotor clip[0,25]"
  68. - "机舱外温度 死列(~7台)跨台标记不纳入该台"
  69. semantic:
  70. - "风速1=机舱风 self_ref → 绝对功率曲线用mast自由来流(过切变验); 相对/表观可机舱风但标self_ref"
  71. - "无状态码 → 物理派生态(P/rotor/wind); 可用率非内置"
  72. - "机舱方向累积 → 偏航误差重构(mod360+绝对风向)需验证再报"
  73. traps:
  74. - "★ 采样真1秒但22%'无数据'gap(文本哨兵)→ 必剔再算采样/聚合"
  75. - "★ 无功功率野哨兵±24万-48万 → 不clip会污染均值"
  76. - "★ 机舱方向累积非heading(per台偏置异)→ 偏航需mod360重构+绝对风向验证(候选非直接)"
  77. - "★ 桨距仅单叶片 → 叶片不平衡靠振动(本场有振动x/y, 优于和风)非桨距"
  78. - "🔴 无状态码 → 可用率/限电物理派生(金华山式); 同步性判别器分外部vs故障"
  79. - "🟡 高海拔ρ0.886 → 功率曲线必用0.886场站曲线(非1.225标准), 否则达成率虚高"
  80. - "🟡 有mast(半年4层)但 必验切变物理性+方向一致 才做绝对(唐珍为戒); 未过验→绝对INSUFFICIENT"