主要内容

在命令行设计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);%集名称装运箱。InputName = {“T_c”“C_A_f”};设置输入变量的名称装运箱。OutputName = {“T”“C_A”};设置输出变量的名称装运箱。StateName = {“C_A”“T”};设置状态变量的名称%设定单位装运箱。InputUnit = {“度K”' kmol / m ^ 3 '};设置输入变量的单位装运箱。OutputUnit = {“度K”' kmol / m ^ 3 '};设置输出变量的单位装运箱。StateUnit = {' kmol / m ^ 3 '“度K”};设置状态变量的单位

请注意,这个模型是由一个围绕工作点的非线性模型的线性化推导出来的。因此,线性模型输入和输出信号的值表示相对于非线性模型中它们的工作点值的偏差。有关更多信息,请参见线性化使用MATLAB代码

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

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

装运箱= setmpcsignals(装运箱,“MV”, 1“UD”2,“莫”, 1“UO”2);

显示基本植物属性和小区步骤响应

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

潮湿(装运箱)
极阻尼频率时间常数(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步的预测范围可以覆盖开环装置的整个沉降时间,因此您可以使用这两个参数作为初始猜测。采样时间越短,控制计算的可用时间就越短。更长的范围(更多的步骤)意味着更大数量的优化变量,因此在可用的时间步长中需要解决的计算要求更高的问题。

创建控制器

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

Old_status = mpcverbosity(“关闭”);

创建一个控制间隔或采样时间为的模型预测控制器0.5秒,并将所有其他属性设置为默认值,包括的预测范围10步骤和一个控制地平线2步骤。

mpcobj = mpc(CSTR,0.5)
MPC对象(创建于31- 8月2022 04:48:16):---------------------------------------------采样时间:0.5(秒)预测水平:10控制水平:2植物模型:-------------- 1操纵变量(s)—>| 2状态| | |—> 1测量输出(s) 0测量扰动(s)—>| 2输入| | |—> 1未测量输出(s) 1未测量扰动(s)—>| 2输出| --------------指数:(输入矢量)操纵变量:[1]未测量扰动:[2](输出向量)实测输出:[1]未测输出:[2]扰动和噪声模型:输出扰动模型:default(类型“getoutdist(mpcobj)”为详细信息)输入扰动模型:default(类型“getindist(mpcobj)”为详细信息)测量噪声模型:default(缩放后的单位增益)权重:ManipulatedVariables: 0 ManipulatedVariablesRate: 0.1000 OutputVariables: [1 0] ECR: 100000状态估计:默认卡尔曼滤波器(详细信息请输入“getEstimator(mpcobj)”)无约束

查看和修改控制器属性

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

get (mpcobj)
Ts: 0.5 PredictionHorizon (P): 10 ControlHorizon (C): 2 Model: [1x1 struct] ManipulatedVariables (MV): [1x1 struct] OutputVariables (OV): [1x2 struct] disrupancvariables (DV): [1x1 struct] Weights (W): [1x1 struct] Optimizer: [1x1 struct]注释:{}UserData: [] History: 31 aug -2022 04:48:16

显示的历史值对于你的控制器是不同的,因为它取决于控制器是什么时候创建的。有关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.t 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.5而且0.5值用于第四步及以后的步骤。

类似地,您可以为预测范围的每一步指定不同的输出变量权重。例如,输入:

mpcobj . w.t outputvariables = [0.1 0;0.2 0;0.5 0;1 0];

您还可以修改控制器的抗扰特性。看到setEstimatorsetindist,setoutdist获取更多信息。

控制器设计

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

评估(mpcobj)

在本例中,审查Command发现了设计中的两个潜在问题。第一个警告是由C_A输出误差为零。第二个警告是由于两者都有硬性限制MV而且MVRate

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

执行线性模拟

使用sim卡函数来运行系统的线性模拟。例如,模拟的闭环响应MPCobj26控制的时间间隔。从第二步开始,指定2而且0分别为反应器温度(第一次输出)和试剂浓度(第二次输出)。注意,浓度的设定值被忽略,因为第二个输出的调优权重为零。

T = 26;R = [0 0;2 0];sim (mpcobj T r)

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

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

被操纵变量的第一步移动现在超过了指定的位置1-单位费率约束。

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

mpcopts。模型= tf(1.5,1,“InputDelay”, 0.1) *装运箱;sim (mpcobj T r, mpcopts)

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

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

存储和绘制模拟结果

将仿真结果存储在MATLAB®工作空间中模拟系统。

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

方法中的模拟结果返回yt而且u变量。您可以将结果用于其他目的,包括自定义绘图。例如,将被操纵的变量和两个输出变量画在同一个图中。

图subplot(2,1,1) plot(t,u) title(“输入”)传说(“T_c”) subplot(2,1,2) subplot(t,y)“输出”)传说(“T”“C_A”)包含(“时间”

恢复mpcverbosity设置。

mpcverbosity (old_status);

另请参阅

功能

对象

应用程序

相关的话题