光储电解制氢仿真
最近在折腾光储电解制氢的仿真模型,发现这事儿比想象中有趣得多。就拿光伏板发电给电解槽供电这事来说,中间要过储能系统这道坎,还要考虑天气变化的骚操作。咱们直接上代码边说边聊。
先搞个光伏发电的简易模型,这里用Python的pvlib库模拟某地光伏板输出功率:
python
import pvlib
from pdtools import Location
location = Location(latitude=32.1, longitude=118.8, tz='Asia/Shanghai')
times = pd.date_range('2023-06-21', periods=24*60, freq='1min', tz=location.tz)
system = location.get_clearsky(times) # 获取晴天辐照度
pv_params = {
'module_parameters': {'pdc0': 250, 'gamma_pdc': -0.004},
'inverter_parameters': {'pdc0': 240},
'temperature_model_parameters': {'u_c': 29.0, 'u_v': 0.0}
}
pv_power = system.pvsystem.pvwatts_dc(system.solar_position, **pv_params)
这段代码的核心是pvwattsdc**方法,它根据太阳位置计算直流电功率。注意gamma pdc这个温度系数,每升高1℃功率下降0.4%,实际项目中这参数能把人坑哭------夏天正午板面温度能到60℃+,功率直接打八折。
接下来是储能系统的充放电策略。这里用了个状态机模型:
python
class Battery:
def __init__(self, capacity_kwh, max_rate):
self.soc = 0.5 # 初始电量50%
self.max_charge = max_rate / 60 # 每分钟最大充放电量
def update(self, pv_power, load_demand):
net_energy = pv_power - load_demand
# 充电逻辑
if net_energy > 0:
charge_amount = min(net_energy, self.max_charge, 1 - self.soc)
self.soc += charge_amount
# 放电逻辑
else:
discharge_needed = -net_energy
actual_discharge = min(discharge_needed, self.max_charge, self.soc)
self.soc -= actual_discharge
return actual_discharge
重点在充放电速率的限制,有些项目为了延长电池寿命,会设置充放电速率不超过0.5C。这里用max_rate参数控制,实测发现当光伏出力剧烈波动时,这个限流值会显著影响系统稳定性。
光储电解制氢仿真
电解槽模型更有意思,效率曲线不是线性的:
python
def electrolyzer_efficiency(current_density):
# 典型碱性电解槽效率曲线
return 0.7 - 0.2 * np.exp(-current_density/100) + 0.1 * np.log(current_density+1)
def hydrogen_production(power, hours):
efficiency = electrolyzer_efficiency(power / 1000) # 假设面积1m²
return power * hours * efficiency / 39.4 # kWh转kg氢气
这里的指数项模拟低负荷时效率暴跌的现象。实际运行时要避免电解槽长时间在30%负荷以下运行,否则效率能掉到50%以下,跟开燃油车堵在北京二环似的费电。
把这三个模块拼起来跑仿真:
python
battery = Battery(200, 100) # 200kWh容量,最大充放电功率100kW
hydrogen_output = []
for t in range(1440): # 模拟24小时
pv = pv_power[t]
discharge = battery.update(pv, 0) # 暂不考虑负载
available_power = pv + discharge
if available_power > 50: # 电解槽最低运行功率
h2 = hydrogen_production(available_power, 1/60)
hydrogen_output.append(h2)
跑完发现个反直觉的现象:晴天正午反而可能产氢量下降。原因是当光伏出力超过储能充电上限时,多余的能量被弃用。这时候就需要优化策略------比如在预测到高辐照时段时,提前给储能放电腾出空间。
最后用matplotlib画个能量流动桑基图,能清晰看到哪些时段在浪费能量。不过这个可视化代码太长了,下次单独开篇讲。总之仿真最大的价值是能暴露那些纸上谈兵发现不了的问题,比如多云天气下储能系统的充放电节奏,比教科书上的案例复杂十倍不止。
搞完这套模型的最大感悟:新能源系统就是个动态平衡的艺术,每个参数背后都是真金白银的成本。下回试试加入天气预报数据做预测控制,估计又能折腾半个月...
