| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- # 数据契约 — 华创 HUACHUANG CCWE-2000/116 (马王 一期, 2.0MW)
- # schema: docs/OEM_KB/OEM_knowledge_base_v1.md §3. 校验器: scripts/validate_contract.py
- # 用途: 分析前的"门"。任一 BLOCK → 拒绝进分析 (不在下游补救)。
- #
- # ⚠ 马王=3 OEM 90台混场 (app_ETL/configs/contracts/mawang_machine_map.csv):
- # 一期 华创 CCWE-2000/116 ×8(机号1-3,5-9) [本契约] + 明阳 MY2.0-121/80 ×42(4,10-50)
- # 二期 上海电气 W2500-135 ×40(51-90, 2.5MW)
- # 华创/明阳 共用 一期统一 SCADA (294列1秒 schema 相同), 但 状态enum/功率曲线/单位细节 per-OEM 不同, 已实证 → 必分契约。
- # 本契约源自: scripts/mw_hc_goem.py (8台13M行 G-OEM) + mw_hc_powercurve_check.py + mw_hc_peek/compare (10min).
- meta:
- oem: 华创风能 HUACHUANG (CCWE)
- model: CCWE-2000/116 # 收资表机型; /116 = 转子直径 116m
- topology: unverified # 收资表未给传动型式 (待厂家手册); 暂不假设 DFIG/直驱
- rated_kw: 2000
- rotor_diameter_m: 116
- hub_height_m: null # 收资表未给, 待 GPS 布置图/手册核
- source_farm: 马王 (广西; 华创机号 1-3,5-9 = 第一回集电独立区)
- units_count: 8
- device_id_map: "机号N ↔ raw 20146{N:03d} (N∈{1,2,3,5,6,7,8,9}); 机号4,10=明阳(同zip,排除)"
- sampling:
- raw_1sec_s: 1 # 1-10号风机.zip 内 20146{001-003,005-009}_YYYYMMDD.csv.gz; 294列英文; 8台全1.0s实测
- yearly_10min_s: 600 # 收资表/一期/华创2023年10分钟数据.csv; 全年2023; 6列中文
- window_1sec: "2023-12-15 09:24 → 2024-01-03 23:59 (20天, 8台一致; ⚠订正: 明阳契约曾写~22天, 实测20天)"
- caveat: "1秒仅20天冬窗(Dec-Jan); 10min全年2023. 偏航/桨距/状态只在1秒层; 10min无."
- provenance: "无官方华创状态/功率曲线表 (官方xlsx仅明阳); 状态enum=行为自解 (configs/fault_dicts/huachuang_ccwe2000_status_enum_mawang.csv)"
- power_curve_ref: "收资表 2.0MW 功率曲线表 (1.18场站密度+1.225标准); 名义适用一期全部, 但华创冬窗实测 nac_ws12 仅~80% → 见 traps (窗口/季节/self_ref 混淆, 未坐实欠发)"
- # ============ 全年 10-min 层 (full-year primary; 收资表 6列) ============
- turbine:
- required: ["平均功率(kW)", "平均风速(m/s)"] # ★ 真实列名带半角括号(实测对齐)
- columns:
- "平均功率(kW)":
- canonical_id: WAPC_active_power
- unit: kW # max~2046 (额定2000✓), 无瓦特陷阱
- valid_range: [-100, 2200]
- "平均风速(m/s)":
- canonical_id: WMET_wind_speed_nacelle
- unit: m/s
- valid_range: [0, 40]
- self_ref_risk: true # ★ 机舱风, 功率曲线自指 (finding 89); 真功率曲线必测风塔
- "平均风向(机舱)": # ★ 风向列名用全角括号(机舱)(实测, 异于功率/风速半角)
- canonical_id: WYAW_nacelle_winddir
- unit: deg
- frame: nacelle # ★ ±180 机舱坐标, 非地理; 10-min 不做偏航
- valid_range: [-180, 180]
- 平均塔基温度: {canonical_id: WNAC_tower_base_temp, unit: degC, valid_range: [-20, 80]}
- note_10min: "6列(时间/风机/平均功率(kW)/平均风速(m/s)/平均风向(机舱,全角括号)/平均塔基温度); 无哨兵, P min=-1≈idle. 无桨距/偏航误差/状态码 → 深挖回1秒. ⚠列名括号半/全角混用. 文件名带导出日2023-12-17但实为全年(~358k行/8台)."
- # ============ 1秒 raw 层 (深挖: 偏航/桨距/状态; 20天冬窗) ============
- # 294列英文 i*; 与明阳共schema. ⚠ 本块语义=华创 (状态enum/plim/可用率列 与明阳不同, 已实证)。
- turbine_1sec:
- required: [iGenPower, iWindSpeed, WT_Runcode]
- columns:
- iGenPower: {canonical_id: WAPC_active_power, unit: kW, valid_range: [-100, 2300]} # max 2237 实测, min -11 (轻微电动/待机)
- iWindSpeed: {canonical_id: WMET_wind_speed_nacelle, unit: m/s, valid_range: [0, 40], self_ref_risk: true}
- iGenSpeed: {canonical_id: WGEN_speed, unit: rpm, valid_range: [0, 2100]} # max 1951 实测
- iPitchAngle1: {canonical_id: WROT_pitch_1, unit: deg, valid_range: [0, 95]} # range[0.44,91.42] 实测, ★无-1设定(异于XEMC/DEC)
- iPitchAngle2: {canonical_id: WROT_pitch_2, unit: deg, valid_range: [0, 95]}
- iPitchAngle3: {canonical_id: WROT_pitch_3, unit: deg, valid_range: [0, 95]}
- iVaneDiiection: # ★ 原始拼写 (Diiection); 风向标/偏航误差
- canonical_id: WYAW_yaw_error
- unit: deg
- frame: nacelle # ±180; 华创 中位 -0.03° IQR[-7.1,8.1] (紧, 对风良好); range[-147,142]
- valid_range: [-180, 180]
- iwindDirection: # ★ 0-360 真地理 (rare; 偏航对风地理参考)
- canonical_id: WMET_wind_direction_geo
- unit: deg
- frame: geographic
- valid_range: [0, 360] # range[0.16,359.83] 实测
- iNacellePositionLtd: {canonical_id: WYAW_nacelle_heading, unit: deg, valid_range: [0, 360], note: "机舱航向; iwindDirection≈iNacellePositionLtd+iVaneDiiection (见明阳B2结构定论)"}
- iNacellePositionTotal: {canonical_id: WYAW_nacelle_position, unit: deg, valid_range: [0, 720], note: "累积位置含扭缆"}
- iPressureOutdoor: {canonical_id: WMET_pressure, dead_channel: true} # ★ 全0 死列(med0/max0实测) → 密度用测风塔
- iAirDensity: {canonical_id: WMET_air_density, dead_channel: true} # ★ 全0 死列
- iActivePowerRate: {canonical_id: WAPC_power_rate, dead_channel: true} # ★ 全0 死列
- iAvailabillityToday: # ★★ 华创专有 catch: 全0 死列 (≠明阳, 明阳此列 valid pct)
- canonical_id: WTUR_avail_today
- dead_channel: true
- note: "华创该列恒0 (实测 range[0,0]); 不可作可用率信号 → 可用率必由 WT_Runcode 状态派生"
- iAvailabillityTotal: {canonical_id: WTUR_avail_total, valid_range: [0, 100], note: "Total 可能有值, Today死; 用前验"}
- iPowerLimit_Flag:
- canonical_id: WAPC_powerlimit_flag
- semantic: "⚠⚠ 非限电! OEM默认常数 (华创恒=0 全态, 实测全值=[0]; 明阳恒=10) → 不可作弃风信号 (C4陷阱). ★限功率真信号 = 下面 iActivePoweiSetPointValue (2026-09-02 原生层复核, 转发层死列≠信号死)"
- iActivePoweiSetPointValue: # ★ 原始拼写 (Powei); 有功设定值 = 限功率直接信号 (2026-09-02 1秒层 8台×20天 实测)
- canonical_id: WAPC_power_setpoint
- unit: kW
- valid_range: [0, 2100]
- semantic: "活列, 与 iGenPower corr 0.90-0.97 (设定值变化台); 2000=不限, <1990∧WT_Runcode=3 = 限功率运行 (功率贴设定值±5% 占限功率时长 64-85% = binding 型). 冬窗实测: 1#/5# 全 20 天设定值恒 200 kW (功率 p99≈222, 有风 ws>8 达 156 h) = 长期降容; 2/3/7/8# 46-64% 时段在 1700/1500/1000 等档; 6/9# 2-4%. iPowerLimit_Flag 同期恒 0 ⇒ 限功率判定与剥离必用本列, 禁引 flag. 全年 10min 层无此列 (6 列) → 年度定量须另证. 详 outputs/mawang/华创_限功率设定值_原生层复核.md"
- WT_Runcode:
- canonical_id: WSLG_turbine_state
- status_enum_ref: configs/fault_dicts/huachuang_ccwe2000_status_enum_mawang.csv
- semantic: "华创自有enum (9码, 行为自解, 无官方表): 3=发电(74.2%), 9=顺桨待机低风(22.4%), 4=有风停机(2.3%真损候选), 5/7/2/6=停机变体, 11=高风过渡, 0=初始. ⚠华创park=9无8 (明阳才用8); 同SCADA列跨OEM语义不同, 必各自解."
- WT_Faultcode:
- canonical_id: WALM_fault_code
- semantic: "故障码; 码值≠官方事件代码 (join key待解); 全年事件用故障日志csv(自描述). 明阳故障字典不适用华创."
- note_1sec: "294列全英文名; 华创=机号1-3,5-9(raw 20146001-003/005-009). iTurbineOperationMode=运行细分(非WT_Runcode)."
- # ============ 测风塔 (自由来流; 同马王站, 同明阳契约 mast) ============
- # ⚠ 空间: 华创=第一回集电独立区, 单测风塔不代表华创区来流 (compare 已证 finding89); 真功率曲线/per-turbine性能需华创区测风。
- mast:
- required: [轮毂风速平均值]
- columns:
- 轮毂风速平均值: {canonical_id: WMET_free_stream_ws_hub, unit: m/s, valid_range: [0, 40], frame: geographic}
- 轮毂风向平均值: {canonical_id: WMET_free_stream_wdir_hub, unit: deg, valid_range: [0, 360], frame: geographic}
- 环境温度平均值(℃): {canonical_id: WMET_ambient_temp, unit: degC, valid_range: [-40, 55]}
- 环境压强平均值:
- canonical_id: WMET_pressure
- unit: Pa
- valid_range: [80000, 110000] # ★ 我们5-29清洗有 scale 断裂(95100→9885 ×10错); 越界=未修, 密度前必修 (阜山baro陷阱)
- note_mast: "2022-11→2023-11; 多高度. 华创区空间偏置 → OEM对比/绝对性能 单塔不可判."
- # ============ 跨表清洗规则 ============
- cleaning:
- physical:
- - "测风塔 环境压强 ∉[80000,110000]Pa → rho不可信 (修scale断裂后再算密度)"
- - "1秒 iPressureOutdoor/iAirDensity/iActivePowerRate/iAvailabillityToday 死列(全0) 弃"
- semantic:
- - "iPowerLimit_Flag 华创恒0 非限电 → 勿当弃风; 真限电需调度令/台账"
- - "WT_Runcode 按华创enum解 (9码自解, ≠明阳); 可用率由状态派生 (iAvailabillityToday死)"
- - "机舱风(平均风速/iWindSpeed)自指 → 真功率曲线必测风塔自由来流"
- traps:
- - "★华创状态enum无官方表 (官方xlsx仅明阳) → 9码全为行为自解; park=9无8; 用前看 confidence 列"
- - "★iAvailabillityToday 华创死列(全0) — 明阳此列有效 → per-OEM 不可照搬, 可用率必状态派生"
- - "★1秒功率曲线 7-gate雷: 冬窗(Dec-Jan) nac_ws12 仅~80%契约, 既非纯1秒滞后(中风+77kW/高风未补)亦未坐实欠发=窗口/季节(疑结冰/湍流)+self_ref混淆; 全年10min nac_ws12→1994达额定 → 华创功率曲线 INSUFFICIENT from 冬窗1秒, 勿判欠发"
- - "iPowerLimit_Flag 假'限电' (华创恒0): 盲读→假弃风 (C4陷阱)"
- - "WT_Faultcode 码≠官方事件代码; 故障字典join key待解; 明阳故障字典不适用华创"
- - "马王1秒'1-10号'zip 里 001-003/005-009=华创非明阳(004,010=明阳), 必按机号过滤"
- - "华创区(第一回)vs测风塔/明阳区 空间不同 → OEM性能对比含空间veer, 不下单机定论 (finding89)"
|