EMS 并离网切换单一功能开发文档

PUB-2604-0008-MAN · 1.0

Barcode ENX9F6K2BHES9
文件名称:EMS 并离网切换单一功能开发文档
文档类型:功能开发标准文档
适用范围:工商业储能 EMS / 微电网控制 / 并网点断路器联锁控制
版本:V1.0
状态:开发基线

1. 文档目的

本文档用于定义 EMS 中“并离网切换”这一单一功能的完整开发基线,覆盖:

本文档以现有 Notion 检索到的内部材料为主要素材来源,特别吸收以下理论与结构基础:

2. 适用对象与边界声明

本文档适用于以下对象:

本文档不涵盖以下责任:

本文件仅定义 EMS 单一功能的开发标准与接口逻辑,不承担 EOR、施工或法规签章责任。

3. 功能定义

“并离网切换”是指 EMS 对以下过程进行感知、判断、联锁、授权、执行与记录的单一功能模块:

电网正常并网
    ↓
检测电网异常 / 失网 / 孤岛风险
    ↓
执行解列(Trip)
    ↓
判断是否允许进入离网运行
    ↓
维持离网状态 / 孤岛状态
    ↓
检测电网恢复
    ↓
验证重并网前提
    ↓
执行重并网(Close)
    ↓
恢复并网运行

该功能不是单纯的“开关控制”,而是一个完整的闭环控制能力,必须同时具备:

4. 设计原则

4.1 总原则

Trip 快速、硬件优先、本地优先
Close 慢速、策略优先、EMS 授权优先

4.2 核心原则

  1. 跳闸必须不依赖 EMS 在线
  2. 合闸必须依赖 EMS 授权
  3. 合闸前必须满足完整联锁条件
  4. 继电器不得拥有自主重合闸权
  5. 所有关键动作必须可追溯
  6. 所有关键闭锁必须可解释
  7. 所有失效场景默认不允许 Close
  8. UI 显示必须与物理反馈一致,禁止盲显
  9. 并离网切换逻辑必须与 BESS/PCS 运行状态耦合
  10. 任何缺失数据、冲突数据、链路异常,默认转为保守闭锁

5. 功能目标

5.1 主要目标

5.2 子目标

6. 术语定义

EMS            Energy Management System
BESS           Battery Energy Storage System
PCS            Power Conversion System
POI            Point of Interconnection,并网点
AIPP           Anti-Islanding Protection Panel
Trip           分闸 / 跳闸 / 解列动作
Close          合闸 / 重并网动作
Grid-Tie       并网运行状态
Island         离网 / 孤岛运行状态
Zero Export    零反送 / 不向电网反送功率
ROCOF          频率变化率
52a            断路器合位反馈辅助接点
52b            断路器分位反馈辅助接点
DI             Digital Input
DO             Digital Output
Interposing Relay 中间继电器
Sync           同步检查

7. 系统角色与控制边界

7.1 控制分层

L1 感知层
├─ 并网保护继电器
├─ 电表 / 冗余测量表
├─ 断路器 52a/52b
└─ PCS/BESS 状态反馈

L2 决策层
└─ EMS 控制器策略引擎

L3 输出层
├─ EMS DO
└─ 中间继电器

L4 执行层
├─ 主断路器 Trip Coil
├─ 主断路器 Close Coil
└─ PCS/BESS 启停与模式切换接口

L5 展示层
└─ EMS UI / HMI / Web 界面

7.2 角色边界

继电器职责
├─ 电网异常检测
├─ 反孤岛主触发
└─ 本地 Trip 执行

EMS 职责
├─ 状态整合
├─ 联锁判断
├─ Close 授权
├─ UI 控制
├─ 告警日志
├─ 离网许可判断
└─ BESS/PV 协同控制

断路器职责
├─ 执行物理解列
├─ 执行物理重并网
└─ 提供位置反馈

