主要内容

在命令行中设计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 = {'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代码的线性化

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

冷却剂温度是操纵变量(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];

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

检查控制器设计

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

评估(mpcobj)

在这个例子中审查命令发现了设计的两个潜在问题。第一个警告是由这个事实引起的C_A输出误差为零。第二个警告是由于两者都有硬性限制MVmvrate.

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

执行线性模拟

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

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)

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

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

存储和Plot模拟结果

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

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

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

图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);

也可以看看

职能

对象

应用

相关的话题