主要内容

在多个工作点安排控制器

如果您的工厂是非线性的,设计用于在特定目标区域运行的控制器可能在其他区域表现不佳。一种常见的补偿方法是创建多个控制器,每个控制器都针对特定的操作条件组合设计。然后,当情况发生变化时,您可以在控制器之间实时切换。有关更多信息,请参见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 = [10 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 = [10 0];D2 = [0 0];sys2 = ss(A2,B2,C2,D2);Sys2 = setmpcsignals(Sys2,“MV”, 1“医学博士”2);

对于这两个模型,:

  • 状态是物体的位置和速度M1

  • 输入是施加的力,这是操纵变量(MV),和弹簧常数校准信号,这是一个测量扰动(MD)。

  • 输出是的位置M1

MPC控制器设计

为每个装置模型设计一个MPC控制器。两个控制器除了内部预测模型外是相同的。

定义相同的采样时间,Ts,预测视界,p,控制视界,,对于两个控制器。

Ts = 0.2;P = 20;M = 1;

为每个工厂模型创建默认的MPC控制器。

MPC1 = mpc(sys1,Ts,p,m);MPC2 = mpc(sys2,Ts,p,m);
- - - >“权重。“mpc”对象的“ManipulatedVariables”属性为空。假设默认值为0.00000。- - - >“权重。对象的“mpc”属性为空。假设默认为0.10000。- - - >“权重。mpc对象的OutputVariables属性为空。假设默认值为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 = struct(“最小值”0,“马克斯”30岁的“杀鼠灵”, -10,“RateMax”10);MPC2。Mv = mpc1.mv;

模拟增益调度控制器

控件模拟控制器的性能MPC控制器块。

打开Simulin金宝appk模型。

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控制器相比

为了演示在此应用程序中使用两个MPC控制器的好处,请使用MPC2

改变MPC1匹配MPC2

MPC1save = MPC1;Mpc1 = mpc2;

运行模拟。

sim (mdl)

当群众之间没有联系时,MPC2施加过大的力,因为它期望更大的质量。这种激进的控制行为产生振荡行为。一旦质量连接,控制性能提高,因为控制器是为这种情况而设计的。

另外,改变MPC2匹配MPC1当群众相互连接时,导致控制动作迟缓,沉降时间长。

MPC1回到原来的构型。

MPC1 = MPC1save;

创建显式MPC控制器

为了减少在线计算工作量,您可以为每个操作条件创建显式MPC控制器,并使用多个显式MPC控制器块。有关显式MPC控制器的更多信息,请参见明确的政策委员会

要创建显式MPC控制器,首先定义控制器状态、输入信号和参考信号的工作范围。

使用相应的传统控制器创建显式MPC范围对象,MPC1

range = 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. measured扰动。min = 0.9;range. measureddisturbed . max = 1.1;

创建一个显式的MPC控制器,对应于MPC1使用指定的范围对象。

expMPC1 = generateExplicitMPC(MPC1,range);
已发现/未开发区域:4/ 0

创建一个显式的MPC控制器,对应于MPC2.自MPC1而且MPC2在相同的状态和输入范围上进行操作,并且具有相同的约束,则可以使用相同的范围对象。

expMPC2 = generateExplicitMPC(MPC2,range);
已发现/未开发地区:5/ 0

一般情况下,不同控制器的显式MPC范围可能不匹配。例如,控制器可能具有不同的约束或状态范围。在这种情况下,为每个控制器创建一个单独的显式MPC范围对象。

验证显式MPC控制器

在实现增益调度的显式MPC之前,验证每个显式MPC控制器的性能是一个很好的实践。例如,比较的性能MPC1而且expMPC1,模拟各控制器的闭环响应sim卡

R = [0 (30,1);5 * 1 (160 1);5 * 1 (160 1)];[Yimp,Timp,Uimp] = sim(MPC1,350,r,1);[Yexp,Texp,Uexp] = sim(expMPC1,350,r,1);
——>转换模型到离散时间。假设添加到测量输出通道#1的输出扰动是集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

比较两个控制器的设备输出和操纵变量序列。

图subplot(2,1,1) plot(Timp,Yimp,“b -”Texp Yexp,“r——”网格)包含(“时间(s)”) ylabel (“输出”)标题(“显式MPC验证”)传说(“隐式政策委员会”“明确的政策委员会”) subplot(2,1,2) plot(Timp,Uimp,“b -”Texp单边递减,“r——”网格)ylabel (“MV”)包含(“时间(s)”

隐式控制器和显式控制器的闭环响应和操纵变量序列匹配。类似地,您可以验证的性能expMPC2相对于MPC2

如果隐式控制器和显式控制器的响应不匹配,请调整显式MPC范围,并创建新的显式MPC控制器。

模拟增益计划显式MPC

要实现增益调度的显式MPC控制,将“Multiple MPC Controllers”块替换为“Multiple explicit MPC Controllers”块。

expModel =“mpc_switching_explicit”;open_system (expModel)

若要指定显式MPC控制器,请双击“多个显式MPC控制器”块。在“块参数”对话框中,将控制器指定为控制器名称的单元格数组。通过指定状态为,将每个控制器的初始状态设置为各自的标称值{'[],'[]'}

点击好吧

如果您之前验证了显式MPC控制器,那么替换和配置“多个显式MPC控制器”块应该产生与“多个MPC控制器”块相同的结果。

运行模拟。

sim (expModel)

要查看模拟结果,请打开信号范围。

open_system ([expModel' /信号'])

增益调度显式MPC控制器提供与增益调度隐式MPC控制器相同的性能。

bdclose (“所有”

另请参阅

|

相关的话题