PCS/BESS 职责
├─ 提供运行状态
├─ 接受停机/待机/并网/离网模式控制
└─ 提供输出功率与模式反馈

7.3 硬边界规定

Trip 权限:继电器主导,EMS可冗余,但不得依赖 EMS 才能跳
Close 权限:仅 EMS
Auto Reclose:严格禁止
Bypass Close:严格禁止
Relay Autonomous Close:严格禁止

8. 功能架构

并离网切换功能
├─ F1 电网状态检测
│  ├─ 电压检测
│  ├─ 频率检测
│  ├─ 相位检测
│  ├─ ROCOF 检测
│  └─ 电网稳定计时
├─ F2 反孤岛解列
│  ├─ 越限解列
│  ├─ 无压解列
│  ├─ ROCOF 解列
│  ├─ Trip 执行确认
│  └─ EMS 事件同步
├─ F3 离网准入控制
│  ├─ BESS 可离网能力判断
│  ├─ SOC 判断
│  ├─ PCS 模式判断
│  ├─ 关键负载支撑判断
│  └─ Island Start Permit
├─ F4 反逆流控制
│  ├─ POI 功率方向判断
│  ├─ Zero Export 策略使能
│  ├─ 输出归零验证
│  └─ 重并网前逆流闭锁
├─ F5 重并网联锁
│  ├─ Grid Stable
│  ├─ Zero Export / Inflow
│  ├─ BESS/PV Stop or Standby
│  ├─ EMS Close Authorization
│  ├─ Sync Complete
│  ├─ Breaker Open Confirm
│  └─ User Permission Check
├─ F6 动作执行
│  ├─ Open Breaker
│  ├─ Close Breaker
│  ├─ Start BESS Island
│  ├─ Start PV Island
│  ├─ Start BESS Grid-Tie
│  └─ Start PV Grid-Tie
├─ F7 UI 与告警
│  ├─ 状态显示
│  ├─ 条件显示
│  ├─ 主阻塞原因显示
│  ├─ 动作建议显示
│  └─ 权限与确认交互
└─ F8 日志与追溯
   ├─ 事件日志
   ├─ 动作日志
   ├─ 条件快照
   ├─ 用户日志
   └─ 故障日志

9. 外部接口定义

9.1 继电器接口

继电器至少应提供:

输入到 EMS
├─ Grid Voltage
├─ Grid Frequency
├─ ROCOF
├─ Grid Healthy / Abnormal
├─ Trip Trigger Code
└─ Relay Fault / Comm Status

输出到断路器
└─ Trip Coil 驱动

说明:

9.2 电表/冗余测量接口

推荐提供:

输入到 EMS
├─ POI Active Power
├─ Reverse Power Flag
├─ Grid Voltage
├─ Grid Frequency
├─ Phase Angle / Sync Info(如有)
└─ Meter Comm Status

用途:

9.3 断路器接口

输出自 EMS
├─ DO_Open_Breaker
└─ DO_Close_Breaker

输入到 EMS
├─ DI_52a_Breaker_Closed
├─ DI_52b_Breaker_Open
├─ Coil Ready / Spring Charged(如有)
└─ Breaker Fault(如有)

9.4 PCS/BESS 接口

输入到 EMS
├─ BESS Running Status
├─ PCS Running Status
├─ Grid-Forming Ready
├─ Grid-Following Ready
├─ Output Power
├─ SOC
├─ Alarm / Fault
├─ Standby Status
└─ Sync Ready(如由 PCS 提供)

输出自 EMS
├─ CMD_Stop_BESS
├─ CMD_Start_BESS_Island
├─ CMD_Start_BESS_GridTie
├─ CMD_Stop_PV
├─ CMD_Start_PV_Island
└─ CMD_Start_PV_GridTie

10. 运行状态定义

10.1 顶层运行状态

