目录
基于Simulink的分布式能源系统(Distributed Energy System, DES)项目实例
背景介绍
系统架构
仿真实现步骤
1. 创建新的Simulink模型
2. 添加光伏发电模块
模拟太阳能光伏板的输出功率
在Simulink中实现光伏发电模块
3. 添加储能电池模块
模拟储能电池的充放电过程
在Simulink中实现储能电池模块
4. 添加负载模块
模拟不同类型负载的需求
5. 添加电网连接模块
模拟与主电网的交互
在Simulink中实现电网连接模块
6. 可视化输出
结果分析与讨论
1. 光伏发电模块分析
2. 储能电池模块分析
3. 负载模块分析
4. 电网连接模块分析
实际环境中的表现分析
建模注意事项
1. 模型组织与结构
2. 信号流与连接
3. 参数设置与配置
4. 仿真设置
**分布式能源系统(Distributed Energy System, DES)**是指由多个小型发电单元、储能装置和负载组成的电力系统,这些组件通常分布在不同的地理位置。DES包括太阳能光伏(PV)、风力发电、微型燃气轮机、储能电池等。这种系统能够提高能源利用效率、减少传输损耗,并增强电网的稳定性和可靠性。
在DES中,各组件之间的协调与控制至关重要。通过使用Simulink,我们可以模拟和优化这些系统的运行情况,研究其动态行为,并设计有效的控制策略。
本项目将展示如何使用Simulink构建一个典型的分布式能源系统模型,包括光伏发电、储能电池、负载和电网连接,并分析其在不同场景下的性能。
为了模拟一个典型的分布式能源系统,我们需要构建一个仿真模型,该模型包括以下主要组件:
光伏发电模块 (Photovoltaic Generation)
储能电池模块 (Energy Storage)
负载模块 (Load)
电网连接模块 (Grid Connection)
控制系统模块 (Control System)
matlab
深色版本
modelName = 'Distributed_Energy_System';
new_system(modelName);
open_system(modelName);
光伏板的输出功率取决于光照强度和温度。可以使用简单的物理模型来计算光伏板的输出功率。
matlab
深色版本
function pvPower = calculatePVPower(irradiance, temperature)
% 计算光伏板的输出功率
G_stc = 1000; % 标准测试条件下的光照强度 (W/m^2)
T_stc = 25; % 标准测试条件下的温度 (°C)
P_stc = 1000; % 标准测试条件下的最大输出功率 (W)
% 温度系数(假设为-0.4%/°C)
temp_coeff = -0.004;
% 计算实际输出功率
pvPower = P_stc * (irradiance / G_stc) * (1 + temp_coeff * (temperature - T_stc));
end
matlab
深色版本
% 添加MATLAB Function块计算光伏板输出功率
add_block('simulink/User-Defined Functions/MATLAB Function', [modelName '/Calculate PV Power']);
set_param([modelName '/Calculate PV Power'], 'Function', 'calculatePVPower');
set_param([modelName '/Calculate PV Power'], 'Inputs', 'irradiance, temperature');
set_param([modelName '/Calculate PV Power'], 'Outputs', 'pvPower');
% 添加光照强度参数输入块
add_block('simulink/Sources/Constant', [modelName '/Irradiance']);
set_param([modelName '/Irradiance'], 'Value', '800'); % 设置光照强度为800 W/m^2
connect_blocks(modelName, {'/Irradiance', '/Calculate PV Power'});
% 添加温度参数输入块
add_block('simulink/Sources/Constant', [modelName '/Temperature']);
set_param([modelName '/Temperature'], 'Value', '25'); % 设置温度为25°C
connect_blocks(modelName, {'/Temperature', '/Calculate PV Power'});
储能电池的充放电过程可以根据系统的能量需求和供给情况进行动态调整。可以使用简单的充电/放电模型来模拟这一过程。
matlab
深色版本
function [batterySOC, chargeCurrent] = batteryModel(batterySOC, pvPower, loadPower, maxChargeRate, maxDischargeRate)
% 模拟储能电池的充放电过程
batteryCapacity = 1000; % 假设电池容量为1000 Wh
netPower = pvPower - loadPower; % 净功率(正数表示充电,负数表示放电)
if netPower > 0
% 充电
chargeCurrent = min(netPower, maxChargeRate * batteryCapacity);
batterySOC = batterySOC + chargeCurrent / batteryCapacity;
else
% 放电
chargeCurrent = max(netPower, -maxDischargeRate * batteryCapacity);
batterySOC = batterySOC + chargeCurrent / batteryCapacity;
end
% 确保SOC在合理范围内
batterySOC = max(0, min(1, batterySOC));
end
matlab
深色版本
% 添加MATLAB Function块模拟储能电池
add_block('simulink/User-Defined Functions/MATLAB Function', [modelName '/Battery Model']);
set_param([modelName '/Battery Model'], 'Function', 'batteryModel');
set_param([modelName '/Battery Model'], 'Inputs', 'batterySOC, pvPower, loadPower, maxChargeRate, maxDischargeRate');
set_param([modelName '/Battery Model'], 'Outputs', '[batterySOC, chargeCurrent]');
% 添加初始SOC参数输入块
add_block('simulink/Sources/Constant', [modelName '/Initial SOC']);
set_param([modelName '/Initial SOC'], 'Value', '0.5'); % 设置初始SOC为50%
connect_blocks(modelName, {'/Initial SOC', '/Battery Model'});
% 添加最大充电速率参数输入块
add_block('simulink/Sources/Constant', [modelName '/Max Charge Rate']);
set_param([modelName '/Max Charge Rate'], 'Value', '0.1'); % 设置最大充电速率为10%每小时
connect_blocks(modelName, {'/Max Charge Rate', '/Battery Model'});
% 添加最大放电速率参数输入块
add_block('simulink/Sources/Constant', [modelName '/Max Discharge Rate']);
set_param([modelName '/Max Discharge Rate'], 'Value', '0.1'); % 设置最大放电速率为10%每小时
connect_blocks(modelName, {'/Max Discharge Rate', '/Battery Model'});
% 连接光伏发电模块到储能电池模块
connect_blocks(modelName, {'/Calculate PV Power', '/Battery Model/pvPower'});
% 添加负载功率参数输入块
add_block('simulink/Sources/Constant', [modelName '/Load Power']);
set_param([modelName '/Load Power'], 'Value', '500'); % 设置负载功率为500 W
connect_blocks(modelName, {'/Load Power', '/Battery Model/loadPower'});
负载可以是恒定的或随时间变化的。这里我们选择模拟一个恒定负载。
matlab
深色版本
% 恒定负载已经在前面的`Load Power`常量块中定义
当本地发电量不足时从电网购电,当发电量过剩时向电网售电。可以通过比较系统的净功率(即光伏输出功率减去负载需求)来决定与电网的交互。
matlab
深色版本
function [gridPower, gridState] = gridInteraction(pvPower, loadPower, batterySOC, maxDischargeRate, maxChargeRate)
% 模拟与主电网的交互
batteryCapacity = 1000; % 假设电池容量为1000 Wh
netPower = pvPower - loadPower; % 净功率(正数表示发电过剩,负数表示发电不足)
if netPower > 0
% 发电过剩,优先充电电池
if batterySOC < 1
chargeCurrent = min(netPower, maxChargeRate * batteryCapacity);
batterySOC = batterySOC + chargeCurrent / batteryCapacity;
gridPower = netPower - chargeCurrent;
else
% 电池已满,向电网售电
gridPower = netPower;
end
else
% 发电不足,优先放电电池
if batterySOC > 0
dischargeCurrent = max(netPower, -maxDischargeRate * batteryCapacity);
batterySOC = batterySOC + dischargeCurrent / batteryCapacity;
gridPower = netPower - dischargeCurrent;
else
% 电池已空,从电网购电
gridPower = netPower;
end
end
% 确保SOC在合理范围内
batterySOC = max(0, min(1, batterySOC));
% 判断电网状态
if gridPower > 0
gridState = 'Sell to Grid'; % 向电网售电
elseif gridPower < 0
gridState = 'Buy from Grid'; % 从电网购电
else
gridState = 'No Interaction'; % 无交互
end
end
matlab
深色版本
% 添加MATLAB Function块模拟电网交互
add_block('simulink/User-Defined Functions/MATLAB Function', [modelName '/Grid Interaction']);
set_param([modelName '/Grid Interaction'], 'Function', 'gridInteraction');
set_param([modelName '/Grid Interaction'], 'Inputs', 'pvPower, loadPower, batterySOC, maxDischargeRate, maxChargeRate');
set_param([modelName '/Grid Interaction'], 'Outputs', '[gridPower, gridState]');
% 连接光伏发电模块和负载模块到电网交互模块
connect_blocks(modelName, {'/Calculate PV Power', '/Grid Interaction/pvPower'});
connect_blocks(modelName, {'/Load Power', '/Grid Interaction/loadPower'});
connect_blocks(modelName, {'/Battery Model/batterySOC', '/Grid Interaction/batterySOC'});
connect_blocks(modelName, {'/Max Charge Rate', '/Grid Interaction/maxChargeRate'});
connect_blocks(modelName, {'/Max Discharge Rate', '/Grid Interaction/maxDischargeRate'});
为了更好地观察仿真结果,可以在Simulink中添加显示模块来可视化各个阶段的信号和决策结果。
matlab
深色版本
% 添加Scope块显示光伏输出功率
add_block('simulink/Sinks/Scope', [modelName '/Scope - PV Power']);
connect_blocks(modelName, {'/Calculate PV Power', '/Scope - PV Power'});
% 添加Scope块显示电池SOC
add_block('simulink/Sinks/Scope', [modelName '/Scope - Battery SOC']);
connect_blocks(modelName, {'/Battery Model/batterySOC', '/Scope - Battery SOC'});
% 添加Scope块显示电网交互功率
add_block('simulink/Sinks/Scope', [modelName '/Scope - Grid Power']);
connect_blocks(modelName, {'/Grid Interaction/gridPower', '/Scope - Grid Power'});
% 添加Display块显示电网状态
add_block('simulink/Sinks/Display', [modelName '/Display - Grid State']);
connect_blocks(modelName, {'/Grid Interaction/gridState', '/Display - Grid State'});
通过计算光伏板的输出功率,可以模拟光伏发电的实际情况。仿真结果显示,在给定的光照强度和温度条件下,光伏板的输出功率能够按照预期生成。
通过模拟储能电池的充放电过程,可以动态调整电池的状态。仿真结果显示,在不同负荷条件下,储能电池能够有效平衡系统的能量需求,保持系统的稳定性。
通过模拟不同类型负载的需求,可以评估系统的负载响应能力。仿真结果显示,在恒定负载条件下,系统能够稳定运行;在可变负载条件下,系统需要更复杂的控制策略来保证稳定性。
通过模拟与主电网的交互,可以实现系统的能量平衡。仿真结果显示,在不同工况下,系统能够根据实际情况选择从电网购电或向电网售电,从而提高能源利用效率。
在实际环境中,分布式能源系统可能会受到多种因素的影响,包括但不限于:
为了更贴近实际情况,可以在仿真中引入以下因素:
Data Type Conversion
块进行转换。