2. 储能系统建模与SOC动态方程
要对储能进行SOC约束调度优化,第一步不是写优化算法,而是把储能单元本身描述成一个可以被计算的数学模型。调度层关心的是"这一时段充多少、放多少、SOC会走到哪里、会不会越限",因此本节聚焦于电池储能系统的功率—能量关系,并推导SOC随时间演化的离散动态方程。
一、符号约定与基本物理量
为避免后续公式与图示出现方向歧义,先统一定义:以储能系统为观察对象,充电功率为正、放电功率为负,即净功率 P(t) > 0 表示从电网吸收能量,P(t) < 0 表示向电网释放能量。SOC 定义为当前可用剩余电量与额定容量之比,取值范围 0~1(工程上常写成 0%~100%)。
- Erated:额定容量,单位 kWh,表示满充状态下可存储的能量。
- SOC(t):t 时刻的荷电状态,无量纲。
- P(t):t 时刻的并网侧净功率,单位 kW,充电为正。
- ηc:充电效率,典型 0.90~0.98。
- ηd:放电效率,典型 0.90~0.98。
- σ:自放电率(每小时),典型 0.0001~0.001 h⁻¹。
- Δt:调度时间步长,单位 h,常见 0.25 h(15 min)或 1 h。
需要特别强调效率的"方向性":充电时,只有 ηc·P·Δt 的能量真正进入电池;放电时,要从电池取出 |P|·Δt/ηd 的能量,才能在并网侧输出 |P|·Δt。这一不对称是SOC轨迹呈现"充得慢、放得快"的直接原因。
二、连续时间功率—能量关系
把电池内部能量记为 E(t) = SOC(t)·Erated,则连续时间下的能量平衡可写为:
dE/dt = η_c · P(t) , P(t) ≥ 0 (充电)
dE/dt = P(t) / η_d , P(t) < 0 (放电)
dE/dt = -σ · E(t) (自放电,始终存在)
合并后得到统一的连续动态方程:
dSOC/dt = [ η_c · P⁺(t) + P⁻(t)/η_d ] / E_rated − σ · SOC(t)
其中 P⁺ = max(P, 0),P⁻ = min(P, 0)
该式说明SOC的变化由三股力量叠加:充电注入、放电抽取、自放电损耗。自放电项与SOC本身成正比,因此SOC越高,自放电造成的绝对损失越大,这也是长期静置的储能需要定期补电的原因。
三、离散动态方程推导
调度优化通常按离散时段建模,需要对连续方程在 [t, t+Δt] 上积分。对自放电项采用一阶线性常微分方程的解,对功率项采用步内功率恒定的假设,可得精确离散形式:
SOC(k+1) = SOC(k) · e^(−σ·Δt)
+ [ η_c · P⁺(k) + P⁻(k)/η_d ] · Δt / E_rated · (1 − e^(−σ·Δt)) / (σ·Δt)
当 σ·Δt 很小时(例如 σ=0.0002 h⁻¹、Δt=0.25 h,σ·Δt=5×10⁻⁵),可做一阶近似 e^(−σ·Δt) ≈ 1 − σ·Δt,得到工程上最常用的简化离散方程:
SOC(k+1) = (1 − σ·Δt) · SOC(k)
+ [ η_c · P⁺(k) + P⁻(k)/η_d ] · Δt / E_rated
这个式子就是后续所有SOC约束调度的核心递推关系。它把"功率决策"与"SOC状态"直接连起来:给定当前SOC和本时段功率,下一时段SOC即可算出。反过来,若要求 SOC(k+1) 落在 [SOCmin, SOCmax] 内,就等价于对 P(k) 施加了一组上下界约束。
四、参数对SOC轨迹的影响
把离散方程拆开看,各参数的作用非常直观:
| 参数 | 在方程中的位置 | 对SOC轨迹的影响 |
|---|---|---|
| 额定容量 Erated | 分母 | 容量越大,同样功率下ΔSOC越小,轨迹越平缓,可调节时间越长 |
| 充电效率 ηc | 充电项系数 | 效率越低,充电时SOC上升越慢,充电时段需更长或功率更大 |
| 放电效率 ηd | 放电项分母 | 效率越低,放电时SOC下降越快,可用放电时长缩短 |
| 自放电率 σ | 衰减系数 | σ越大,静置时SOC缓慢下滑,长期调度需预留补电余量 |
| 步长 Δt | 乘子 | 步长越大,单步SOC变化越剧烈,离散误差也越大 |
以 Erated=100 kWh、ηc=ηd=0.95、σ=0.0002 h⁻¹、Δt=0.25 h 为例:若 P=20 kW 充电,则单步SOC增量为 0.95×20×0.25/100 ≈ 0.0475,即约4.75个百分点;若 P=−20 kW 放电,单步SOC变化为 −20×0.25/(0.95×100) ≈ −0.0526,约5.26个百分点。可见同样20 kW,放电造成的SOC下降比充电带来的上升更大,这正是效率不对称的体现。
五、单储能单元SOC仿真任务
下面给出一个可直接运行的最小仿真示例,用于观察SOC轨迹与约束触发情况。设定:Erated=100 kWh,SOC(0)=0.50,ηc=ηd=0.95,σ=0.0002 h⁻¹,Δt=0.25 h,SOCmin=0.10,SOCmax=0.90,功率序列为 8 个时段:+20、+20、−30、−30、+10、−25、−25、+15(kW)。
E_rated = 100.0 # kWh
eta_c = 0.95
eta_d = 0.95
sigma = 0.0002 # 1/h
dt = 0.25 # h
soc = 0.50
soc_min, soc_max = 0.10, 0.90
P = [20, 20, -30, -30, 10, -25, -25, 15] # kW
for k, p in enumerate(P):
if p >= 0:
delta = eta_c * p * dt / E_rated
else:
delta = p * dt / (eta_d * E_rated)
soc = (1 - sigma * dt) * soc + delta
flag = "OK" if soc_min <= soc <= soc_max else "越限"
print(f"k={k+1:2d} P={p:+4d} kW SOC={soc:.4f} {flag}")
按上述参数逐步计算,SOC大致演化如下(示例计算结果,用于说明方法):k=1 后约 0.5474,k=2 后约 0.5948,k=3 放电后约 0.5159,k=4 后约 0.4370,k=5 充电后约 0.4607,k=6 后约 0.3949,k=7 后约 0.3291,k=8 充电后约 0.3647。全程SOC落在 0.10~0.90 之间,未触发越限。
六、从仿真到约束调度的衔接
仿真跑通后,把递推式反过来用即可得到约束条件。对每个时段 k,要求 SOC(k+1) 落在允许区间内,等价于:
SOC_min ≤ (1 − σΔt)·SOC(k) + [η_c·P⁺(k) + P⁻(k)/η_d]·Δt/E_rated ≤ SOC_max
由于 P⁺ 与 P⁻ 是分段线性的,该式可拆成充电、放电两种情形分别化为对 P(k) 的线性上下界,从而直接嵌入线性规划或混合整数规划模型。至此,储能单元的物理模型已转化为调度器可用的数学约束,后续章节将在此基础上加入功率平衡、电价与多储能协同等条件。