
✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 具体问题可以私信或扫描文章底部二维码。
(1) 风电退出调频引起的系统频率二次跌落问题及合理退出时刻的确定
随着大规模风电的接入,传统电力系统中的惯性逐渐被电力电子设备取代,导致系统的等效惯量降低。风电机组在参与调频过程中,其有功出力的变化对系统频率响应产生显著影响。特别是在风电机组退出调频时,系统频率可能出现二次跌落,这对电力系统的频率稳定性构成威胁。因此,合理确定风电退出调频的时刻成为研究的重点。
首先,建立了能够描述风电参与调频过程中有功出力变化的数学模型。该模型考虑了风电机组在不同工况下的转速、机械功率及有功出力的动态变化情况。基于经典的系统频率响应模型,推导出系统频率二次跌落程度与风电退出调频时刻之间的关系。通过分析,发现退出时刻的选择对系统频率二次跌落的幅度有直接影响。
以最小化系统频率二次跌落幅度为目标,提出了风电调频最优退出时刻的计算方法。然而,最优退出时刻的求解依赖于复杂的数值计算,并且受到风机运行工况、有功扰动幅度等多种因素的影响,实际工程应用中存在一定困难。为此,本文对风电参与调频过程的数学模型进行了简化,将最优退出时刻简化为仅与系统频率响应特性相关的固定退出时刻。固定退出时刻的确定基于系统频率的超调特性,确保在调频过程中风电机组能够在适当的时刻退出调频,避免系统频率出现过大的二次跌落。
最后,研究了系统调频参数的获取方法及风电调频功率的确定方法,建立了固定退出时刻在风电场中的应用策略。该策略充分利用了同步发电机的机械功率在一次调频期间的超调特性,实现了风电机组与同步发电机组在一次调频期间的协同配合,从而显著改善了系统频率二次跌落的程度,提升了电力系统的频率稳定性。
(2) 基于模型预测控制的风电场集中式惯量控制方法
在风电惯量参与调频过程中,风电场内部分风机可能出现转速过度下降,导致风电场的风能损失。此外,风电机组通常运行在最大功率点跟踪状态,调频过程中有功出力的变化可能导致风机偏离最大功率点,进一步加剧风能损失问题。为了应对这些挑战,提出了一种基于模型预测控制的风电场集中式惯量控制方法。
首先,建立了适用于模型预测控制的风电场预测模型。该模型能够准确描述风电场内不同工况下风电机组在调频过程中的转速、机械功率等动态变化情况。考虑到风电机组的非线性特性,避免了直接采用线性化模型带来的误差,从而提高了预测的准确性。
在此基础上,本文将改善风电机组转速过度下降和减少风电场风能损失作为目标,构建了基于模型预测的优化控制问题。通过收集风电机组的实时运行信息,并在调频过程中滚动求解优化控制问题,实现了风电场集中式惯量控制。该方法通过协同各风电机组的有功出力,避免了部分风机在调频过程中转速过度下降的问题,并显著减小了由于风机偏离最大功率点而造成的风电场风能损失。
此外,基于模型预测控制的方法提高了风电场运行的经济性。通过优化风电机组的有功出力分配,确保了风电场内不同风电机组之间的协同配合,进一步提升了风电场的整体运行效率和稳定性。该方法不仅改善了风电场的调频能力,还在一定程度上缓解了风电机组运行过程中可能出现的不稳定问题。
(3) 多风电场分层惯量控制框架的构建与实现
随着电力系统中风电规模的不断扩大,多风电场集群的接入成为必然趋势。在此背景下,如何在多个风电场之间实现有效的惯量控制,成为研究的关键问题。基于前述两项研究成果,本文提出了分层次、多目标的多风电场分层惯量控制框架。
该框架分为风电场集群控制层、风电场控制层和风机控制层三个层次。风电场集群控制层负责将风电调频固定退出时刻及其应用策略拓展到多风电场接入电力系统的场景。通过求解线性规划问题,确定系统对各风电场的调频功率需求,以改善整体系统的频率响应。
在风电场控制层和风机控制层,基于风电场集中式惯量控制的方法,采用交替方向乘子法将集中式惯量控制的最优控制问题分解为子问题,实现了在风机层面的分布式求解。这一方法有效地解决了由于风机数量庞大而导致的计算效率下降的问题,使得多风电场的惯量控制能够在合理的时间内完成。
该分层次、多目标的控制框架通过对运行状态不同的风电场和风电机组分配不同的调频功率,实现了风电场和风电机组两个层面的协同配合。具体而言,风电场集群控制层确保了整个风电集群在系统频率响应中的协调作用,而风电场控制层和风机控制层则确保了每个风电场内的各风电机组能够根据实际运行情况进行合理的调频功率分配。这种分层次的控制策略不仅提高了系统频率的响应速度和稳定性,还提升了风电场运行的经济性和可靠性。
通过该框架的实现,多个风电场能够在电力系统中协同工作,共同维护系统频率的稳定。同时,不同风电机组之间的协调配合,避免了单个风电场或风电机组在调频过程中出现过度调节的问题,进一步提升了电力系统整体的调频能力和抗扰动能力。
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import linprog
# 定义风电机组类
class WindTurbine:
def __init__(self, name, inertia, max_power, current_power):
self.name = name
self.inertia = inertia
self.max_power = max_power
self.current_power = current_power
self.power_reserve = self.max_power - self.current_power
def adjust_power(self, delta):
self.current_power += delta
if self.current_power > self.max_power:
self.current_power = self.max_power
elif self.current_power < 0:
self.current_power = 0
# 定义风电场类
class WindFarm:
def __init__(self, name, turbines):
self.name = name
self.turbines = turbines
def total_inertia(self):
return sum(turbine.inertia for turbine in self.turbines)
def total_power_reserve(self):
return sum(turbine.power_reserve for turbine in self.turbines)
def adjust_power_distribution(self, power_request):
# 线性规划优化分配
c = [-turbine.inertia for turbine in self.turbines] # 目标函数系数
A = [ [1 for _ in self.turbines] ]
b = [power_request]
bounds = [(0, turbine.power_reserve) for turbine in self.turbines]
res = linprog(c, A_eq=A, b_eq=b, bounds=bounds, method='highs')
if res.success:
for i, turbine in enumerate(self.turbines):
turbine.adjust_power(res.x[i])
else:
print(f"Optimization failed for wind farm {self.name}")
# 定义系统类
class PowerSystem:
def __init__(self, wind_farms, total_demand):
self.wind_farms = wind_farms
self.total_demand = total_demand
self.frequency = 50.0 # 初始频率
def simulate_frequency_response(self, disturbance):
# 简化的频率响应模型
total_inertia = sum(farm.total_inertia() for farm in self.wind_farms)
delta_f = disturbance / total_inertia
self.frequency -= delta_f
print(f"Frequency after disturbance: {self.frequency} Hz")
def control_frequency(self, power_request):
for farm in self.wind_farms:
farm.adjust_power_distribution(power_request)
def run_simulation(self, disturbances, power_requests):
for disturbance, power_request in zip(disturbances, power_requests):
self.simulate_frequency_response(disturbance)
self.control_frequency(power_request)
self.plot_system_state()
def plot_system_state(self):
frequencies = [self.frequency]
powers = [farm.total_power_reserve() for farm in self.wind_farms]
labels = [farm.name for farm in self.wind_farms]
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.plot(frequencies, 'o-')
plt.title('System Frequency')
plt.xlabel('Time')
plt.ylabel('Frequency (Hz)')
plt.subplot(1,2,2)
plt.bar(labels, powers)
plt.title('Power Reserve per Wind Farm')
plt.xlabel('Wind Farms')
plt.ylabel('Power Reserve (MW)')
plt.tight_layout()
plt.show()
# 创建风电机组实例
turbine1 = WindTurbine('WT1', inertia=5.0, max_power=100, current_power=80)
turbine2 = WindTurbine('WT2', inertia=4.5, max_power=90, current_power=70)
turbine3 = WindTurbine('WT3', inertia=5.5, max_power=110, current_power=90)
# 创建风电场实例
wind_farm1 = WindFarm('WindFarm1', [turbine1, turbine2])
wind_farm2 = WindFarm('WindFarm2', [turbine3])
# 创建电力系统实例
power_system = PowerSystem([wind_farm1, wind_farm2], total_demand=500)
# 定义扰动和调频功率请求
disturbances = [10, -5, 15]
power_requests = [20, -10, 30]
# 运行模拟
power_system.run_simulation(disturbances, power_requests)
1632

被折叠的 条评论
为什么被折叠?



