unknown_0p85mw_baishan.yaml 9.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # 数据契约 — 白山风电场 (国能/龙源, 黑龙江) — OEM不定谳 850kW DFIG (Ø58m/轮毂65m)
  2. # schema_v2. 校验: scripts/validate_contract.py (CT-2). lint: scripts/contract_lint.py (CT-1).
  3. # ★SCADA(min层)专线; CMS(wave)别线=/loop findings.json(94d53628)不动。
  4. # ★OEM不定谳: 指纹(DFIG 850kW/Ø58m + DAC/RFC控制器 + Crowbar + Skiip[SEMIKRON] + 星三角并网 + NRG Icefree)
  5. # → 最强候选 Gamesa/Made G58-850 族 licensed变体, 但无铭牌/技术协议/OEM码表 → 未坐实。命名按实测850kW/DFIG。
  6. schema_version: 2
  7. meta:
  8. farm: 白山风电场
  9. farm_code: BAISHAN
  10. oem: "不定谳 (指纹候选 Gamesa/Made G58-850 族; 无铭牌/技术协议未坐实)"
  11. model: "850kW DFIG geared, Ø58m rotor, 65m hub (额定功率列恒850/桨叶直径列58/塔筒高度列65 直读实证)"
  12. topology: dfig_geared
  13. rated_kw: 850 # 额定功率列全4台恒850 (nuniq=1直读, 非plateau推断); 总有功功率max~856(电网侧)
  14. rotor_diameter_m: 58 # 桨叶直径列=58 (选项52/58/80/83/87/90 中取58)
  15. hub_height_m: 65 # 塔筒高度列=65
  16. province: 黑龙江
  17. n_turbines_nameplate: unknown # 🔴无全机台表/无台账 → claimed台数无权威源 (白山实际装机远>4, 本收资仅4台稀疏子集非全场)
  18. n_turbines_with_data: 4 # 74/90/92/157 (非连续台号=稀疏抽样)
  19. sampling:
  20. turbine_sec_s_default: 60 # 台90/92/157 真60s
  21. per_turbine_override: {"74": 30, "90": 60, "92": 60, "157": 60} # 🔴混采样: 台74=30s (per台t.diff实证)
  22. windows:
  23. turbine_sec: "2025-03-01 ~ 2025-03-28 (单月窗~26-28天; 74:03-08~03-28 / 90:03-02~03-27 / 92:03-02~03-26 / 157:03-01~03-27)"
  24. met_mast: absent # 🔴无测风塔 → 风速=机舱风 self_ref → 绝对功率曲线/Cp/达成率 INSUFFICIENT (power-curve-ntf铁律)
  25. power_curve_table: absent
  26. event_table: present_status_code_inferred # ✅ 真状态机(风机状态/状态计算/风机运行状态), 语义=物理P/R推断非OEM码表→候选, 可用率物理派生为准
  27. encoding: utf-8 # 直读无BOM; 时间列名='时间'; 尾列'Unnamed:516'空列装配丢弃
  28. data_source: "/Volumes/WINDDATA/DATA2/国能/龙源/白山风电场-黑龙江-龙源/收资数据/min (23文件 74×7/90×5/92×5/157×6; 517列; 列名'NN#|信号'前缀; ⚠文件窗重叠→(台,时间)dedup)"
  29. provenance: "scripts/intake_scan.py→disk_manifest.json(1387文件/33层[含wave CMS]/1docx материал/1zip; reconcile PASS); §1.2实证=本会话 per台 describe+t.diff采样+状态码P/R交叉核+额定功率直读+风向dead+温度corrupt扫描; 无技术协议→OEM指纹判(不定谳)"
  30. # ============ turbine_sec 层 (混30/60s; 4台 74/90/92/157; 列名去'NN#|'前缀标准中文) ============
  31. # 分析用核心子集 (517列全表未逐列入契约; 报警字/DAC/PLC状态字/累计计数器 等未纳入 = 事件层/元数据, 非本次分析信号)。
  32. turbine_sec:
  33. sampling_s: 60 # 默认(多数台/多数行); 台74实为30s见 meta.per_turbine_override + traps
  34. required: [总有功功率, 风速]
  35. columns:
  36. 时间: {canonical_id: timestamp, role: timestamp, parse: datetime, note: "混30/60s栅格; 文件窗重叠→dedup(台,时间)"}
  37. 风速: {canonical_id: WMET_wind_speed_nacelle, unit: m/s, valid_range: [0, 40], observed_range: [0, 26], self_ref_risk: true, note: "机舱风; 无塔→绝对性能INSUFFICIENT"}
  38. 未过滤的风速: {canonical_id: WMET_wind_speed_raw, unit: m/s, valid_range: [0, 40], observed_range: [0, 26], self_ref_risk: true}
  39. 总有功功率: {canonical_id: WAPC_active_power, unit: kW, valid_range: [-50, 950], observed_range: [-27, 856], note: "电网侧; rated850; 用作达成率功率(self_ref风速下仅相对)"}
  40. 瞬时发电功率: {canonical_id: WTUR_power_instant, unit: kW, valid_range: [-50, 950], observed_range: [0, 850], note: "严格卡850上限量"}
  41. 理论功率: {canonical_id: WTUR_theoretical_power, unit: kW, valid_range: [0, 950], observed_range: [0, 850], note: "控制器理论值"}
  42. 额定功率: {canonical_id: _rated_power_const, unit: kW, valid_range: [800, 900], observed_range: [850, 850], dead_channel: true, note: "nameplate常量850(非信号); 直读坐实rated"}
  43. 发电机转速: {canonical_id: WGEN_speed, unit: rpm, valid_range: [-50, 1800], observed_range: [-85, 1671], note: "DFIG超同步~1670; idle小负值界外→NaN"}
  44. 转子转速: {canonical_id: WROT_speed, unit: rpm, valid_range: [-2, 32], observed_range: [-2, 28], note: "geared低速轴/风轮"}
  45. 变桨角度: {canonical_id: WROT_pitch, unit: deg, valid_range: [-5, 92], observed_range: [-5, 87], note: "顺桨~86.6; 🔴台157该窗max仅39.2(降额/特殊工况候选,分析层查); 仅单桨列→叶片不平衡不可判"}
  46. 变桨角度设定值: {canonical_id: WROT_pitch_setpoint, unit: deg, valid_range: [-5, 95], observed_range: [-3, 90]}
  47. 机舱位置: {canonical_id: WYAW_nacelle_position, unit: deg, valid_range: [0, 360], observed_range: [0, 360], note: "真偏航位置; 但无风向列配对→对风误差不可直算(仅位置分布/偏航动作)"}
  48. 风向角: {canonical_id: WMET_wind_direction_relative, role: state_enum, dead_channel: true, sentinel: [395, 605], note: "🔴dead/coded: 仅值395/605非物理度数(全台nuniq2-3, +少量0); sentinel→NaN; 勿作vane/风向/扇区/对风锚 (无可用风向源)"}
  49. A相总电流: {canonical_id: WCNV_current_phase_a, unit: A, valid_range: [0, 800], observed_range: [0, 706]}
  50. B相总电流: {canonical_id: WCNV_current_phase_b, unit: A, valid_range: [0, 800], observed_range: [0, 706]}
  51. C相总电流: {canonical_id: WCNV_current_phase_c, unit: A, valid_range: [0, 800], observed_range: [0, 706], note: "三相独立(非派生, 相互不恒等)"}
  52. 发电机驱动端轴承温度: {canonical_id: WGEN_bearing_de_temp, unit: degC, valid_range: [-40, 120], observed_range: [-2, 43]}
  53. 发电机非驱动段轴承温度: {canonical_id: WGEN_bearing_nde_temp, unit: degC, valid_range: [-40, 120], observed_range: [0, 54]}
  54. 发电机绕组温度: {canonical_id: WGEN_winding_temp, unit: degC, valid_range: [-40, 150], observed_range: [0, 71], note: "F级155阈内充裕"}
  55. 齿轮油温度: {canonical_id: WGBX_oil_temp, unit: degC, valid_range: [-40, 120], observed_range: [9, 71]}
  56. 齿轮箱轴承温度: {canonical_id: WGBX_bearing_temp, unit: degC, valid_range: [-40, 120], observed_range: [5, 72]}
  57. 液压油温: {canonical_id: WHYD_oil_temp, unit: degC, valid_range: [-40, 100], observed_range: [-8, 25]}
  58. 机舱温度: {canonical_id: WNAC_temp, unit: degC, valid_range: [-40, 80], observed_range: [-11, 11]}
  59. 环境温度: {canonical_id: WMET_ambient_temp, unit: degC, valid_range: [-45, 55], observed_range: [-22, 5], note: "黑龙江3月冷; 物理合理"}
  60. 塔底环境温度: {canonical_id: WTWR_ambient_temp, unit: degC, valid_range: [-40, 80], observed_range: [-40, 80], note: "🔴raw含±1619.2 corrupt对称尖峰(哨兵/ADC故障)已valid_range界外→NaN; 存活值疑仍不稳,分析慎用"}
  61. 控制柜温度: {canonical_id: WCNV_cabinet_temp, unit: degC, valid_range: [-40, 80], observed_range: [-40, 80], note: "🔴同塔底环境温度: ±1619.2 corrupt尖峰→NaN"}
  62. 电网频率: {canonical_id: WGRD_freq, unit: Hz, valid_range: [45, 55], observed_range: [49.9, 50.1]}
  63. 风机状态: {canonical_id: _status_code, role: state_enum, note: "{25/50停·75转不发·100发电·125故障停} 物理P/R推断非OEM码表→候选语义"}
  64. 状态计算: {canonical_id: _status_calc, role: state_enum, sentinel: [999], note: "1:1并行风机状态(11↔100/21↔75/24↔50/61↔25/71↔125); 999=通讯丢失哨兵→NaN"}
  65. 风机运行状态: {canonical_id: _running_flag, role: state_enum, note: "二值1=发电/0=非; 可用率物理派生辅证"}
  66. cleaning:
  67. physical:
  68. - "utf-8 读 (无BOM); 去'NN#|'台号前缀→标准中文名; 尾列'Unnamed:516'(空)丢弃"
  69. - "装配 concat 全文件 per台 → (台号,时间)dedup (文件窗重叠: 74:54727→46083 / 90:36005→21602 / 92:34565→34561 / 157:37446→37441 uniq)"
  70. - "各列按 valid_range 界外→NaN(非clamp); 状态计算哨兵999→NaN"
  71. - "🔴corrupt温度(塔底环境温度/控制柜温度 ±1619.2)靠valid_range[-40,80]界外→NaN; 风向角(395/605)界外→全NaN(dead)"
  72. - "发电机转速 idle小负值(-85~-40)/转子转速微负 界外→NaN"
  73. semantic:
  74. - "风速=机舱风 self_ref → 绝对功率曲线/Cp/达成率 INSUFFICIENT(无塔); 相对/fleet-relative 可用标 self_ref"
  75. - "无可用风向/vane(风向角dead) → 静/动态偏航对风误差 INSUFFICIENT(无失配信号); 机舱位置仅数偏航动作/位置分布"
  76. - "状态码语义=物理P/R推断(无OEM码表)→ 可用率/限电/停机型 物理派生为准(§4.3), 状态码候选辅证"
  77. - "混采样(74=30s/余60s): per台分析注意栅格差; 派生10min真时均层按台各自栅格聚合"
  78. derive_10min: "混采样→派生10min真时均层(§3.4, 非瞬时快照); 勿信内置'10分钟功率'列(台74 broken max=110)"
  79. traps:
  80. - "★ 混采样: 台74=30s / 台90·92·157=60s (per台t.diff实证; 契约sampling_s=60=多数台, CT-2采样断言为pooled-per月中位=60主导; 74栅格差按per_turbine_override)"
  81. - "★ 文件间时间窗重叠→有重复时间戳, 装配必(台,时间)dedup(否则74行数虚高18%/90虚高40%)"
  82. - "★ OEM不定谳: 指纹→Gamesa G58-850族候选未坐实; 判别器阈值须本OEM重标(G3: 结构U/阈值P, 未标压参考)"
  83. - "★ 4台稀疏(非全场)/单月2025-03窗 → 季节/长期趋势/fleet基线 面薄; 系统性claim(≥3台)样本仅4台须谨慎"
  84. - "🔴 风速self_ref(无塔) + 风向dead(无vane) → 绝对性能 + 偏航对风 双 INSUFFICIENT"
  85. - "🔴 风向角(395/605)/塔底环境温度·控制柜温度(±1619.2) = corrupt/dead列, 勿分析"
  86. - "🔴 claimed台数无权威源(无台账/技术协议); n_turbines_nameplate=unknown"