如果您的工厂是非线性的,设计用于在特定目标区域运行的控制器在其他区域可能表现不佳。一种常见的补偿方法是创建多个控制器,每个控制器都针对特定的操作条件组合设计。然后,随着条件的变化,您可以在控制器之间实时切换。有关更多信息,请参见Gain-Scheduled 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 = [0 1;k1 / M1 b1 / M1);B1 = [0 0;1 / M1 k1 * yeq1 / M1);C1 = [1 0];D1 = [0 0];sys1 = ss (A1, B1, C1, D1);sys1 = setmpcsignals (sys1,“MV”, 1“医学博士”2);
创建一个状态空间模型,用于群众连接。
A2 = [0 1;——(k1 + k2) / (M1 + M2) - (b1和b2) / (M1 + M2)];B2 = [0 0;1 / (M1 + M2) (k1 * yeq1 + k2 * yeq2) / (M1 + M2)];C2 = [1 0];D2 = [0 0];sys2 = ss (A2, B2 C2, D2);sys2 = setmpcsignals (sys2,“MV”, 1“医学博士”2);
对于这两个模型,
状态是的位置和速度M1
.
输入是施加的力,即操纵变量(MV)和弹簧常数校准信号,即测量扰动(MD)。
输出的位置是M1
.
为每个电厂模型设计一个MPC控制器。除了内部预测模型外,两个控制器是相同的。
定义相同的采样时间,Ts
,预测地平线,p
,和控制视界,米
,用于两个控制器。
t = 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。- - - >“权重。ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000. -->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000. -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.
为受操纵的变量定义约束。由于施加的力不能改变方向,所以将下限设为零。另外,设置输入力的最大变化率。这两个控制器的约束条件是相同的。
MPC1。MV =结构(“最小值”0,“马克斯”30岁的“杀鼠灵”, -10,“RateMax”10);MPC2。MV = MPC1.MV;
控件模拟控制器的性能MPC控制器块。
打开Simulin万博1manbetxk模型。
mdl =“mpc_switching”;open_system (mdl)
在该模型中,质量M1子系统模拟了质量的运动M1
,无论是自由移动时,还是连接时平方米
.质量M2子系统模拟了质量M2在自由运动时的运动。模态选择和速度重置子系统协调质量的碰撞和分离。
该模型包含切换逻辑,用于检测M1
和平方米
都是一样的。由此产生的切换信号连接到开关
多个MPC控制器块的导入,并控制哪个MPC控制器是活动的。
为每个物体指定初始位置。
y1initial = 0;y2initial = 10;
要指定增益计划控制器,双击“多个MPC控制器”模块。在“块参数”对话框中,将控制器指定为控制器名称的单元格数组。通过将状态指定为,将每个控制器的初始状态设置为它们各自的标称值{'[],'[]'}
.
点击好吧.
运行仿真。
sim (mdl)
——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。 -->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
要查看仿真结果,请打开信号范围。
open_system ([mdl' /信号'])
最初,MPC1
移动质量M1
到参考设定值。在大约13秒的时候,平方米
碰撞与M1
.开关信号由1变为2,将控制开关变为MPC2
.
碰撞的移动M1
远离它的设定值MPC2
快速地将混合质量返回到参考点。
在随后的参考信号转换过程中,当质量分离和碰撞时,多个MPC控制器块之间进行切换MPC1
和MPC2
相应的行动。因此,合并后的质量迅速沉降到参考点。
为了演示在这个应用中使用两个MPC控制器的好处,使用just来模拟系统MPC2
.
改变MPC1
匹配MPC2
.
MPC1save = MPC1;MPC1 = MPC2;
运行仿真。
sim (mdl)
当群众之间没有联系时,MPC2
施加过大的力,因为它需要更大的质量。这种攻击性的控制行为产生了振荡行为。一旦群众连接,控制性能提高,因为控制器是为这种情况而设计的。
另外,改变MPC2
匹配MPC1
当群众连接时,导致控制行动迟缓,沉降时间长。
集MPC1
回到它原来的结构。
MPC1 = MPC1save;
为了减少在线计算的工作量,您可以为每个工况创建一个显式MPC控制器,并使用增益计划显式MPC控制多个显式MPC控制器块。有关显式MPC控制器的更多信息,请参见明确的政策委员会.
要创建一个显式MPC控制器,首先定义控制器状态、输入信号和参考信号的操作范围。
使用相应的传统控制器创建一个显式MPC范围对象,MPC1
.
范围= generateExplicitRange (MPC1);
指定控制器状态的范围。这两个MPC1
和MPC2
包含状态:
质量的位置和速度M1
.
一个来自默认输出干扰模型的积分器。
如果可能的话,使用您的工厂知识来定义状态范围。例如,第一个状态对应的位置M1
,范围在-10到10之间。
当状态与物理参数不对应时,例如对于输出扰动模型状态,设置状态变量的范围可能会很困难。在这种情况下,使用典型参考信号和干扰信号的仿真来收集距离信息。对于这个系统,您可以激活可选的est.state
多个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.ManipulatedVariable.Min = 0;range.ManipulatedVariable.Max = 30;
定义被测干扰信号的范围。由于测量的扰动是恒定的,在该恒定值附近指定一个小范围,1
.
range.MeasuredDisturbance.Min = 0.9;range.MeasuredDisturbance.Max = 1.1;
创建一个显式MPC控制器MPC1
使用指定的范围对象。
expMPC1 = generateExplicitMPC (MPC1、范围);
已发现/未勘探区域:4/ 0
创建一个显式MPC控制器MPC2
.自MPC1
和MPC2
操作相同的状态和输入范围,并具有相同的约束,就可以使用相同的范围对象。
expMPC2 = generateExplicitMPC (MPC2、范围);
已发现/未勘探区域:5/ 0
一般来说,不同控制器的显式MPC范围可能不匹配。例如,控制器可能有不同的约束或状态范围。在这种情况下,为每个控制器创建一个单独的显式MPC范围对象。
在实现增益计划显式MPC之前,验证每个显式MPC控制器的性能是一个很好的实践。例如,比较性能MPC1
和expMPC1
,仿真每个控制器的闭环响应sim卡
.
1 r =[0(30日);5 * 1 (160 1);5 * 1 (160 1)];[Yimp, Timp Uimp] = sim (MPC1,350 r 1);[Yexp Texp,单边]= sim (expMPC1,350 r 1);
——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
比较两个控制器的对象输出和操纵变量序列。
图次要情节(2,1,1)情节(Timp Yimp,“b -”Texp Yexp,“r——”网格)在包含(“时间(s)”) ylabel (“输出”)标题(“明确的MPC验证”)传说(“隐式政策委员会”,“明确的政策委员会”次要情节(2,1,2)情节(Timp Uimp,“b -”Texp单边递减,“r——”网格)在ylabel (“MV”)包含(“时间(s)”)
隐式控制器和显式控制器的闭环响应和操纵变量序列是匹配的。类似地,您可以验证expMPC2
对的MPC2
.
如果隐式和显式控制器的响应不匹配,调整显式MPC范围,并创建一个新的显式MPC控制器。
为了实现增益调度的显式MPC控制,可以用“多显式MPC控制器”块代替“多显式MPC控制器”块。
expModel =“mpc_switching_explicit”;open_system (expModel)
要指定显式MPC控制器,双击“多个显式MPC控制器”块。在“块参数”对话框中,将控制器指定为控制器名称的单元格数组。通过将状态指定为,将每个控制器的初始状态设置为它们各自的标称值{'[],'[]'}
.
点击好吧.
如果您之前验证了您的显式MPC控制器,那么替换和配置多个显式MPC控制器块应该产生与多个MPC控制器块相同的结果。
运行仿真。
sim (expModel)
要查看仿真结果,请打开信号范围。
open_system ([expModel' /信号'])
增益调度显式MPC控制器提供与增益调度隐式MPC控制器相同的性能。
bdclose (“所有”)