主要内容

mpcmoveExplicit

计算最优控制使用显式的MPC

描述

使用此命令来模拟一个显式的MPC控制器与植物闭环模型。调用mpcmoveExplicit反复在一个for循环计算操纵变量在每个时间步和更新控制器的状态。

例子

mv= mpcmoveExplicit (empcobj,x,ym,r)返回最优移动mv并更新状态xc控制器的empcobj

被操纵的变量mv在当前时间计算给定:

  • 控制器对象,empcobj,

  • 一个指向当前估计扩张状态,xc,

  • 测量装置输出,ym,

  • 输出引用,r,

  • 和测量的干扰输入,v

如果ym,rv被指定为[],或者如果它丢失作为最后的输入参数,mpcmove使用适当的mpcobj.Model.Nominal而不是价值。

当使用默认状态估计,mpcmoveExplicit还引用的更新控制器状态处理对象xc。因此,当使用默认状态估计,xc总是指向更新控制器的状态。当使用自定义状态估计时,你应该更新xc之前每一个mpcmoveExplicit调用。

(mv,信息)= mpcmoveExplicit (empcobj,x,ym,r,v)返回关于计算的结构的更多细节。确定最优控制计算正常完成,检查数据信息

(mv,信息)= mpcmoveExplicit (empcobj,x,ym,r,v,MVused)指定在前面使用的操纵变量值mpcmoveExplicit命令,允许一个命令行仿真模拟明确的MPC控制器万博1manbetx®块与可选的外部MV输入信号。

例子

全部折叠

这个例子展示了如何使用mpcmoveExplicit模拟植物与显式闭环MPC控制器。

首先,定义样品时间,工厂(在这个例子中,一个双积分器),并创建一个传统的MPC对象。

t = 0.1;工厂=特遣部队(1,(1 0 0));mpcobj = mpc(植物,0.1);
- - >“PredictionHorizon”是空的。假设默认10。- - >“ControlHorizon”是空的。假设默认2。- - >“权重。ManipulatedVariables”是空的。假设默认的0.00000。- - >“权重。ManipulatedVariablesRate”是空的。假设默认的0.10000。 -->"Weights.OutputVariables" is empty. Assuming default 1.00000.

定义约束操纵变量。

mpcobj。MV =结构(“最小值”,1“马克斯”1);

MPC控制器状态包括从植物模型,扰动模型噪声模型,最后的操纵变量值的顺序。创建一系列结构,您可以为每个州指定范围,参考,和操纵变量,使用generateExplicitRange

范围= generateExplicitRange (mpcobj);
- - >转换”模型。植物状态”属性。- - >将模型转换为离散时间。假设没有干扰# 1添加到测量输出。- - >”模型。Noise" is empty. Assuming white noise on each measured output.

如果在运行时这些变量超出它的范围,控制器返回一个错误状态和操纵变量设置为他们最后的值。因此,重要的是,你不要低估这些范围。对于这个示例,使用以下范围。

range.State.Min (:) = (-10; -10);range.State.Max (:) = (10; 10);range.Reference。Min = 2;range.Reference。Max = 2;range.ManipulatedVariable。Min = mpcobj.MV。分钟1;range.ManipulatedVariable。Max = mpcobj.MV。Max + 1;

创建一个显式的MPC控制器从传统MPC范围对象和结构。

empcobj = generateExplicitMPC (mpcobj、范围);
发现/未开拓的地区:9/0

设置仿真步骤的数目和初始化数组存储装置的输入和输出信号(稍后可以绘制)。

N =圆(5 / Ts);U = 0 (N, 1);Y = 0 (N, 1);

离散化,并建立其初始条件。

dtplant = ss (c2d(植物、Ts));x = [0 0] ';

获得一个处理(这是一个指针)控制器状态,使用mpcstate

xc = mpcstate (empcobj)
MPCSTATE对象和字段植物:[0 0]干扰:(x0 1双)噪声:[1 x0双]LastMove: 0协方差:[2 x2双]

控制器有两个国家内部工厂模型,和一个操纵变量的最后一个值。所有这些国家都初始化为零。

