主要内容

在多个操作点安排控制器

如果您的工厂是非线性的,设计用于在特定目标区域运行的控制器在其他区域可能表现不佳。一种常见的补偿方法是创建多个控制器,每个控制器都针对特定的操作条件组合设计。然后,随着条件的变化,您可以在控制器之间实时切换。有关更多信息,请参见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控制器设计

为每个电厂模型设计一个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;

模拟Gain-Scheduled控制器

控件模拟控制器的性能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控制器块之间进行切换MPC1MPC2相应的行动。因此,合并后的质量迅速沉降到参考点。

与单MPC控制器比较

为了演示在这个应用中使用两个MPC控制器的好处,使用just来模拟系统MPC2

改变MPC1匹配MPC2

MPC1save = MPC1;MPC1 = MPC2;

运行仿真。

sim (mdl)

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

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

MPC1回到它原来的结构。

MPC1 = MPC1save;

创建显式MPC控制器

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

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

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

范围= generateExplicitRange (MPC1);

指定控制器状态的范围。这两个MPC1MPC2包含状态:

  • 质量的位置和速度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.自MPC1MPC2操作相同的状态和输入范围,并具有相同的约束,就可以使用相同的范围对象。

expMPC2 = generateExplicitMPC (MPC2、范围);
已发现/未勘探区域:5/ 0

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

验证显式MPC控制器

在实现增益计划显式MPC之前,验证每个显式MPC控制器的性能是一个很好的实践。例如,比较性能MPC1expMPC1,仿真每个控制器的闭环响应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控制器”块代替“多显式MPC控制器”块。

expModel =“mpc_switching_explicit”;open_system (expModel)

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

点击好吧

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

运行仿真。

sim (expModel)

要查看仿真结果,请打开信号范围。

open_system ([expModel' /信号'])

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

bdclose (“所有”

另请参阅

|

相关的话题