在命令行设计MPC控制器

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

定义植物模型

本例使用了文中描述的工厂模型使用MPC设计器设计控制器。创建工厂的状态空间模型,并设置一些可选的模型属性。

A = [-0.0285 -0.0014;-0.0371 - -0.1476);B = [-0.0850 0.0238;0.0802 - 0.4462);C = [0 1;1 0];D = 0 (2, 2);装运箱= ss (A, B, C, D);装运箱。InputName = {“T_c”,“C_A_i”};装运箱。OutputName = {“T”,“C_A”};装运箱。StateName = {“C_A”,“T”};CSTR.InputGroup。MV = 1;CSTR.InputGroup。UD = 2;CSTR.OutputGroup。莫= 1;CSTR.OutputGroup。UO = 2;

创建控制器

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

old_status = mpcverbosity (“关闭”);

创建一个模型预测控制器,其控制间隔或采样时间为1其次,将所有其他属性设置为默认值。

Ts = 1;MPCobj = mpc(装运箱,Ts)
MPC对象(创建2020年- 1月31日23:26:00):- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -采样时间:1(秒)预测地平线:10控制层:2植物模型:- - - - - - - - - - - - - - - - 1操纵变量(s) - - > | 2州| | | - - > 1测量输出(s) 0测量扰动(s) - - >输入| 2 | | | - - > 1无边无际的输出(s) 1无边无际的干扰(s) - - > | | 2输出- - - - - - - - - - - - - - - -指数:(输入向量)操纵变量:[1]无边无际的干扰:[2](输出向量)测量输出:[1]无边无际的输出:[2]干扰和噪声模型:输出扰动模型:默认(类型”getoutdist (MPCobj)”)输入扰动模型:默认(类型”getindist (MPCobj)”)测量噪声模型:默认(缩放后单位增益)重量:ManipulatedVariables: 0 ManipulatedVariablesRate: 0.1000 OutputVariables: [1 0] ECR: 100000状态估计:默认的卡尔曼滤波(输入“getEstimator(MPCobj)”的细节)无约束

查看和修改控制器属性

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

get (MPCobj)
1预测层(P): 10控制层(C): 2模型:[1x1结构]操作变量(MV): [1x1结构]输出变量(OV): [1x2结构]可调节变量(DV): [1x1结构]权值(W): [1x1结构]优化器:[1x1结构]注:{}用户数据:[]历史:31- 1- 2020 23:26:00

显示的历史值对于您的控制器将是不同的,因为它取决于何时创建控制器。对于MPC控制器的可编辑属性的描述,请输入mpcprops在命令行。

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

MPCobj。PredictionHorizon = 15;

您可以缩写属性名,前提是该缩写没有歧义。

许多控制器属性是包含额外字段的结构。使用点符号来查看和修改这些字段值。例如,您可以为控制器输出变量设置度量单位。的OutputUnit属性仅用于显示,是可选的。

MPCobj.Model.Plant。OutputUnit = {“摄氏度”,' kmol / m ^ 3 '};

默认情况下,控制器对操作变量和输出变量没有约束。可以使用点符号查看和修改这些约束。例如,为控制器操作变量设置约束。

MPCobj.MV。最小值= -10;MPCobj.MV。Max = 10;MPCobj.MV。杀鼠灵= 3;MPCobj.MV。RateMax = 3;

您还可以查看和修改控制器调优权值。例如,修改操作变量率和输出变量的权重。

MPCobj.W。ManipulatedVariablesRate = 0.3;MPCobj.W。OutputVariables = [1 0];

您还可以定义预测范围内的时变约束和权重,它们在每个时间步长时发生变化。时变约束在作用时具有非线性效应。例如,为了使被操纵的变量在接近预测视界的末端时改变得更慢,输入:

MPCobj.MV。杀鼠灵= [4;-3.5;3;-2.5);

MPCobj.MV。RateMax = [4;3.5;3;2.5);

-2.52.5值用于第四步及以后的步骤。

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

MPCobj.W。OutputVariables = [0.1 0;0.2 0;0.5 0;1 0];

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

检查控制器设计

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

评估(MPCobj)

在这个例子中,审查command发现了该设计的两个潜在问题。第一个警告询问用户是否打算将权重设置为零C_A输出。第二个警告建议用户避免对两者都进行硬约束MVMVRate

进行线性模拟

使用sim卡运行函数对系统进行线性仿真。例如,模拟的闭环响应MPCobj26控制的时间间隔。指定的定位点20分别为反应器温度和剩余浓度。剩余浓度的设定值被忽略,因为第二个输出的调谐权值为零。

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

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

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

操作变量的第一步现在超过了指定的值3.单位速度限制。

您还可以使用设备/模型不匹配来执行模拟。例如,定义一个比控制器使用的模型中增益大50%的工厂。

工厂= 1.5 *装运箱;MPCopts。模型=植物;sim (MPCobj T r, MPCopts)

设备/模型的不匹配略微降低了控制器的性能。降解可能是严重的,必须在个案的基础上进行测试。

其他选项包括将指定的噪声序列添加到操作变量或测量输出、开环仿真和用于更好的设定值跟踪或测量干扰抑制的前瞻性选项。

存储仿真结果

将仿真结果存储在MATLAB工作空间中。

[y t u] = sim (MPCobj t r);

该语法抑制自动绘图并返回仿真结果。您可以将结果用于其他任务,包括自定义绘图。例如,在同一图中绘制操作变量和两个输出变量。

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

恢复mpcverbosity设置。

mpcverbosity (old_status);

另请参阅

||

相关的话题