此示例显示如何从命令行创建和测试模型预测控制器。
此示例使用所描述的工厂模型使用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 = {'t'那'c_a'};%设置输出变量的名称cstr.statename = {'c_a'那't'};设置状态变量的名称%设置单位cstr.InputUnit = {“度K”那' kmol / m ^ 3 '};%设置输入变量单位cstr.outputunit = {“度K”那' kmol / m ^ 3 '};%设置输出变量的单位cstr.stateUnit = {' kmol / m ^ 3 '那“度K”};状态变量的集合单位
注意,该模型来自操作点周围的非线性模型的线性化。因此,线性模型输入和输出信号的值表示非线性模型中的工作点值的偏差。有关更多信息,请参阅使用MATLAB代码的线性化.
冷却剂温度是操纵变量(MV),流入试剂浓度是未测量的扰动输入(UD),反应器温度是测量的输出(MO),试剂浓度是未测量的输出(UO)。
装运箱= setmpcsignals(装运箱,'mv', 1“UD”2,“莫”, 1“UO”2);
使用潮湿
显示线性植物模型极点的阻尼比、固有频率和时间常数。
潮湿(Cstr)
杆阻尼频率时间常数(rad/秒)(秒)-1.11e+00 + 1.09e+00i 7.13e-01 1.55e+00 9.03 -01 -1.11e+00 - 1.09e+00i 7.13e-01 1.55e+00 9.03 -01
绘制开环阶跃响应。
步骤(装运箱)
鉴于植物标称稳定性,约1秒的时间常数表明样品时间不大于0.5秒。采样时间为0.5秒,10个步骤的预测地平线可以覆盖开环工厂的整个沉降时间,因此您可以使用两个参数初始猜测。更短的示例时间意味着控制计算的可用时间。较长的地平线(更多步骤)意味着更大数量的优化变量,因此在可用时间步骤中解决了更加计算的要求问题。
为了提高示例的清晰度,抑制来自MPC控制器的命令窗口消息。
old_status = mpcverbosity(“关闭”);
使用控制间隔或采样时间创建模型预测控制器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 PredictionHorizon (P): 10 ControlHorizon (C): 2 Model: [1x1 struct] ManipulatedVariables (MV): [1x1 struct] OutputVariables (OV): [1x2 struct] disturbance evariables (DV): [1x1 struct] Weights (W): [1x1 struct] Optimizer: [1x1 struct] Notes: {} UserData: [] History: 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.5.
和0.5
值用于第四步及以后。
类似地,您可以为预测界的每个步骤指定不同的输出变量权值。例如,输入:
mpcobj.w.outputvariables = [0.1 0;0.2 0;0.5 0;1 0];
您还可以修改控制器的抗扰特性。看到setEstimator
那setindist
,setoutdist
为更多的信息。
生成关于潜在运行时稳定性和性能问题的报告。
评估(mpcobj)
在这个例子中审查
命令发现了设计的两个潜在问题。第一个警告是由这个事实引起的C_A
输出误差为零。第二个警告是由于两者都有硬性限制MV
和mvrate.
.
您可以向下滚动以查看有关每个测试结果的更多信息。
使用SIM
函数对运行的系统进行线性仿真。例如,模拟的闭环响应mpcobj.
为了26.
控制间隔。从第二步开始,指定的设定值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.model = tf(1.5,1,'inputdelay',0.1)* cstr;SIM(MPCOBJ,T,R,MPCOPTS)
从闭环响应的振荡行为可以看出,对象/模型不匹配降低了控制器的性能。退化可能很严重,必须逐例进行测试。
其他仿真选项包括在操纵变量或测量输出中添加指定的噪声序列,开环仿真,以及用于更好的设定值跟踪或测量干扰抑制的前瞻性选项。
对系统进行仿真,将仿真结果存储在MATLAB工作空间中。
[y,t,u] = sim(mpcobj,t,r);
此语法抑制自动绘图并返回模拟结果y
那T.
和你
变量。您可以将结果用于其他目的,包括定制绘图。例如,将操纵变量和两个输出变量绘制在同一个图中。
图subplot(2,1,1) plot(t,u) title('输入') 传奇('t_c') subplot(2,1,2) plot(t,y) title('输出') 传奇('t'那'c_a')包含('时间'的)
恢复mpcverbosity
环境。
mpcverbosity (old_status);