手把手教你学simulink(25.3)--电力系统场景示例:基于Simulink的电力系统孤岛微电网(Isolated Microgrid)建模与控制
目录
项目示例:基于Simulink的电力系统孤岛微电网(Isolated Microgrid)建模与控制
项目概述
项目结构
1. 模型搭建
2. 仿真设置
3. 故障模拟
4. 结果分析
代码实现
1. 创建 Simulink 项目
1.1 打开 MATLAB 并启动 Simulink
1.2 创建新的 Simulink 项目文件夹
1.3 组织项目文件结构
2. 搭建孤岛微电网模型
2.1 新建 Simulink 模型
2.2 添加模块并连接
2.2.1 同步发电机(Synchronous Generator)
2.2.2 逆变器(Inverter)
2.2.3 光伏发电系统(PV System)
2.2.4 风力发电系统(Wind Turbine System)
2.2.5 储能系统(Battery Storage System)
2.2.6 负荷(Load)
2.2.7 频率和电压控制器(Frequency and Voltage Controller)
2.2.8 虚拟惯性控制器(Virtual Inertia Controller, VIC)
2.2.9 需求响应控制器(Demand Response Controller)
3. 连接和配置模型
4. 运行仿真
项目示例:基于Simulink的电力系统孤岛微电网(Isolated Microgrid)建模与控制
项目概述
孤岛微电网(Isolated Microgrid)是指在与主电网断开连接的情况下,由多个分布式能源(Distributed Energy Resources, DERs)、储能系统和负荷组成的独立供电系统。孤岛微电网能够在主电网故障或偏远地区提供可靠的电力供应,具有重要的应用价值。本项目的目标是使用 Simulink 对一个孤岛微电网进行建模和仿真,验证其在不同运行条件下的性能,并设计有效的控制策略,确保系统的稳定运行。
具体来说,我们将模拟以下内容:
- 孤岛微电网拓扑结构 :包括同步发电机、逆变器、储能系统、负荷等。
- 分布式能源(DERs) :如太阳能光伏(PV)、风力发电机等。
- 储能系统(Battery Storage System) :用于平滑功率波动和维持频率稳定。
- 负荷管理(Load Management) :通过需求响应(Demand Response, DR)调整负荷,优化能量分配。
- 频率和电压控制(Frequency and Voltage Control) :设计控制器,确保孤岛微电网的频率和电压在允许范围内。
- 故障检测与恢复(Fault Detection and Recovery, FDR) :实现快速故障定位、隔离和供电恢复。
项目结构
1. 模型搭建
在 Simulink 中,我们可以使用 Simscape Electrical 和 Power System Toolbox 工具箱来构建孤岛微电网的各个组件。以下是模型的主要组成部分:
同步发电机(Synchronous Generator) :
* 使用 `Synchronous Machine (Detailed)` 模块模拟同步发电机的详细动态特性。
* 设置发电机的参数,如额定功率、惯性常数、阻尼系数等。
逆变器(Inverter) :
* 使用 `Three-Phase Inverter` 模块模拟逆变器,将直流电源转换为交流电。
* 逆变器可以连接到光伏发电系统、风力发电系统或储能系统。
储能系统(Battery Storage System) :
* 使用 `Battery` 模块模拟锂离子电池的充放电行为。
* 输入参数包括电池容量、初始荷电状态(SOC)、充放电效率等。
* 电池通过双向 DC-AC 逆变器连接到微电网,实现能量的双向流动。
光伏发电系统(PV System) :
* 使用 `Photovoltaic (Phovoltaic)` 模块模拟光伏阵列的输出特性。
* 输入参数包括光照强度(Irradiance)、温度(Temperature)等。
* 输出为直流电压和电流,通过逆变器连接到微电网。
风力发电系统(Wind Turbine System) :
* 使用 `Wind Turbine Generator` 模块模拟风力发电机的输出特性。
* 输入参数包括风速(Wind Speed)。
* 输出为交流电压和电流,直接连接到微电网。
负荷(Load) :
* 使用 `Three-Phase Programmable Resistor` 模块模拟恒定功率负荷。
* 使用 `From Workspace` 或 `Signal Builder` 模块导入实际的负荷曲线数据,模拟时变负荷。
频率和电压控制器(Frequency and Voltage Controller) :
* 设计一个控制器,负责调节微电网的频率和电压,确保其在允许范围内。
* 控制器可以根据频率偏差调整发电机组的输出功率,并根据电压偏差调整逆变器的输出电压。
虚拟惯性控制器(Virtual Inertia Controller, VIC) :
* 使用 `MATLAB Function` 或 `Stateflow` 模块设计虚拟惯性控制器。
* VIC 通过模拟额外的惯性,增强系统的频率稳定性,特别是在高渗透率可再生能源接入的情况下。
需求响应控制器(Demand Response Controller) :
* 使用 `Stateflow` 或 `MATLAB Function` 模块设计需求响应逻辑。
* 根据实时电价或电网状态,调整用户的用电行为,优化能量分配。
2. 仿真设置
- 仿真时间 :设定仿真时间为 24 小时,模拟一天内的电力供需变化。
- 采样时间 :选择合适的采样时间(如 0.001 秒)以确保仿真精度。
- 初始条件 :设置系统的初始状态,例如各发电机组的初始输出功率、电池的初始 SOC、负荷的初始功率等。
- 天气数据 :导入光照强度和风速的历史数据,模拟光伏和风力发电机的输出变化。
- 负荷曲线 :导入实际的负荷曲线数据,模拟不同时段的电力需求变化。
- 频率和电压测量 :使用
Voltage Measurement和Frequency Measurement模块测量系统的频率和电压,并将其输出到工作区。
3. 故障模拟
为了验证孤岛微电网的鲁棒性和自愈能力,我们可以在仿真中引入以下故障场景:
- 负荷突增 :模拟负荷突然增加,测试系统的频率和电压响应。
- 发电机组跳闸 :模拟某个发电机组突然跳闸,测试系统的频率和电压恢复能力。
- 可再生能源波动 :模拟风力发电机或光伏发电系统的输出功率波动,测试系统的频率和电压稳定性。
- 通信中断 :模拟智能电表或控制器与中央控制系统之间的通信中断,测试系统的容错能力。
4. 结果分析
- 频率和电压响应 :分析系统在不同扰动下的频率和电压响应,确保其在允许范围内。
- 功率平衡 :分析发电机组、逆变器和储能系统的输出功率变化,确保系统能够快速恢复功率平衡。
- 虚拟惯性效果 :评估虚拟惯性控制器对频率稳定性的影响,验证其在高渗透率可再生能源接入情况下的有效性。
- 需求响应效果 :分析需求响应措施对负荷曲线的影响,评估其在削峰填谷方面的效果。
代码实现
1. 创建 Simulink 项目
1.1 打开 MATLAB 并启动 Simulink
matlab
深色版本
% 启动 MATLAB 和 Simulink
simulink; % 启动 Simulink 库浏览器
1.2 创建新的 Simulink 项目文件夹
matlab
深色版本
% 创建新的 Simulink 项目
projectName = 'IsolatedMicrogrid_Project';
projectPath = 'C:\Your\Project\Path'; % 替换为你的项目路径
newProject(projectPath, projectName);
1.3 组织项目文件结构
matlab
深色版本
% 创建子文件夹
mkdir(fullfile(projectPath, 'Models'));
mkdir(fullfile(projectPath, 'Scripts'));
mkdir(fullfile(projectPath, 'Data'));
mkdir(fullfile(projectPath, 'Results'));
2. 搭建孤岛微电网模型
2.1 新建 Simulink 模型
matlab
深色版本
% 新建 Simulink 模型并保存
modelName = 'IsolatedMicrogrid';
new_system(modelName);
save_system(modelName, fullfile(projectPath, 'Models', [modelName '.slx']));
2.2 添加模块并连接
2.2.1 同步发电机(Synchronous Generator)
- 添加同步发电机模块 :
- 使用
Synchronous Machine (Detailed)模块模拟同步发电机。 - 设置发电机的参数。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Machines/Synchronous Machine (Detailed)', [modelName '/Generator']);
set_param([modelName '/Generator'], 'MachineType', 'Generator', 'NominalPower', '100e6', 'InertiaConstant', '3', 'DampingCoefficient', '0.05');
- 添加调速器模块 :
- 使用
Hydraulic Turbine and Governor模块模拟水轮机及其调速器。 - 设置调速器的比例系数(Droop Coefficient)。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Elements/Hydraulic Turbine and Governor', [modelName '/Governor']);
set_param([modelName '/Governor'], 'Droop', '0.05'); % Droop Coefficient 5%
- 添加励磁系统模块 :
- 使用
Excitation System ST1A模块模拟励磁系统。 - 设置励磁系统的参数。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Elements/Excitation System ST1A', [modelName '/ExcitationSystem']);
set_param([modelName '/ExcitationSystem'], 'Kf', '0.1', 'Ta', '0.1');
- 连接发电机、调速器和励磁系统 :
- 使用
connect_blocks函数连接各个模块。
- 使用
matlab
深色版本
connect_blocks([modelName '/Governor'], [modelName '/Generator']);
connect_blocks([modelName '/ExcitationSystem'], [modelName '/Generator']);
2.2.2 逆变器(Inverter)
- 添加逆变器模块 :
- 使用
Three-Phase Inverter模块模拟逆变器。 - 设置逆变器的参数。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Power Electronics/Three-Phase Inverter', [modelName '/Inverter']);
set_param([modelName '/Inverter'], 'ModulationIndex', '0.9', 'CarrierFrequency', '1e3');
- 连接逆变器到光伏发电系统和储能系统 :
- 使用
connect_blocks函数连接逆变器到光伏发电系统和储能系统。
- 使用
matlab
深色版本
connect_blocks([modelName '/PV'], [modelName '/Inverter']);
connect_blocks([modelName '/Battery'], [modelName '/Inverter']);
2.2.3 光伏发电系统(PV System)
- 添加光伏发电系统模块 :
- 使用
Photovoltaic (Phovoltaic)模块模拟光伏阵列的输出特性。 - 设置光伏阵列的参数。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Renewable Energy Sources/Photovoltaic', [modelName '/PV']);
set_param([modelName '/PV'], 'Pmpp', '10e3', 'Voc', '400', 'Isc', '25');
- 导入光照强度数据 :
- 使用
From Workspace模块导入光照强度数据。
- 使用
matlab
深色版本
irradianceData = timeseries(rand(1, 1000) * 1000, (0:0.1:99.9)');
assignin('base', 'irradianceData', irradianceData);
4. add_block('simulink/Sources/From Workspace', [modelName '/Irradiance']);
set_param([modelName '/Irradiance'], 'VariableName', 'irradianceData', 'SampleTime', '0.1');
connect_blocks([modelName '/Irradiance'], [modelName '/PV']);
2.2.4 风力发电系统(Wind Turbine System)
- 添加风力发电系统模块 :
- 使用
Wind Turbine Generator模块模拟风力发电机的输出特性。 - 设置风力发电机的参数。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Renewable Energy Sources/Wind Turbine Generator', [modelName '/WindTurbine']);
set_param([modelName '/WindTurbine'], 'RatedPower', '500e3', 'CutInSpeed', '3', 'CutOutSpeed', '25');
- 导入风速数据 :
- 使用
From Workspace模块导入风速数据。
- 使用
matlab
深色版本
windSpeedData = timeseries(rand(1, 1000) * 20 + 5, (0:0.1:99.9)');
assignin('base', 'windSpeedData', windSpeedData);
4. add_block('simulink/Sources/From Workspace', [modelName '/WindSpeed']);
set_param([modelName '/WindSpeed'], 'VariableName', 'windSpeedData', 'SampleTime', '0.1');
connect_blocks([modelName '/WindSpeed'], [modelName '/WindTurbine']);
2.2.5 储能系统(Battery Storage System)
- 添加储能系统模块 :
- 使用
Battery模块模拟锂离子电池的充放电行为。 - 设置电池的参数。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Electrical Sources/Battery', [modelName '/Battery']);
set_param([modelName '/Battery'], 'NominalCapacity', '100e3', 'InitialSOC', '0.5', 'Efficiency', '0.9');
- 添加双向 DC-AC 逆变器 :
- 使用
Bidirectional DC-AC Converter模块实现电池与微电网之间的双向能量流动。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Power Electronics/Bidirectional DC-AC Converter', [modelName '/DCACConverter']);
set_param([modelName '/DCACConverter'], 'ModulationIndex', '0.9', 'CarrierFrequency', '1e3');
2.2.6 负荷(Load)
- 添加恒定功率负荷模块 :
- 使用
Three-Phase Programmable Resistor模块模拟恒定功率负荷。 - 设置负荷的功率需求。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Elements/Three-Phase Programmable Resistor', [modelName '/Load']);
set_param([modelName '/Load'], 'Power', '50e6');
- 模拟负荷变化 :
- 使用
Step模块模拟负荷的突然增加。
- 使用
matlab
深色版本
add_block('simulink/Sources/Step', [modelName '/LoadStep']);
set_param([modelName '/LoadStep'], 'StartTime', '10', 'FinalValue', '75e6');
connect_blocks([modelName '/LoadStep'], [modelName '/Load']);
2.2.7 频率和电压控制器(Frequency and Voltage Controller)
- 设计频率和电压控制器 :
- 使用
MATLAB Function模块实现频率和电压控制器。 - 控制器可以根据频率偏差调整发电机组的输出功率,并根据电压偏差调整逆变器的输出电压。
- 使用
matlab
深色版本
add_block('simulink/User-Defined Functions/MATLAB Function', [modelName '/FrequencyVoltageController']);
set_param([modelName '/FrequencyVoltageController'], 'Function', 'function [genPower, inverterVoltage] = FrequencyVoltageController(frequencyDeviation, voltageDeviation)
% 频率控制逻辑
Kp_freq = 0.1; % 比例系数
Ki_freq = 0.01; % 积分系数
genPower = -Kp_freq * frequencyDeviation - Ki_freq * cumsum(frequencyDeviation);
% 电压控制逻辑
Kp_voltage = 0.05; % 比例系数
Ki_voltage = 0.005; % 积分系数
inverterVoltage = 1 + Kp_voltage * voltageDeviation + Ki_voltage * cumsum(voltageDeviation);
end');
- 连接控制器到发电机和逆变器 :
- 使用
connect_blocks函数连接控制器到发电机和逆变器。
- 使用
matlab
深色版本
connect_blocks([modelName '/FrequencyVoltageController'], [modelName '/Governor']);
connect_blocks([modelName '/FrequencyVoltageController'], [modelName '/Inverter']);
2.2.8 虚拟惯性控制器(Virtual Inertia Controller, VIC)
- 设计虚拟惯性控制器 :
- 使用
MATLAB Function模块实现虚拟惯性控制器。 - 控制器通过模拟额外的惯性,增强系统的频率稳定性。
- 使用
matlab
深色版本
add_block('simulink/User-Defined Functions/MATLAB Function', [modelName '/VirtualInertiaController']);
set_param([modelName '/VirtualInertiaController'], 'Function', 'function output = VirtualInertiaController(frequencyDeviation)
% 虚拟惯性控制器逻辑
H_virtual = 5; % 虚拟惯性常数
K_virtual = 0.1; % 虚拟阻尼系数
output = -H_virtual * frequencyDeviation - K_virtual * diff(frequencyDeviation);
end');
- 连接虚拟惯性控制器到发电机 :
- 使用
connect_blocks函数连接虚拟惯性控制器到发电机。
- 使用
matlab
深色版本
connect_blocks([modelName '/VirtualInertiaController'], [modelName '/Generator']);
2.2.9 需求响应控制器(Demand Response Controller)
- 设计需求响应控制器 :
- 使用
Stateflow模块设计需求响应逻辑。 - 根据实时电价或电网状态,调整用户的用电行为,优化能量分配。
- 使用
matlab
深色版本
add_block('stateflow/Chart', [modelName '/DemandResponseController']);
edit([modelName '/DemandResponseController']); % 打开 Stateflow 编辑器
% 在 Stateflow 中定义状态机
% 例如:根据实时电价调整负荷
% 状态1:正常运行
% 状态2:高电价时减少负荷
% 状态3:低电价时增加负荷
3. 连接和配置模型
- 连接各个模块 :
- 使用
connect_blocks函数连接各个模块。
- 使用
matlab
深色版本
connect_blocks([modelName '/Generator'], [modelName '/Load']);
connect_blocks([modelName '/Inverter'], [modelName '/Load']);
connect_blocks([modelName '/PV'], [modelName '/Inverter']);
connect_blocks([modelName '/WindTurbine'], [modelName '/Load']);
connect_blocks([modelName '/DCACConverter'], [modelName '/Load']);
- 设置仿真参数 :
- 设置仿真时间、采样时间、求解器类型等。
matlab
深色版本
set_param(modelName, 'StopTime', '86400'); % 24小时
set_param(modelName, 'Solver', 'ode23tb'); % 选择适合电力系统的 stiff 求解器
set_param(modelName, 'FixedStep', '0.001'); % 设置固定步长
- 频率和电压测量 :
- 使用
Voltage Measurement和Frequency Measurement模块测量系统的频率和电压,并将其输出到工作区。
- 使用
matlab
深色版本
add_block('powerlib/Specialized Power Systems/Sensors and Measurements/Frequency Measurement', [modelName '/FrequencyMeasurement']);
add_block('powerlib/Specialized Power Systems/Sensors and Measurements/Voltage Measurement', [modelName '/VoltageMeasurement']);
add_block('simulink/Sinks/To Workspace', [modelName '/FrequencyToWorkspace']);
set_param([modelName '/FrequencyToWorkspace'], 'VariableName', 'frequencyData');
add_block('simulink/Sinks/To Workspace', [modelName '/VoltageToWorkspace']);
set_param([modelName '/VoltageToWorkspace'], 'VariableName', 'voltageData');
connect_blocks([modelName '/FrequencyMeasurement'], [modelName '/FrequencyToWorkspace']);
connect_blocks([modelName '/VoltageMeasurement'], [modelName '/VoltageToWorkspace']);
4. 运行仿真
- 启动仿真 :
- 运行仿真并保存结果。
matlab
深色版本
sim(modelName); % 启动仿真
- 保存仿真结果 :
- 将仿真结果保存到
Results文件夹中。
- 将仿真结果保存到
matlab
深色版本
save(fullfile(projectPath, 'Results', 'SimulationResults.mat'), 'frequencyData', 'voltageData');
