openfast与simlink联合仿真模型风电机组独立变桨控制与统一变桨控制。 独立变桨控制。 OpenFast联合仿真。风电机组的变桨控制就像给巨型风扇调档位——统一变桨三个叶片一起动独立变桨则让每个叶片自己玩节奏。今天咱们用OpenFAST和Simulink搭个联合仿真平台看看这两种控制方式到底有什么区别。先整点硬核的在Simulink里拖个S-Function模块把OpenFAST的FAST_SFunc.cpp编译成.mex文件扔进去。记得在OpenFAST输入文件里把CompInflow设成1让气动模块和控制系统分家。这时候Simulink就像个中枢神经每0.01秒抓一次叶片根部的My力矩传感器数据。看这段控制逻辑代码function PitchDemand IPC_Logic(My1, My2, My3) persistent integral_error; if isempty(integral_error) integral_error zeros(1,3); end Kp 0.8; Ki 0.05; error [My1, My2, My3] - mean([My1, My2, My3]); integral_error integral_error error*0.01; PitchDemand Kp*error Ki*integral_error; end这独立变桨控制器就是个加强版PID但给每个叶片单独算账。当1号叶片遇到阵风My1突增时控制器会单独给它加大桨距角另外两个叶片该干嘛干嘛。相比之下统一变桨就简单粗暴多了——三个桨叶同时动作代码里直接把error改成全局风速偏差就行。openfast与simlink联合仿真模型风电机组独立变桨控制与统一变桨控制。 独立变桨控制。 OpenFast联合仿真。联合仿真时最坑爹的是时钟同步。OpenFAST的CalcOutput和UpdateStates要分开调用得在Simulink里搞个使能子系统。有次我把这俩顺序搞反了结果仿真步长超过0.02秒就直接发散叶片扭矩数据飞得比风筝还高。后来发现得在模型配置参数里把代数环选项改成TrustUnderSpecifiedDeterminism才搞定。跑完仿真打开OpenFAST的*.outb文件用Python画个载荷对比图import pyFAST.output_reader as op data op.load_FAST_out(IPC_Test.outb) plt.plot(data[Time], data[BldPitch1], labelIPC) plt.plot(data[Time], data[BldPitch3], --, labelCPC) plt.xlabel(Time (s)) plt.ylabel(Pitch Angle (deg))明显能看到独立变桨的三个桨叶像在跳波浪舞而统一变桨动作整齐得像军训。但看叶片根部力矩的RMS值独立变桨能比统一变桨降15%载荷代价是变桨轴承磨损量多了20%。这买卖划不划算得看风电场是不是在台风区。最后吐槽下OpenFAST的文档找接口说明像在玩寻宝游戏。后来直接翻源码FAST_Library.f90发现控制输入居然是按照Azimuth角的位置来排序的。所以写通讯层代码时得注意当叶轮转过某个特定角度时才更新变桨指令否则会出现控制延迟导致振荡。
openfast与simlink联合仿真模型,风电机组独立变桨控制与统一变桨控制。 独立变桨控制
发布时间:2026/6/3 23:54:30
openfast与simlink联合仿真模型风电机组独立变桨控制与统一变桨控制。 独立变桨控制。 OpenFast联合仿真。风电机组的变桨控制就像给巨型风扇调档位——统一变桨三个叶片一起动独立变桨则让每个叶片自己玩节奏。今天咱们用OpenFAST和Simulink搭个联合仿真平台看看这两种控制方式到底有什么区别。先整点硬核的在Simulink里拖个S-Function模块把OpenFAST的FAST_SFunc.cpp编译成.mex文件扔进去。记得在OpenFAST输入文件里把CompInflow设成1让气动模块和控制系统分家。这时候Simulink就像个中枢神经每0.01秒抓一次叶片根部的My力矩传感器数据。看这段控制逻辑代码function PitchDemand IPC_Logic(My1, My2, My3) persistent integral_error; if isempty(integral_error) integral_error zeros(1,3); end Kp 0.8; Ki 0.05; error [My1, My2, My3] - mean([My1, My2, My3]); integral_error integral_error error*0.01; PitchDemand Kp*error Ki*integral_error; end这独立变桨控制器就是个加强版PID但给每个叶片单独算账。当1号叶片遇到阵风My1突增时控制器会单独给它加大桨距角另外两个叶片该干嘛干嘛。相比之下统一变桨就简单粗暴多了——三个桨叶同时动作代码里直接把error改成全局风速偏差就行。openfast与simlink联合仿真模型风电机组独立变桨控制与统一变桨控制。 独立变桨控制。 OpenFast联合仿真。联合仿真时最坑爹的是时钟同步。OpenFAST的CalcOutput和UpdateStates要分开调用得在Simulink里搞个使能子系统。有次我把这俩顺序搞反了结果仿真步长超过0.02秒就直接发散叶片扭矩数据飞得比风筝还高。后来发现得在模型配置参数里把代数环选项改成TrustUnderSpecifiedDeterminism才搞定。跑完仿真打开OpenFAST的*.outb文件用Python画个载荷对比图import pyFAST.output_reader as op data op.load_FAST_out(IPC_Test.outb) plt.plot(data[Time], data[BldPitch1], labelIPC) plt.plot(data[Time], data[BldPitch3], --, labelCPC) plt.xlabel(Time (s)) plt.ylabel(Pitch Angle (deg))明显能看到独立变桨的三个桨叶像在跳波浪舞而统一变桨动作整齐得像军训。但看叶片根部力矩的RMS值独立变桨能比统一变桨降15%载荷代价是变桨轴承磨损量多了20%。这买卖划不划算得看风电场是不是在台风区。最后吐槽下OpenFAST的文档找接口说明像在玩寻宝游戏。后来直接翻源码FAST_Library.f90发现控制输入居然是按照Azimuth角的位置来排序的。所以写通讯层代码时得注意当叶轮转过某个特定角度时才更新变桨指令否则会出现控制延迟导致振荡。