如果你的工厂是非线性的,控制器设计在特定目标区域进行操作可以在其他地区表现不佳。补偿的一种常见方式是创建多个控制器,每个控制器设计用于的操作条件的特定组合。然后,您可以在实时条件更改控制器之间进行切换。欲了解更多信息,请参阅获得预定MPC.
下面的示例演示如何协调为此多模型预测控制器。
该工厂包含两个群众,M1型
和平方米
连接到两个弹簧。与弹簧常数的弹簧K1
拉质量M1型
到右侧,并与弹簧常数的弹簧K2
拉质量平方米
在左边。操纵变量是一个拉力质量M1型
到左侧,示出如下面图中的红色箭头。
直到他们碰撞两个群众自由移动。碰撞是缺乏弹性的,与群众贴在一起,直到在施加的力的变化将它们隔开。因此,也有不同的动力系统的两种操作条件。
控制目标是使M1型
跟踪参考信号,在上一张图像中显示为蓝色三角形。只有M1型
还有一个接触传感器可用于反馈。
定义模型参数。
M1=1;群众%M2=5;k1=1;%弹簧常数k2=0.1;b1=0.3;%摩擦系数B2 = 0.8;yeq1 = 10;%壁挂位置是2=-10;
为质量不接触时创建状态空间模型;即当质量M1型
被自由移动。
A1=[0 1;-k1/M1-b1/M1];b1=[0;-1/M1 k1*yeq1/M1];C1=[1 0];D1=[0];sys1=ss(A1,b1,C1,D1);sys1=setmpcsignals(sys1,'中压'1,'总经理',2);
为连接体量时创建状态空间模型。
A2=[0 1;-(k1+k2)/(M1+M2)-(b1+b2)/(M1+M2)];b2=[0;-1/(M1+M2)(k1*yeq1+k2*yeq2)/(M1+M2)];C2=[1 0];D2=[0];sys2=ss(A2、b2、C2、D2);sys2=setmpcsignals(sys2,'中压'1,'总经理',2);
对于这两种型号:
各国所处的位置和速度M1型
.
输入为施加的力,即操纵变量(MV)和弹簧常数校准信号,即测量干扰(MD)。
输出是M1型
.
设计每个工厂的车型之一MPC控制器。两个控制器是除了它们的内部预测模型是相同的。
定义相同的采样时间,Ts公司
,预测范围,第页
,以及控制范围,米
,两个控制器。
TS = 0.2;P = 20;M = 1;
为每个工厂模型默认MPC控制器。
MPC1=mpc(sys1,Ts,p,m);MPC2=mpc(sys2,Ts,p,m);
-->“那”权重.操纵变量“mpc”对象的属性为空。假设默认值为0.00000。-->“那”权重。操纵变量日期“mpc”对象的属性为空。假设默认值为0.10000。-->“那”权重。输出变量“mpc”对象的属性为空。假设默认值为1.00000。-->“那”权重.操纵变量“mpc”对象的属性为空。假设默认值为0.00000。-->“那”权重。操纵变量日期“mpc”对象的属性为空。假设默认值为0.10000。-->“那”权重。输出变量“mpc”对象的属性为空。假设默认值为1.00000。
限定用于操作变量的约束。由于所施加的力不能改变方向,设置下限为零。此外,设置变化的输入力的最大速率。这些约束是两个控制器是相同的。
MPC1.MV =结构('最小',0,'最大',30岁,'RateMin',-10,'RateMax',10);MPC2.MV = MPC1.MV;
使用MPC控制器封锁。
打开Simulin金宝appk模型。
MDL ='mpc_switching';开放式系统(mdl)
在该模型中,地下M1子系统模拟块的运动M1型
,无论是自由移动还是连接到平方米
.大众M2子系统模拟质量M2的当它被自由移动的运动。模式选择和速度复位子系统坐标群众的碰撞和分离。
该模型包含开关逻辑,用于检测M1型
和平方米
是相同的。将得到的开关信号连接到所述转换
多个MPC控制器块的输入端口,并控制哪个MPC控制器处于活动状态。
指定每个质量的初始位置。
y1initial=0;y2initial=10;
要指定增益调度控制器,请双击“多个MPC控制器”块。在“块参数”对话框中,将控制器指定为控制器名称的单元数组。通过将每个控制器的状态指定为{ '[],'[]“}
.
点击好 啊.
运行模拟。
sim卡(mdl)
-->将模型转换为离散时间。-->假设被测输出信道#1的输出干扰为积分白噪声。-->“那”模型噪声“mpc”对象的属性为空。假设每个测量输出通道上有白噪声。-->将模型转换为离散时间。-->假设被测输出信道#1的输出干扰为积分白噪声。-->“那”模型噪声“mpc”对象的属性为空。假设每个测量输出通道上有白噪声。-->将模型转换为离散时间。-->假设被测输出信道#1的输出干扰为积分白噪声。-->“那”模型噪声“mpc”对象的属性为空。假设每个测量输出通道上有白噪声。
要查看仿真结果,请打开信号范围。
open_system([MDL“/信号”])
最初,MPC1
移动质量M1型
参考设定点。大约13秒,平方米
与碰撞M1型
. 开关信号从1变为2,从而将控制切换为MPC2
.
碰撞移动M1型
远离它的设定值和MPC2
很快返回组合群众的参考点。
在随后的基准信号转变,当群众分离和碰撞多元MPC控制器块之间切换MPC1
和MPC2
因此。其结果是,组合的群众中迅速沉降到参考点。
为了证明使用两个MPC控制器此应用程序的好处,模拟仅使用系统MPC2
.
改变MPC1
匹配MPC2
.
MPC1保存=MPC1;MPC1=MPC2;
运行模拟。
sim卡(mdl)
当群众没有联系,MPC2
施加过大的力,因为它需要更大的质量。这种激进的控制行为会产生振荡行为。一旦质量连接起来,控制性能就会提高,因为控制器就是针对这种情况设计的。
或者,改变MPC2
匹配MPC1
当质量块相连时,会导致控制动作迟缓和沉降时间过长。
套MPC1
回到原来的配置。
MPC1=MPC1保存;
为了减少在线计算量,你可以为每个操作条件明确MPC控制器,并使用实现增益定明确的MPC控制多个显式MPC控制器封锁。有关明确的MPC控制器的更多信息,请参阅显式MPC.
要创建显式MPC控制器,首先定义控制器状态、输入信号和参考信号的工作范围。
使用相应的传统的控制器创建显式MPC范围对象,MPC1
.
范围= generateExplicitRange(MPC1);
指定控制器状态范围。都MPC1
和MPC2
包含以下状态:
质量的位置和速度M1型
.
默认输出干扰模型的积分器。
如果可能的话,利用你对工厂的知识来定义状态范围。例如,第一个状态对应于M1型
,范围在-10到10之间。
当状态与物理参数(例如输出扰动模型状态)不对应时,设置状态变量的范围可能很困难。在这种情况下,使用带有典型参考和干扰信号的仿真来收集距离信息。对于此系统,您可以激活可选的估计状态
输出多个MPC控制器块,并使用作用域查看估计状态。模拟控制器响应时,使用覆盖预期工作范围的参考信号。
定义基于估计状态的范围明确MPC控制器状态范围。
范围.State.Min(:)=[-10;-8;-3];range.State.Max范围.State.Max(:)=[10;8;3];
限定用于参考信号的范围内。选择比所述更小的参照范围M1型
位置范围。
范围.Reference.Min=-8个;range.Reference.Max范围.Reference.Max=8个;
使用所定义的MV约束指定控制变量范围。
range.manipledvariable.Min范围.manipledvariable.Min=0;range.manipledvariable.Max范围.manipledvariable.Max=30个;
定义被测干扰信号的范围。由于测量的干扰是恒定的,所以在恒定值周围指定一个小范围,1个
.
量程测量干扰最小值=0.9;量程测量干扰最大值=1.1分;
创建一个显式MPC控制器,该控制器与MPC1
使用指定的范围对象。
expMPC1=生成explicitmpc(MPC1,范围);
发现/未探测区域:4/0
创建一个显式MPC控制器,该控制器与MPC2
. 自从MPC1
和MPC2
在相同的状态和输入范围上操作,并且具有相同的约束,您可以使用相同的范围对象。
expMPC2=生成explicitmpc(MPC2,范围);
发现/未探测区域:5/0
通常,不同控制器的显式MPC范围可能不匹配。例如,控制器可以具有不同的约束或状态范围。在这种情况下,为每个控制器创建一个单独的显式MPC range对象。
在实现增益调度显式MPC之前,验证每个显式MPC控制器的性能是一个很好的实践。例如,要比较MPC1
和expMPC1
使用模拟每个控制器的闭环响应SIM卡
.
r=[零(30,1);5*1(160,1);-5*1(160,1)];[Yimp,Timp,Uimp]=sim(mpc1350,r,1);[是xp,Texp,Uexp]=sim(expmpc1350,r,1);
-->将模型转换为离散时间。-->假设被测输出信道#1的输出干扰为积分白噪声。-->“那”模型噪声“mpc”对象的属性为空。假设每个测量输出通道上有白噪声。
比较两个控制器的工厂输出和操作变量序列。
图副区(2,1,1)图(TIMP,Yimp,“b-”,Texp,是xp,'R--')网格在xlabel公司('时间')伊拉贝尔('输出')标题('显式MPC验证')传说('隐式MPC','显式MPC')子地块(2,1,2)图(Timp,Uimp,“b-”,文本,Uexp,'R--')网格在伊拉贝尔('中压')xlabel公司('时间')
隐式和显式控制器的闭环响应和操纵变量序列相匹配。类似地,您可以验证expMPC2
反对MPC2
.
如果隐性和显性控制器的响应不匹配,调整明确MPC范围,并创建一个新的明确的MPC控制器。
为了实现增益定明确的MPC控制,更换多个MPC控制器与多个明确MPC控制器块阻塞。
扩展模型='mpc_switching_explicit';open_system(expModel)
要指定显式MPC控制器,请双击“多个显式MPC控制器”块。在“块参数”对话框中,将控制器指定为控制器名称的单元数组。通过将每个控制器的状态指定为{ '[],'[]“}
.
点击好 啊.
如果先前验证了显式MPC控制器,则替换和配置多个显式MPC控制器块应产生与多个MPC控制器块相同的结果。
运行模拟。
SIM(expModel)
要查看仿真结果,请打开信号范围。
打开系统([expModel“/信号”])
增益调度显式MPC控制器提供与增益调度隐式MPC控制器相同的性能。
bdclose('所有')