| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- # 数据契约 — 上海电气 SEWIND W2000/W2100N-135-90 齿箱DFIG (华电莱州夏邱 98MW, 山东莱州 / 华电)
- # schema_v2 SOP 标准件 (2026-07-18, 新场 onboard)。
- #
- # ★ 主分析层 = 嵌哈希目录 zip 内 GBK CSV (实时数据查询 (N).zip → <hash>/YYYYMMDD-..~YYYYMMDD-..csv 半月窗, 全49台一文件);
- # 契约验原始 CSV 列名 (单位嵌列名, 非归一化)。
- # ★ OEM 判定 = docx风机参数(上海电气 W2000-135-90/2000kW/49台/98MW) + 保护定值(上海电气 W2100N-135-90/额定2100kW)
- # + 合同(卖方 上海电气风电集团, 华电山东物资采购) + CMS季度报告抬头(上海电气) — 非猜, 四源坐实。
- # reuse: 上海电气 SEWIND W2000 家族 (库内 sewind_w2000_nanshu / sewind_w2500_146_dehui 语义层); 本场 135m 变体重验。
- schema_version: 2
- meta:
- oem: 上海电气 SEWIND
- model: W2000-135-90 (2MW 齿箱DFIG; 保护定值平台型号 W2100N-135-90)
- topology: dfig_geared # ✅三点支撑双馈异步变速变桨(保护定值); 齿箱杭齿/南高齿FD2400B ratio132.38; 发电机上海电机厂YFSKY500-4空-空冷; 变频器日风IDIF; 变桨WPPC-85-C
- rated_kw: 2100 # ⚠双值: 保护定值W2100N/额定2100kW + docx文'单机容量2.1MW' + SCADA有功plateau p99~2175/p999~2203 → 2100级; 但docx表'额定功率2000kW' + 98MW项目=49×2000kW铭牌。达成率分析须先确认参考额定(2000 vs 2100), 见 self_ref_note。
- rated_kw_note: "98MW项目铭牌口径=2000kW/台(49×2.0=98MW); 平台/保护定值口径=2100kW(W2100N); SCADA plateau物理口径~2100(p99=2175). 三口径均记, 勿单值定谳。"
- rotor_d_m: 135 # ✅docx+保护定值 风轮直径135m
- hub_height_m: 90 # ✅docx塔筒中心高度90m/保护定值轮毂中心高度90m
- source_farm: 华电莱州夏邱风电场(98MW, 山东省烟台市莱州市 夏邱镇/虎头崖镇/沙河镇, 华电)
- commissioned: "2020-12-31 全部并网"
- n_machines: 49 # ✅风机名称 A1(1#)..A49(46#) 全49台有数据 = docx49台 = 坐标表49行 = 功率曲线jpg
- gearbox: "杭齿S2100 / 南高齿FD2400B-01-00R2; 速比 132.69/132.38; 无齿箱温度通道入10min层(见 absent_channels_note)"
- absent_channels_note: "10min SCADA层无: 齿轮箱温度(油温/高低速轴承温 — 保护定值有阈但通道不在10min层, 仅30s层有) → 齿箱冷浸comp N/A(温度NBM冷浸仅可对发电机轴承但无油浴参照, 脂润滑不配); 无限电/限功率0/1旗标 → 限电剥离须功率-风约束推断; 无逐相绕组(仅定子UVW三相); 无齿箱双压dP。30s高频层(2、秒级SCADA 20列)另含 桨距角1/2/3 per叶 + 高速/低速轴承温 + 齿轮箱油温 + 舱外温度 → 三叶不平衡/齿箱热/齿箱冷浸comp 须走30s层。"
- secondary_layers:
- turbine_30s: "登记非清洗(GB级按需拉): 2、秒级SCADA高频数据/30s/实时数据查询 (1..6).zip; zip5正常zip, zip1-4/6=流式zip(无中央目录, python zipfile BadZipFile; 窗从local header读)。窗=2025-07-01~2025-09-30(6半月块), 30s采样(dt.median=30s实证)。20列schema=风机名称/时间/有功功率/机舱位置/桨距角1/2/3(★per叶)/发电机定子UVW温/发电机前后轴承温/发电机转速/高速轴承温/低速轴承温/舱内温/舱外温/10min平均风速/风轮转速/齿轮箱油温 — richer: per叶桨距+高低速轴承温+齿箱油温+舱外温; 缺电机温度/塔底柜/风向角/偏航位置/环境温度/风机状态。"
- event_fault: "7、机组状态、事件、故障数据: 故障记录_{2023,2024,2025}.csv (GBK). 列=风机名/状态码值/状态码描述/激活时间/复位时间; 逐文件验年 2023(1015条)/2024(5641)/2025-01~08-30(5723) 文件名年=内容年无跨年错配(memory event-layer-verify-year-first); 时间' YYYY-MM-DD HH:MM:SS:mmm'(前导空格+毫秒冒号)。未装配parquet(Phase-2 A_op/故障分型可建)。"
- layout:
- format: "嵌哈希目录 zip: 实时数据查询 (N).zip (N=1..40) → <hash>/YYYYMMDD-HH_MM_SS~YYYYMMDD-HH_MM_SS.csv (半月窗, 全49台); 22列单位嵌列名"
- encoding: gbk
- time_format: "YYYY-MM-DD HH:MM:SS"
- machine_token: "风机名称列内台号 A1(1#)..A49(46#) (A序号 + (原#号); # 号非连续, 见6机位坐标)"
- assemble: "outputs/xiaqiu/sop/assemble_xiaqiu.py (zipfile逐zip GBK内部csv → name-based → to_numeric → (风机名称,时间)concat+dedup跨月0915重叠 → 排序 raw parquet)"
- sampling:
- turbine_10min_s: 600 # ✅ t.diff().median() per台=600s (49台 min=median=max=600)
- window: "2024-01-01 23:50 ~ 2025-08-31 23:50 (约20月, 40半月块CSV, 连续无缺月; 4,023,831行/49台)"
- turbine_10min:
- sampling_s: 600
- required: ["有功功率(kW)", "10min平均风速(m/s)"]
- machine_col: 风机名称
- time_col: 时间
- columns:
- "有功功率(kW)":
- canonical_id: WAPC_active_power
- raw_unit: kW
- valid_range: [-150, 2450]
- observed_range: [-100, 2312] # ✅ p99~2175/p999~2203(rated~2100 plateau); 负=空转寄生真物理禁clip
- self_ref_note: "本场无测风塔(目录3标'无') → 机舱风self_ref → 绝对达成率/Cp INSUFFICIENT(机舱风铁律); 达成率参考额定须先定(2000 vs 2100)"
- "10min平均风速(m/s)":
- canonical_id: WMET_horWdSpd
- unit: m/s
- valid_range: [0, 40]
- observed_range: [0, 24.26]
- self_ref_risk: high
- note: "机舱风(10min平均) self_ref; 无测风塔不可解"
- "风轮转速(rpm)": {canonical_id: WROT_RotSpd, unit: rpm, valid_range: [-2, 20], observed_range: [0, 13.48],
- semantic: "★rotor侧(rated 12.77rpm 保护定值); vs 发电机转速高速轴"}
- "发电机转速(rpm)": {canonical_id: WGEN_Spd, unit: rpm, valid_range: [-2, 2000], observed_range: [0, 3264],
- semantic: "★高速轴p50=1048(齿箱DFIG, 速比132.38; rated~1690, 范围600-1800 docx); max3264/p999~2220=编码器过速尖峰→界外NaN"}
- # ---- 变桨 (★10min层=集距单列; per叶独立仅30s层有 桨距角1/2/3) ----
- "桨距角(°)": {canonical_id: WROT_PtAng, unit: deg, valid_range: [-5, 95], observed_range: [-128.9, 168.85],
- semantic: "★集距 collective 单列(below-rated p50~0封桨; above-rated~89顺桨) → 三叶不平衡 N/A(10min层); min-128.9/max168.85=界外尖峰→NaN"}
- # ---- 温度: 发电机(定子三相+前后轴承) + 变桨电机 + 塔底柜/舱内/环境; ⚠无齿箱温度入10min层 ----
- "发电机定子U温度(℃)": {canonical_id: WGEN_TmpStaU, unit: degC, valid_range: [-40, 200], observed_range: [-23.4, 203.8],
- semantic: "★定子三相U/V/W → 相间不平衡可做; 0值=停机冷态(发电态P>50过滤); 保护绕组max145/报警140"}
- "发电机定子V温度(℃)": {canonical_id: WGEN_TmpStaV, unit: degC, valid_range: [-40, 200], observed_range: [-27.4, 181.0]}
- "发电机定子W温度(℃)": {canonical_id: WGEN_TmpStaW, unit: degC, valid_range: [-40, 200], observed_range: [-169.4, 143.9]}
- "发电机前轴承温度(℃)": {canonical_id: WGEN_TmpBrgFront, unit: degC, valid_range: [-40, 130], observed_range: [-118.5, 150.0],
- semantic: "★发电机前/后轴承双端 → 配对差可做; 保护轴承max95/报警90; 负尖峰/150→界外NaN"}
- "发电机后轴承温度(℃)": {canonical_id: WGEN_TmpBrgRear, unit: degC, valid_range: [-40, 130], observed_range: [-192.0, 102.6]}
- "电机温度1(℃)": {canonical_id: WROT_TmpPtMotor1, unit: degC, valid_range: [-40, 150], observed_range: [-1.1, 134.2],
- semantic: "★变桨电机1/2/3温度(per叶变桨电机; 桨角本身10min层为集距单列)"}
- "电机温度2(℃)": {canonical_id: WROT_TmpPtMotor2, unit: degC, valid_range: [-40, 150], observed_range: [0, 133.9]}
- "电机温度3(℃)": {canonical_id: WROT_TmpPtMotor3, unit: degC, valid_range: [-40, 150], observed_range: [-0.6, 142.5]}
- "塔底柜温度(℃)": {canonical_id: WTOW_TmpTowerBaseCab, unit: degC, valid_range: [-40, 80], observed_range: [-9.1, 55.4]}
- "舱内温度(℃)": {canonical_id: WNAC_IntTmp, unit: degC, valid_range: [-40, 80], observed_range: [-303.63, 258.43],
- trap: "min-303/max258=传感尖峰→界外NaN(非物理)"}
- "环境温度(℃)": {canonical_id: WMET_EnvTmp, unit: degC, valid_range: [-40, 55], observed_range: [0, 44.47],
- liveness: "⚠partial: 死(0% non-NaN) 2024-01~2025-04-30, 2025-05-01起上线(zip33 4% → 2025-06-16起~98%); 全窗仅15.1% non-NaN → 温度NBM去季节仅2025夏后窗可用, 早期用舱内/塔底柜代参照"}
- # ---- 位置/风向 ----
- "机舱位置(°)": {canonical_id: WNAC_Dir, unit: deg, valid_range: [0, 360], observed_range: [0, 360],
- semantic: "机舱绝对方位角[0,360) → 扇区/风玫瑰可做(非扭角); 与风向角配出绝对风前过 pseudo-geo 三件套"}
- "风向角(°)": {canonical_id: WYAW_YawErr, unit: deg, valid_range: [-180, 180], observed_range: [-180.4, 180.0],
- semantic: "★机舱相对风向=对风误差(yaw error); p50=0 对中好; 静态/动态偏航可做; 非绝对地理风向(self_ref)"}
- "偏航位置(deg)": {canonical_id: WYAW_CableTwist, unit: deg, valid_range: [-720, 720], observed_range: [-327.66, 327.66],
- semantic: "解缆/扭缆位置(unwrap; 保护偏航绝对值max设定715deg)",
- liveness: "⚠partial: 同环境温度, 死 2024-01~2025-04-30, 2025-05起上线; 全窗15.1% non-NaN → 动态偏航/解缆分析仅2025夏后窗"}
- # ---- 状态码 (语义先验真) ----
- "风机状态": {canonical_id: WTUR_status, unit: code, valid_range: [0, 100], observed_range: [0, 51],
- semantic: "运行状态码(15枚举: 8最多~60%=发电/并网态, 3/10/11/6/2/1/5/51/9/14/4/7/0/12); 语义先验真; 事件层故障码(状态码值30150/301101/20008等 6位)另在目录7 故障记录csv 带状态码描述"}
- cleaning:
- physical:
- - "有功功率负值=空转寄生真物理禁clip; valid_range界外→NaN非clamp"
- - "无850哨兵/无明显离散哨兵族(扫全窗): 极端值(桨距-128.9/168.85, 发电机转速3264, 舱内±300, 轴承-192, 定子-169)均由valid_range界外→NaN统一捕获, 非discrete sentinel match"
- - "温度0值=停机冷态(发电态P>50过滤剔)"
- semantic:
- - "风速self_ref+无测风塔 → 绝对达成率/Cp INSUFFICIENT"
- - "机舱位置=方位角[0,360)→扇区(过pseudo-geo三件套); 风向角=对风误差[-180,180]非地理; 偏航位置=扭缆位置"
- - "环境温度/偏航位置 partial-liveness(2025-05起) → 下游按段切窗, 非死列(apply_contract_gate all-NaN判死不误伤)"
- derive:
- - "10min已是时均层(SEWIND原生); 嵌哈希zip逐zip GBK CSV concat+dedup(跨月0915重叠去49行)"
- traps:
- - "★**嵌哈希目录 zip**: 每zip内 <随机hash>SS/*.csv (如 SadehJuXUeQNuPEA0m4tagSS/); zipfile逐zip读内部csv, GBK; name-based禁positional"
- - "★**齿箱DFIG 2MW SEWIND W2000/W2100N**: 库复用sewind_w2000家族; 10min层缺齿箱温度(仅30s层有)"
- - "★**桨距角10min层=集距单列**(三叶不平衡须走30s层桨距角1/2/3); 定子三相U/V/W + 发电机前后轴承 配对差可做"
- - "★**rated 2000/2100 双口径**: docx表2000/docx文2.1MW/保护定值W2100N-2100/SCADA plateau~2100 — 达成率前须定参考额定"
- - "★**环境温度+偏航位置 partial-liveness 2025-05起**: 早期死列(0% non-NaN), 非坏 — 下游按段切窗; apply_contract_gate all-NaN判死用全窗non-NaN>0不误伤"
- - "无测风塔(目录3'无') → 机舱风self_ref → 绝对达成率INSUFFICIENT"
- - "流式30s zip(1-4/6)无中央目录 → python zipfile BadZipFile; 窗从local file header parse(huishan流式zip同族trap)"
|