光伏系统参数

光储电解制氢仿真

最近在折腾光储电解制氢的仿真模型,发现这事儿比想象中有趣得多。就拿光伏板发电给电解槽供电这事来说,中间要过储能系统这道坎,还要考虑天气变化的骚操作。咱们直接上代码边说边聊。

先搞个光伏发电的简易模型,这里用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画个能量流动桑基图,能清晰看到哪些时段在浪费能量。不过这个可视化代码太长了,下次单独开篇讲。总之仿真最大的价值是能暴露那些纸上谈兵发现不了的问题,比如多云天气下储能系统的充放电节奏,比教科书上的案例复杂十倍不止。

搞完这套模型的最大感悟:新能源系统就是个动态平衡的艺术,每个参数背后都是真金白银的成本。下回试试加入天气预报数据做预测控制,估计又能折腾半个月...

相关推荐
暮雨哀尘9 小时前
JAVA基础练习(四):SpringBoot 实现简易登录功能
java·spring boot·eclipse·maven
hanchenxing17 小时前
CI/CD流水线中的构建缓存:从原理到最小可运行示例CI/CD
maven·构建缓存
愛芳芳2 天前
Swagger2 多环境动态配置实战指南
java·后端·maven·springboot·swagger
金玉满堂@bj3 天前
多环境部署方案(开发、测试、生产,搭配Tomcat\+WAR包)
java·tomcat·maven
青春易逝丶3 天前
Maven
java·maven
howard20055 天前
3.3 开发环境 - Maven
maven·安装·配置·阿里镜像源
xinjia_ctrl5 天前
暑假实习总结
git·后端·spring·maven·intellij-idea
网络豆6 天前
Apache Maven 鸿蒙 PC 适配全记录:把 JVM 构建工具交付到 HiShell
maven·apache·harmonyos
sunshine22 girl7 天前
Java学习一 环境配置2 Idea的入门使用和maven配置,项目启动脚本配置
java·maven