迭代模拟闭环响应的参考信号0.8。计算显式MPC控制器,使用mpcmoveExplicit

k = 1: N%更新植物测量和存储信号y = dtplant.C * x;Y (k) = Y;%计算显式MPC行动和储存的信号u = mpcmoveExplicit (empcobj xc y, 0.8);U (k) = U;%更新植物状态x = dtplant。* x + dtplant.B * u;结束

情节产生的植物输入和输出信号。

阴谋(1:N [U Y])标题(“闭环反应”)传说(“mv”,“输出”)包含(“步骤”网格)

图包含一个坐标轴对象。坐标轴对象与标题闭环响应,包含步骤包含2线类型的对象。这些对象代表mv,输出。

输入参数

全部折叠

明确的MPC控制器模拟,指定为一个显式的MPC控制器对象。使用generateExplicitMPC创建一个显式的MPC控制器。

当前MPC控制器状态,指定为一个mpcstate对象。

在你开始之前一个模拟mpcmoveExplicit,初始化控制器状态使用x = mpcstate (empcobj)。然后,修改默认的属性x是合适的。

如果您使用的是默认的状态估计,mpcmoveExplicit预计x代表x (n | n - 1)。的mpcmoveExplicit在前面的控制命令更新状态值区间信息。因此,你不应该以编程方式更新x在所有。默认状态估计使用了一个线性时变卡尔曼滤波器。

如果您正在使用自定义状态估计,mpcmoveExplicit预计x代表x [n | n]。因此,之前mpcmoveExplicit命令,您必须设置x.Plant,x.Disturbance,x.Noise这些国家的最佳估计(使用最新的测量)电流控制区间。

电流测量输出,指定为一个行向量的长度Nym,在那里Nym是测量输出的数量。如果您正在使用自定义状态估计,ym将被忽略。如果你设置ym=[],然后mpcmoveExplicit使用适当的标称值。

植物输出参考价值,指定为一个向量的长度NympcmoveExplicit使用一个常数参考整个预测地平线。相比mpcmovempcmoveAdaptive,mpcmoveExplicit不支持引用预览。万博1manbetx

如果你设置r=[],然后mpcmoveExplicit使用适当的标称值。

当前和预期的测量干扰,指定为一个向量的长度N医学博士,在那里N医学博士是测量扰动的数量。相比mpcmovempcmoveAdaptive,mpcmoveExplicit不支持预览干扰。万博1manbetx如果你的工厂模型不包括测量干扰,使用v=[]

操纵变量值应用于植物在前面的控制区间,指定为一个向量的长度Nmv,在那里Nmv是操纵变量的数量。如果这是第一次mpcmoveExplicit命令在一个模拟序列,省略这个论点。否则,如果计算出的MVsmpcmoveExplicit在前面的间隔覆盖,设置MVused正确的值以提高控制器状态估计精度。如果您省略MVused,mpcmoveExplicit假设MVused = x.LastMove

输出参数

全部折叠

最优操纵变量,返回一个列向量的长度Nmv,在那里Nmv是操纵变量的数量。

如果控制器检测到一个不可行的优化问题或遇到数值困难解决一个坏脾气的优化问题,mv仍然在其最近的成功解决方案,xc.LastMove

否则,如果优化问题是可行的和解决者达到指定的最大数量的迭代没有找到一个最优解,mv:

  • 如果仍然在其最近的成功解决方案Optimizer.UseSuboptimalSolution控制器的属性

  • 是次优的解决方案达成最终的迭代后如果Optimizer.UseSuboptimalSolution控制器的属性真正的。有关更多信息,请参见次优的QP解决方案

明确的MPC解状态,作为一个结构有以下字段返回。

解决方案状态码,返回以下值之一:

  • 1 -成功的解决方案。

  • 0 -失败。一个或多个控制器输入参数的范围。

  • 1 -定义。参数范围,但必须使用一个推断。

电流控制器输入参数所属地区,作为一个正整数或返回0。整数值的指数是多面体(地区)电流控制器输入参数所属。如果解决方案失败了,地区= 0。

提示

版本历史

介绍了R2014b