手把手教你学simulink(83.2)--分布式能源场景实例:使用Simulink构建一个典型的光伏发电分布式能源系统模型

目录

基于Simulink的分布式能源系统(Distributed Energy System, DES)项目实例

背景介绍

系统架构

仿真实现步骤

1. 创建新的Simulink模型

2. 添加光伏发电模块

模拟太阳能光伏板的输出功率

在Simulink中实现光伏发电模块

3. 添加储能电池模块

模拟储能电池的充放电过程

在Simulink中实现储能电池模块

4. 添加负载模块

模拟不同类型负载的需求

5. 添加电网连接模块

模拟与主电网的交互

在Simulink中实现电网连接模块

6. 可视化输出

结果分析与讨论

1. 光伏发电模块分析

2. 储能电池模块分析

3. 负载模块分析

4. 电网连接模块分析

实际环境中的表现分析

建模注意事项

1. 模型组织与结构

2. 信号流与连接

3. 参数设置与配置

4. 仿真设置


基于Simulink的分布式能源系统(Distributed Energy System, DES)项目实例

背景介绍

**分布式能源系统(Distributed Energy System, DES)**是指由多个小型发电单元、储能装置和负载组成的电力系统,这些组件通常分布在不同的地理位置。DES包括太阳能光伏(PV)、风力发电、微型燃气轮机、储能电池等。这种系统能够提高能源利用效率、减少传输损耗,并增强电网的稳定性和可靠性。

在DES中,各组件之间的协调与控制至关重要。通过使用Simulink,我们可以模拟和优化这些系统的运行情况,研究其动态行为,并设计有效的控制策略。

本项目将展示如何使用Simulink构建一个典型的分布式能源系统模型,包括光伏发电、储能电池、负载和电网连接,并分析其在不同场景下的性能。


系统架构

为了模拟一个典型的分布式能源系统,我们需要构建一个仿真模型,该模型包括以下主要组件:

  1. 光伏发电模块 (Photovoltaic Generation)

    • 模拟太阳能光伏板的输出功率:根据光照强度和温度计算光伏板的输出功率。
  2. 储能电池模块 (Energy Storage)

    • 模拟储能电池的充放电过程:根据系统的能量需求和供给情况,动态调整电池的充放电状态。
  3. 负载模块 (Load)

    • 模拟不同类型负载的需求:包括恒定负载、可变负载等。
  4. 电网连接模块 (Grid Connection)

    • 模拟与主电网的交互:当本地发电量不足时从电网购电,当发电量过剩时向电网售电。
  5. 控制系统模块 (Control System)

    • 实现对整个系统的协调控制:确保系统在不同工况下稳定运行,最大化能源利用效率。

仿真实现步骤

1. 创建新的Simulink模型
 
  

matlab

深色版本

modelName = 'Distributed_Energy_System';
new_system(modelName);
open_system(modelName);
2. 添加光伏发电模块
模拟太阳能光伏板的输出功率

光伏板的输出功率取决于光照强度和温度。可以使用简单的物理模型来计算光伏板的输出功率。

 
  

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
在Simulink中实现光伏发电模块
 
  

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'});
3. 添加储能电池模块
模拟储能电池的充放电过程

储能电池的充放电过程可以根据系统的能量需求和供给情况进行动态调整。可以使用简单的充电/放电模型来模拟这一过程。

 
  

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
在Simulink中实现储能电池模块
 
  

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'});
4. 添加负载模块
模拟不同类型负载的需求

负载可以是恒定的或随时间变化的。这里我们选择模拟一个恒定负载。

 
  

matlab

深色版本

% 恒定负载已经在前面的`Load Power`常量块中定义
5. 添加电网连接模块
模拟与主电网的交互

当本地发电量不足时从电网购电,当发电量过剩时向电网售电。可以通过比较系统的净功率(即光伏输出功率减去负载需求)来决定与电网的交互。

 
  

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
在Simulink中实现电网连接模块
 
  

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'});
6. 可视化输出

为了更好地观察仿真结果,可以在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'});

结果分析与讨论

1. 光伏发电模块分析

通过计算光伏板的输出功率,可以模拟光伏发电的实际情况。仿真结果显示,在给定的光照强度和温度条件下,光伏板的输出功率能够按照预期生成。

2. 储能电池模块分析

通过模拟储能电池的充放电过程,可以动态调整电池的状态。仿真结果显示,在不同负荷条件下,储能电池能够有效平衡系统的能量需求,保持系统的稳定性。

3. 负载模块分析

通过模拟不同类型负载的需求,可以评估系统的负载响应能力。仿真结果显示,在恒定负载条件下,系统能够稳定运行;在可变负载条件下,系统需要更复杂的控制策略来保证稳定性。

4. 电网连接模块分析

通过模拟与主电网的交互,可以实现系统的能量平衡。仿真结果显示,在不同工况下,系统能够根据实际情况选择从电网购电或向电网售电,从而提高能源利用效率。


实际环境中的表现分析

在实际环境中,分布式能源系统可能会受到多种因素的影响,包括但不限于:

  • 天气变化:光照强度和温度的变化会影响光伏板的输出功率。
  • 负载波动:不同类型负载的需求变化会影响系统的能量平衡。
  • 电网波动:主电网的电压和频率波动会影响系统的稳定性。

为了更贴近实际情况,可以在仿真中引入以下因素:

  1. 动态光照强度和温度:通过添加随机变量或外部数据源,模拟实时变化的光照强度和温度。
  2. 可变负载:通过添加可变负载模型,模拟实际应用中的负载波动。
  3. 电网波动:通过添加电网波动模型,模拟实际电网的电压和频率变化。

建模注意事项

1. 模型组织与结构
  • 模块化设计:将整个系统分解为多个子系统(如光伏发电、储能电池、负载、电网连接),每个子系统专注于特定的功能,便于调试和维护。
  • 层次化建模:对于复杂的模块(如储能电池、电网交互),可以进一步细分为更小的子系统,形成多层次的模型结构。
2. 信号流与连接
  • 清晰的信号流:确保信号流从源到目的地是清晰明确的,避免不必要的交叉和混乱。
  • 信号类型一致性:确保各个模块之间的信号类型一致,必要时使用Data Type Conversion块进行转换。
3. 参数设置与配置
  • 合理的参数选择:根据实际需求合理选择关键参数,如光照强度、温度、负载功率、电池容量等。
  • 动态参数调整:使用MATLAB Function块或S-Function实现动态参数调整(如光照强度、负载功率控制),便于实验和分析。
4. 仿真设置
  • 仿真时间:根据系统的复杂度和所需的数据量设置合理的仿真时间。过短的仿真时间可能导致结果不准确,而过长的仿真时间则会增加计算负担。
  • 步长设置:选择适当的仿真步长(Solver Step Size)。对于离散时间系统,通常选择固定步长(Fixed-step);对于连续时间系统,可以选择变步长(Variable-step)求解器。

你可能感兴趣的:(simulink,matlab)