unknown_xinaili.yaml 4.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # 数据契约 — 新艾里风电场 (farm#11, 大唐可再生) — OEM 未知 (无机台表, tag schema A1grXXX)
  2. # schema: docs/OEM_KB §3. 校验器: scripts/validate_contract.py
  3. meta:
  4. farm: 新艾里风电场
  5. farm_code: XAL
  6. oem: 未知 (无机台表/收资表; SCADA tag schema = "A{n}grXXX" 约定, 如 grGenPowerForProcess/grNacellePositionLtd/grVaneDirection_1sec/grGenSpeedPDM; 待业主或tag库识别)
  7. model: 未知
  8. topology: geared (发电机转速~1780 + 主轴转速~16 → 增速比~110, geared DFIG/异步; 推定)
  9. rated_kw: 2000 # ✅ 实测rated≈2000 (raw P max2197/p99.9 2068, 高风plateau; ⚠初peek单chunk仅1759不代表全场→纠); 2.0MW级; 无机台表. ⚠清洗clip(P,2000)截断真功率→重清洗应clip 3000留P_max峰值
  10. n_turbines_with_data: 25 # 机组1-25 (+26年22机组/补充 另算)
  11. province: 未知 (大唐可再生; 待定)
  12. sampling: {sec_s: 60} # ✅ .xls元数据"查询间隔时间(秒):60" 坐实60秒
  13. windows: {sec: "2025-10-01 ~ 2026-03 (~6月, 秋冬窗)"}
  14. context: "🟢 '调桨后' = 变桨调整后数据 (疑pitch优化前后对比, 但仅交付'后'无'前'→不能做前后对比)"
  15. met_mast: absent
  16. power_curve_table: absent
  17. event_table: absent_status_code # 无状态码列 → 物理派生态
  18. format: "🔴 真Excel .xls (BIFF, magic D0CF11E0; xlrd读, 慢); 2300文件(25台×~90×6天chunk); 每.xls前10行=元数据(机组号/起止/间隔), 数据从第11行(skiprows=10), 列按位置"
  19. reuse: "无repo同schema; tag约定A{n}grXXX待入KB"
  20. provenance: "scripts/xal_survey/survey2/struct/peek_data.py"
  21. # ============ sec 层 (10列; 60秒; 25台) — 列按位置(无header行用) ============
  22. turbine_sec:
  23. required: [P, ws]
  24. columns:
  25. 记录时间: {pos: 0, canonical_id: timestamp, parse: datetime}
  26. 发电机功率实时值: {pos: 1, canonical_id: WAPC_active_power, unit: kW, valid_range: [-60, 2000], sentinel: [-50], note: "max1759 rated~1500; tag A{n}grGenPowerForProcess"}
  27. 风速: {pos: 2, canonical_id: WMET_wind_speed_nacelle, unit: m/s, valid_range: [0, 40], self_ref_risk: true, note: "tag grWindSpeed"}
  28. 机舱旋转角度: {pos: 3, canonical_id: WYAW_nacelle_position, unit: deg, valid_range: [0, 360], note: "0-360 heading; tag grNacellePositionLtd"}
  29. 变桨角度: {pos: 4, canonical_id: WROT_pitch, unit: deg, valid_range: [-11, 92], sentinel: [-10], note: "单桨(无per-blade); 细桨~0顺桨~91; tag grPitchAngle"}
  30. 发电机转速: {pos: 5, canonical_id: WGEN_speed, unit: rpm, valid_range: [-1, 2000], sentinel: [-50], note: "max1780 geared; tag grGenSpeedPDM"}
  31. 机舱外温度30秒平均值: {pos: 6, canonical_id: WMET_ambient_temp, unit: degC, note: "唯一温度; tag grTempOutdoor_30sec"}
  32. 主轴转速: {pos: 7, canonical_id: WROT_speed, unit: rpm, valid_range: [0, 25], note: "rotor~16; tag grRotorSpeedPDM"}
  33. 发电机转矩: {pos: 8, canonical_id: WGEN_torque, sentinel: [-50], note: "max9308; tag grCAN_GeneratorTorque"}
  34. 风向1秒平均值:
  35. pos: 9
  36. canonical_id: WYAW_error_vane
  37. unit: deg
  38. valid_range: [-180, 180]
  39. note: "🟢 风向(相对机舱)=vane直接对风误差; 发电态中位-0.28° IQR±8°(真vane非滤波, 异红阳CI) → 偏航per机静态偏置可做(同文登可用); tag grVaneDirection_1sec"
  40. no_status_code: "🔴 无状态码 → 物理派生(P>20=发电/ws<3低风待机/rotor<0.5停机/other); 限电=同步性判别器"
  41. cleaning:
  42. physical:
  43. - "P/发电机转速/发电机转矩 = -50 哨兵 → NaN; 变桨 = -10 哨兵 → NaN"
  44. - "P clip[-60,2000]"
  45. semantic:
  46. - "风速=机舱风 self_ref → 无mast → 绝对功率曲线 INSUFFICIENT(仅表观)"
  47. - "风向=vane对风误差(发电态) → 偏航per机偏置可做; 无功率滤前不可信(滤发电态)"
  48. - "无状态码 → 物理派生态; 限电同步性判别器"
  49. traps:
  50. - "★ .xls BIFF真Excel(非CSV非TSV); 2300文件xlrd慢→清洗后台; skiprows=10列按位置"
  51. - "★ OEM未知(无机台表); rated~1500推定(max1759); tag schema A{n}grXXX待识别"
  52. - "★ -50跨列哨兵(P/转速/转矩) + -10桨距哨兵 必剔"
  53. - "🟢 风向=可用vane对风误差(±8° IQR真vane, 偏航可做, 同文登); 异红阳CI滤波~0"
  54. - "🟡 '调桨后'仅'后'无'前'→pitch优化前后对比不可做; 秋冬窗(2025-10~2026-03)非全年"
  55. - "🔴 无mast/无曲线/无状态码/单温度/单桨 → 绝对性能/部件故障/叶片不平衡 INSUFFICIENT"