系列文章目录
前言
模型预测控制器使用线性工厂、干扰和噪声模型来估计控制器状态并预测未来的工厂输出。控制器利用预测的设备输出,解决二次规划优化问题,以确定控制动作。
有关模型预测控制器结构的更多信息,请参阅 MPC 预测模型。
一、语法
mpcobj = mpc(plant) mpcobj = mpc(plant,ts) mpcobj = mpc(plant,ts,P,M,W,MV,OV,DV) mpcobj = mpc(plant) mpcobj = mpc(plant,ts) mpcobj = mpc(plant,ts,P,M,W,MV,OV,DV)
二、创建
2.1 说明
mpcobj = mpc(plant) 根据离散时间预测模型 plant 创建模型预测控制器对象。控制器 mpcobj 的控制间隔继承自 plant.Ts,时间单位继承自 plant.TimeUnit。所有其他控制器属性均为默认值。创建 MPC 控制器后,可以使用点符号设置其属性。
如果 plant.Ts =-1,则在设计和仿真控制器之前,必须将控制器的 Ts 属性设置为正值。
mpcobj = mpc(plant,ts) 根据指定的工厂模型创建模型预测控制器,并设置控制器的 Ts 属性。如果工厂是
- 连续时间模型,则控制器使用采样时间 ts 对模型进行离散预测
- 具有指定采样时间的离散时间模型,则控制器使用采样时间 ts 对工厂进行重新采样以进行预测
- 未指定采样时间的离散时间模型(plant.Ts =-1),用于预测时将继承采样时间 ts。
2.1.1 示例
mpcobj = mpc(plant,ts,P,M,W,MV,OV,DV) 指定了以下控制器属性。如果省略或为空,则使用默认值。
- P 设置 PredictionHorizon 属性。
- M 设置 ControlHorizon 属性。
- W 设置权重属性。
- MV 设置 ManipulatedVariables(操纵变量)属性。
- OV 设置输出变量属性。
- DV 设置干扰变量属性。
mpcobj = mpc(model)根据指定的预测模型集创建模型预测控制器对象,预测模型集包括工厂、输入干扰和测量噪声模型,以及获取模型的标称条件。如果没有指定采样时间,工厂模型 model.Plant 必须是离散时间模型。此语法设置控制器的模型属性。
mpcobj = mpc(model,ts) 根据指定的工厂模型创建模型预测控制器,并将控制器的 Ts 属性设置为 ts。如果 model.Plant 是一个未指定采样时间的离散时间 LTI 模型(model.Plant.Ts =-1),则在用于预测时将继承采样时间 ts。
mpcobj = mpc(model,ts,P,M,W,MV,OV,DV)指定了额外的控制器属性。如果省略或为空,则使用默认值。
2.2 输入参数
plant - 工厂预测模型 —— LTI 线性时不变模型 | 辨识线性模型
- 工厂预测模型,可指定为 LTI 模型或线性系统识别工具箱(System Identification Toolbox™)模型。指定的工厂与控制器的 Model.Plant 属性相对应。
- 如果在创建控制器时没有指定采样时间,则工厂必须是离散时间模型。在预测时,如果需要,将使用 mpcobj.Ts 作为采样时间对工厂进行离散化或重新采样。如果存在延迟,则将延迟纳入生成的离散时间模型中。
有关 MPC 预测模型的更多信息,请参阅 MPC 预测模型。
注释:不支持从操纵变量直接馈通到工厂中的任何输出。
示例:TF(10,[1 10])
model - 预测模型 —— 结构
- 预测模型,以结构形式指定,格式与控制器的模型属性相同。如果在创建控制器时没有指定采样时间,则 model.Plant 必须是离散时间模型。
有关 MPC 预测模型的更多信息,请参阅 MPC 预测模型。
三、属性
Ts - 控制器采样时间 —— 正标量
- 控制器采样时间,指定为正有限标量。控制器使用采样时间为 Ts 的离散时间模型进行预测。时间单位继承自 plant.TimeUnit。
示例:mpcobj.Ts = 0.1
PredictionHorizon - 预测范围 —— 10 + 与延迟有关的步长(默认) | 正整数
- 预测范围步数,指定为正整数。PredictionHorizon 和 Ts 的乘积就是预测时间,即控制器对未来的预测时间。
- 如果指定的预测范围不大于覆盖所有输入输出通道中最长延迟所需的步数,即 Nd = max(mpcobj.Model.Plant.IODelay(:))/mpcobj.Ts ,则软件会自动按 floor(Nd) 增加预测范围。
示例:mpcobj.PredictionHorizon = 15
ControlHorizon - 控制范围 —— 2(默认) | 正整数 | 正整数向量
控制范围,指定为以下之一:
- 介于 1 和 p 之间的正整数 m,其中 p 等于 PredictionHorizon。在这种情况下,控制器会在 k 至 k+m-1 的时间段内计算 m 次自由控制移动,并在 k+m 至 k+p-1 的剩余预测时间段内保持控制器输出不变。这里,k 是当前的控制区间。
- 正整数向量 [m1,m2,...],指定阻塞区间的长度。默认情况下,控制器会计算 M 个自由移动区间,其中 M 是阻塞区间的个数。第一次自由移动适用于时间 k 至 k+m1-1,第二次自由移动适用于时间 k+m1 至 k+m1+m2-1,以此类推。使用分块移动可以提高控制器的鲁棒性。ControlHorizon 中的值之和必须与预测范围 p 一致。
如果指定的矢量之和:
- 小于预测范围,那么控制器会增加一个阻塞区间。例如,如果 p=10 并指定 ControlHorizon=[1 2 3] 的控制范围,那么控制器将使用四个长度为 [1 2 3 4] 的区间。
- 大于预测范围,那么区间将被截断,直到区间长度之和等于 p。例如,如果 p=10 并指定 ControlHorizon= [1 2 3 6 7] 的控制范围,那么控制器将使用长度为 [1 2 3 4] 的四个区间。
有关操纵变量阻塞的更多信息,请参阅操纵变量阻塞。
示例:mpcobj.ControlHorizon = 3
Model - 预测模型和标称条件 —— 结构体
预测模型和标称条件,指定为包含以下字段的结构。有关 MPC 预测模型的更多信息,请参阅 MPC 预测模型和控制器状态估计。
- Plant - 工厂预测模型 —— LTI 模型 | 识别线性模型
工厂预测模型,指定为 LTI 模型或线性系统识别工具箱模型。
注意
不支持从操作变量直接馈通到工厂中的任何输出。
示例:mpcobj.Model.Plant = ss(-1,1,1,0)
- Disturbance - 描述预期未测量干扰的模型 —— LTI 模型
描述预期未测量干扰的模型,指定为 LTI 模型。只有当设备存在未测量干扰时才需要该模型。您可以使用点符号或 setindist 函数直接设置该扰动模型。
默认情况下,输入扰动应为积分白噪声。为建立信号模型,会为每个未测量的输入干扰添加一个无量纲统一增益的积分器,除非添加该积分器会导致控制器失去状态可观测性。在这种情况下,预计扰动将是白噪声,因此会为该通道添加一个无量纲统一增益。
示例:mpcobj.Model.Disturbance = tf(5,[1 5])
- Noise - 描述预期输出测量噪声的模型 —— LTI 模型
描述预期输出测量噪声的模型,指定为 LTI 模型。
默认情况下,测量噪声是具有单位方差的白噪声。为建立信号模型,每个测量通道都会添加一个无量纲统一增益。
示例:mpcobj.Model.Noise = zpk(0,-1,1)
- Nominal - 设备模型线性化时的标称运行点 —— 结构体
设备模型线性化时的标称运行点,以结构形式指定,包含以下字段。
Field | Description | Default |
X | 运行点的设备状态,指定为长度等于 Model.Plant 中状态个数的列向量。 | zero vector |
U |
运行点上的设备输入,包括操纵变量、测量到的和未测量到的干扰,指定为长度等于 Model.Plant 中输入个数的列向量。 | zero vector |
Y |
运行点的设备输出(包括已测量和未测量的输出),以列向量形式指定,长度等于 Model.Plant 中的输出数。 | zero vector |
DX |
对于连续时间模型,DX 是运行点的状态导数: DX=f(X,U)。对于离散时间模型,DX=x(k+1)-x(k)=f(X,U)-X。指定 DX 为列向量,其长度等于 Model.Plant 中的状态数。 | zero vector |
ManipulatedVariables - 受操纵的变量信息、边界和比例因子 —— 结构体数组
被操纵变量(MV)的信息、边界和比例因子,指定为一个包含 Nmv 元素的结构数组,其中 Nmv 是被操纵变量的个数。要访问此属性,可以使用别名 MV 代替 ManipulatedVariables。
注释
速率指的是差值 Δu(k)=u(k)-u(k-1). 对于离散时间差 Δu(k),必须使用近似值 du/dt ≅ Δu(k)/Ts,对基于连续时间输入信号导数 du/dt 的约束条件和权重进行适当的重新表述。
每个结构单元都有以下字段。
- Min - MV 下限 —— -Inf(默认) | 标量 | 向量
指定操作变量的下限,以标量或向量形式指定。默认情况下,该下限为 -Inf。
要在整个预测范围内使用相同的下限值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变约束,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).Min = -5
- Max - MV 上限 —— Inf (默认) | 标量 | 向量
给定操作变量的上界,指定为标量或向量。默认情况下,上限为 Inf。
要在整个预测范围内使用相同的上限,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变上限,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).Max = 5
- MinECR - MV 软下限 —— 0(默认) | 非负标量 | 向量
给定操作变量软下限。等价松弛(ECR)值越大,表示约束越软,可以指定为非负标量或向量。默认情况下,MV 下限为硬约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).MinECR = 0.01
- MaxECR - MV 上限 —— 0(默认) | 非负标量 | 向量
给定操作变量上限的柔性。等价松弛(ECR)值越大,表示约束越软,可以指定为非负标量或向量。默认情况下,MV 上限为硬约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).MaxECR = 0.01
- RateMin - MV 变化率下限 —— -无穷大(默认) | 非正标量 | 向量
指定受控变量变化率的下限,以非正标量或向量形式指定。MV 变化率定义为 MV(k) - MV(k-1),其中 k 为当前时间。默认情况下,该下限为-Inf。
要在整个预测范围内使用相同的界限,请指定一个标量值。
若要改变从时间 k 到时间 k+p-1 的预测范围内的界限,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).RateMin = -2
- RateMax - MV 变化率上限 —— Inf(默认) | 非负标量 | 矢量
给定操作变量变化率的上限,指定为非负标量或向量。MV 变化率定义为 MV(k) - MV(k-1),其中 k 为当前时间。默认情况下,该下限为 Inf。
要在整个预测范围内使用相同的下限值,请指定一个标量值。
若要改变从时间 k 到时间 k+p-1 的预测范围内的界限,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).RateMax = 2
- RateMinECR - MV 变化率软下限 —— 0(默认值) | 非负有限标量 | 向量
给定操作变量变化率软下限。等价松弛(ECR)值越大,表示约束越软,可以指定为非负有限标量或矢量。默认情况下,MV 变化率下限为硬约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.ManipulatedVariables(2).RateMinECR = 0.01
- RateMaxECR - MV 变化率软上限 —— 0(默认值) | 非负有限标量 | 向量
给定操作变量变化率软上限。等价松弛(ECR)值越大,表示约束越软,可以指定为非负有限标量或矢量。默认情况下,MV 变化率上限为硬约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变 ECR 值,请指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.ManipulatedVariables(2).RateMaxECR = 0.01
- Target - MV 目标 —— 标量 | 矢量
给定操作变量的目标,指定为标量、向量或 "标称"(默认)。当 Target 为 "标称 "时,操纵变量的目标与 mpcobj.Model.Nominal.U 对应。
要在整个预测范围内使用相同的目标值,请指定一个标量值。
要在时间 k 到时间 k+p-1 的预测范围内改变目标值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,则在预测范围的剩余步骤中使用最终值。
出于经济或运行原因,当操作变量多于设备输出时,您可能需要为某些操作变量设置目标值以及相应的非零成本函数权重。更多信息,请参阅 "为非方形工厂设计 MPC 控制器 "和 "为受控变量设置目标值"。
示例:mpcobj.ManipulatedVariables(2).Target = [0.3 0.2]
- Name - MV 名称 —— 字符串 | 字符向量
指定操作变量的名称,以字符串或字符向量形式指定。这是一个只读属性。要修改操纵变量的名称,请使用 mpcobj.Model.Plant.InputName。
示例:mpcobj.ManipulatedVariables(2).Name
- Unit - MV 单位 —— ""(默认) | 字符串 | 字符向量
指定操作变量的单位,以字符串或字符向量形式指定。这是一个只读属性。要修改操作变量的单位,请使用 mpcobj.Model.Plant.InputUnit。
示例: mpcobj.ManipulatedVariables(2).Units
- ScaleFactor - MV 比例因子 —— 1(默认) | 正有限标量
给定操作变量的比例因子,指定为正有限标量。指定适当的比例因子可以改善优化时的数值调节。一般情况下,使用操作变量工作范围的振幅。更多信息,请参阅指定比例因子。
示例:mpcobj.ManipulatedVariables(1).ScaleFactor = 10
- Type - MV 类型 —— 连续"(默认) | "整数" | "二进制" | 向量
给定操作变量的类型,指定为
'continuous' —— 表示操作变量是连续的。
'binary' —— 表示被操作变量只能是 0 或 1。
'integer'
—— 表示操作变量为整数。包含所有可能值的矢量 - 将被操作变量限制为指定值,例如 mpcobj.MV(1).Type=[-1,0,0.5,1,2];。
默认情况下,类型设置为 "连续"。
更多信息,请参阅有限控制集 MPC。
示例:mpcobj.ManipulatedVariables(1).Type = 'binary' (二进制变量)
OutputVariables - 输出变量信息、边界和比例因子 —— 结构数组
输出变量(OV)信息、边界和比例因子,指定为包含 Ny 个元素的结构数组,其中 Ny 是输出变量的个数。要访问此属性,可以使用别名 OV 代替 OutputVariables。
每个结构元素都包含以下字段
- Min - OV 下限 —— -Inf(默认) | 标量 | 向量
给定输出变量的下限,指定为标量或向量。默认情况下,该下限为 -Inf。
要在整个预测范围内使用相同的下限值,请指定一个标量值。
若要在时间 k+1 到时间 k+p 的预测范围内改变下限值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.OutputVariables(1).Min = -10
- Max - OV 上限 —— Inf (默认) | 标量 | 向量
给定输出变量的上限,指定为标量或向量。默认情况下,该上限为 Inf。
要在整个预测范围内使用相同的上限,请指定一个标量值。
若要在时间 k+1 到时间 k+p 的预测范围内改变上限,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.OutputVariables(1).Max = 10
- MinECR - OV 软下限 —— 1(默认) | 非负有限标量 | 向量
给定输出变量软下限。等价松弛(ECR)值越大,表示约束越软,指定为非负有限标量或向量。默认情况下,OV 上限为柔性约束。
为避免在运行时产生不可行的优化问题,最好使用软性 OV 约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
要在时间 k+1 到时间 k+p 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,则最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.OutputVariables(1).MinECR = 5
- MaxECR - OV 软上界 —— 1(默认) | 非负有限标量 | 向量
给定输出变量软上限。等价松弛(ECR)值越大,表示约束越软,指定为非负有限标量或向量。默认情况下,OV 下限为柔性约束。
为避免在运行时产生不可行的优化问题,最好使用柔性 OV 下限。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
要在时间 k+1 到时间 k+p 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,则最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.OutputVariables(1).MaxECR = 10
- Name - OV 名称 —— 字符串 | 字符向量
给定输出变量的名称,以字符串或字符向量形式指定。这是一个只读属性。要修改输出变量的名称,请使用 mpcobj.Model.Plant.OutputName。
示例:mpcobj.OutputVariables(2).Name
- Unit - OV 单位 —— "" (默认) | 字符串 | 字符向量
给定输出变量的单位,以字符串或字符向量形式指定。这是一个只读属性。要修改输出变量的名称,请使用 mpcobj.Model.Plant.OutputUnit。
示例:mpcobj.OutputVariables(2).Units
- ScaleFactor - OV 比例因子 —— 1(默认) | 正有限标量
给定输出变量的比例因子,指定为正有限标量。指定适当的比例因子可以改善优化的数值调节。一般来说,应使用输出变量的工作范围。更多信息,请参阅指定比例因子。
示例:mpcobj.OutputVariables(1).ScaleFactor = 20
DisturbanceVariables - 输入干扰变量信息和比例因子 —— 结构体数组
扰动变量(DV)信息和比例因子,指定为具有 Nd 个元素的结构数组,其中 Nd 为已测量和未测量扰动输入的总数。扰动变量(DisturbanceVariables)中扰动信号的顺序如下:前 Nmd 项与测量输入扰动有关,后 Nud 项与未测量输入扰动有关。
要访问此属性,可以使用别名 DV 代替 DisturbanceVariables。
每个结构元素都有以下字段。
- Name - DV 名称 —— 字符串 | 字符向量
以字符串或字符向量形式指定的 DV 名称。这是一个只读属性。要修改干扰变量的名称,请使用 mpcobj.Plant.Inputname。
示例: mpcobj.DisturbanceVariables(1).Name
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数(下)+https://developer.aliyun.com/article/1585321