设计MPC控制器在命令行
这个例子展示了如何创建和测试模型预测控制器从命令行。
定义植物模型
下面的例子使用了植物模型中描述使用MPC设计师设计控制器。创建一个植物和设置一些可选模型的状态空间模型的属性,如名称和单位的输入,状态,和输出变量。
%连续时间状态空间矩阵,作为第一输出与温度(5 = -0.3427;47.68 - 2.785);B = (0.3 0 0 1);C = [0 1;1 0];D = 0 (2, 2);%建立状态空间模型装运箱= 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代码。
货币政策委员会将输入和输出信号分配给不同的类别
冷却剂的温度是操纵变量(MV),流入试剂的浓度是一个无边无际的扰动输入(UD),反应堆温度测量的输出(MO)和试剂的浓度是一个无边无际的输出(UO)。
装运箱= setmpcsignals(装运箱,“MV”,1“UD”2,“莫”,1“UO”2);
显示基本植物属性和阶跃响应
使用潮湿的
显示阻尼比、固有频率和时间常数的线性植物模型的两极。
潮湿(装运箱)
极点频率衰减时间常数(rad /秒)(-1.11秒)e + 00 + 1.09 e + 00我7.13 e-01 1.55 9.03 -1.11 e-01 e + e + 00 00 - 1.09 e + 00我e-01 9.03 7.13 e-01 1.55 e + 00
绘制开环阶跃响应。
步骤(装运箱)
考虑到工厂名义稳定,大约1秒的时间常数表明样本的时间不超过0.5秒。采样时间为0.5秒,预测地平线的10个步骤可以覆盖整个沉降时间开环的工厂,所以你可以使用这两个参数的初始猜测。样品时间短意味着更少的可用时间为控制计算。长地平线(更多的步骤)意味着更多的优化变量,因此更需要计算要解决的问题,在可用的时间步。
创建控制器
改善例子的明确性,抑制从MPC控制器命令窗口消息。
old_status = mpcverbosity (“关闭”);
创建一个模型预测控制器控制间隔,或样品时间,0.5
秒,与所有其他属性的默认值,包括预测地平线10
步骤和控制的地平线2
步骤。
mpcobj = mpc(装运箱,0.5)
MPC对象(创建2022年- 11月26日06:49:29):- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -采样时间:0.5(秒)预测地平线: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)
Ts: 0.5 PredictionHorizon (P): 10 ControlHorizon (C): 2模型:[1 x1 struct] ManipulatedVariables (MV): [1 x1 struct] OutputVariables (OV): [1 x2 struct] DisturbanceVariables (DV): [1 x1 struct]权重(W): [1 x1 struct]优化器:[1 x1 struct]指出:{}用户数据:[]历史:26 - 11月- 2022 06:49:29
显示的历史
值将被不同的控制器,因为它取决于控制器时创建的。可编辑的描述属性的MPC控制器的输入mpcprops
在命令行中。
使用点符号来修改这些属性。例如,改变预测地平线15
。
mpcobj。PredictionHorizon = 15;
一些属性名称的别名。例如你可以使用别名MV
而不是ManipulatedVariables
。另外,许多控制器包含附加字段属性结构。使用点符号来查看和修改这些字段值。例如,因为默认情况下,控制器没有限制操纵变量和输出变量,您可以查看和修改这些限制使用点符号。
设置约束控制器操纵变量。
mpcobj.MV。最小值= -10;% Kmpcobj.MV。Max = 10;% Kmpcobj.MV。杀鼠灵= 1;% K /步骤mpcobj.MV。RateMax = 1;% K /步骤
可以提供缩写属性名称,缩写是明确的。您还可以查看和修改控制器优化权重。例如,修改被控变量的权重率和输出变量。
mpcobj.W。ManipulatedVariablesRate = 0.3;mpcobj.W。OutputVariables = [1 0];
您还可以定义时变约束和权重预测地平线,这在每个时间步转变。例如,迫使操纵变量改变更为缓慢向预测地平线的尽头,输入:
MPCobj.MV。杀鼠灵= [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。模型=特遣部队(1.5,1“InputDelay”,0.1)*装运箱;sim (mpcobj T r, mpcopts)
工厂/模型不匹配会导致控制器性能下降,正如你可以告诉从闭环反应的振荡行为。可以严重退化,必须在个案基础上进行测试。
其他模拟选项包括的操纵变量或测量噪声序列指定输出、开环仿真,和一个有预见性的选择更好的选点跟踪或测量干扰排斥。
存储和仿真结果
模拟系统仿真结果存储在MATLAB®工作区。
[y t u] = sim (mpcobj t r);
这个语法抑制自动绘图和返回的仿真结果y
,t
和u
变量。您可以使用结果用于其他目的,包括定制的策划。例如,阴谋操纵变量和输出变量在同一个图。
图次要情节(2,1,1)情节(t, u)标题(“输入”)传说(“T_c”次要情节(2,1,2)情节(t, y)标题(“输出”)传说(“T”,“C_A”)包含(“时间”)
恢复mpcverbosity
设置。
mpcverbosity (old_status);