S0 INIT                初始化
S1 GRID_TIED           正常并网
S2 TRIP_PENDING        异常检测到,等待 Trip 结果确认
S3 ISOLATED            已解列,尚未进入离网
S4 ISLAND_READY        允许离网启动
S5 ISLAND_RUNNING      离网运行中
S6 GRID_RECOVERY_WAIT  电网恢复观察中
S7 RECLOSE_READY       满足重并网基础条件
S8 RECLOSE_BLOCKED     存在闭锁,禁止合闸
S9 RECLOSE_EXECUTING   正在执行合闸
S10 GRID_RESTORED      已恢复并网
S11 FAULT_LOCKED       故障锁定

10.2 状态迁移树

S1 GRID_TIED
├─ 电网异常 → S2 TRIP_PENDING
│  ├─ Trip 成功 → S3 ISOLATED
│  │  ├─ Island Permitted → S4 ISLAND_READY
│  │  │  └─ 启动成功 → S5 ISLAND_RUNNING
│  │  └─ Island Not Permitted → 保持 S3
│  └─ Trip 失败 → S11 FAULT_LOCKED
└─ 正常保持

S3 / S5
└─ 电网恢复稳定 → S6 GRID_RECOVERY_WAIT
   ├─ 稳定计时完成 → 联锁检查
   │  ├─ 全满足 → S7 RECLOSE_READY
   │  │  └─ EMS 授权并执行 → S9 RECLOSE_EXECUTING
   │  │     ├─ 合闸成功 → S10 GRID_RESTORED → S1 GRID_TIED
   │  │     └─ 合闸失败 → S11 FAULT_LOCKED
   │  └─ 任一不满足 → S8 RECLOSE_BLOCKED
   └─ 再次异常 → 返回 S3 或 S5

11. 条件代码体系

为保证 UI、逻辑、日志一致,定义统一条件代码。

11.1 反孤岛自动解列条件 A 组

A1 Grid voltage/frequency exceeds limit
A2 Grid power outage (no voltage)
A3 ROCOF >= threshold
A4 Trip action completed
A5 Trip signal reported to EMS
A6 Island mode startup permitted

定义:

A1:电网电压或频率越限
A2:电网无压 / 失网
A3:频率变化率超过阈值
A4:跳闸动作已确认完成
A5:跳闸事件已同步到 EMS
A6:允许启动离网模式

11.2 反逆流条件 R 组

R1 Reverse power detected at POI
R2 PV/BESS output power = 0
R3 EMS enabled "Zero Export" strategy

定义:

R1:POI 处检测到逆功率
R2:PV/BESS 输出功率归零
R3:EMS 已启用零反送策略

11.3 重并网联锁条件 C 组

推荐统一使用 7 项条件,兼容已检索文档中的 C1-C7 体系。

C1 Grid stable >= 60s
C2 Power flow is inflow or zero export
C3 PV/BESS is stopped or in standby
C4 EMS authorized breaker close
C5 Phase/frequency sync complete
C6 Breaker is confirmed open
C7 User permission valid

定义:

C1:电网电压/频率/相位稳定持续至少 60 秒
C2:POI 功率方向为流入或零反送
C3:BESS/PV 已停止或待机
C4:EMS 已授权合闸
C5:相位/频率同步完成
C6:断路器当前确认处于分位
C7:当前用户具备合闸权限

12. 状态判定逻辑

12.1 Grid Abnormal 判定

Grid_Abnormal = A1 OR A2 OR A3

12.2 Trip 完成判定

Trip_Completed = Trip_Command_Sent AND DI_52b_Breaker_Open = TRUE

若使用双反馈:

Trip_Completed = Trip_Command_Sent
                 AND DI_52b_Breaker_Open = TRUE
                 AND DI_52a_Breaker_Closed = FALSE

12.3 Island Permit 判定

Island_Permit = BESS_GridForming_Ready
                AND SOC >= Island_Min_SOC
                AND PCS_No_Fault
                AND Load_Transfer_Condition_OK
                AND Breaker_Open_Confirmed

