# 数据契约 — 上海电气 SEWIND W2000-110-80 (国电济南长清风电场, 大唐2025科研) # schema: docs/OEM_KB §3. 校验器: scripts/validate_contract.py. oem-onboard 复用路径 2026-06-07 (第3场, SEWIND已知OEM→形式化). # 复用: configs/point_reference/sewind_w2000_110_80_v2026_field_standardization_v1.yaml (单位/canonical/LN已做) + 本契约补 量程/哨兵/帧/陷阱/校验层. meta: oem: 上海电气 SEWIND model: W2000-110-80 topology: DFIG_geared rated_kw: 2000 variants_family: "W2000-93/110/135-90/80, W2000N-99/111/116 (rotor 93/110/135m) — 同家族跨场: 郭家店/淄川/文登/临邑" source_farm: 国电济南长清 (山东); 6台2026(F0050001001/002/003/006/008/014) + 25台2013+故障日志(1-25号风机) sampling: {raw_s: 30, note: "2026导出30s(38列,名带单位如'有功功率(kW)'); 另有10min重采样parquet(41列,名无单位'有功功率'); 2013为10min(25台); ⚠双命名(带/不带单位括号)"} ground_truth: field_std: "configs/point_reference/sewind_w2000_110_80_v2026_field_standardization_v1.yaml (单位/canonical/IEC-LN 已做, 复用)" fault_dict: "configs/fault_dicts/sewind_w2000_fault_codes.csv (2026-09-02 扩到1000码位/实义543, 源=淄博下发包CF卡 StatusCode+StatusCodeText, 取代原335条Gemini视觉提淄博PDF; 另有16列富表 sewind_sec2000_status_codes_full.csv 带停机程序/复位类型/延时/重复升级链) ⚠**淄博口径, 非上气通用**: 长清实测对拍277共同码仅64%描述一致, 见 README_sewind_sec2000.md 与 divergence.csv" fault_log: "故障记录统计(单台) 25台 — ⚠逐码聚合(已激活次数+最后激活/复位时间), 无单次时长 → 真停机帕累托做不了(需SCADA状态派生)" status_enum: "configs/fault_dicts/sewind_w2000_turbine_state_enum.csv 空 — ⚠运行状态枚举(含state11半载降额)无官方解, 需SEWIND主控状态机文档(操作/故障手册都没有)" met_mast: "长清风电场2023年测风塔数据 (待解压验时间窗是否覆盖SCADA)" spec_doc: "上海电气-国电济南长清技术协议20110413.doc (16.8MB) + 风电场收资表_长清_国电.xlsx + 长清一期风机坐标经纬度.xls" provenance: "oem-onboard 复用路径 2026-06-07; 复用SEWIND field_std + KB§4.3陷阱 + 2026 parquet探(量程/哨兵/限功率/帧) + 25台故障CSV分析" # 列名: ⚠双命名. 本契约 key 用 10min parquet 实际名(无单位括号); 30s导出用 '有功功率(kW)' 式(见 field_std). turbine: required: [有功功率, 风速] columns: 有功功率: canonical_id: WAPC_active_power raw_unit: kW # ✓ 实测 max2152≈额定2000+裕量, 非瓦特 valid_range: [-50, 2200] # 小负=寄生(p50 -4 是1月低风寄生, 正常) block_if_raw_exceeds: 50000 风速: canonical_id: WMET_wind_speed_nacelle unit: m/s valid_range: [0, 40] self_ref_risk: true # 机舱风, 功率曲线自指 (finding89); 另有 10分钟平均风速 列 风轮转速: canonical_id: WROT_rotor_speed unit: rpm valid_range: [-2, 20] # 实测 0-16 (W2000-110 额定~16) 桨距角1: canonical_id: WROT_pitch_angle_1 unit: deg valid_range: [-2, 95] # ✓ 实测 min=0 无负设定 (不同于DEC/XEMC -1°); max93 桨距角2: canonical_id: WROT_pitch_angle_2 unit: deg valid_range: [-2, 95] 桨距角3: # ✓ SEWIND有三叶片瞬时桨距 (XEMC只有1/2) canonical_id: WROT_pitch_angle_3 unit: deg valid_range: [-2, 95] 风向角: canonical_id: WYAW_yaw_error unit: deg frame: nacelle # 🔴★ 实测 range ±18° = nacelle-frame偏航误差, 非地理0-360 (坐实KB§4.3) valid_range: [-180, 180] note: "名'风向角'实为偏航误差(nacelle-frame), 不可做地理扇区/风玫瑰 (finding89/floris陷阱); 偏航只观测级" 舱外温度: canonical_id: WMET_ambient_temp unit: degC valid_range: [-45, 50] # 实测 -11~16(山东1月), 无哨兵 齿轮箱润滑油温度: canonical_id: WTRM_gearbox_oil_temp unit: degC valid_range: [-40, 90] 驱动前轴承温度: canonical_id: WGEN_bearing_temp_de unit: degC valid_range: [-40, 130] 限功率运行: canonical_id: WAPC_power_limited unit: bool valid_range: [0, 1] # ✓ 干净0/1标志, 实测20.3%=1(限电); 比骆驼沟有功功率限定值清晰 semantic_verify: "C4教训: 1=限电 待用功率封顶法验(power贴顶且-50) = 待机寄生, 保留" - "桨距角 min=0 (SEWIND无负设定, 不同DEC/XEMC -1°)" semantic: - "风向角 = 偏航误差(nacelle-frame ±18°), 勿当地理风向做扇区" - "限功率运行=1 勿直接判限电, 用功率封顶法验 (C4教训)" - "一期 A7/A10/A24 风频字段放大~1000× (KB§4.3, 已知, 用前÷1000或排除)" status_enum_ref: configs/fault_dicts/sewind_w2000_turbine_state_enum.csv fault_codes_ref: configs/fault_dicts/sewind_w2000_fault_codes.csv traps: - "月间 schema 裂: 28列(健康)↔17列(可用率+风向) (郭家店). 读前先核列集" - "命名 A#=一期 C#=三期; 一期 A7/A10/A24 风频 ×1000" - "风向角 = nacelle-frame偏航误差(±18°)非地理0-360 — 误当地理=finding89类错" - "双命名: 30s导出'有功功率(kW)'(带单位括号) vs 10min parquet'有功功率'(无) — 契约/校验需对准实际导出" - "state11 半载降额无官方枚举解 (操作/故障手册都没有, 需主控状态机文档)" - "故障日志=逐码聚合(次数+最后时间)无单次时长 → 真停机时长帕累托做不了(同骆驼沟), 需SCADA风机状态派生" - "故障计数口径(7-gate D4): 65.3%是瞬时/运行/环境告警(高偏航误差穿越/湍流/风小待机/手动偏航)非部件故障; 'top按次数'误导, 必剔瞬时再排" - "限功率运行 20%=1 (山东电网限电常见), C4教训勿直接信需功率封顶验"