这个例子展示了如何使用MPC设计器设计连续搅拌釜式反应器(CSTR)的模型预测控制器。
一、 CSTR 模型
下面的微分方程表示了涉及放热反应的连续搅拌釜式反应器(CSTR)的线性化模型:
其中
输入为 :
CAi -料流中试剂A浓度(kgmol/m3)
Tc -反应堆冷却剂温度(℃)
输出为:
T -反应堆温度(℃)
CA -产品流中试剂A残留浓度(kgmol/m3)
质数项,如C 'A,表示偏离模型线性化时的名义稳态条件。
试剂浓度的测定常常很困难。对于本例,假设:
—— Tc是一个被操纵的变量。
—— CAi是一种不可测的扰动。
—— T是一个测量的输出。
—— CA是一个未测量的输出。
该模型用状态方程描述为
在这个例子中,冷却剂的温度从标称值开始有一个有限的±10度的范围,并且每个样品周期的变化速率为±4度。
创建CSTR系统的状态空间模型:
A = [-0.0285 -0.0014; -0.0371 -0.1476];
B = [-0.0850 0.0238; 0.0802 0.4462];
C = [0 1; 1 0];
D = zeros(2,2);
CSTR = ss(A,B,C,D);
二、导入平台并定义MPC结构
mpcDesigner
在 MPC Designer 选项卡的 Structure 部分中,单击 MPC Structure 。
在 Select a plant model or an MPC controller 中,选择CSTR模型。
由于CSTR是一个稳定的连续时间LTI系统,MPC设计器将控制器采样时间设置为0.1 Tr,其中Tr为CSTR的平均上升时间。对于本例,在指定MPC控制器采样时间字段中,输入采样时间为1。
默认情况下,所有工厂输入都定义为操作变量,所有工厂输出都定义为测量输出。在 Assign plant i/o channels 部分,指定输入和输出通道指数,例如:
—— 第一个输入,冷却剂温度,是一个控制变量。
—— 第二个输入,饲料浓度,是一个无法测量的干扰。
—— 第一个输出,反应堆温度,是一个测量的输出。
—— 第二个输出,反应物浓度,是一个未测量的输出。
单击Define and Import。
应用程序将CSTR植物导入Data Browser。以下资料亦已加入Data Browser:
mpc1 —— 使用sys作为内部模型创建的默认MPC控制器。
scenario1 —— 默认模拟场景。
应用程序运行默认的模拟场景,并更新输入响应和输出响应图。
一旦定义了MPC结构,就不能在当前MPC设计器会话中更改它。要使用不同的通道配置,请启动应用程序的新会话。
三、定义输入和输出通道属性
在 MPC Designer 选项卡上,选择 I/O Attributes.。
在“输入和输出通道规范”对话框的“名称”列中,为每个输入和输出通道指定一个有意义的名称。
在单位列中,可以选择为每个通道指定单位。
由于状态空间模型是使用与标称工作点的偏差来定义的,因此将每个输入和输出通道的标称值设置为0。
将每个通道的比例因子 Scale Factor 保持为默认值1。
点击OK.
输入响应和输出响应图标签更新以反映新的信号名称和单元。
四、配置模拟场景
在 MPC Designer 选项卡的 Scenario 部分中,单击Edit Scenario > scenario1.。
在 Simulation duration 对话框中,将模拟持续时间增加到30秒。
在 Reference Signals 表中,在第一行中,指定步长为2,时间为5。
在 Signal 列的第二行中,选择一个常量引用以将浓度设定值保持在标称值。
默认的场景被配置为模拟反应器温度T在5秒内发生2度的台阶变化。
单击OK。
响应图更新以反映新的模拟场景配置。
在 Data Browser 的 Scenarios 部分中,双击 Scenario1,并将该场景重命名为stepT。
五、配置控制器范围
在 Tuning 选项卡的 Horizon 部分中,指定预测层 Prediction horizon 为15,控制层 Control horizon 为3。
响应图更新以反映新视野。输入响应曲线显示,被操纵变量的控制行为违反了所需的冷却剂温度约束。
六、定义输入约束
在 Design 部分中,单击 Constraints 。
在 Constraints 对话框中,在“输入约束”部分,分别在“最小”列和“最大”列中输入冷却剂温度上限和下限。
指定 RateMin 和 RateMax 列中的更改速率限制。
点击OK
输入响应图显示了受约束的操作变量控制操作。即使有约束的变化率,冷却剂温度也会在三个控制区间内迅速上升到其最大限度。
七、指定控制器调谐权值
在 Tuning 选项卡的 Design 部分,单击 Weights。
在输入权值表 Input Weights 中,将操作变量(MV)的速率权值 Rate Weight 增加到0.3。增加MV速率权值会惩罚控制器优化成本函数中MV的较大变化。
在Output Weights表中,保留默认的权重值。默认情况下,所有未度量的输出都没有权值。
由于只有一个被操纵的变量,如果控制器试图在特定的设定值处保持两个输出,一个或两个输出的响应将显示稳态误差。由于控制器忽略了重量为零的输出的设定值,因此将浓度输出重量设置为零允许反应器温度设定值跟踪,稳态误差为零。
点击OK
输入响应图显示了更保守的控制操作,这会导致更慢的输出响应。
八、消除输出超调
假设应用程序在输出响应中要求零超调。在“Performance Tuning 选项卡上,将闭环性能滑块
Closed-Loop-Performance 向左拖动,直到输出响应 Output Response 没有超调。将这个滑块向左移动,同时增加了控制器
的操纵变量速率权值,并减少了输出变量权值,从而产生一个更健壮的控制器。
当您使用闭环性能滑块调整控制器 Closed-Loop Performance 调优权重时,MPC设计器不会更改您在权重对话框中指定的权重。相反,滑块控制一个调整因子,该调整因子与用户指定的权重一起用于定义实际的控制器权重。
当滑块居中时,这个因子为1;它的值随滑块向左移动而减小,随滑块向右移动而增大。权重因子乘以操作变量和输出变量权重, 并从weights对话框中除操作变量速率权重。
若要查看实际控制器权重,请将控制器导出到MATLAB®工作区,并查看导出控制器对象的权重属性。
九、测试控制器干扰抑制
在过程控制应用中,干扰抑制往往比设定值跟踪更为重要。模拟控制器对进料浓度未测扰动的阶跃变化的响应。
在MPC Designer选项卡的Scenario部分,单击Plot Scenario > New Scenario。
在“模拟场景”对话框中,将模拟持续时间 Simulation duration 设置为30秒。
在未测量扰动表 nmeasured Disturbances 中,在信号下拉列表中,选择 Step。
在时间列中,指定一个5秒的步骤时间。
点击OK
该应用程序向数据浏览器添加了新的场景,并创建了相应的输入响应和输出响应图。
在数据浏览器 Data Browser 的 scenarios 部分中,双击 NewScenario,并将其重命名为distReject。
在输出响应图中,控制器将反应器温度T返回到预期的接近其设定值的值。然而,所需的控制措施会导致输出浓度CA增加到6 kgmol/m3。
十、指定浓度输出约束
在此之前,您定义了控制器调优权值,以实现以零稳态误差跟踪反应器温度设定值的主要控制目标。这样做可以使未测量的反应堆浓度自由变化。假设当反应器浓度超过3 kgmol/m3时发生了不需要的反应。若要限制反应器浓度,请指定输出约束。
在 Tuning 选项卡的 Design 部分中,单击 Constraints 。
在Constraints对话框中,在Output Constraints部分,表的第二行,指定一个最大的unmeasured Output (UO)值为3。
在 Output Constraints 部分,单击Constraint Softening Settings. 。
默认情况下,所有输出约束都是软约束,这意味着它们的MinECR和MaxECR值都大于零。为了进一步软化未测量输出(UO)约束,增加其MaxECR值。
点击OK
在输出响应曲线中,当反应器浓度CA接近3 kgmol/m3时,反应器温度T开始升高。由于只有一个被操纵变量,控制器在两个相互竞争的控制目标之间做出了妥协:温度控制和约束满足。一个较软的输出约束使得控制器能够牺牲更多的约束要求来实现改进的温度跟踪。
由于输出约束是软的,控制器通过允许一个小的浓度约束违反来保持足够的温度控制。通常,根据你的应用程序需求,您可以尝试不同的约束设置,以实现可接受的控制目标折衷。
十一、导出控制器
在 Tuning 选项卡的 Analysis 部分,单击 Export Controller 将调优后的控制器mpc1保存到MATLAB工作区。
十二、删除平台、控制器和场景
要删除 Data Browser,中的工厂、控制器或场景,右键单击要删除的项,然后选择 Delete。您还可以单击该项并在键盘上单击Delete。
不能删除当前控制器。此外,如果一个平台或场景是唯一列出的平台或场景,则不能删除它。
如果某个设备被任何控制器或场景使用,则不能删除该设备。
若要删除多个平台、控制器或场景,按住Shift并单击要删除的每个项。