如项目早期未做负载分区,可保留 Load_Transfer_Condition_OK = Configurable

12.4 Reverse Power 判定

Reverse_Power = POI_Active_Power < ReversePowerThreshold

建议阈值参数化:

ReversePowerThreshold = -X kW

12.5 Zero Export 满足判定

Zero_Export_Satisfied = abs(POI_Active_Power) <= ZeroExportTolerance

12.6 Sync Complete 判定

Sync_Complete =
    abs(Grid_Frequency - Microgrid_Frequency) <= Sync_Freq_Delta_Max
AND abs(Grid_Voltage - Microgrid_Voltage) <= Sync_Volt_Delta_Max
AND abs(Grid_Phase_Angle - Microgrid_Phase_Angle) <= Sync_Phase_Delta_Max
AND Sync_Stable_Timer >= Sync_Stable_Time

13. 动作逻辑

13.1 Open Breaker 动作逻辑

来源可能有三类:

来源1:继电器自动 Trip
来源2:EMS 冗余 Trip
来源3:用户手动 Open Breaker

统一结果要求:

执行 Open Breaker
    ↓
等待 52b = TRUE
    ↓
确认 52a = FALSE
    ↓
记录 Trip 完成
    ↓
进入解列后状态

13.2 Start BESS Island 动作逻辑

前提:
A6 = TRUE
Breaker_Open_Confirmed = TRUE
PCS/BESS 无故障
SOC 满足条件

动作:
发送 CMD_Start_BESS_Island
等待 PCS 反馈 Island Running
记录结果

13.3 Close Breaker 动作逻辑

前提:
C1 AND C2 AND C3 AND C4 AND C5 AND C6 AND C7 = TRUE

动作:
发送 DO_Close_Breaker
等待 52a = TRUE
确认 52b = FALSE
记录 Close 成功
切换系统状态为 Grid-Tied

13.4 Close 失败逻辑

若 Close_Command_Sent 后超时未收到 52a=TRUE
    → Close Failed
    → 记录错误
    → UI 红色告警
    → 进入 FAULT_LOCKED

14. 完整联锁逻辑

14.1 Close 总联锁表达式

Close_Permit = C1 AND C2 AND C3 AND C4 AND C5 AND C6 AND C7

14.2 Close 按钮使能逻辑

UI_Close_Button_Enabled = Close_Permit
                          AND System_Not_Fault_Locked
                          AND Comm_Healthy
                          AND UPS_Healthy

14.3 Start Island 按钮使能逻辑

UI_Start_BESS_Island_Enabled = A6
                               AND Breaker_Open_Confirmed
                               AND BESS_Not_Running_Island
                               AND PCS_Healthy

14.4 Open Breaker 按钮使能逻辑

UI_Open_Breaker_Enabled = Breaker_Not_Open
                          AND User_Has_Open_Permission

15. UI 开发规范

15.1 页面目标

UI 必须做到:

15.2 页面结构

Grid-Tie / Island Transition 页面
├─ 顶部系统状态栏
│  ├─ Breaker 状态
│  ├─ Grid Voltage
│  ├─ Grid Frequency
│  └─ 当前控制模式
├─ Anti-Islanding 区块
│  ├─ A1-A6 条件显示
│  └─ Open / Start Island 按钮
├─ Anti-Reverse Power 区块
│  ├─ R1-R3 条件显示
│  └─ 动作建议
├─ Grid Reconnection 区块
│  ├─ C1-C7 条件显示
│  └─ Close / Stop / Start GridTie 按钮
├─ Primary Blocking Condition 区块
├─ Action Suggestion 区块
└─ Event / Operation Log 区块

15.3 状态颜色规范

绿色:Satisfied / Enabled / Healthy / Completed
橙色:Not Triggered / Waiting / Pending / Warning
红色:Not Allowed / Not Satisfied / Fault / Blocked
灰色:Unknown / Disabled / No Data / Inactive

15.4 UI 显示要求

每个条件必须显示:

