mingyang_my2_0_gucheng.yaml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # 数据契约 — 明阳 MINGYANG MY2.0-104/80(S) 高原型 (云南大唐古城风电场, 24台 2MW)
  2. # schema: docs/OEM_KB §3. 校验器: scripts/validate_contract.py. oem-onboard 2026-07-12.
  3. # 复用: mingyang_my2_0_changpingao 语义参考 (同OEM MY2.0; changpingao用英文列名iGenPower, 古城用中文'平均X' → canonical语义复用非列名)。
  4. # 数据: per台 <GCn>.zip 内单CSV "GCn—2.0MW_原始数据_*.csv" (utf-8-sig, 82列, 明阳导出); 整年 2025-03~2026-02。
  5. # ★ 有 5高度实测测风塔 (大龙山 10/30/50/70/90m, masta EEE2252C001-003, 非预报) → 解锁绝对性能/NTF/达成率 (mast section 另接)。
  6. # 高原型: 平均空气密度 p50=0.96 (实证, 非标准1.225) → Cp/达成率须空密修正。
  7. schema_version: 2
  8. meta:
  9. oem: 明阳 MINGYANG
  10. model: MY2.0-104/80(S) 高原型
  11. rated_kw: 2000
  12. n_turbines: 24
  13. farm: gucheng
  14. site: 云南大唐古城 (高原型, 空密0.96)
  15. commissioned: 2017
  16. self_ref_risk: false # 有5高度实测塔(大龙山) → 绝对性能可做(NTF); 机舱风仍标self_ref但塔可替
  17. has_mast: true
  18. topology: DFIG_geared
  19. reuse_of: mingyang_my2_0_changpingao.yaml
  20. turbine_10min:
  21. sampling_s: 600
  22. columns:
  23. # 风机(机号列)/风机类型(恒值MY2.0MW)/Unnamed:81(空尾) 由 loader 处理不入契约 (海装模式)
  24. 时间: {role: timestamp}
  25. 平均功率: {canonical_id: WAPC_active_power, raw_unit: kW, to_canonical: 1, valid_range: [-100, 2200], observed_range: [0, 2051], sentinel: [], note: "额定2MW(p99 2025/max2051)"}
  26. 平均功率因数: {canonical_id: WGRI_power_factor, raw_unit: none, to_canonical: 1, valid_range: [-1, 1], observed_range: [-1, 1], sentinel: [-1], note: "-1=无效标记(153处)"}
  27. 平均无功功率: {canonical_id: WAPC_reactive_power, raw_unit: kvar, to_canonical: 1, valid_range: [-2200, 2200], observed_range: [-1, 1000], sentinel: [-1]}
  28. 平均发电机转速: {canonical_id: WGEN_speed, raw_unit: rpm, to_canonical: 1, valid_range: [-50, 2000], observed_range: [-1, 1751], sentinel: [], note: "高速侧DFIG med1172"}
  29. 平均桨叶1角度: {canonical_id: WROT_pitch_angle_1, raw_unit: deg, to_canonical: 1, valid_range: [-11, 95], observed_range: [-10, 92.3], sentinel: [], trap: "独立变桨; min-10=停机/顺桨过渡, 保留(非-99哨兵)"}
  30. 平均桨叶2角度: {canonical_id: WROT_pitch_angle_2, raw_unit: deg, to_canonical: 1, valid_range: [-11, 95], observed_range: [-10, 92], sentinel: []}
  31. 平均桨叶3角度: {canonical_id: WROT_pitch_angle_3, raw_unit: deg, to_canonical: 1, valid_range: [-11, 95], observed_range: [-10, 92], sentinel: []}
  32. 平均风速: {canonical_id: WMET_wind_speed_nacelle, raw_unit: mps, to_canonical: 1, valid_range: [0, 60], observed_range: [0, 19], sentinel: [], self_ref_risk: true, note: "机舱风; 绝对性能用大龙山塔替"}
  33. "平均风向(机舱)": {canonical_id: WMET_wind_direction_nacelle, raw_unit: deg, to_canonical: 1, valid_range: [-180, 360], observed_range: [-180, 360], sentinel: [], frame: "机舱相对; 对风偏差代理"}
  34. "平均风角度(对北)": {canonical_id: WMET_wind_direction_geo, raw_unit: deg, to_canonical: 1, valid_range: [0, 360], observed_range: [9.6, 353], sentinel: [], frame: "地理对北"}
  35. 平均l1电压: {canonical_id: WGRI_voltage_l1, raw_unit: V, to_canonical: 1, valid_range: [0, 900], observed_range: [0, 750], sentinel: []}
  36. 平均l2电压: {canonical_id: WGRI_voltage_l2, raw_unit: V, to_canonical: 1, valid_range: [0, 900], observed_range: [0, 750], sentinel: []}
  37. 平均l3电压: {canonical_id: WGRI_voltage_l3, raw_unit: V, to_canonical: 1, valid_range: [0, 900], observed_range: [0, 750], sentinel: []}
  38. 平均l1电流: {canonical_id: WGRI_current_l1, raw_unit: A, to_canonical: 1, valid_range: [0, 3000], observed_range: [0, 2000], sentinel: []}
  39. 平均l2电流: {canonical_id: WGRI_current_l2, raw_unit: A, to_canonical: 1, valid_range: [0, 3000], observed_range: [0, 2000], sentinel: []}
  40. 平均l3电流: {canonical_id: WGRI_current_l3, raw_unit: A, to_canonical: 1, valid_range: [0, 3000], observed_range: [0, 2000], sentinel: []}
  41. 平均机舱角度: {canonical_id: WYAW_nacelle_position, raw_unit: deg, to_canonical: 1, valid_range: [0, 360], observed_range: [0, 360], sentinel: []}
  42. 平均扭缆角度: {canonical_id: WYAW_cable_twist, raw_unit: deg, to_canonical: 1, valid_range: [-1080, 1080], observed_range: [-720, 720], sentinel: [-1], note: "解缆代理"}
  43. 平均机舱总角度: {canonical_id: WYAW_nacelle_total, raw_unit: deg, to_canonical: 1, valid_range: [-3600, 3600], observed_range: [-2000, 2000], sentinel: []}
  44. 平均有功功率设定值: {canonical_id: WAPC_power_setpoint, raw_unit: kW, to_canonical: 1, valid_range: [0, 2200], observed_range: [0, 2100], sentinel: []}
  45. 平均功率因数设定值: {canonical_id: WGRI_pf_setpoint, raw_unit: none, to_canonical: 1, valid_range: [-1, 1], observed_range: [-1, 1], sentinel: []}
  46. 平均转速设定值: {canonical_id: WGEN_speed_setpoint, raw_unit: rpm, to_canonical: 1, valid_range: [0, 2000], observed_range: [0, 1800], sentinel: []}
  47. # ★ PT100 采集失效哨兵 (2026-09-02 实测 + OEM 手册 M0100002783 §1.5):
  48. # 高侧: 手册载开路=3275.7℃(箱变3270.2); **10min 为均值故实测不等于该值** — 古城实测 GC8 室外 3268.30 / GC11 发电机V相 3090.75
  49. # 低侧: 实测饱和 −82.40(供水) / −77.40(回水), 手册未载
  50. # ⇒ 判据写 `>上界 或 <下界`, **禁写 ==3275.7**。全场 1076 槽越界集中 4/24 台, 见 outputs/gucheng/古城_GC9温度采集失效_2026-09-02.md
  51. # 现状: valid_range 已能把它们判 NaN, 故均值不受污染; 但事件被静默丢弃 —— 需要事件级留痕而非仅 clip 计数
  52. 平均室外温度: {canonical_id: WMET_ambient_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 55], observed_range: [-20, 40], sentinel: []}
  53. 平均轮毂温度: {canonical_id: WROT_hub_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-20, 60], sentinel: []}
  54. 平均机舱温度: {canonical_id: WNAC_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 60], sentinel: []}
  55. 平均塔基温度: {canonical_id: WNAC_tower_base_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 60], sentinel: []}
  56. 平均机舱柜温度: {canonical_id: WNAC_cabinet_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  57. 平均塔基柜温度: {canonical_id: WNAC_tower_cabinet_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  58. 平均变压器温度: {canonical_id: WTRF_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 180], observed_range: [-10, 130], sentinel: []}
  59. 平均桨叶1电机温度: {canonical_id: WROT_pitch_motor_temp_1, raw_unit: C, to_canonical: 1, valid_range: [-40, 155], observed_range: [-10, 100], sentinel: []}
  60. 平均桨叶2电机温度: {canonical_id: WROT_pitch_motor_temp_2, raw_unit: C, to_canonical: 1, valid_range: [-40, 155], observed_range: [-10, 100], sentinel: []}
  61. 平均桨叶3电机温度: {canonical_id: WROT_pitch_motor_temp_3, raw_unit: C, to_canonical: 1, valid_range: [-40, 155], observed_range: [-10, 100], sentinel: []}
  62. 平均桨叶1电池箱温度: {canonical_id: WROT_pitch_batt_temp_1, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  63. 平均桨叶2电池箱温度: {canonical_id: WROT_pitch_batt_temp_2, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  64. 平均桨叶3电池箱温度: {canonical_id: WROT_pitch_batt_temp_3, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  65. 平均中控箱温度: {canonical_id: WNAC_ctrl_cabinet_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  66. 平均桨叶1轴控箱温度: {canonical_id: WROT_pitch_axisctrl_temp_1, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  67. 平均桨叶2轴控箱温度: {canonical_id: WROT_pitch_axisctrl_temp_2, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  68. 平均桨叶3轴控箱温度: {canonical_id: WROT_pitch_axisctrl_temp_3, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  69. 平均桨叶1pmm散热器温度: {canonical_id: WROT_pitch_pmm_temp_1, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [-10, 90], sentinel: []}
  70. 平均桨叶2pmm散热器温度: {canonical_id: WROT_pitch_pmm_temp_2, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [-10, 90], sentinel: []}
  71. 平均桨叶3pmm散热器温度: {canonical_id: WROT_pitch_pmm_temp_3, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [-10, 90], sentinel: []}
  72. 平均桨叶1pmc散热器温度: {canonical_id: WROT_pitch_pmc_temp_1, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [-10, 90], sentinel: []}
  73. 平均桨叶2pmc散热器温度: {canonical_id: WROT_pitch_pmc_temp_2, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [-10, 90], sentinel: []}
  74. 平均桨叶3pmc散热器温度: {canonical_id: WROT_pitch_pmc_temp_3, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [-10, 90], sentinel: []}
  75. 平均主轴轴承a温度: {canonical_id: WTRM_main_bearing_temp_a, raw_unit: C, to_canonical: 1, valid_range: [-40, 100], observed_range: [6, 38], sentinel: []}
  76. 平均主轴轴承b温度: {canonical_id: WTRM_main_bearing_temp_b, raw_unit: C, to_canonical: 1, valid_range: [-40, 100], observed_range: [6, 40], sentinel: []}
  77. 平均齿轮箱油温: {canonical_id: WTRM_gbx_oil_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [11, 61], sentinel: []}
  78. 平均齿轮箱驱动端轴承温度: {canonical_id: WTRM_gbx_bearing_temp_de, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [0, 80], sentinel: []}
  79. 平均齿轮箱非驱动端轴承温度: {canonical_id: WTRM_gbx_bearing_temp_nde, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [0, 80], sentinel: []}
  80. 平均发电机驱动端轴承温度: {canonical_id: WGEN_de_bearing_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 150], observed_range: [0, 90], sentinel: []}
  81. 平均发电机非驱动端轴承温度: {canonical_id: WGEN_nde_bearing_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 150], observed_range: [0, 90], sentinel: []}
  82. 平均发电机u相温度: {canonical_id: WGEN_stator_u_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 180], observed_range: [0, 150], sentinel: [], note: "F级155阈"}
  83. 平均发电机v相温度: {canonical_id: WGEN_stator_v_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 180], observed_range: [0, 150], sentinel: []}
  84. 平均发电机w相温度: {canonical_id: WGEN_stator_w_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 180], observed_range: [0, 150], sentinel: []}
  85. 平均发电机冷风温度: {canonical_id: WGEN_cooling_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 130], observed_range: [-10, 90], sentinel: []}
  86. 平均桨叶1速度值: {canonical_id: WROT_pitch_rate_1, raw_unit: dps, to_canonical: 1, valid_range: [-20, 20], observed_range: [-15, 15], sentinel: []}
  87. 平均桨叶2速度值: {canonical_id: WROT_pitch_rate_2, raw_unit: dps, to_canonical: 1, valid_range: [-20, 20], observed_range: [-15, 15], sentinel: []}
  88. 平均桨叶3速度值: {canonical_id: WROT_pitch_rate_3, raw_unit: dps, to_canonical: 1, valid_range: [-20, 20], observed_range: [-15, 15], sentinel: []}
  89. 平均桨叶1电机电流: {canonical_id: WROT_pitch_motor_current_1, raw_unit: A, to_canonical: 1, valid_range: [-100, 100], observed_range: [-50, 50], sentinel: []}
  90. 平均桨叶2电机电流: {canonical_id: WROT_pitch_motor_current_2, raw_unit: A, to_canonical: 1, valid_range: [-100, 100], observed_range: [-50, 50], sentinel: []}
  91. 平均桨叶3电机电流: {canonical_id: WROT_pitch_motor_current_3, raw_unit: A, to_canonical: 1, valid_range: [-100, 100], observed_range: [-50, 50], sentinel: []}
  92. 平均转矩设定值: {canonical_id: WTRM_torque_setpoint, raw_unit: Nm, to_canonical: 1, valid_range: [-30000, 30000], observed_range: [0, 20000], sentinel: []}
  93. 平均大气压: {canonical_id: WMET_pressure, raw_unit: kPa, to_canonical: 1, valid_range: [50, 110], observed_range: [0, 0], sentinel: [0], trap: "全0=死列(压力传感未接/单位异常), CT-2跨机判死"}
  94. 平均空气密度: {canonical_id: WMET_air_density, raw_unit: kgm3, to_canonical: 1, valid_range: [0.7, 1.3], observed_range: [0.91, 1.02], sentinel: [], note: "高原型 p50=0.96 实证, Cp/达成率空密修正锚"}
  95. 平均净功率: {canonical_id: WAPC_net_power, raw_unit: kW, to_canonical: 1, valid_range: [-100, 2200], observed_range: [0, 2051], sentinel: []}
  96. 平均chopper模块温度: {canonical_id: WCNV_chopper_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 120], observed_range: [-10, 90], sentinel: []}
  97. 平均环境温度: {canonical_id: WMET_ambient_temp_2, raw_unit: C, to_canonical: 1, valid_range: [-40, 55], observed_range: [-20, 40], sentinel: [0], note: "★污染列(2026-07-16 verdict_sweep 逮): 50% exact-0 卡值(间歇未接), 与平均室外温度 corr仅0.18(非别名!早先note误标近同). 真环温=平均室外温度(WMET_ambient_temp, 0% zero, 季节平滑). 0=哨兵→NaN; 环温类判据必用室外温度, 勿用本列."}
  98. 平均并网柜温度: {canonical_id: WCNV_grid_cabinet_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  99. 平均功率柜温度: {canonical_id: WCNV_power_cabinet_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  100. 平均控制柜温度: {canonical_id: WNAC_control_cabinet_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 90], observed_range: [-10, 70], sentinel: []}
  101. 平均供水温度: {canonical_id: WTRM_cooling_supply_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 100], observed_range: [-10, 70], sentinel: []}
  102. 平均回水温度: {canonical_id: WTRM_cooling_return_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 100], observed_range: [-10, 70], sentinel: []}
  103. 平均网侧模块最高温度: {canonical_id: WCNV_grid_module_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 130], observed_range: [-10, 100], sentinel: []}
  104. 平均转子侧模块最高温度: {canonical_id: WCNV_rotor_module_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 130], observed_range: [-10, 100], sentinel: []}
  105. 平均网侧电抗器温度: {canonical_id: WCNV_grid_reactor_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 180], observed_range: [-10, 130], sentinel: []}
  106. 平均转子侧电抗器温度: {canonical_id: WCNV_rotor_reactor_temp, raw_unit: C, to_canonical: 1, valid_range: [-40, 180], observed_range: [-10, 130], sentinel: []}
  107. 平均湍流强度: {canonical_id: WMET_turbulence_intensity, raw_unit: frac, to_canonical: 1, valid_range: [0, 1], observed_range: [0, 0.33], sentinel: [], note: "明阳内置湍流代理 p50=0.09"}
  108. # mast 数据层 (大龙山测风塔, 单独 CSV 长表, NTF 时另接契约): 3masta(EEE2252C001-003) × 5高度(10/30/50/70/90m);
  109. # 列 data_time/masta_id/speed/direction/temperature/humidity/pressure/layer; 实测非预报(无'预报'列); 70/90m夹hub~80m;
  110. # speed 0-22.5. 绝对性能/NTF 用此塔替机舱风; 本契约管 turbine_10min, mast 另 section 待 NTF 分析时建。
  111. cleaning:
  112. physical: "valid_range clip→NaN; 桨叶-10保留(停机/顺桨非哨兵); 平均大气压全0死列(CT-2跨机判); 功率因数/无功/扭缆 -1哨兵→NaN"
  113. semantic: "无独立状态码列(状态/故障在收资故障码手册, 事件另表); 对风偏差=风向(机舱); 绝对性能用大龙山塔(70/90m)非机舱风"
  114. traps:
  115. - "82列宽表 utf-8-sig (非GBK; 明阳导出); per台 <GCn>.zip 内单CSV, 台号列'风机'=GCn—2.0MW"
  116. - "平均大气压全0=死列(压力未接/单位异常); 空气密度独立列有效(0.96高原) → 空密来自密度列非压力"
  117. - "高原型空密0.96 → Cp/绝对达成率须空密修正 (标准1.225差23%)"
  118. - "有5高度实测塔(大龙山) → 绝对性能/NTF可做(区别于海装无塔); 塔长表 masta_id×layer, 70/90m夹hub~80m"
  119. - "★平均环境温度(WMET_ambient_temp_2)=污染列非别名(2026-07-16修正): 50% exact-0卡值, 与室外温度corr仅0.18. 早先'近同'note经runtime证伪. 真环温唯一=平均室外温度. 教训: 契约observed_range/别名claim须runtime验(cleaning未清间歇0-卡)"
  120. - "桨叶速度值/电机电流/pmm/pmc散热器 = 明阳独立变桨系统丰富遥测 (三叶各一列)"