通过tunableSurface增益调度控制器调优,setBlockParam systune

18视图(30天)
我在这 教程 建立一个增益调度控制器
这是图:
我安排控制器使用变量α和马赫数exogenious信号。
我已经把系统分为muiltiple线性变量G在下面的代码部分。并建立了tunableSurface收益的两种PID控制器看到:Kp, Kt, Ki, a, b。这个问题发生在我试图调整这些参数。turtorial我设置2 d后查找表在每个控制器中,我。e Kp, Ki, Kt, a和b
并使用setBlockParam和systune优化收益。在查找表块我设置参数(随机表数据)。根据setBlockParam的解释,它应该帮我覆盖这些价值和最终找到最优的。然而,调优只能持续1 iter(最后:软= 1 e + 03,硬= 0.41421,= 1)迭代,它并没有改变我的价值。
足够奇怪,控制器调整和我完全相同的方式。但他们使用一个名为Kp_vec的变量。它只存在于模型的工作区。我不能没有找出它们生成!实施工作和这个Kp_vec并改变。
所以我想弄清楚这是什么Kp_vec我发现更令人毛骨悚然,即使我改变本教程的查找表价值模型(调整后),控制器的行为仍将是相同的。
我一直挣扎在这整整一天。也许我的控制器体系结构不正确,也许pid控制器对这种植物不够好吗?
无论如何,我将感激如果有人熟悉这个领域可以指出我的错误。或提供一种不同的方法将pid控制器。我只是一个新手在仿真软件和控制理论,但我觉万博1manbetx得它很有趣。告诉我如果你需要更多的代码或任何指定的问题。
我的代码如下:
清晰的
open_system (“空气动力学”)
EQp = 3
opspec = operspec (“空气动力学”(3、3))
MachEQ = linspace (1、3、EQp) '
EQp alphaEQ = linspace(0, 20日)”
qEQ = 0 (EQp EQp);
etaEQ = 0 (EQp EQp);
deltaEQ = 0 (EQp EQp);
我= 0
k = 1: EQp
j = 1: EQp
我+ 1 =
opspec (k, j) .Outputs (1) .y = alphaEQ (j)
opspec (k, j) .Outputs (1) .Known = true
opspec (k, j) .Inputs (2) .u = MachEQ (k)
opspec (k, j) .Inputs (2) .Known = true
结束
结束
(op、报告)= findop (“空气动力学”opspec,
findopOptions (“DisplayReport”,“关闭”));
我= 0
k = 1: EQp
j = 1: EQp
我+ 1 =
etaEQ (k, j) =报告(k, j) .Outputs (2) .y;
qEQ (k, j) =报告(k, j) .Outputs (3) .y;
deltaEQ (k, j) =报告(k, j) .Outputs (4) .y;
delta_cEQ (k, j) = op (k, j) .Inputs.u;
结束
结束
G =线性化(“空气动力学”,“气动/ plant1”,op);
G。InputName = {“马赫”,“delta_c”};
G。OutputName = {“α”,“埃塔”,“问”,“δ”};
%控制器= pidtune (G, pidf, 150)
趋于稳定(G,“elem”)
R1 = TuningGoal.Tracking (“eta_c”,“埃塔”,0.001);
MinDecay = 0.02;
MinDamping = 0.05;
%约束闭环极点的内循环与外循环开放
R2 = TuningGoal.Poles (“问”、MinDecay MinDamping);
R2。机会=“qSP”;
R4 = TuningGoal.Margins (“问”7、45);
(α,M] = ndgrid (alphaEQ MachEQ)
%
TuningGrid =结构(“α”α,“马赫”,M);
ShapeFcn = @ (a, M) (a、M * M];
Kp = tunableSurface (“金伯利进程”0 TuningGrid ShapeFcn);
Ki = tunableSurface (“吻”2 TuningGrid ShapeFcn);
Kt = tunableSurface (“Kt”0 TuningGrid ShapeFcn);
一个= tunableSurface (“一个”0 TuningGrid ShapeFcn);
b = tunableSurface (“b”0 TuningGrid ShapeFcn);
t = 0.01
Gd =汇集(G, Ts)
BlockSubs =结构(“名字”,“pidmat /工厂”,“价值”、Gd);
ST0 = slTuner (“pidmat”,{“金伯利进程”,“吻”,“Kt”,“一个”,“b”},BlockSubs);
ST0。Ts = t;%样本时间调优
%的兴趣点
ST0.addPoint ({“eta_c”,“埃塔”,“qSP”,“问”,“嘟”})
lookup_M = linspace (1、3、5)
5)lookup_a = linspace(0, 20日
lookup_Ma = lookup_M * lookup_a
m0 =的(5,5)
m1 = lookup_M *的(1、5)
m2 = (5 - 1) * lookup_a
m3 = lookup_Ma
%参数化查表块
ST0.setBlockParam (“金伯利进程”Kp);
ST0.setBlockParam (“吻”、Ki);
ST0.setBlockParam (“Kt”、Kt);
ST0.setBlockParam (“一个”,);
ST0.setBlockParam (“b”,b);
圣= systune (ST0 (R1, R2), R4);

答案(0)

标签

s manbetx 845


释放

R2022b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!