代码 + 描述 + 当前状态 + 可选的说明文字

示例:

C3  PV/BESS is stopped or in standby
Status: Not Satisfied
Description: BESS is still running

15.5 主阻塞条件显示要求

必须显式提供一个“主阻塞条件”区域,选择最关键的当前阻塞项。

示例:

PRIMARY BLOCKING CONDITION
C3 - BESS still running

15.6 动作建议显示要求

必须基于当前闭锁生成顺序化建议。

示例:

Action Suggestion
1. Force Stop BESS
2. Confirm PV output = 0
3. Wait for phase/frequency sync
4. Request EMS breaker close authorization

15.7 权限要求

一般用户
├─ 查看状态
├─ 查看日志
└─ 可执行 Open(按策略决定)

管理员
├─ 拥有一般用户全部权限
├─ 可执行 Close 授权
├─ 可执行强制停机
└─ 可执行模式切换

Close 至少需要:

C7 = TRUE

16. 事件与日志设计

16.1 日志分类

系统日志
动作日志
联锁日志
故障日志
权限日志
通信日志

16.2 必须记录的事件

Grid abnormal detected
Trip command issued
Trip action completed
Trip failed
Island permit granted
Island start command issued
Island running confirmed
Grid stable timer started
Grid stable timer completed
Close blocked
Close authorized
Close command issued
Close completed
Close failed
Relay comm lost
Meter comm lost
Breaker feedback mismatch
UPS low / UPS lost
User login / user authorization / user action

16.3 日志字段标准

{
  "timestamp": "2026-04-07T18:00:00Z",
  "event": "Close_Blocked",
  "severity": "Warning",
  "state": "RECLOSE_BLOCKED",
  "blocking_code": "C3",
  "message": "BESS is still running",
  "user": "admin",
  "breaker_52a": false,
  "breaker_52b": true,
  "grid_voltage": 479.2,
  "grid_frequency": 59.98,
  "poi_power_kw": -2.1
}

16.4 联锁失败记录要求

任何一个 C 条件不满足时,必须记录:

17. 告警与故障策略

17.1 故障分类

F01 EMS controller offline
F02 Relay failure
F03 Meter offline
F04 DO output failure
F05 UPS lost
F06 52a/52b inconsistent
F07 Trip failed
F08 Close criteria not met
F09 Sync data invalid
F10 PCS/BESS status unavailable

17.2 故障响应原则

影响 Trip 的故障:优先由继电器本地保护兜底
影响 Close 的故障:一律禁止 Close
影响反馈的故障:禁止盲操作
影响同步的故障:禁止 Close
影响权限的故障:禁止 Close

17.3 Fail-Safe 规则

任一关键输入缺失
任一关键通信中断
任一关键反馈冲突
任一关键 UPS 失效
任一关键执行输出失败

→ 默认 Close_Permit = FALSE

17.4 反馈冲突规则

若 52a = TRUE 且 52b = TRUE
    → Feedback Error
    → Close 禁止
    → Open 状态未知
    → 记录故障

若 52a = FALSE 且 52b = FALSE 且超时
    → Breaker Position Unknown
    → Close 禁止

17.5 感知冲突规则

继电器判定 Grid Healthy
但电表判定 Reverse Power 或电网异常
    → 标记 Data Conflict
    → Close 禁止
    → 记录冲突

18. 参数体系

18.1 必须参数化的阈值

Grid_OverVoltage_Limit
Grid_UnderVoltage_Limit
Grid_OverFrequency_Limit
Grid_UnderFrequency_Limit
ROCOF_Threshold
Grid_Stable_Time
ZeroExportTolerance
ReversePowerThreshold
Island_Min_SOC
Sync_Freq_Delta_Max
Sync_Volt_Delta_Max
Sync_Phase_Delta_Max
Sync_Stable_Time
Trip_Timeout
Close_Timeout
Comm_Timeout

18.2 推荐默认参数占位

