sinovel_sl1500_82.yaml 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # 数据契约 — 华锐 Sinovel SL1500/82 (昌西一风电场, 大唐2025科研)
  2. # schema: docs/OEM_KB §3. 校验器: scripts/validate_contract.py. 由 oem-onboard skill 产出 2026-06-06.
  3. # ⚠ 厂家=华锐Sinovel 据型号 SL1500 推断, 待 收资docx/备注sheet 确认 (不诉诸memory).
  4. meta:
  5. oem: 华锐 Sinovel (待文档确认)
  6. model: SL1500/82
  7. topology: dfig_geared # 3级齿轮 1/104, 发电机额定1520kW (机型参数sheet)
  8. rated_kw: 1500
  9. rotor_d_m: 82
  10. cut_in_ms: 2.7
  11. rated_wind_ms: 10.5
  12. cut_out_ms: 25
  13. source_farm: 昌西一 (33台, F001-F033)
  14. ground_truth: # 本场自带 (onboard 大优势)
  15. power_curve: "xlsx 功率曲线表 (双密度: 场站1.059 / 标准1.225)"
  16. status_enum: "configs/fault_dicts/sinovel_sl1500_status_codes.csv (14态)"
  17. event_codes: "xlsx 机组事件代码 + 原始收资/机组事件记录.zip"
  18. sampling: {default_s: 600, caveat: "本场清洗后均匀10-min; 另有秒级数据(cxy_sec)"}
  19. provenance: "oem-onboard 2026-06-06; 探 cxy_min/F002.csv n=56301 + 原始 *.xls 52列"
  20. # raw 列名: 原始 *.xls 用带单位中文名 (有功功率[kw]); 清洗后 cxy_min 用 canonical 中文
  21. turbine:
  22. required: [有功功率, 风速]
  23. columns:
  24. 有功功率:
  25. canonical_id: WAPC_active_power
  26. raw_unit: kW # ✓ 实测 max 1520≈额定, 非瓦特 (无1000×陷阱)
  27. valid_range: [-50, 1700] # 小负=寄生功耗(正常); 上限留齿轮箱额定1700
  28. 风速:
  29. canonical_id: WMET_wind_speed_nacelle
  30. unit: m/s
  31. valid_range: [0, 40] # ★ 实测尖峰到76(>生存59.5) → 门40 剔尖峰
  32. self_ref_risk: true # 机舱风, 功率曲线自指 (finding 89)
  33. 绝对风向:
  34. canonical_id: WYAW_yaw_error
  35. unit: deg
  36. frame: nacelle # 🔴★ 名"绝对"实为 nacelle-frame (range ±173°, p50 -1.6)
  37. valid_range: [-180, 180]
  38. note: "名实不符(D2): 不可当地理风向作扇区; 偏航只能nacelle-frame, 同finding-89/floris陷阱"
  39. 机舱位置:
  40. canonical_id: WYAW_nacelle_position
  41. unit: deg
  42. frame: geographic_unwrapped # range -471~505 = 累积航向(缆绕圈) → 需 mod360+北偏移标定
  43. note: "可恢复地理 = (机舱位置 mod360)+北偏移[TBD]; +绝对风向=地理风向(上finding-89门槛)"
  44. 发电机转速:
  45. canonical_id: WGEN_speed
  46. unit: rpm
  47. valid_range: [-20, 1850] # 停机怠速噪声小负(p1=-3.5)正常; 大负尖峰(-597)才异常
  48. spike_below: -50 # < -50 = 传感器尖峰 (cleaning 剔)
  49. 桨距角1:
  50. canonical_id: WROT_pitch_angle_1
  51. unit: deg
  52. valid_range: [-2, 92]
  53. 齿轮箱油温:
  54. canonical_id: WTRM_gearbox_oil_temp
  55. unit: degC
  56. valid_range: [-40, 120]
  57. sentinel: [-272.5, -273] # 🔴★ ≈绝对零度 = 温度传感器空值哨兵 (新模式!)
  58. 发电机驱动端轴承温度:
  59. canonical_id: WGEN_bearing_temp_de
  60. unit: degC
  61. valid_range: [-40, 150]
  62. sentinel: [-272.5, -273]
  63. 环境温度:
  64. canonical_id: WMET_ambient_temp
  65. unit: degC
  66. valid_range: [-45, 50] # 机型参数: 运行 -30~+45
  67. cleaning:
  68. physical:
  69. - "温度类 ≈-272.5/-273(绝对零度) → NaN (传感器空值, 非真冷)"
  70. - "风速 >40 → 尖峰剔 (生存59.5, 持续不可能)"
  71. - "发电机转速 <0 → NaN (负尖峰)"
  72. semantic:
  73. - "有功功率 小负值 = 待机寄生功耗, 非坏值"
  74. - "绝对风向 = 机舱相对, 勿当地理 (名实不符)"
  75. status_enum_ref: configs/fault_dicts/sinovel_sl1500_status_codes.csv
  76. traps:
  77. - "绝对风向 名实不符: '绝对'实为nacelle-frame ±180° (D2). 误当地理扇区=finding-89类错"
  78. - "温度哨兵=-272.5(≈绝对零度), 非-99/9999. 分位数才揪出, 盲扫-99会漏"
  79. - "机舱位置 unwrapped累积(±500非0-360), 需mod360. 不同于阜山(那个-5~10彻底坏)"
  80. - "风速尖峰到76>生存风速, 必上限门"
  81. - "机舱风系统性低读: 机舱/自由来流风速比 NTF=0.77(读低23%!) → 机舱风口径绝对功率曲线假高145%, 且排名错(误判台42最差). 接测风塔自由来流后: 机群96%保证(真), 真最差台49(78%). 绝对功率曲线必用自由来流(测风塔), 机舱风只可机群相对. (2026-06-06实证, 同finding89)"