主要内容

在命令行上设计MPC控制器

这个例子展示了如何从命令行创建和测试模型预测控制器。

定义植物模型

此示例使用中描述的工厂模型使用MPC设计器设计控制器.创建设备的状态空间模型,并设置一些可选的模型属性,如输入、状态和输出变量的名称和单位。

%以温度为第一输出的连续时间状态空间矩阵A = [-5 -0.3427;47.68 - 2.785);B = [0 1 0.3 0];C = [0 1;1 0];D = 0 (2, 2);创建状态空间植物模型CSTR=ss(A,B,C,D);%定名CSTR.InputName={‘T_c’,“C_A_f”};%设置输入变量的名称装运箱。OutputName = {“不”,“C_A”};%设置输出变量的名称CSTR.StateName={“C_A”,“不”};设置状态变量的名称%设置单位CSTR.InputUnit={“度K”,' kmol / m ^ 3 '};%设置输入变量的单位CSTR.OutputUnit={“度K”,' kmol / m ^ 3 '};%设置输出变量的单位CSTR.StateUnit={' kmol / m ^ 3 ',“度K”};%设置状态变量的单位

请注意,该模型是从工作点周围的非线性模型线性化中推导出来的。因此,线性模型输入和输出信号的值表示非线性模型中相对于其工作点值的偏差。有关更多信息,请参阅用MATLAB实现线性化

将输入和输出信号分配给不同的MPC类别。

冷却剂温度为操纵变量(MV),流入试剂浓度为未测量干扰输入(UD),反应堆温度为测量输出(MO),试剂浓度为未测量输出(UO)。

CSTR=设置MPCSignals(CSTR,“MV”,1,“UD”,2,“莫”,1,“UO”2);

显示基本设备属性并绘制阶跃响应

使用潮湿的显示线性植物模型极点的阻尼比、固有频率和时间常数。

阻尼(CSTR)
磁极阻尼频率时间常数(rad/秒)(秒)-1.11e+00+1.09e+00i 7.13e-01 1.55e+00 9.03e-01-1.11e+00-1.09e+00i 7.13e-01 1.55e+00 9.03e-01

绘制开环阶跃响应。

步骤(装运箱)

考虑到设备的标称稳定性,约1秒的时间常数表示采样时间不大于0.5秒。采样时间为0.5秒时,10步的预测范围可以覆盖开环设备的整个沉降时间,因此您可以使用这两个参数进行初始猜测。更短的采样时间意味着可用时间更少控制计算的ime。更长的时间范围(更多的步骤)意味着更多的优化变量,因此在可用的时间步长内需要解决的计算要求更高的问题。

创建控制器

为了提高示例的清晰度,抑制来自MPC控制器的命令窗口消息。

旧_状态=MPC状态(“关闭”);

创建具有以下控制间隔或采样时间的模型预测控制器:0.5秒,所有其他属性的默认值,包括预测范围10步骤和控制范围2.步骤。

