如果您的设备是非线性的,设计用于在特定目标区域运行的控制器在其他区域的性能可能较差。一种常见的补偿方法是创建多个控制器,每个控制器针对特定的操作条件组合而设计。然后,随着条件的变化,您可以在控制器之间实时切换。有关详细信息,请参阅增益计划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;%壁挂式位置yeq2=-10;
为体量不接触时(即体量不接触时)创建状态空间模型M1
他行动自如。
A1=[01;-k1/M1-b1/M1];b1=[00;-1/M1 k1*yeq1/M1];C1=[10];D1=[00];sys1=ss(A1,b1,C1,D1);sys1=setmpcsignals(sys1,“MV”1.“MD”,2);
创建体量连接时的状态空间模型。
A2=[01;-(k1+k2)/(M1+M2)-(b1+b2)/(M1+M2)];B2=[0;-1/(M1+M2)(k1*yeq1+k2*yeq2)/(M1+M2)];C2=[10];D2=[0];sys2=ss(A2,B2,C2,D2);sys2=setmpcsignals(sys2,“MV”1.“MD”,2);
对于这两种型号,以下选项:
状态是物体的位置和速度M1
.
输入为作用力,即操纵变量(MV)和弹簧常数校准信号,即测量的扰动(MD)。
输出是输出的位置M1
.
为每个对象模型设计一个MPC控制器。除内部预测模型外,两个控制器完全相同。
定义相同的采样时间,Ts
,预测范围,P
,和控制地平线,M
,用于两个控制器。
Ts=0.2;p=20;m=1;
为每个工厂模型创建默认MPC控制器。
MPC1=mpc(sys1,Ts,p,m);MPC2=mpc(sys2,Ts,p,m);
-->“mpc”对象的“Weights.manufacturedVariables”属性为空。“mpc”对象的“Weights.manufacturedVariablesRate”属性为空。“mpc”对象的“Weights.OutputVariables”属性为空。“mpc”对象的“Weights.OutputVariables”属性为空。“mpc”对象的“Weights.manufacturedVariables”属性为空。假设默认值为1.00000。-->“mpc”对象为空。假设默认值为0.00000。-->“mpc”对象的“Weights.manufactedVariablesRate”属性为空。“mpc”对象的“Weights.OutputVariables”属性为空。假设默认值为1.00000。
为操纵变量定义约束。由于施加的力不能改变方向,因此将下限设置为零。另外,设置输入力的最大变化率。这两个控制器的约束相同。
MPC1.MV=struct(“敏”,0,“马克斯”,30,“RateMin”,-10,“RateMax”,10); MPC2.MV=MPC1.MV;
使用MPC控制器块
打开Simulin万博1manbetxk模型。
mdl=“mpc_切换”; 开放式系统(mdl)
在模型中,质量M1子系统模拟质量的运动M1
,无论是在自由移动还是连接到平方米
。质量M2子系统模拟质量M2自由移动时的运动。模式选择和速度重置子系统协调质量的碰撞和分离。
该模型包含开关逻辑,用于检测M1
和平方米
都是一样的。产生的开关信号连接到转换
输入多个MPC控制器块,并控制哪个MPC控制器处于活动状态。
指定每个体量的初始位置。
y1initial=0;y2initial=10;
要指定增益计划控制器,请双击“多个MPC控制器”块。在“块参数”对话框中,将控制器指定为控制器名称的单元格数组。通过将状态指定为,将每个控制器的初始状态设置为各自的标称值{'[],'[]'}
.
点击好啊.
运行模拟。
sim卡(mdl)
-->将模型转换为离散时间。-->假设添加到测量输出通道#1的输出干扰为积分白噪声。-->“mpc”的“模型噪声”特性对象为空。假设每个测量输出通道上存在白噪声。-->将模型转换为离散时间。-->假设添加到测量输出通道#1的输出干扰为集成白噪声。-->“mpc”的“模型噪声”属性对象为空。“mpc”对象的“model.noise”属性为空。“mpc”对象的“model.noise”属性为空。“mpc”对象的“model.noise”属性为空。“mpc”对象的“model.noise”属性为空。“mpc”对象的“model.noise”属性为空。
要查看模拟结果,请打开信号范围。
开放式系统([mdl“/信号”])
开始MPC1
移动质量M1
至参考设定点。大约13秒时,平方米
碰撞M1
.开关信号从1变为2,从而将控制切换为MPC2
.
碰撞移动M1
远离其设定点和MPC2
快速将组合质量返回到参考点。
在随后的参考信号转换过程中,当质量分离和碰撞时,多个MPC控制器块之间切换MPC1
和MPC2
因此,组合质量迅速沉降到参考点。
为了演示在该应用程序中使用两个MPC控制器的好处,只需使用MPC2
.
改变MPC1
相配MPC2
.
MPC1save=MPC1;MPC1=MPC2;
运行模拟。
sim卡(mdl)
当群众没有联系时,,MPC2
施加过大的力,因为它需要更大的质量。这种激进的控制行为会产生振荡行为。一旦质量连接起来,控制性能就会提高,因为控制器就是针对这种情况设计的。
或者,改变MPC2
相配MPC1
当质量块连接时,会导致控制动作迟缓,沉降时间长。
设置MPC1
返回其原始配置。
MPC1=MPC1保存;
为了减少在线计算工作量,您可以为每个操作条件创建显式MPC控制器,并使用多显式MPC控制器有关显式MPC控制器的更多信息,请参阅显式MPC.
要创建显式MPC控制器,首先定义控制器状态、输入信号和参考信号的工作范围。
使用相应的传统控制器创建显式MPC范围对象,MPC1
.
范围=generateExplicitRange(MPC1);
指定控制器状态的范围。两者MPC1
和MPC2
包含以下方面的国家:
质量的位置和速度M1
.
来自默认输出干扰模型的积分器。
如果可能,利用您对工厂的了解来定义状态范围。例如,第一个状态对应于M1
,其范围介于-10和10之间。
当状态与物理参数(例如输出扰动模型状态)不对应时,设置状态变量的范围可能会很困难。在这种情况下,使用典型参考和扰动信号的模拟收集范围信息。对于此系统,您可以激活可选的东部州立大学
多个MPC控制器块的输出端口,并使用示波器查看估计状态。模拟控制器响应时,使用覆盖预期工作范围的参考信号。
根据估计的状态范围定义显式MPC控制器的状态范围。
range.State.Min(:)=[-10;-8;-3];range.State.Max(:)=[10;8;3];
定义参考信号的范围。选择一个小于当前值的参考范围M1
位置范围。
range.Reference.Min=-8;range.Reference.Max=8;
使用定义的MV约束指定操纵变量范围。
range.manufacturedVariable.Min=0;range.manufacturedVariable.Max=30;
定义测量的干扰信号的范围。由于测量的干扰是恒定的,请在恒定值周围指定一个小范围,1.
.
range.measuredDistributance.Min=0.9;range.measuredDistributance.Max=1.1;
创建一个显式MPC控制器,该控制器对应于MPC1
使用指定的范围对象。
expMPC1=生成explicitmpc(MPC1,范围);
发现/未勘探区域:4/0
创建一个显式MPC控制器,该控制器对应于MPC2
. 自从MPC1
和MPC2
在相同的状态和输入范围内操作,并且具有相同的约束,可以使用相同的范围对象。
expMPC2=生成explicitmpc(MPC2,范围);
发现/未勘探区域:5/0
通常,不同控制器的显式MPC范围可能不匹配。例如,控制器可能具有不同的约束或状态范围。在这种情况下,为每个控制器创建单独的显式MPC范围对象。
在实现增益调度的显式MPC之前,最好先验证每个显式MPC控制器的性能MPC1
和expMPC1
,使用模拟
.
r=[0(30,1);[5*1(160,1);-5*1(160,1)];[Yimp,Timp,Uimp]=sim(mpc1350,r,1);[Yexp,Texp,Uexp]=sim(expmpc1350,r,1);
-->将模型转换为离散时间。-->假设添加到测量输出通道#1的输出干扰为集成白噪声。-->“mpc”对象的“model.noise”属性为空。假设每个测量输出通道上存在白噪声。
比较两个控制器的设备输出和操纵变量序列。
图子地块(2,1,1)图(Timp、Yimp、,“b-”,Texp,Yexp,“r——”)网格在…上xlabel(‘时间’)伊拉贝尔(“输出”)头衔(“显式MPC验证”)传奇(“隐式MPC”,“显式MPC”)子地块(2,1,2)地块(Timp、Uimp、,“b-”,Texp,Uexp,“r——”)网格在…上伊拉贝尔(“MV”)xlabel(‘时间’)
隐式和显式控制器的闭环响应和操纵变量序列匹配。类似地,您可以验证expMPC2
反对MPC2
.
如果隐式和显式控制器的响应不匹配,请调整显式MPC范围,并创建新的显式MPC控制器。
要实现增益调度的显式MPC控制,请将多个MPC控制器块替换为多个显式MPC控制器块。
扩展模型=“mpc\u切换\u显式”;开放式系统(EXP模型)
要指定显式MPC控制器,请双击“多个显式MPC控制器”块。在“块参数”对话框中,将控制器指定为控制器名称的单元数组。通过将状态指定为,将每个控制器的初始状态设置为各自的标称值{'[],'[]'}
.
点击好啊.
如果之前验证了显式MPC控制器,则替换和配置多个显式MPC控制器块应产生与多个MPC控制器块相同的结果。
运行模拟。
sim卡(expModel)
要查看模拟结果,请打开信号范围。
开放式系统([expModel“/信号”])
增益调度显式MPC控制器提供与增益调度隐式MPC控制器相同的性能。
bdclose(“全部”)