储能系统功率计算与保护机制详解
一、核心函数 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
功能:读取单相电表的实时值(功率或电压电流)
支持两种类型:
PHASE_TYPE_POWER:读取三相功率,用于单相防逆流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
功能:判断是否进入各种保护模式,设置保护标志位
核心标志位:
bEnterAnti_Reflux:防逆流标志bEnter_OverLoad:防过载标志bEnter_OverLoad_Phase:单相防过载标志bEnterAnti_Reflux_Phase:单相防逆流标志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
功能:计算储能系统的充电功率限制值
计算流程:
-
确定电网输入限制
fGridACInputPwr_Lmt = MIN(fEnter_UrgetDischrgPwr, fSysACInput_PwrLmt) -
考虑最大需量管理
if (emPmaxDemandMode == 1) fGridACInputPwr_Lmt = MIN(fGridACInputPwr_Lmt, fPdemand) -
考虑单相防过载
if (needAntiOverLoad_Phase) fMaxPwr4Chrg_SumPhs = V * I * pf * 3 / 1000 fGridACInputPwr_Lmt = MIN(fGridACInputPwr_Lmt, fMaxPwr4Chrg_SumPhs) -
计算剩余充电功率
`fRemainPwr4Chrg = fGridACInputPwr_Lmt - fPacload4Chg
-
考虑高压表防超需量
if (Need_AntiOverloadHV())
fRemainDemand4Chrg = fPdemandHV - f_PgridMeter + f_PcabMeter
fGridRemainACPwr2Chrg = MIN(fRemainDemand4Chrg, fRemainPwr4Chrg)`
-
应用保护系数和限制
fGridRemainACPwr2Chrg = (fRemainPwr4Chrg - fProt) * PowerRate_Chrg -
与管理计划比较
fTotal_PessChgAvaliable = MIN(nActvPwrLmt, fGridRemainACPwr2Chrg) -
应用保护降额
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
功能:计算储能系统的放电功率限制值
计算流程:
-
滤波负载功率
fAvg_Pacload4Dischg = fPacload4Dischg -
计算基础放电功率
fTotal_PessDischgLmt = (fPacload4Dischg - fProt) * fOutput2AC_PwrRate -
考虑动态网侧输入限制
if (emDynamicGridInputLimit_Mode != MODE_DISABLE) if (fAvg_Pacload4Dischg < fGridInputLimit) fTotal_PessDischgLmt = 0 else fTotal_PessDischgLmt = (fTotal_PessDischgLmt - fGridInputLimit) * 1.02 -
添加允许逆流值
fTotal_PessDischgLmt += fAllowedReverseValue -
与管理计划比较
fTotal_PessDischgLmt = MIN(nActvPwrLmt, fTotal_PessDischgLmt) -
考虑紧急放电模式
if (bEnterUrgetDischrgMode) fTotal_PessDischgLmt *= fUrgetModeRate // 0.2或0.5 -
考虑单相防逆流
if (needAntiReflux_Phase) fDiffPwr4Dischrg_SumPhs = (fPreProt4Reflux_Phase - fAtRflxMtr_kWPhMin) * 3 / Factor fTotal_PessDischgLmt -= fDiffPwr4Dischrg_SumPhs -
应用保护降额
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:光伏逆流自动充电
- 光伏发电 > 负载,产生逆流
f_PgridMeter < 0 (负值表示逆流)JudgeIfEnterAnti_RefluxOrOverload检测到逆流bEnterAnti_Reflux = TRUECalc_ESS_ChgLmtPower计算充电功率- 系统启动充电,消纳多余光伏
场景2:负载过大自动放电
- 负载突增,超过电网输入限制
fAnti_OverLoadMeter > fSysACInput_PwrLmt - fPreProt_ChrgJudgeIfEnterAnti_RefluxOrOverload检测到过载bEnter_OverLoad = TRUECalc_ESS_DischgLmtPower计算放电功率- 系统启动放电,削峰填谷
场景3:单相不平衡保护
- A相电流过大:
fAtOvlMtr_APhs[0] = 50A - B相电流正常:
fAtOvlMtr_APhs[1] = 30A - C相电流正常:
fAtOvlMtr_APhs[2] = 32A fAtOvlMtr_APhMax = 50A >= fMaxChrgCurLmt_Phase (45A)bEnter_OverLoad_Phase = TRUECalc_ESS_ChgLmtPower降额充电功率 *= 0.8
七、关键技术要点
- 防抖动设计:所有保护状态都有 MAX_RETDIFF_PERIOD 延时,避免频繁切换
- 分级保护:根据偏离程度采用不同的降额策略(0.8倍、减保护值、微调)
- 互斥逻辑:防逆流和防过载互斥,优先处理更紧急的保护
- 多层限制:管理计划限制 → 电网限制 → 保护降额 → 最终输出
- 单相保护:支持三相不平衡场景的精细化控制
这套机制确保了储能系统在各种复杂工况下的安全稳定运行。