mpcobj = mpc(装运箱,0.5)
MPC对象(01 - 9 - 2021 09:22:17上创建 ): --------------------------------------------- 采样时间:0.5(秒)预测地平线:10控制层:2植物模型:-------------- 1操纵变量(s) - > | 2  | | |--> 1测量输出(s) 0测量扰动(s) - > | 2输入  | | |--> 无边无际的输出(s) 1无边无际的干扰(s) - > | 2输出  | -------------- 指标:(输入向量)操纵变量:[1]无边无际的干扰:[2](输出向量)测量输出:[1]无边无际的输出:[2]干扰和噪声模型:输出扰动模型:默认(类型”getoutdist (mpcobj)”)输入扰动模型:默认(类型”getindist (mpcobj)”)测量噪声模型:默认(缩放后单位增益)重量:ManipulatedVariables: 0 ManipulatedVariablesRate: 0.1000 OutputVariables:[1 0] ECR: 100000 State Estimation: Default Kalman Filter (type "getEstimator(mpcobj)" for details

查看和修改控制器属性

显示控制器属性及其当前值的列表。

获取(mpcobj)
Ts:0.5预测水平(P):10控制水平(C):2模型:[1x1结构]操纵变量(MV):[1x1结构]输出变量(OV):[1x2结构]干扰变量(DV):[1x1结构]权重(W):[1x1结构]优化器:[1x1结构]注释:{}用户数据:[]历史:01-Sep-2020 09:22:17

显示的历史控制器的值将不同,因为它取决于创建控制器的时间。有关MPC控制器可编辑属性的说明,请输入mpcprops在命令行。

使用点符号来修改这些属性。例如,将预测视界更改为15

mpcobj。PredictionHorizon = 15;

某些属性名称有别名。例如,您可以使用别名MV而不是ManipulatedVariables。此外,许多控制器属性都是包含其他字段的结构。请使用点表示法查看和修改这些字段值。例如,由于默认情况下,控制器对操纵变量和输出变量没有约束,因此可以使用点表示法查看和修改这些约束。

设置控制器操纵变量的约束。

mpcobj.MV.Min = -10;% Kmpcobj.MV.Max = 10;% Kmpcobj.MV.RateMin=-1;% K /步骤mpcobj.MV.RateMax = 1;% K /步骤

如果缩写不含糊,则可以缩写属性名称。还可以查看和修改控制器调整权重。例如,修改操纵变速率和输出变量的权重。

mpcobj.W.ManipulatedVariablesRate = 0.3;mpcobj.W.OutputVariables = [1 0];

您还可以定义在预测范围内的时变约束和权重,这些约束和权重在每个时间步长都发生变化。例如,为了迫使被操纵的变量在接近预测视界的末尾时改变得更慢,输入:

MPCobj.MV.RateMin=[-2;-1.5;-1;-1;-1;-0.5];

MPCobj.MV.RateMax = [2;1.5;1;1;1;0.5);

这个-0.50.5值用于第四步及以后。

类似地,您可以为预测界的每个步骤指定不同的输出变量权值。例如,输入:

MPCobj.W.OutputVariables=[0.10;0.20;0.50;10];

您还可以修改控制器的干扰抑制特性。请参阅setEstimator,setindist,setoutdist为更多的信息。

检查控制器设计

生成关于潜在运行时稳定性和性能问题的报告。

评估(mpcobj)

在本例中审查命令发现了设计的两个潜在问题。第一个警告是由这个事实引起的C_A输出错误为零。第二个警告是由于两者都有硬约束MVMVRate

您可以向下滚动查看有关每个单独测试结果的更多信息。

执行线性模拟

使用模拟函数对运行的系统进行线性仿真。例如,模拟的闭环响应MPCobj对于26控制间隔。从第二步开始,指定2.0分别用于反应器温度(第一次输出)和试剂浓度(第二次输出)。请注意,浓度的设定值被忽略,因为第二次输出的调谐权重为零。

T=26;r=[0;20];sim(mpcobj,T,r)

您可以使用mpcsimopt。例如,在关闭操纵变量约束的情况下运行模拟。

mpcopts = mpcsimopt;mpcopts。约束=“关闭”;sim (mpcobj T r, mpcopts)

受操纵变量的第一次移动现在超过了指定的值1.单位速度限制。

您还可以在设备/模型不匹配的情况下执行模拟。例如,定义一个设备,其增益比控制器使用的模型中的增益大50%,且延时为0.1秒。

mpcopts.Model=tf(1.5,1,“输入延迟”,0.1)*CSTR;sim(mpcobj,T,r,mpcopts)

从闭环响应的振荡行为可以看出,对象/模型不匹配降低了控制器的性能。退化可能很严重,必须逐例进行测试。

其他仿真选项包括在操纵变量或测量输出中添加指定的噪声序列,开环仿真,以及用于更好的设定值跟踪或测量干扰抑制的前瞻性选项。

存储和Plot模拟结果

对系统进行仿真,将仿真结果存储在MATLAB工作空间中。

[y,t,u]=sim(mpcobj,t,r);

此语法禁止自动打印,并在中返回模拟结果Y,TU变量。您可以将结果用于其他目的,包括自定义绘图。例如,在同一图形中绘制操纵变量和两个输出变量。

图subplot(2,1,1) plot(t,u) title(“投入”)传奇(‘T_c’)子地块(2,1,2)地块(t,y)标题(“产出”)传奇(“不”,“C_A”)xlabel(“时间”)

恢复MPC可靠性背景

mpcverbosity (old_status);

另见

功能

物体

应用程序

相关话题