Grid_Stable_Time = 60s
ZeroExportTolerance = ±50W 或按站点参数
Island_Min_SOC = 30%
Sync_Phase_Delta_Max = 5°

说明:

19. I/O 建议映射

19.1 DI 映射建议

DI1  Breaker_52a_Closed
DI2  Breaker_52b_Open
DI3  Breaker_Spring_Charged
DI4  Relay_Healthy
DI5  UPS_Healthy
DI6  PCS_Ready
DI7  PCS_Standby
DI8  PCS_Island_Running
DI9  PCS_GridTie_Running
DI10 Emergency_Stop_Active

19.2 DO 映射建议

DO1  Open_Breaker_Command
DO2  Close_Breaker_Command
DO3  Stop_BESS_Command
DO4  Start_BESS_Island_Command
DO5  Start_BESS_GridTie_Command
DO6  Stop_PV_Command
DO7  Start_PV_Island_Command
DO8  Start_PV_GridTie_Command

20. 通信点位建议

Modbus / TCP 点位
├─ Relay.GridVoltage
├─ Relay.GridFrequency
├─ Relay.ROCOF
├─ Relay.GridHealthy
├─ Relay.TripEventCode
├─ Relay.CommHealthy
├─ Meter.POI_ActivePower
├─ Meter.GridVoltage
├─ Meter.GridFrequency
├─ Meter.ReversePowerFlag
├─ Meter.CommHealthy
├─ PCS.Status
├─ PCS.Mode
├─ PCS.OutputPower
├─ PCS.SOC
├─ PCS.Fault
├─ PCS.SyncReady
└─ PCS.GridFormingReady

21. 推荐数据模型

21.1 并离网功能状态对象

{
  "breaker": {
    "opened": true,
    "closed": false,
    "position_known": true
  },
  "grid": {
    "voltage": 480.1,
    "frequency": 60.00,
    "healthy": true,
    "stable_seconds": 61
  },
  "anti_islanding": {
    "A1": false,
    "A2": false,
    "A3": false,
    "A4": true,
    "A5": true,
    "A6": false
  },
  "reverse_power": {
    "R1": false,
    "R2": false,
    "R3": true
  },
  "reclose": {
    "C1": true,
    "C2": true,
    "C3": false,
    "C4": false,
    "C5": false,
    "C6": true,
    "C7": true
  },
  "blocking": {
    "primary_code": "C3",
    "message": "BESS is still running"
  }
}

22. 伪代码设计

22.1 主循环

def evaluate_grid_tie_island_transition(ctx):
    refresh_inputs(ctx)
    evaluate_A_group(ctx)
    evaluate_R_group(ctx)
    evaluate_C_group(ctx)
    evaluate_state_machine(ctx)
    evaluate_button_enablement(ctx)
    update_ui_model(ctx)
    write_event_logs_if_needed(ctx)

22.2 A 组判定

def evaluate_A_group(ctx):
    ctx.A1 = voltage_or_frequency_exceeds_limit(ctx)
    ctx.A2 = grid_power_outage(ctx)
    ctx.A3 = rocof_exceeds_threshold(ctx)
    ctx.A4 = trip_action_completed(ctx)
    ctx.A5 = trip_reported_to_ems(ctx)
    ctx.A6 = island_mode_startup_permitted(ctx)

22.3 R 组判定

def evaluate_R_group(ctx):
    ctx.R1 = reverse_power_detected(ctx)
    ctx.R2 = pv_bess_output_zero(ctx)
    ctx.R3 = zero_export_strategy_enabled(ctx)

22.4 C 组判定

def evaluate_C_group(ctx):
    ctx.C1 = grid_stable_for_required_time(ctx)
    ctx.C2 = power_flow_inflow_or_zero_export(ctx)
    ctx.C3 = pv_bess_stopped_or_standby(ctx)
    ctx.C4 = ems_authorized_breaker_close(ctx)
    ctx.C5 = phase_frequency_sync_complete(ctx)
    ctx.C6 = breaker_open_confirmed(ctx)
    ctx.C7 = user_permission_valid(ctx)
    ctx.close_permit = all([ctx.C1, ctx.C2, ctx.C3, ctx.C4, ctx.C5, ctx.C6, ctx.C7])

