| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- # 数据契约 — 昌平坳风电场 (farm#5, 大唐) — 明阳 MINGYANG MY2.0-class 2.0MW DFIG geared
- # schema: docs/OEM_KB/OEM_knowledge_base_v1.md §3. 校验器: scripts/validate_contract.py
- # 用途: 分析前的"门"。任一 BLOCK → 拒绝进分析 (不在下游补救)。
- #
- # 🔴 OEM 坐实方式 (无机台表/收资/曲线 → 从数据坐实, 不假设):
- # - 控制器签名: 1秒raw=英文 i* 列(WT_Runcode/SCW001-043/iListOfActiveStatuscodesToSCADA/RemCOM)
- # = 马王一期"统一SCADA"同家族(华创+明阳共用此控制器导出格式).
- # - ★ OEM 判别器 (马王实证, KB §4): 华创 iAvailabillityToday=全0死列 & iPowerLimit_Flag=恒0;
- # 明阳 iAvailabillityToday=有效值 & iPowerLimit_Flag=恒10.
- # 昌平坳实测: iAvailabillityToday 有效(med~80-100) + iPowerLimit_Flag=10 全25台 → **明阳固件**.
- # - 功率等级: P_max ~2100-2160kW (25台) → 额定 2.0MW; geared DFIG (GS发电~1480rpm/rotor~8.8rpm).
- # - ⚠ 机型变体 (MY2.0-110/116/121/130? 转子直径/轮毂高) = INSUFFICIENT (无机台表; SCADA不含转子直径).
- # - verdict: OEM=明阳[高置信, 判别器双中+schema+功率级]; 具体机型/转子=INSUFFICIENT.
- meta:
- farm: 昌平坳风电场
- farm_code: CPA
- oem: 明阳智能 MINGYANG # 判别器坐实, 非假设
- model: MY2.0-class (2.0MW geared DFIG; 具体变体INSUFFICIENT无机台表)
- oem_confidence: "high (固件判别器avail+PL双中 / 1秒schema同马王明阳 / 2.0MW geared)"
- topology: dfig_geared
- rated_kw: 2000 # P_max 2087-2162 实测(25台), 额定2000+overshoot
- rotor_diameter_m: null # INSUFFICIENT 无机台表
- hub_height_m: null # INSUFFICIENT
- n_turbines: 25 # 坐实: min层风机列27#-51# + sec设备ID 20049027..20049051 (两源一致)
- turbine_ids: "20049027 .. 20049051 (短号27-51)"
- province: null # INSUFFICIENT (无收资表)
- sampling:
- sec_s: 1 # ★ 86400行/天/台 = 24×3600 精确1秒 (逐文件验); 同吉山一期最富档
- min_s: 600 # min/CPA{YYYYMM}.csv 月度10-min聚合(max/min/平均)
- windows:
- sec: "2024-02-17 .. 2024-05-14 (~3月, 25台, sec/两大zip+27号松散)"
- min: "2023-04 .. 2024-04 (~13月, 92列GBK)"
- overlap: "2024-02..04 (sec∩min ~2.5月)"
- met_mast: none # 🔴 文件树无测风塔 → 自由来流不可得 → 绝对功率曲线INSUFFICIENT(同金华山尺度)
- power_curve_table: none # 🔴 无合同/保证功率曲线 → 绝对达成率不可锚
- event_table: none # 🔴 无事件代码定义表; 故障码解码借马王同控制器官方表(MY2.0)
- encoding: gbk
- provenance: "scripts/cpa_goem.py, cpa_goem2.py(跨25台), cpa_anom.py(异常逐日); 解码借 马王风电场故障代码表、风机状态表.xlsx(MY2.0官方)"
- # ============ 1秒 raw 层 (主分析层, 209列英文 i*; 偏航/桨距/状态/振动/温度全在此) ============
- turbine_1sec:
- required: [iGenPower, iWindSpeed, WT_Runcode]
- columns:
- iGenPower:
- canonical_id: WAPC_active_power
- unit: kW # max~2160, 无瓦特陷阱
- valid_range: [-100, 2300]
- note: "min~-78电动/待机(RC3微负=噪声), clip floor -100"
- iGenSpeed:
- canonical_id: WGEN_speed
- unit: rpm
- valid_range: [0, 2100] # 发电~1480, max~1880
- sentinel: [-100] # ★ 罕见(turbine31等), -100=哨兵→NaN
- iRotorSpeedPDM: {canonical_id: WROT_speed, unit: rpm, valid_range: [0, 20]} # 发电~8.8, geared比~167
- iWindSpeed:
- canonical_id: WMET_wind_speed_nacelle
- unit: m/s
- valid_range: [0, 40]
- self_ref_risk: true # ★ 机舱风, 功率曲线自指(finding89); 无测风塔→真功率曲线不可做
- iWindSpeed_real: {canonical_id: WMET_wind_speed_nacelle_real, unit: m/s, valid_range: [0, 40], self_ref_risk: true, note: "另一机舱风源, med略高于iWindSpeed"}
- iWindSpeed1: {canonical_id: WMET_wind_speed_alt1, unit: m/s, valid_range: [0, 40], note: "≈iWindSpeed_real"}
- iWindSpeed2: {canonical_id: WMET_wind_speed_alt2, dead_channel: true} # ★ 全0死列, 弃
- iPitchAngle1: {canonical_id: WROT_pitch_1, unit: deg, valid_range: [-2, 95], sentinel: [-10]} # ★ -10=故障态(RC4)占位符非真角(turbine27 17%全RC4/P0/GS0)→NaN; 发电细桨~-0.5
- iPitchAngle2: {canonical_id: WROT_pitch_2, unit: deg, valid_range: [-2, 95], sentinel: [-10]}
- iPitchAngle3: {canonical_id: WROT_pitch_3, unit: deg, valid_range: [-2, 95], sentinel: [-10]}
- iVaneDiiection: # ★ 原始拼写(Diiection); = 风向标/偏航误差
- canonical_id: WYAW_yaw_error
- unit: deg
- frame: nacelle # ±180, 发电态中位~小角=对风良好 → 偏航对风可用(直接误差列)
- valid_range: [-180, 180]
- iwindDirection: # ★ 0-360 真地理 (rare!)
- canonical_id: WMET_wind_direction_geo
- unit: deg
- frame: geographic
- valid_range: [0, 360]
- iNacellePositionLtd: {canonical_id: WYAW_nacelle_position, unit: deg, valid_range: [0, 360], note: "限幅0-360机舱朝向"}
- iNacellePositionTotal: {canonical_id: WYAW_nacelle_position_total, unit: deg, valid_range: [-720, 720], note: "累积含扭缆, 非heading"}
- iCableTwistTotal: {canonical_id: WYAW_cable_twist, unit: deg, valid_range: [-720, 720], note: "累积扭缆角"}
- iFiequency: {canonical_id: WGRID_frequency, unit: Hz, valid_range: [0, 55], sentinel_zero: true, note: "原始拼写; 0=脱网, ~50发电"}
- iUL1_690V: {canonical_id: WGRID_voltage_l1, unit: V, valid_range: [0, 800]}
- iUL2_690V: {canonical_id: WGRID_voltage_l2, unit: V, valid_range: [0, 800]}
- iUL3_690V: {canonical_id: WGRID_voltage_l3, unit: V, valid_range: [0, 800]}
- iIL1_690V: {canonical_id: WGRID_current_l1, unit: A, valid_range: [-10, 3000]}
- iIL2_690V: {canonical_id: WGRID_current_l2, unit: A, valid_range: [-10, 3000]}
- iIL3_690V: {canonical_id: WGRID_current_l3, unit: A, valid_range: [-10, 3000]}
- iVibrationY: {canonical_id: WNAC_vibration_y, unit: "m/s2|g", valid_range: [-5, 5], note: "中位0, ±0.2量级; level粗筛"}
- iVibrationZ: {canonical_id: WNAC_vibration_z, unit: "m/s2|g", valid_range: [-5, 5]}
- iAirDensity: {canonical_id: WMET_air_density, unit: "kg/m3", valid_range: [0.9, 1.2], note: "~1.03-1.09; 控制器算; 可归一功率曲线"}
- iPressureOutdoor: {canonical_id: WMET_pressure, dead_channel: true} # ★ 全0死列 → 密度用iAirDensity
- iPowerLimit_Flag:
- canonical_id: WTUR_power_limit_flag
- semantic: "明阳常数=10 全25台 ≠ 限电 (C4陷阱免疫); 真限电需同步性判别+功率封顶, 非此列"
- curtailment_truth: false
- iAvailabillityToday:
- canonical_id: WTUR_avail_today
- unit: pct
- valid_range: [0, 100]
- reliability: glitchy # 🔴🔴 turbine30/47大段=0却满发(P~2100/gen%70-100) → 不可盲信! 必交叉发电态; 本场可用率改WT_Runcode状态派生
- iAvailabillityTotal: {canonical_id: WTUR_avail_total, unit: pct, valid_range: [0, 100], note: "累积寿命可用率~70%(含投运期?); 慎用"}
- WT_Runcode:
- canonical_id: WTUR_run_code
- status_enum_ref: configs/fault_dicts/mingyang_my2_0_changpingao_runcode_enum.csv
- semantic: "★主状态源(cross-tab坐实): 3发电81%/9待风11%/2启动4%/4故障停2%/5,6,7停机/1解缆/11电网故障"
- WT_Faultcode:
- canonical_id: WTUR_fault_code
- note: "码≠官方事件代码(join key待解, 同马王); 657↔RC9待风/757↔RC4故障 = 状态reason非failure; 故障归因用WT_Runcode+iListOfActiveStatuscodesToSCADA"
- iTurbineOperationMode: {canonical_id: WTUR_op_mode, note: "SINT16另一编码: 20↔RC3发电/6↔RC9待风/1↔RC4故障/16↔RC2; 用WT_Runcode为主"}
- # 温度组 (全在1秒, CMS/部件健康)
- iTempGearOil_1sec: {canonical_id: WTRM_gearbox_oil_temp, unit: degC, valid_range: [-20, 100], note: "原列名 iTemp1GearOil_1sec"}
- iTempRotorBearA_1sec: {canonical_id: WTRM_main_bearing_temp_a, unit: degC, valid_range: [-20, 100]}
- iTempRotorBearB_1sec: {canonical_id: WTRM_main_bearing_temp_b, unit: degC, valid_range: [-20, 100]}
- iTempGenBearDE_1sec: {canonical_id: WGEN_bearing_temp_de, unit: degC, valid_range: [-20, 120]}
- iTempGenBearNDE_1sec: {canonical_id: WGEN_bearing_temp_nde, unit: degC, valid_range: [-20, 120]}
- iTempGenStatorU_1sec: {canonical_id: WGEN_stator_temp_u, unit: degC, valid_range: [-20, 180]}
- iTempGenStatorV_1sec: {canonical_id: WGEN_stator_temp_v, unit: degC, valid_range: [-20, 180]}
- iTempGenStatorW_1sec: {canonical_id: WGEN_stator_temp_w, unit: degC, valid_range: [-20, 180]}
- # ============ 10-min 层 (全年2023-04→2024-04, 92列GBK中文; 长窗趋势) ============
- turbine_10min:
- required: [平均功率, 平均风速(m/s)]
- columns:
- 平均功率: {canonical_id: WAPC_active_power, unit: kW, valid_range: [-100, 2300]}
- 平均风速(m/s): {canonical_id: WMET_wind_speed_nacelle, unit: m/s, valid_range: [0, 40], self_ref_risk: true}
- 平均风角度(对北): {canonical_id: WMET_wind_direction_geo, unit: deg, valid_range: [0, 360], frame: geographic}
- 平均风向(机舱): {canonical_id: WYAW_winddir_nacelle, unit: deg, frame: nacelle}
- 平均桨叶1角度: {canonical_id: WROT_pitch_1, unit: deg, valid_range: [-10, 95]}
- 平均桨叶2角度: {canonical_id: WROT_pitch_2, unit: deg, valid_range: [-10, 95]}
- 平均桨叶3角度: {canonical_id: WROT_pitch_3, unit: deg, valid_range: [-10, 95]}
- 平均空气密度: {canonical_id: WMET_air_density, unit: "kg/m3", valid_range: [0.9, 1.2]}
- note_10min: "🔴 92列无状态码/无限电/无可利用率 → 限电/可用率/故障归因必去1秒层(状态码只在sec). x/y振动(此层有)+全温度=长窗趋势."
- cleaning:
- physical:
- - "iGenSpeed=-100 → NaN (哨兵)"
- - "iPitchAngle{1,2,3}=-10 → NaN (故障态RC4占位符, 非真角)"
- - "iGenPower clip [-100,2300]; iFiequency=0=脱网(保留, 状态用)"
- - "温度物理界 clip + 罕见坏点<0.01% → NaN"
- semantic:
- - "iPowerLimit_Flag=10 ≠ 限电 (明阳常数); 勿当弃风 (C4陷阱)"
- - "iAvailabillityToday glitchy(报0却发电) → 可用率改 WT_Runcode 状态派生, 不用内置"
- - "iWindSpeed/iWindSpeed_real/1 = 机舱风 self_ref → 不做绝对功率曲线 (无测风塔)"
- - "iPressureOutdoor/iWindSpeed2 = 死列, 弃"
- traps:
- - "★★ 内置可利用率 glitchy: turbine30/47 大段iAvailabillityToday=0却满发 → '内置可利用率优先'资产必加'先验真(交叉发电态)'前置, 本场改状态派生"
- - "★ pitch=-10 = 故障态(RC4)哨兵非真角(turbine27 17%); 集距死全场(spread p95=0)→不平衡只能振动"
- - "★ turbine39 间歇降额(3月-4月初 P_max~1500, 但02-17/04-10/05-08满2160) = 降额候选, 非1.5MW混型 (单日快照差点误判混型 → 异常台必逐日核)"
- - "★ 无测风塔+无合同曲线 → 绝对功率曲线/绝对达成率 INSUFFICIENT (机舱风self_ref, 同金华山尺度hedging)"
- - "★ 限电无ground truth列(iPowerLimit_Flag假/无集控状态) → 用同步性判别器(全场同时停+频率)+功率封顶, 不臆断"
- - "★ WT_Faultcode≠官方事件代码; 故障归因用WT_Runcode状态+iListOfActiveStatuscodesToSCADA_H/L栈"
- - "Feb26-27 多台全天0出力 → 疑站级事件, 分析时查同步性"
- - "iAvailabillityTotal~70%累积(含投运?) ≠ 运营期可用率, 慎引"
|