主要内容

多个操作点的安排控制器

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

下面的示例演示了如何为此目的协调多个模型预测控制器。

植物模型

这种植物有两个部分,M1M2,连接两个弹簧。具有弹簧常数的弹簧k1把质量M1向右,和一个弹簧,弹簧常数k2把质量M2靠左。操纵变量是一个力拉动质量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'MD'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'MD'2);

对于两种模型,:

  • 状态是的位置和速度M1

  • 输入是施加的力,即操纵变量(MV)和弹簧恒定校准信号,其是测量的干扰(MD)。

  • 输出是位置M1

设计MPC控制器

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

定义相同的采样时间,TS.,预测地平线,P.和控制地平线,M.,用于两个控制器。

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.0万。- >“MPC”对象的“权重”属性为空。假设默认为0.00000。- >“MPC”对象的“权重”属性为空。假设默认为0.10000。 -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

为受操纵的变量定义约束。由于施加的力不能改变方向,所以将下限设为零。另外,设置输入力的最大变化率。这两个控制器的约束条件是相同的。

MPC1。MV =结构('min'0,'最大限度',30,“杀鼠灵”,-10,“RateMax”10);MPC2。MV = MPC1.MV;

模拟增益预定的控制器

模拟控制器的性能使用MPC控制器块。

打开Simulin金宝appk模型。

mdl =“mpc_switching”;Open_System(MDL)

在该模型中,质量M1子系统模拟了质量的运动M1,两者何时自由地移动和连接到M2.质量M2子系统模拟了质量M2在自由运动时的运动。模态选择和速度重置子系统协调质量的碰撞和分离。

该模型包含切换逻辑,检测何时的位置M1M2都是一样的。由此产生的切换信号连接到转变在多个MPC控制器块的Inport,并控制哪些MPC控制器处于活动状态。

为每个物体指定初始位置。

Y1initial = 0;Y2initial = 10;

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

点击好的

运行仿真。

SIM(MDL)
- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。 -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

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

open_system ([mdl'/信号'])

最初,MPC1移动质量M1到参考设定值。大约13秒,M2碰撞与M1.切换信号从1到2变为2,切换控制MPC2

碰撞移动M1远离它的设定值MPC2快速地将混合质量返回到参考点。

在随后的参考信号转换过程中,当质量分离和碰撞时,多个MPC控制器块之间进行切换MPC1MPC2相应的行动。因此,合并后的质量迅速沉降到参考点。

与单个MPC控制器进行比较

为了演示使用两个MPC控制器的益处,可以使用即可模拟系统MPC2

改变MPC1匹配MPC2

MPC1SAVE = MPC1;MPC1 = MPC2;

运行仿真。

SIM(MDL)

当群众没有连接时,MPC2施加过度的力,因为它预计大量质量。这种激进的控制作用会产生振荡行为。一旦质量连接,控制性能会改善,因为控制器专为这种情况而设计。

或者,改变MPC2匹配MPC1导致群众连接的控制行动和长度稳定时间。

MPC1回到它原来的结构。

mpc1 = mpc1save;

创建显式MPC控制器

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

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

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

范围= generateExplicitRange (MPC1);

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

  • 质量的位置和速度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.ManipuldVariaire.min = 0;Range.ManipuldVariaire.max = 30;

定义测量干扰信号的范围。由于测量的干扰是恒定的,因此在恒定值周围指定一个小范围,1

范围..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卡

r = [零(30,1);5 *那些(160,1);-5 *(160,1)];[YIMP,TIMP,UIMP] = SIM(MPC1,350,R,1);[YEXP,TEXP,UEXP] = SIM(ExpMPC1,350,R,1);
- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。

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

图次要情节(2,1,1)情节(Timp Yimp,'b-',texp,yexp,“r——”网格)Xlabel('时间(s)')ylabel('输出')标题('显式MPC验证') 传奇('隐含MPC''明确的MPC')子图(2,1,2)绘图(TIMP,UIMP,'b-',texp,Uexp,“r——”网格)ylabel('mv')Xlabel('时间(s)'的)

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

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

模拟增益预定的显式MPC

为了实现增益调度的显式MPC控制,可以用“多显式MPC控制器”块代替“多显式MPC控制器”块。

expmodel ='mpc_switching_explict';open_system (expModel)

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

点击好的

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

运行仿真。

sim (expModel)

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

Open_System([ExpModel'/信号'])

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

bdclose (“所有”的)

也可以看看

|

相关话题