22.5 主阻塞条件选择

def pick_primary_blocking_condition(ctx):
    order = ["C3", "C5", "C4", "C2", "C1", "C6", "C7"]
    for code in order:
        if getattr(ctx, code) is False:
            return code, blocking_message_for(code, ctx)
    return None, None

22.6 Close 执行

def execute_close_breaker(ctx):
    if not ctx.close_permit:
        raise BlockedError("Close permit not satisfied")

    send_do_close_breaker()
    start_timer("close_timeout")

    while not timer_expired("close_timeout"):
        refresh_breaker_feedback(ctx)
        if ctx.breaker_52a and not ctx.breaker_52b:
            log_event("Close_Completed")
            return True

    log_event("Close_Failed")
    lock_fault_state(ctx)
    return False

23. 页面按钮行为规范

23.1 Open Breaker

点击后:
1. 校验权限
2. 发送 Open 命令或记录用户请求
3. 等待反馈
4. 更新 UI
5. 记录日志

23.2 Start BESS Island

点击后:
1. 校验 A6
2. 校验 Breaker 已打开
3. 校验 BESS 可离网
4. 发送启动命令
5. 等待运行反馈
6. 记录日志

23.3 Close Breaker

点击后:
1. 校验 C1-C7
2. 二次确认
3. 发送 Close 命令
4. 等待 52a / 52b 反馈
5. 成功则切换状态
6. 失败则闭锁并告警

23.4 Force Stop BESS / PV

必须满足:

管理员权限
设备在线
当前无硬件联锁禁止

若无权限或站点配置禁用,按钮应灰显并显示原因。

24. 页面显示文案建议

24.1 顶部状态栏

Breaker: Opened / Closed / Unknown
Grid Voltage: 实时值或 -
Grid Frequency: 实时值或 -
Set mode: Relay Control / EMS Control

24.2 条件显示模板

Code
Description
Status
Optional detail message

24.3 阻塞提示模板

PRIMARY BLOCKING CONDITION
{ConditionCode} - {Message}

24.4 动作建议模板

ACTION SUGGESTION
1. {建议1}
2. {建议2}
3. {建议3}

25. 安全约束

25.1 禁止事项

禁止继电器自主 Close
禁止定时器盲重合闸
禁止在 52a/52b 未确认下盲合
禁止在 Sync 未完成下合闸
禁止在 BESS/PV 未停稳下合闸
禁止在 Reverse Power 未消除下合闸
禁止在用户权限不满足下合闸
禁止在关键通信故障下合闸

25.2 强制闭锁场景

继电器离线
电表离线且站点要求双路径
52a/52b 冲突
UPS 故障
DO 模块故障
Close 线圈故障
Sync 数据无效
PCS 状态未知
BESS 故障

26. 测试要求

26.1 FAT 测试范围

T1 正常并网状态显示
T2 电压越限触发 Trip
T3 无压触发 Trip
T4 ROCOF 触发 Trip
T5 Trip 动作反馈闭环
T6 Trip 事件同步 EMS
T7 Island Permit 正常判定
T8 Island Permit 拒绝判定
T9 Reverse Power 检测
T10 Zero Export 策略使能显示
T11 Grid Stable 60s 计时
T12 C1-C7 全部满足后允许 Close
T13 任一 C 条件不满足时禁止 Close
T14 主阻塞条件正确显示
T15 Action Suggestion 正确生成
T16 52a/52b 冲突时禁止 Close
T17 Meter 离线闭锁
T18 Relay 离线闭锁
T19 UPS 故障闭锁
T20 Close 成功闭环
T21 Close 失败告警
T22 用户权限校验
T23 日志完整性
T24 UI 与物理状态一致性

