储能系统(EMS)核心架构解析:充放电控制、防逆流、防过载与 PID 调节
在现代储能电站与工商业储能系统中能量管理系统EMS扮演着大脑的角色负责在电池硬件、电网以及本地负载之间进行智能调度。本文将深入解析一个典型 EMS 工程项目的核心源代码逻辑重点探讨从底层 BMS 硬件限制采集到中层防逆流、防过载及 PID 功率平滑再到上层状态机驱动的完整业务链路。一、整体代码链路与核心思路整个充放电过程的核心思路可以用一条自底向上的数据流和控制流来概括硬件限制层CAN 协议解析通过协议如 Infy BMS、PL BMS 等读取底层电池的最大允许充放电电流fAllow_MaxChargeCurr以及禁止充放电标志位bIsBatt_ChargeForbidden/bIsBatt_DisChargeForbidden。EMS 能量管理层策略运算在ems_management.c中结合电网表和系统关口表的数据计算当前是否存在逆流和过载情况动态调整当前可用的总充电功率fTotal_PessChgAvaliable和放电限制功率fTotal_PessDischgLmt。PID 闭环调节层利用设定的 Kp、Ki 等参数消除目标功率与实际计量表功率的偏差输出最终平滑过的充放电目标值fTotal_PessChg_PidOut。状态机执行层State Machinest_batt_statemachine.c根据上述所有约束、策略及当前电芯状态驱动电池系统在 Idle、Charging、Discharging 等不同状态之间安全切换。二、底层硬件约束CAN 报文与 BMS 标志位EMS 的首要原则是绝对的安全硬件自身的保护优先级永远是最高的。在底层的 CAN 驱动代码如can_infy_batt.c、can_pl_batt.c中系统会实时解析 BMS 报文将其转化为通用结构体pSingleRunInfo-bIsBatt_ChargeForbidden s_pl_BattRunData[n].bIsBatt_ChargeForbidden; pSingleRunInfo-bIsBatt_DisChargeForbidden s_pl_BattRunData[n].bIsBatt_DisChargeForbidden;如果 BMS 上报了不允许充电例如电池充满、单体过压、温升过高或 BMS 触发保护bIsBatt_ChargeForbidden就会被置为TRUE。当该标志位为TRUE或允许充电电流fAllow_MaxChargeCurr 5.0A时EMS 系统无论处于何种计划中都会立刻下发停止指令GRP_ACDC_STOP。三、EMS 策略控制防逆流与防过载逻辑EMS 不仅要保护电池还要保护电网变压器。防逆流防止储能向电网倒送电和防过载防止市电输入超出变压器容量是ems_management.c中的核心模块。3.1 负荷功率计算通过函数calcOverLoadAndReflux_By_Grid2CabMeter系统读取电网关口表f_PgridMeter和储能机柜表f_PcabMeter来推导负载功耗pEMS-fPacload4Dischg pEMS-f_PgridMeter - pEMS-f_PcabMeter; // 用于放电防逆流 pEMS-fPacload4Chg pEMS-f_PgridMeter - pEMS-f_PcabMeter; // 用于充电防过载3.2 功率限幅推算计算出负载功率后系统结合保护阈值fPreProt_Chrg和fPreProt4RefluxAndOverLoad限制最终充放电功率防过载限制充电若判定即将触发过载在Calc_ESS_ChgLmtPower中会限制pEMS-fTotal_PessChgAvaliable。当进入防过载状态时可用充电功率甚至会被乘以0.8 系数强制降载。防逆流限制放电在Calc_ESS_DischgLmtPower中放电限制值被设定为fTotal_PessDischgLmt (fPacload4Dischg - fProt) × 输出转换效率这保证了电池释放的能量刚好覆盖负载需求且留有安全裕度fProt坚决不向电网倒送电。四、PID 调节让功率输出平滑且精准为了应对电网负载的瞬时波动使 PCS 充放电功率柔性跟随而不发生震荡系统引入了 PID 控制环Power_Control_Loop。4.1 核心参数参数说明Kp比例项根据误差实时产生反应Ki积分项消除稳态误差fDead_Band死区当目标功率与表计功率差异过小时误差视为 0防止小幅度频繁波动4.2 核心补偿逻辑根据当前工况恒功率、防逆流或平滑输出模式PID 计算误差值error target_power - meter_power经死区和分离阈值处理后得出补偿量float p_term_delta pPidParams-Kp * (error - pPID_Ctx-fPrevError); float i_term_delta pPidParams-Ki * error; pPID_Ctx-fCompensation (p_term_delta i_term_delta);对fCompensation进行上下限幅后最终平滑输出功率赋值给fTotal_PessChg_PidOut充电应用fTotal_PessDischg_PidOut放电应用注意PID 输出值才是真正下发给底层节点分配功率的控制基准。五、电池状态机动作的最终执行者底层硬件标志位、中层 EMS 逻辑和 PID 目标值最终汇总在st_batt_statemachine.c的状态机中执行。主循环STBatt_Management根据定时轮询遍历各电池节点切换执行以下几个核心状态5.1 OnIdle空闲待机检查各种启停条件。如果收到 EMS 计划任务指令且不处于保护状态会尝试寻找启动条件。对于离网请求跳转至 OnOffGrid。5.2 OnWaitCharge等待充电下发GRP_ACDC_RECTIFY_START后等待 PCS 启动。若在设定时间内输出电流 2A则平滑过渡至STBATT_STATE_IN_CHARGING否则启动失败超时回退至 Idle。5.3 OnCharging充电中持续跟踪 PID 下发的平滑电流同时实时监控停机条件。满足以下任意条件立刻关停 PCS硬件级禁止pSingleRunInfo-bIsBatt_ChargeForbidden TRUE管理计划结束IsBatt_Plan2_StopCharge() TRUE如 SOC 超过设定的 StopSOC告警和故障发生通信异常或严重 BMS 告警5.4 OnDischarging放电中防逆流动作和放电过程在此闭环。若发生禁止放电标志bIsBatt_DisChargeForbidden或IsBatt_Plan2_CutDischarge()判断达到保护 SOC 底线则立刻下发停止放电GRP_ACDC_STOP。5.5 OnFaulted / OnOffGrid异常容错状态及脱网运行的特殊处理状态。结语一条闭环的安全防线梳理整个控制链路可以看到一个成熟储能系统的多层防御机制CAN 协议层保障单体电芯绝不越界EMS 管理层守护电网和负荷防止逆流和过载PID 平滑控制提升电能输出的质量和柔性状态机负责一切动作的原子化与安全调度每一步既独立运作又紧密耦合共同确保整个储能电站的长效安全运行。