储能系统功率计算与保护机制详解

储能系统功率计算与保护机制详解

一、核心函数 Calc_AllMeterPower 概述

Calc_AllMeterPower 是储能系统功率管理的核心函数,它按顺序调用四个关键子函数:

c 复制代码
  static void Calc_AllMeterPower(ROUGH_CCU_DATA* pCCU)
  {
      Calc_ACLoadPwrByDiffMeterPosition(pCCU);  // 1. 计算负载功率
      Calc_ESS_ChgLmtPower(pCCU);               // 2. 计算充电限制
      Calc_ESS_DischgLmtPower(pCCU);            // 3. 计算放电限制
      Calc_ESS_Q_OutputLmt(pCCU);               // 4. 计算无功功率
  }

二、函数调用关系图

复制代码
  Calc_AllMeterPower
      │
      ├─→ Calc_ACLoadPwrByDiffMeterPosition
      │       ├─→ calcOverLoadAndReflux_By_Grid2CabMeter (拓扑#1)
      │       ├─→ calcOverLoadAndReflux_By_Grid2Cab_BranchMeter (拓扑#2)
      │       ├─→ calcOverLoadAndReflux_By_Grid2Cab_CivilMeter (拓扑#3)
      │       ├─→ calcOverLoadAndReflux_By_Grid2Cab_ACLoadMeter (拓扑#4)
      │       └─→ calcOverLoadAndReflux_By_MultiBranch_ACLoadMeter (拓扑#5)
      │               │
      │               └─→ Refresh_RealTime_MeterValue_Phase (单相电表读取)
      │                       │
      │                       └─→ JudgeIfEnterAnti_RefluxOrOverload (保护判断)
      │
      ├─→ Calc_ESS_ChgLmtPower (使用保护标志位)
      │
      ├─→ Calc_ESS_DischgLmtPower (使用保护标志位)
      │
      └─→ Calc_ESS_Q_OutputLmt

三、关键函数详解

3.1 Calc_ACLoadPwrByDiffMeterPosition

功能:根据不同的电表拓扑结构计算负载功率

c 复制代码
  核心逻辑:
  switch (pCCU->emAuxMeterPos)
  {
      case AUXMETER_NOT_INSTALLED:           // 拓扑#1: 未安装辅助表
      case MULTI_BANCH_ESS_WITH_HVMETER:     // 拓扑#6: 多支路+高压表
          calcOverLoadAndReflux_By_Grid2CabMeter(pCCU);
          break;

      case AUXMETER_POS_BRANCH_TRANSFER:     // 拓扑#2: 支路变压器
          calcOverLoadAndReflux_By_Grid2Cab_BranchMeter(pCCU);
          break;

      // ... 其他拓扑
  }

计算的关键参数:

  • fPacload4Chg:用于充电时的负载功率(防过载)

  • fPacload4Dischg:用于放电时的负载功率(防逆流)

  • fQacload4Org:无功功率需求

    复制代码
    拓扑示例(拓扑#1):
          |Grid  电网侧关口表 (防逆流+防过载)
           |
    ------------------------------------------------------------------------------
        |            | | 储能系统关口表 Cab AC Meter
        |             |
        AC Load      ESS

计算公式:
fPacload4Dischg = f_PgridMeter - f_PcabMeter // 放电时的负载
fPacload4Chg = f_PgridMeter - f_PcabMeter // 充电时的负载

复制代码
  拓扑示例(拓扑#2):
        |Grid  高压表 (防逆流+防超需量)
         |
  ------------------------------------------------------------------------------------------------
                    | | 辅助表 (防过载)
     ________________|____________
         |             |
         |            | | 储能系统关口表
         |             |
     AC Load         ESS

计算公式:
fPacload4Dischg = f_PgridMeter - f_PcabMeter // 用于防逆流
fPacload4Chg = f_PauxMeter - f_PcabMeter // 用于防过载

3.2 Refresh_RealTime_MeterValue_Phase

功能:读取单相电表的实时值(功率或电压电流)

支持两种类型:

  1. PHASE_TYPE_POWER:读取三相功率,用于单相防逆流
  2. PHASE_TYPE_VA:读取三相电压电流,用于单相防过载
c 复制代码
  关键代码:
  switch (type)
  {
  case PHASE_TYPE_POWER:  // 单相防逆流
      for (n=0; n<MAX_PHASE_NUM; n++)
      {
          pEMS->fAtRflxMtr_kWPhs[n] = 读取第n相功率;
          pEMS->fAtRflxMtr_kWPhMin = MIN(三相功率);  // 取最小值
      }
      break;

  case PHASE_TYPE_VA:     // 单相防过载
      for (n=0; n<MAX_PHASE_NUM; n++)
      {
          pEMS->fAtOvlMtr_VPhs[n] = 读取第n相电压;
          pEMS->fAtOvlMtr_APhs[n] = 读取第n相电流;
          pEMS->fAtOvlMtr_APhMax = MAX(三相电流);  // 取最大值
      }
      break;
  }

3.3 JudgeIfEnterAnti_RefluxOrOverload

功能:判断是否进入各种保护模式,设置保护标志位

核心标志位:

  1. bEnterAnti_Reflux:防逆流标志
  2. bEnter_OverLoad:防过载标志
  3. bEnter_OverLoad_Phase:单相防过载标志
  4. bEnterAnti_Reflux_Phase:单相防逆流标志
  5. bEnter_OverLoadHV:高压表防超需量标志

判断逻辑(以防逆流为例):

c 复制代码
// 计算是否需要防逆流
bAntiReflux = (fAnti_RefluxMeter - fPreProt4RefluxAndOverLoad <
               (fAllowedReverseValue * -1.0f));

// 状态机逻辑
if (bEnterAnti_Reflux == TRUE)
{
    // 已经在防逆流状态
    if ((超过退出延时 && !bAntiReflux) || bAntiOverLoad)
    {
        bEnterAnti_Reflux = FALSE;  // 退出防逆流
    }
}
else
{
    // 未在防逆流状态
    if (bAntiReflux)
    {
        bEnterAnti_Reflux = TRUE;   // 进入防逆流
        tm_LastEnterReflux = 当前时间;
    }
}

关键参数说明:

  • fPreProt4RefluxAndOverLoad:保护提前量(如100kW)
  • fAllowedReverseValue:允许的逆流值(奥地利认证需求)
  • MAX_RETDIFF_PERIOD:退出延时时间(防抖动)

单相防逆流判断:

c 复制代码
if (fAtRflxMtr_kWPhMin < fPreProt4Reflux_Phase)
{
    bEnterAnti_Reflux_Phase = TRUE;  // 某一相功率过低,进入单相防逆流
}

单相防过载判断:

c 复制代码
if (fAtOvlMtr_APhMax >= fMaxChrgCurLmt_Phase)
{
    bEnter_OverLoad_Phase = TRUE;  // 某一相电流过大,进入单相防过载
}

3.4 Calc_ESS_ChgLmtPower

功能:计算储能系统的充电功率限制值

计算流程:

  1. 确定电网输入限制
    fGridACInputPwr_Lmt = MIN(fEnter_UrgetDischrgPwr, fSysACInput_PwrLmt)

  2. 考虑最大需量管理
    if (emPmaxDemandMode == 1) fGridACInputPwr_Lmt = MIN(fGridACInputPwr_Lmt, fPdemand)

  3. 考虑单相防过载
    if (needAntiOverLoad_Phase) fMaxPwr4Chrg_SumPhs = V * I * pf * 3 / 1000 fGridACInputPwr_Lmt = MIN(fGridACInputPwr_Lmt, fMaxPwr4Chrg_SumPhs)

  4. 计算剩余充电功率

    `fRemainPwr4Chrg = fGridACInputPwr_Lmt - fPacload4Chg

  5. 考虑高压表防超需量

    if (Need_AntiOverloadHV())

    fRemainDemand4Chrg = fPdemandHV - f_PgridMeter + f_PcabMeter

    fGridRemainACPwr2Chrg = MIN(fRemainDemand4Chrg, fRemainPwr4Chrg)`

  6. 应用保护系数和限制
    fGridRemainACPwr2Chrg = (fRemainPwr4Chrg - fProt) * PowerRate_Chrg

  7. 与管理计划比较
    fTotal_PessChgAvaliable = MIN(nActvPwrLmt, fGridRemainACPwr2Chrg)

  8. 应用保护降额
    if (bEnter_OverLoad && bPreAntiOvldBack)

    根据剩余功率分级降额:

    • fRemain <= 0: *= 0.8

    • fRemain < fProt/2: -= fProt

    • 其他: -= (fProt - fRemain)

    if (bEnter_OverLoadHV || bEnter_OverLoad_Phase) *= 0.8

关键标志位的作用:

复制代码
  ┌───────────────────────┬────────────────┬─────────────────────────────┐
  │        标志位         │      作用      │          降额策略           │
  ├───────────────────────┼────────────────┼─────────────────────────────┤
  │ bEnter_OverLoad       │ 防过载         │ 分级降额(0.8倍或减保护值) │
  ├───────────────────────┼────────────────┼─────────────────────────────┤
  │ bEnter_OverLoadHV     │ 高压表防超需量 │ 0.8倍降额                   │
  ├───────────────────────┼────────────────┼─────────────────────────────┤
  │ bEnter_OverLoad_Phase │ 单相防过载     │ 0.8倍降额                   │
  └───────────────────────┴────────────────┴─────────────────────────────┘

复杂判断示例:

// 分级处理防过载
float fRemain = fSysACInput_PwrLmt - fAtOvl_kW;
float fHalfProt = fProt / 2.0f;

c 复制代码
  if (fRemain <= 0)
      fTotal_PessChgAvaliable *= 0.8f;      // 严重过载,大幅降额
  else if (fRemain < fHalfProt)
      fTotal_PessChgAvaliable -= fProt;     // 中度过载,减保护值
  else
      fTotal_PessChgAvaliable -= (fProt-fRemain);  // 轻度过载,微调

3.5 Calc_ESS_DischgLmtPower

功能:计算储能系统的放电功率限制值

计算流程:

  1. 滤波负载功率
    fAvg_Pacload4Dischg = fPacload4Dischg

  2. 计算基础放电功率
    fTotal_PessDischgLmt = (fPacload4Dischg - fProt) * fOutput2AC_PwrRate

  3. 考虑动态网侧输入限制
    if (emDynamicGridInputLimit_Mode != MODE_DISABLE) if (fAvg_Pacload4Dischg < fGridInputLimit) fTotal_PessDischgLmt = 0 else fTotal_PessDischgLmt = (fTotal_PessDischgLmt - fGridInputLimit) * 1.02

  4. 添加允许逆流值
    fTotal_PessDischgLmt += fAllowedReverseValue

  5. 与管理计划比较
    fTotal_PessDischgLmt = MIN(nActvPwrLmt, fTotal_PessDischgLmt)

  6. 考虑紧急放电模式
    if (bEnterUrgetDischrgMode) fTotal_PessDischgLmt *= fUrgetModeRate // 0.2或0.5

  7. 考虑单相防逆流
    if (needAntiReflux_Phase) fDiffPwr4Dischrg_SumPhs = (fPreProt4Reflux_Phase - fAtRflxMtr_kWPhMin) * 3 / Factor fTotal_PessDischgLmt -= fDiffPwr4Dischrg_SumPhs

  8. 应用保护降额
    if ((bEnterAnti_Reflux || bEnterAnti_Reflux_Phase) && bPreAntiOvldBack)

    根据剩余功率分级降额(同充电逻辑)

关键标志位的作用:

复制代码
  ┌─────────────────────────┬────────────┬────────────┐
  │         标志位          │    作用    │  降额策略  │
  ├─────────────────────────┼────────────┼────────────┤
  │ bEnterAnti_Reflux       │ 防逆流     │ 分级降额   │
  ├─────────────────────────┼────────────┼────────────┤
  │ bEnterAnti_Reflux_Phase │ 单相防逆流 │ 分级降额   │
  ├─────────────────────────┼────────────┼────────────┤
  │ bEnterUrgetDischrgMode  │ 紧急放电   │ 0.2或0.5倍 │
  └─────────────────────────┴────────────┴────────────┘

单相防逆流计算:

c 复制代码
// 计算三相功率差值
fDiffPwr4Dischrg_SumPhs =
    ((fPreProt4Reflux_Phase - fAtRflxMtr_kWPhMin) * 相数) / 功率因数;

// 从放电功率中减去
fTotal_PessDischgLmt -= fDiffPwr4Dischrg_SumPhs;

四、标志位状态机总结

4.1 防逆流状态机

复制代码
  状态:未防逆流 (bEnterAnti_Reflux = FALSE)
      ↓ 条件:fAnti_RefluxMeter < (fAllowedReverseValue * -1.0f) - fProt
  进入防逆流 (bEnterAnti_Reflux = TRUE)
      ↓ 条件:超时 && fAnti_RefluxMeter正常 || 进入防过载
  退出防逆流 (bEnterAnti_Reflux = FALSE)

4.2 防过载状态机

复制代码
  状态:未防过载 (bEnter_OverLoad = FALSE)
      ↓ 条件:(fSysACInput_PwrLmt - fAnti_OverLoadMeter) < fPreProt_Chrg
  进入防过载 (bEnter_OverLoad = TRUE)
      ↓ 条件:超时 && 负载正常 || 进入防逆流
  退出防过载 (bEnter_OverLoad = FALSE)

4.3 标志位互斥关系

c 复制代码
  // 防逆流和防过载互斥
  if (bAntiReflux && bAntiOverLoad)
  {
      // 优先防过载(充电)
      bEnterAnti_Reflux = FALSE;
  }

  if (bAntiOverLoad && bAntiReflux)
  {
      // 优先防逆流(放电)
      bEnter_OverLoad = FALSE;
  }

五、参数关系图

复制代码
  输入参数:
  ├─ 电表值
  │  ├─ f_PgridMeter    (电网侧功率)
  │  ├─ f_PcabMeter     (储能侧功率)
  │  ├─ f_PauxMeter     (辅助表功率)
  │  └─ f_PmaxGridDemand (最大需量)
  │
  ├─ 配置参数
  │  ├─ fSysACInput_PwrLmt (系统输入限制)
  │  ├─ fPreProt_Chrg (充电保护提前量)
  │  ├─ fPreProt4RefluxAndOverLoad (防逆流/过载保护提前量)
  │  ├─ PowerRate_Chrg (充电跟随比)
  │  └─ fOutput2AC_PwrRate (放电跟随比)
  │
  └─ 状态标志
     ├─ bEnterAnti_Reflux (防逆流)
     ├─ bEnter_OverLoad (防过载)
     ├─ bEnter_OverLoad_Phase (单相防过载)
     ├─ bEnterAnti_Reflux_Phase (单相防逆流)
     └─ bEnter_OverLoadHV (高压表防超需量)

  中间计算:
  ├─ fPacload4Chg (充电时负载功率)
  ├─ fPacload4Dischg (放电时负载功率)
  ├─ fRemainPwr4Chrg (剩余充电功率)
  └─ fGridRemainACPwr2Chrg (电网剩余可充电功率)

  输出结果:
  ├─ fTotal_PessChgAvaliable (可用充电功率)
  └─ fTotal_PessDischgLmt (可用放电功率)

六、典型应用场景

场景1:光伏逆流自动充电

  1. 光伏发电 > 负载,产生逆流
  2. f_PgridMeter < 0 (负值表示逆流)
  3. JudgeIfEnterAnti_RefluxOrOverload 检测到逆流
  4. bEnterAnti_Reflux = TRUE
  5. Calc_ESS_ChgLmtPower 计算充电功率
  6. 系统启动充电,消纳多余光伏

场景2:负载过大自动放电

  1. 负载突增,超过电网输入限制
  2. fAnti_OverLoadMeter > fSysACInput_PwrLmt - fPreProt_Chrg
  3. JudgeIfEnterAnti_RefluxOrOverload 检测到过载
  4. bEnter_OverLoad = TRUE
  5. Calc_ESS_DischgLmtPower 计算放电功率
  6. 系统启动放电,削峰填谷

场景3:单相不平衡保护

  1. A相电流过大:fAtOvlMtr_APhs[0] = 50A
  2. B相电流正常:fAtOvlMtr_APhs[1] = 30A
  3. C相电流正常:fAtOvlMtr_APhs[2] = 32A
  4. fAtOvlMtr_APhMax = 50A >= fMaxChrgCurLmt_Phase (45A)
  5. bEnter_OverLoad_Phase = TRUE
  6. Calc_ESS_ChgLmtPower 降额充电功率 *= 0.8

七、关键技术要点

  1. 防抖动设计:所有保护状态都有 MAX_RETDIFF_PERIOD 延时,避免频繁切换
  2. 分级保护:根据偏离程度采用不同的降额策略(0.8倍、减保护值、微调)
  3. 互斥逻辑:防逆流和防过载互斥,优先处理更紧急的保护
  4. 多层限制:管理计划限制 → 电网限制 → 保护降额 → 最终输出
  5. 单相保护:支持三相不平衡场景的精细化控制

这套机制确保了储能系统在各种复杂工况下的安全稳定运行。

相关推荐
糖炒栗子03265 小时前
Windows 生成无密码 SSH 密钥 + Linux 配置公钥
ssh
S1998_1997111609•X10 小时前
iOS栈被恶意篡改变成开发者模式漏洞裸露内核系统核心功能栈被泄露于政府黑客集团泄漏安全系统置门的犯罪行为原理
数据库·网络协议·百度·ssh·开闭原则
S1998_1997111609•X1 天前
论next/js在打击省份及犯罪行为集团的系统分析[特殊字符]设计
网络·数据库·百度·ssh·开闭原则
DeepHacking1 天前
在电脑 B 上通过局域网 SSH 直接从电脑 A 拉取文件,用 rsync 断点续传
运维·ssh
羑悻的小杀马特2 天前
零成本搞定!异地访问 OpenClaw 最简方案:SSH 端口映射组网!
运维·服务器·人工智能·docker·自动化·ssh·openclaw
YaBingSec2 天前
玄机网络安全靶场:GeoServer XXE 任意文件读取(CVE-2025-58360)
java·运维·网络·安全·web安全·tomcat·ssh
W.W.H.3 天前
远程连接协议(SSH\Telnet\FTP\Serial等)
运维·arm开发·经验分享·ssh
humors2213 天前
SSH管理github代码
运维·ssh·github
代码缝合怪3 天前
解决新版 VSCode 无法 ssh 连接 WSL Ubuntu18.04的问题
ide·vscode·ssh·ubuntu18