26.2 SAT 测试重点

现场通信稳定性
真实断路器执行时间
真实 52a/52b 反馈有效性
PCS/BESS 模式切换反馈有效性
零反送阈值适配
同步条件适配
异常断电后 Fail-Safe 行为

27. 配置项建议

27.1 站点级配置

{
  "grid_stable_time_sec": 60,
  "zero_export_tolerance_kw": 0.05,
  "reverse_power_threshold_kw": -0.05,
  "island_min_soc_percent": 30,
  "sync_phase_delta_deg_max": 5,
  "sync_freq_delta_hz_max": 0.1,
  "sync_voltage_delta_percent_max": 5,
  "close_timeout_sec": 10,
  "trip_timeout_sec": 5,
  "require_dual_sensing_for_close": true,
  "require_admin_for_close": true
}

27.2 功能开关建议

feature.dual_sensing_required
feature.allow_manual_open
feature.allow_force_stop_bess
feature.allow_force_stop_pv
feature.require_sync_check
feature.require_zero_export
feature.require_user_permission_for_close
feature.enable_primary_blocking_condition
feature.enable_action_suggestion

28. 推荐开发目录结构

grid_tie_island_transition/
├─ domain/
│  ├─ models.py
│  ├─ enums.py
│  ├─ conditions.py
│  └─ state_machine.py
├─ services/
│  ├─ relay_service.py
│  ├─ meter_service.py
│  ├─ breaker_service.py
│  ├─ pcs_service.py
│  └─ permission_service.py
├─ logic/
│  ├─ anti_islanding.py
│  ├─ reverse_power.py
│  ├─ reclose_interlock.py
│  ├─ sync_check.py
│  └─ action_suggestion.py
├─ ui/
│  ├─ view_model.py
│  ├─ button_rules.py
│  └─ blocking_display.py
├─ logs/
│  ├─ event_logger.py
│  └─ audit_logger.py
├─ config/
│  └─ site_params.json
└─ tests/
   ├─ test_A_group.py
   ├─ test_R_group.py
   ├─ test_C_group.py
   ├─ test_state_machine.py
   ├─ test_ui_rules.py
   └─ test_fail_safe.py

29. 开发完成判定标准

满足以下条件,方可认为“并离网切换单一功能开发完成”:

1. A/R/C 条件判定全部实现
2. 状态机实现并通过测试
3. UI 页面实现完成
4. 主阻塞条件实现完成
5. Action Suggestion 实现完成
6. Open / Close / Start Island / Start GridTie 动作链实现
7. 断路器反馈闭环实现
8. 日志与审计实现
9. 权限控制实现
10. Fail-Safe 闭锁实现
11. 参数化配置实现
12. 单元测试与联调测试通过

30. 最终开发基线总结

本功能的本质不是“做一个并离网页面”,
而是“做一套以 Trip 快速解列、以 Island 准入判断、以 Reverse Power 约束、
以 Reclose 多条件联锁、以 EMS 独占 Close 权限、以日志追溯和 Fail-Safe 为底座的完整闭环控制能力”。

该能力的最低开发基线必须包括:

感知层
决策层
联锁层
执行层
反馈层
UI 层
日志层
故障闭锁层
权限层
参数层
测试层

31. 建议直接固化的核心逻辑

Trip = Relay First
Close = EMS Only
No Auto Reclose
No Blind Close
No Close When Data Missing
No Close When Feedback Conflicts
No Close When BESS/PV Still Running
No Close Without Sync
No Close Without Authorization

32. 后续可扩展项

Phase 2 可扩展功能
├─ 关键负载切换
├─ 多断路器拓扑
├─ 多微网母线
├─ 柴油机并联系统
├─ 黑启动流程
├─ SCADA 上位写入
├─ 云端审计追溯
├─ 策略版本控制
└─ 站点级条件模板库