槽式系统的控制
这个例子展示了如何使用鲁棒控制工具箱™设计鲁棒控制器(使用D-K迭代)和鲁棒性分析过程控制问题。在我们的示例中,植物是一个简单的“双槽系统。
额外的实验工作与这个系统是由史密斯等人描述在以下引用:
史密斯,R.S.,J. Doyle, M. Morari, and A. Skjellum, "A Case Study Using mu: Laboratory Process Control Problem," Proceedings of the 10th IFAC World Congress, vol. 8, pp. 403-415, 1987.
史密斯,R。年代,j·多伊尔,“两舱实验:基准控制问题,”美国程序控制会议,3卷,第415 - 403页,1988年。
史密斯,R.S.,和J. C. Doyle, "Closed Loop Relay Estimation of Uncertainty Bounds for Robust Control Models," in Proceedings of the 12th IFAC World Congress, vol. 9, pp. 57-60, July 1993.
植物的描述
植物在我们的示例中包含两个水箱在级联示意图见图1。上层舱(柜1)是由热水和冷水通过计算机控制的阀门。低柜(柜2)被水美联储退出1罐的底部。一个溢出保持一个恒定的水平槽2。冷水偏差流也饲料槽2,并使坦克能够有不同的稳态温度。
我们的设计目标是控制坦克的温度1和2。控制器访问参考命令和温度测量。
图1:槽式系统的原理图
坦克变量
我们给工厂变量以下名称:
fhc
:命令热流致动器跳频
:热水流入水箱1fcc
:命令冷流致动器足球俱乐部
:冷水流入水箱1f1
:总流出罐1A1
:水箱1的横截面积h1
:水箱水位t1
:水箱温度1t2
:水箱温度2A2
:坦克2的横截面积h2
2:水箱水位神奇动物
:坦克2偏差流的流量结核病
:水箱温度偏差流th
温度:热水供应tc
:冷供水温度
为了方便我们定义了一个系统的归一化单位如下:
变量单元名称0意味着:1的意思是:- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -温度tunit冷水temp.热水temp.高度hunit罐空罐满流funit零输入流马克斯。输入流
使用上面的单位,这些植物参数:
A1 = 0.0256;%的槽1 (hunits ^ 2)A2 = 0.0477;%的坦克2 (hunits ^ 2)h2 = 0.241;%柜高度2,固定溢出(hunits)fb = 3.28 e-5;%偏差流流(hunits ^ 3 /秒)fs = 0.00028;%流扩展(hunits ^ 3 /秒/ funit)th = 1.0;%热水供应临时(tunits)tc = 0.0;%冷水供应临时(tunits)结核病= tc;%冷偏差流临时(tunits)α= 4876;%恒流/高度关系(hunits / funits)β= 0.59;% (hunits)恒流/高度关系
变量fs是一个flow-scaling因素转换输入(0到1 funits)流入hunits ^ 3 /秒。常量α和β描述流/高关系罐1:
h1 =α* f1-beta。
名义上的坦克模型
我们可以获得名义坦克模型在以下操作点线性化(所有规范化值):
h1ss = 0.75;%对水箱水位1t1ss = 0.75;%的温度箱1f1ss = (h1ss +β)/α;%流槽1 - >坦克2fs = (th, tc, 1, 1) \ [t1ss * f1ss; f1ss];fhss = fs (1);%热流fcs = fs (2);%冷流t2ss = (f1ss * t1ss + fb *结核病)/ (f1ss + fb);%的温度槽2
坦克的名义模型1的输入(跳频
;足球俱乐部
)和输出(h1
;t1
]:
一个= 1 / (A1 *α),0;(β* t1ss) / (A1 * h1ss)、- (h1ss +β)/(α* A1 * h1ss)];B = f * [1 / (A1 *α),1 / (A1 *α);th / A1, tc / A1];C =[α,0;t1 * t1ss / h1ss, 1 / h1ss];D = 0 (2, 2);tank1nom = ss (A, B, C, D,“InputName”,{“跳频”,“俱乐部”},“OutputName”,{“标题”,“t1”});clf步骤(tank1nom)、标题(的一步反应罐1 ')
图2:反应罐1步。
坦克的名义模型2输入(t1 h1 | |: | |)和输出t2
:
= - (h1ssα+β+ * fb) / (A2 * h2 *α);B = [(t2ss + t1ss) /(α* A2 * h2), (h1ss +β)/(α* A2 * h2)];C = 1;D = 0 (1、2);tank2nom = ss (A, B, C, D,“InputName”,{“标题”,“t1”},“OutputName”,《终结者2》);步骤(tank2nom)、标题(“坦克2步反应”)
图3:反应罐2步。
致动器模型
有显著的动力学和饱和度与致动器相关联的,所以我们需要包括致动器模型。在我们使用的频率范围,我们可以模拟驱动器作为一阶系统率和饱和度的大小。速率限制,而不是杆位置,限制了致动器性能对大多数信号。对于一个线性模型,一些限制速度的影响可以被包括在一个扰动模型。
我们最初设立执行机构模型与一个输入(控制信号)和两个输出(驱动信号和它的导数)。我们将使用导数输出限制驱动率在设计控制律时。
act_BW = 20;%致动器带宽(rad /秒)致动器=[特遣部队(act_BW [1 act_BW]);特遣部队([act_BW 0], [1 act_BW])];致动器。OutputName = {“流”,“流量”};bodemag(执行机构)标题(阀门执行机构动力学的)hot_act =执行机构;集(hot_act,“InputName”,“fhc”,“OutputName”,{“跳频”,“fh_rate”});cold_act =执行机构;集(cold_act,“InputName”,“fcc”,“OutputName”,{“俱乐部”,“fc_rate”});
图4:阀门执行机构动力学。
抗锯齿过滤器
所有测量信号与四阶巴特沃斯滤波器过滤,每个截止频率为2.25赫兹。
fbw = 2.25;%抗混叠滤波器截止(赫兹)过滤器= mkfilt (fbw 4“Butterw”);h1F =过滤器;t1F =过滤器;t2F =过滤器;
不确定性模型动力学
开环实验揭示了一些变化在系统响应和表明,线性模型擅长低频率。如果我们不能考虑这些信息在设计,控制器可能会真正的系统上表现不佳。出于这个原因,我们将构建一个相匹配的不确定性模型估计不确定性的物理系统尽可能密切。因为模型不确定性或变化的数量通常取决于频率,我们的不确定性模型涉及到频率相关加权函数在频率规范化建模错误。
例如,开环实验表明大量的动态的不确定性t1
响应。这是主要是由于混合、热损失。我们可以作为一个模型错误Delta2在乘法(相对)模型t1
输出。同样的,我们可以添加Delta1和Delta3乘法模型错误h1
和t2
输出如图5所示。
图5:摄动的示意图表示,线性槽式系统。
完成模型的不确定性,我们量化建模错误多大作为频率的函数。虽然很难确定准确的数量不确定性系统中,我们可以寻找粗糙边界基于线性模型的频率范围是准确的还是贫穷,在这些情况下:
的名义模型
h1
非常准确的至少0.3赫兹。极限环实验
t1
循环建议不确定性应该主导高于0.02赫兹。大约有180度的附加相位滞后
t1
模型在0.02赫兹。还有一个显著的增益损失在这个频率。这些影响未建模动态混合的结果。在极限环实验
t2
循环建议不确定性应该主导高于0.03赫兹。
这个数据显示以下选择频率相关建模误差范围。
Wh1 = 0.01 +特遣部队([0.5,0],[0.25,1]);Wt1 = 0.1 +特遣部队((20 * h1ss 0], [0.2, 1]);Wt2 = 0.1 +特遣部队([100,0],[1,21]);clf bodemag (Wh1 Wt1、Wt2)、标题(的相对边界建模错误的)传说(“h1动力学”,“t1动力学”,“t2动力学”,“位置”,“西北”)
图6:相对边界建模错误。
现在,我们可以构建不确定的坦克模型,捕捉上述建模错误。
%归一化误差动力学delta1 = ultidyn (“delta1”[1]);delta2 = ultidyn (“delta2”[1]);delta3 = ultidyn (“delta3”[1]);%在h1频率相关的可变性,t1, t2动力学varh1 = 1 + delta1 * Wh1;vart1 = 1 + delta2 * Wt1;vart2 = 1 + delta3 * Wt2;%添加可变性名义模型tank1u = append (varh1 vart1) * tank1nom;tank2u = vart2 * tank2nom;tank1and2u = [0 1;tank2u] * tank1u;
接下来,我们随机样本的不确定性如何建模错误可能会影响坦克的反应
步骤(tank1u, 1000)、标题(由于建模误差的变化反应(罐1)”)
图7:由于建模误差变化反应(罐1)。
设置控制器的设计
现在让我们看看控制设计问题。我们感兴趣的是跟踪选点命令t1
和t2
。利用h∞设计算法,我们必须制定设计闭环增益最小化问题。为此,我们选择加权函数,捕获扰动特点和性能要求,帮助规范相应的频率相关约束。
这是一个合适的开环传递函数加权槽式的问题:
图8:控制设计为槽式系统互连。
接下来,我们为传感器噪声,选择权重选点命令,跟踪错误,和热/冷致动器。
传感器动态是微不足道的相对动力学系统的其余部分。这不是真正的传感器的噪声。潜在的噪音的来源包括电子噪声在热电偶补偿器,放大器,和过滤器,搅拌器的辐射噪声,和可怜的接地。我们使用平滑FFT分析来估计噪声水平,这表明以下重量:
Wh1noise = zpk (0.01);重量% h1噪音Wt1noise = zpk (0.03);重量% t1噪音Wt2noise = zpk (0.03);重量% t2噪音
重量误差惩罚选点跟踪错误t1
和t2
。我们将对这些权重选择一阶低通滤波器。我们用更高的体重(更好的跟踪)t1
因为物理因素导致我们相信t1
更容易控制比t2
。
Wt1perf =特遣部队(100年,[1]400年);% t1跟踪误差的重量Wt2perf =特遣部队(50,[1]800年);% t2跟踪误差的重量clf bodemag (Wt1perf Wt2perf)标题(“定位点跟踪错误频率相关处罚”)传说(“t1”,《终结者2》)
图9:频率相关罚款选点跟踪错误。
(定位点)权重反映频率的引用内容的命令。因为大部分的水流入水箱2来自槽1,变化t2
占主导地位的变化吗t1
。也t2
通常是吩咐一个值接近吗t1
。所以更有意义使用定位点权重表示的t1
和t2-t1
:
t1cmd = Wt1cmd * w1
t2cmd = Wt1cmd * w1 + Wtdiffcmd * w2
在w1 w2是白噪声输入。足够重量的选择是:
Wt1cmd = zpk (0.1);重量% t1输入命令Wtdiffcmd = zpk (0.01);重量% t2 - t1输入命令
最后,我们想要惩罚振幅和致动器的速度。我们通过权重fhc
(和fcc
)与高频率的函数,卷起。另外,我们可以创建一个执行机构模型跳频
和d | fh | / dt作为输出,和重量每个输出分别与恒定的权重。这种方法的优点是减少加权开环模型的状态数。
Whact = zpk (0.01);%热致动器点球Wcact = zpk (0.01);%冷致动器点球Whrate = zpk (50);%热致动器速度惩罚Wcrate = zpk (50);%冷致动器速度惩罚
建立一个加权的开环模型
现在我们有了所有植物建模组件和选择我们的设计重量,我们将使用连接
函数加权开环模型的构建不确定模型如图8所示。
输入= {“t1cmd”,“tdiffcmd”,“t1noise”,“t2noise”,“fhc”,“fcc”};输出= {“y_Wt1perf”,“y_Wt2perf”,“y_Whact”,“y_Wcact”,…“y_Whrate”,“y_Wcrate”,“y_Wt1cmd”,“y_t1diffcmd”,…“y_t1Fn”,“y_t2Fn”};hot_act。InputName =“fhc”;hot_act。OutputName = {“跳频”“fh_rate”};cold_act。InputName =“fcc”;cold_act。OutputName = {“俱乐部”“fc_rate”};tank1and2u。InputName ={“跳频”,“俱乐部”};tank1and2u。OutputName = {“t1”,《终结者2》};t1F。InputName =“t1”;t1F。OutputName =“y_t1F”;t2F。InputName =《终结者2》;t2F。OutputName =“y_t2F”;Wt1cmd。InputName =“t1cmd”;Wt1cmd。OutputName =“y_Wt1cmd”;Wtdiffcmd。InputName =“tdiffcmd”;Wtdiffcmd。OutputName =“y_Wtdiffcmd”;Whact。InputName =“跳频”;Whact。OutputName =“y_Whact”;Wcact。InputName =“俱乐部”;Wcact。OutputName =“y_Wcact”;Whrate。InputName =“fh_rate”;Whrate。OutputName =“y_Whrate”;Wcrate。InputName =“fc_rate”;Wcrate。OutputName =“y_Wcrate”;Wt1perf。InputName =“u_Wt1perf”;Wt1perf。OutputName =“y_Wt1perf”;Wt2perf。InputName =“u_Wt2perf”;Wt2perf。OutputName =“y_Wt2perf”;Wt1noise。InputName =“t1noise”;Wt1noise。OutputName =“y_Wt1noise”;Wt2noise。InputName =“t2noise”;Wt2noise。OutputName =“y_Wt2noise”;sum1 = sumblk (' y_t1diffcmd = y_Wt1cmd + y_Wtdiffcmd ');sum2 = sumblk (' y_t1Fn = y_t1F + y_Wt1noise ');sum3 = sumblk (' y_t2Fn = y_t2F + y_Wt2noise ');sum4 = sumblk (“u_Wt1perf = y_Wt1cmd - t1”);sum5 = sumblk (“u_Wt2perf = y_Wtdiffcmd + y_Wt1cmd - t2 ');%这生产状态空间模型的不确定性P =连接(tank1and2u hot_act、cold_act t1F, t2F, Wt1cmd, Wtdiffcmd, Whact,…Wcact, Whrate、Wcrate Wt1perf、Wt2perf Wt1noise, Wt2noise,…sum1、sum2 sum3、sum4 sum5,输入、输出);disp (的加权开环模型:)P
加权开环模型:不确定的连续时间10输出状态空间模型,6输入,18个州。模型不确定性包含以下模块:delta1:不确定1 x1 LTI,峰值增益= 1,1事件delta2:不确定1 x1 LTI,峰值增益= 1,1事件delta3:不确定1 x1 LTI,峰值增益= 1,1 P事件类型。NominalValue”的名义价值和“P。不确定性”与不确定的交互元素。
h∞控制器设计
通过构造权重和加权图8的开环,我们已经重新与闭环增益最小化控制问题。现在我们可以很容易地计算出一个gain-minimizing控制律的名义坦克模型:
n mea = 4;%的测量nctrls = 2;%的数量控制[k0, g0 gamma0] = hinfsyn (n mea, P.NominalValue nctrls);gamma0
gamma0 = 0.9016
最小的可实现的闭环增益大约是0.9,这说明我们的频域跟踪性能满足规范的控制器k0
。在时域模拟这种设计是一种合理的方式来检查,我们已经正确地设置性能权重。首先,我们创建一个闭环模型映射的输入信号t1ref
;t2ref
;t1noise
;t2noise
)的输出信号(h1
;t1
;t2
;fhc
;fcc
]:
输入= {“t1ref”,“t2ref”,“t1noise”,“t2noise”,“fhc”,“fcc”};输出= {“y_tank1”,“y_tank2”,“fhc”,“fcc”,“y_t1ref”,“y_t2ref”,…“y_t1Fn”,“y_t2Fn”};hot_act (1)。InputName =“fhc”;hot_act (1)。OutputName =“y_hot_act”;cold_act (1)。InputName =“fcc”;cold_act (1)。OutputName =“y_cold_act”;tank1nom。InputName = [hot_act (1)。OutputName cold_act (1) .OutputName];tank1nom。OutputName =“y_tank1”;tank2nom。InputName = tank1nom.OutputName;tank2nom。OutputName =“y_tank2”;t1F。InputName = tank1nom.OutputName (2);t1F。OutputName =“y_t1F”;t2F。InputName = tank2nom.OutputName;t2F。OutputName =“y_t2F”;I_tref = zpk(眼(2));I_tref。InputName = {“t1ref”,“t2ref”};I_tref。OutputName = {“y_t1ref”,“y_t2ref”};sum1 = sumblk (' y_t1Fn = y_t1F + t1noise ');sum2 = sumblk (' y_t2Fn = y_t2F + t2noise ');simlft =连接(tank1nom、tank2nom hot_act (1) cold_act (1) t1F, t2F, I_tref, sum1, sum2、输入、输出);%关闭循环的h∞控制器| k0 |sim_k0 =融通(simlft k0);sim_k0。InputName = {“t1ref”;“t2ref”;“t1noise”;“t2noise”};sim_k0。OutputName = {“标题”;“t1”;《终结者2》;“fhc”;“fcc”};
现在我们模拟闭环响应时增加的定位点t1
和t2
80秒至100秒:
时间= 0:800;t1ref =(> = 80 &时间< 100)。*(时间- 80)* -0.18/20 +…(> = 100)* -0.18;t2ref =(> = 80 &时间< 100)。*(时间- 80)* -0.2/20 +…(> = 100)* -0.2;t1noise = Wt1noise。k * randn(大小(时间));t2noise = Wt2noise。k * randn(大小(时间));y = lsim (sim_k0 [t1ref;t2ref;t1noise;t2noise)、时间);
接下来,我们将模拟输出添加到其稳态值和情节的响应:
h1 = h1ss + y (: 1);t1 = t1ss + y (:, 2);t2 = t2ss + y (:, 3);fhc = fhss / fs + y (:, 4);%注意伸缩执行机构fcc = fcs / fs + y (:, 5);%的限制(0 < = fhc < = 1)等。
在这段代码中,我们画出输出,t1
和t2
,以及高度h1
坦克的1:
情节(h1,“——”、时间t1,“- - -”、时间、t2,“-”。);包含(的时间(秒))ylabel (“测量”)标题(k0 h∞控制器的阶跃响应)传说(“标题”,“t1”,《终结者2》);网格
图10:阶跃响应的h∞控制器k0。
接下来我们情节冷热致动器的命令。
情节(时间、fhc“- - -”、时间、fcc、“-”。);包含(“时间:秒”)ylabel (“执行机构”)标题(“h∞控制器k0致动器的命令”)传说(“fhc”,“fcc”);网格
图11:致动器命令k0 h∞控制器。
h∞控制器的鲁棒性
h∞控制器k0
是专为名义坦克模型。让我们看看它的票价如何摄动模型在模型不确定性范围内。我们可以比较名义闭环性能gamma0
与最坏性能模型不确定性。(有关更多信息,请参见“模型动力学不确定性”)。
clpk0 =融通(P, k0);%计算和情节最坏的增益wcsigmaplot (clpk0{1的军医,1 e2}) ylim (-20 [10])
图12:控制器k0性能分析。
最坏的闭环性能明显比名义告诉我们,h∞控制器的性能k0
不是强大的建模错误。
μ控制器合成
为了弥补这种缺乏鲁棒性,我们将使用musyn
设计一个控制器,考虑模型的不确定性和提供一致的名义和摄动模型的性能。
[kmu, bnd] = musyn (P, n mea, nctrls);
D-K迭代总结:- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -鲁棒性能符合订单- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Iter K步峰μD适合D 1 8.814 2.862 2.888 4 2 4 10 3 1.351 1.329 1.337 2.497 2.091 2.112 1.201 1.198 1.209 18 5 18 6 1.194 1.191 1.199 1.192 1.19 1.195 20最好实现健壮的性能:1.19
像以前一样,我们可以模拟控制器的闭环响应kmu
sim_kmu =融通(simlft kmu);y = lsim (sim_kmu [t1ref; t2ref t1noise; t2noise],时间);h1 = h1ss + y (: 1);t1 = t1ss + y (:, 2);t2 = t2ss + y (:, 3);fhc = fhss / fs + y (:, 4);%注意伸缩执行机构fcc = fcs / fs + y (:, 5);%的限制(0 < = fhc < = 1)等。%情节t1 | |和| t2 |以及槽的高度h1 | | 1情节(h1,“——”、时间t1,“- - -”、时间、t2,“-”。);包含(“时间:秒”)ylabel (“测量”)标题(kmuμ控制器的阶跃响应)传说(“标题”,“t1”,《终结者2》);网格
图13:阶跃响应kmuμ的控制器。
这些反应是具有可比性的k0
,只显示一个轻微的性能下降。然而,kmu
关于鲁棒性未建模动态票价更好。
% kmu最糟糕的性能clpmu =融通(P, kmu);wcsigmaplot (clpmu{1的军医,1 e2}) ylim (-20 [10])
图14:控制器kmu性能分析。
您可以使用wcgain
直接计算最坏的增益在频率(最坏的峰值增益或最坏的h∞范数)。你也可以计算每个不确定元素的灵敏度。结果表明,最坏的峰值增益范围的变化最敏感delta2
。
选择= wcOptions (“敏感”,“上”);[wcg, wcu wcinfo] = wcgain (clpmu,选择);wcg
wcg =结构体字段:下界:1.3174 UpperBound: 1.3201 CriticalFrequency: 1.9350 e-11
wcinfo.Sensitivity
ans =结构体字段:delta1: 0 delta2: 60 delta3: 10