MATLAB 模型预测控制(MPC)控制入门 —— 设计并仿真 MPC 控制器

news2024/11/18 1:38:42

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、使用 MPC Designer 设计控制器
    • 1.1 CSTR 模型
    • 1.2 导入被控对象并定义 MPC 结构
    • 1.3 定义输入和输出通道属性
    • 1.4 配置仿真场景
    • 1.5 配置控制器水平线
    • 1.6 定义输入约束条件
    • 1.7 指定控制器调整权重
    • 1.8 消除输出超调
    • 1.9 测试控制器抗干扰能力
    • 1.10 指定浓度输出约束条件
    • 1.11 删除被控对象、控制器和场景
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

模型预测控制工具箱™ 提供了用于开发模型预测控制 (MPC) 的函数、应用程序、Simulink® 模块和参考示例。对于线性问题,该工具箱支持设计隐式、显式、自适应和增益调度 MPC。对于非线性问题,您可以实现单级和多级非线性 MPC。该工具箱提供可部署的优化求解器,还能让您使用自定义求解器。

您可以在 MATLAB® 和 Simulink 中通过运行闭环仿真来评估控制器性能。对于自动驾驶,您还可以使用提供的符合 MISRA C™ 和 ISO 26262 标准的模块和示例,快速开始车道保持辅助、路径规划、路径跟踪和自适应巡航控制应用。

工具箱支持 C 和 CUDA® 代码以及 IEC 61131-3 结构化文本生成。


一、使用 MPC Designer 设计控制器

本例说明如何使用 MPC Designer 为连续搅拌槽反应器 (CSTR) 设计模型预测控制器。

1.1 CSTR 模型

连续搅拌罐反应器(CSTR)的线性化模型见 CSTR 模型。在该模型中,前两个状态变量分别是试剂浓度(此处称为 CA,单位为 kmol/m3)和反应器温度(此处称为 T,单位为 K),而前两个输入量分别是冷却剂温度(Tc,单位为 K,用于控制被控对象)和流入的进料试剂浓度 CAf,单位为 kmol/m3,(通常被视为未测量的干扰)。

在本例中,冷却剂温度与标称值的变化范围为 ±10 度,变化速率为每秒 ±2 度。

创建 CSTR 系统的状态空间模型。

A = [   -5  -0.3427;
     47.68    2.785];
B = [    0   1
       0.3   0];
C = flipud(eye(2));
D = zeros(2);
CSTR = ss(A,B,C,D);

1.2 导入被控对象并定义 MPC 结构

mpcDesigner

在这里插入图片描述

在 "MPC 设计器 "选项卡的 "结构 "部分,单击 “MPC 结构”。

在 "通过导入定义 MPC 结构 "对话框中,在 "从 MATLAB 工作区选择一个被控对象模型或一个 MPC 控制器 "表中,选择 CSTR 模型。

由于 CSTR 是一个稳定的连续时间 LTI 系统,因此 MPC Designer 将控制器采样时间设置为 0.1 Tr,其中 Tr 是 CSTR 的平均上升时间。在本例中,在指定 MPC 控制器采样时间字段中,输入 0.5 秒的采样时间。

默认情况下,所有被控对象输入均定义为操纵变量,所有被控对象输出均定义为测量输出。在 "分配被控对象 i/o 通道 "部分,分配输入和输出通道索引,以便

  • 第一个输入,即冷却液温度,为操纵变量。

  • 第二个输入,进料浓度,是一个未测量的干扰。

  • 第一个输出,反应器温度,是一个测量输出。

  • 第二个输出,反应物浓度,是一个未测量的输出。

在这里插入图片描述

单击导入。

应用程序会将 CSTR 被控对象导入数据浏览器。以下内容也会添加到数据浏览器中:

  • mpc1 - 使用 CSTR 作为内部模型创建的默认 MPC 控制器。

  • scenario1 - 默认模拟场景。

该程序运行默认模拟场景,并更新输入响应和输出响应图。闭环系统能够成功跟踪所需的测量输出,而未测量输出则不然。由于被控对象只有一个操纵变量,因此这种行为是意料之中的。

在这里插入图片描述

一旦定义了 MPC 结构,就不能在当前的 MPC Designer 会话中进行更改。要使用不同的通道配置,请启动新的应用程序会话。

1.3 定义输入和输出通道属性

在 MPC Designer 选项卡上,选择 I/O Attributes。

在 "输入和输出通道规格 "对话框的 "名称 "栏中,为每个输入和输出通道指定一个有意义的名称。

在 "单位 "栏中,可选择指定每个通道的单位。

由于状态空间模型是使用与标称工作点的偏差来定义的,因此请将每个输入和输出通道的标称值保持为 0。

各通道的比例因子保持默认值 1。

在这里插入图片描述

单击 “确定”。

输入响应和输出响应绘图标签会更新,以反映新的信号名称和单位。

1.4 配置仿真场景

在 "MPC 设计器 "选项卡的 "场景 "部分,单击 “编辑场景”>“场景 1”。

在 "模拟场景 "对话框中,将模拟持续时间设置为 20 秒。

在参考信号表的第一行,指定步长为 2,时间为 5。

在信号列第二行,选择常量参考,将浓度设定点保持在输入和输出通道规格对话框中定 义的标称值上(本例中标称值为零)。

在这里插入图片描述

默认设置为模拟参考反应器温度 T 在 5 秒钟内发生 2 开尔文的阶跃变化。

单击确定。

响应图更新以反映新的模拟方案配置。CA 的参考值不再是阶跃值,而是等于零的常数。

在 MPC Designer 左下方的 "情景 "部分,单击情景 1。第二次单击情景 1,并将情景重命名为 stepT。

1.5 配置控制器水平线

在 "调整 "选项卡的 "水平线 "部分,指定预测水平线为 15,控制水平线为 3。

在这里插入图片描述

响应图更新以反映新的范围。输入响应图显示,控制操作违反了对冷却剂温度变化率的限制要求。

1.6 定义输入约束条件

在 "设计 "部分,单击 “约束”。

在 "约束 "对话框的 "输入和输出约束 "部分的 "输入 "行中,分别在 "最小值 "和 "最大值 "列中输入冷却剂温度的上下限。

在 RateMin 和 RateMax 栏中指定变化率限制。

在这里插入图片描述

单击 “确定”。

在这里插入图片描述
输入响应图显示了受控变量的控制行动。输入响应图显示了受控变量的控制行动。

1.7 指定控制器调整权重

在 "调整 "选项卡的 "设计 "部分,单击 “权重”。

在输入权重表中,将操纵变量 (MV) 比率权重增加到 0.3。在控制器优化成本函数中,增加 MV 率权重可抑制 MV 的大幅变化。

在输出权重表中,保留默认权重值。默认情况下,所有未测量的输出权重为零。

由于只有一个受控变量,如果控制器试图将两个输出都保持在特定的设定点上,则一个或两个输出的响应都会出现稳态误差。由于控制器会忽略权重为零的输出设定点,因此将浓度输出权重设置为零可实现反应釜温度设定点跟踪,且稳态误差为零。

在这里插入图片描述

单击 “确定”。

在这里插入图片描述

输入响应图显示了较为保守的控制操作,这导致输出响应速度较慢。

1.8 消除输出超调

假设应用要求输出响应零过冲。在 "性能调整 "选项卡上,向左拖动 "闭环性能 "滑块,直到输出响应没有过冲。向左移动该滑块可同时增加控制器的操纵速率权重和减少输出变量权重,使控制器更加稳健。假设应用要求输出响应零过冲。在 "性能调整 "选项卡上,向左拖动 "闭环性能 "滑块,直到输出响应没有过冲。向左移动该滑块可同时增加控制器的操纵速率权重和减少输出变量权重,使控制器更加稳健。

在这里插入图片描述

使用 "闭环性能 "滑块调整控制器调整权重时,MPC Designer 不会更改您在 "权重 "对话框中指定的权重。相反,滑块控制一个调整系数,该系数与用户指定的权重一起用于定义实际控制器权重。

当滑块居中时,该系数为 1;当滑块向左移动时,其值减小;当滑块向右移动时,其值增大。权重系数乘以操纵变量和输出变量权重,再除以权重对话框中的操纵变量速率权重。因此,移动滑块增加鲁棒性会降低 OV 和 MV 权重,增加 MV 率权重,从而放宽对输出的控制,使控制动作更加保守。

要查看实际控制器权重,请将控制器导出到 MATLAB® 工作区,然后查看导出控制器对象的权重属性。

1.9 测试控制器抗干扰能力

在过程控制应用中,干扰抑制往往比设定点跟踪更重要。模拟控制器对进料浓度阶跃变化(未测量干扰)的响应。

在 "MPC 设计器 "选项卡的 "情景 "部分,单击 “绘制情景”>“新建情景”。

在模拟场景对话框中,将模拟持续时间设为 20 秒。

在参考信号表的第一行信号下拉列表中,选择步长,然后指定步长为 2,时间为 5。在第二行的信号列中,保持恒定参考以将浓度设定点保持在标称值上。

在 "未测量的干扰 "行的信号下拉列表中,选择 “步长”,然后指定步长为 0.2,时间为 5。

在这里插入图片描述

单击确定。

应用程序会将新方案添加到数据浏览器中,并创建新的相应输入响应图和输出响应图。

在数据浏览器的 "方案 "部分,将 NewScenario 重命名为 distReject。

在这里插入图片描述

从输出响应图中可以看出,闭环系统仍能达到预期的反应器温度。在这种情况下,所需的控制动作加上输入干扰会导致输出浓度 CA 稳态下降 0.1 kmol/m3。

1.10 指定浓度输出约束条件

之前,您定义了控制器调整权重,以实现跟踪反应釜温度设定点且稳态误差为零的主要控制目标。这样做可以使未测量的反应器浓度自由变化。假设反应器浓度相对于其标称值降至 0.05 kmol/m3 以下时,会发生不必要的反应。要限制反应釜浓度,请指定输出限制。

在 "设计 "部分的 "调谐 "选项卡上,单击 “约束”。

在 "约束 "对话框的 "输入 "和 "输出约束 "部分的 "输出 "表第二行中,指定最小未测量输出 (UO) 值为 -0.05。

默认情况下,所有输出约束都是软约束,即最小ECR 值和最大ECR 值都大于零。要进一步软化未测量输出 (UO) 约束,请增加其最大ECR 值。

在这里插入图片描述
单击 “确定”。

在这里插入图片描述
在输出响应图中,反应器浓度 CA 在 10 秒后稳定在-0.05 kmol/m3 的水平。由于只有一个控制变量,控制器在两个相互竞争的控制目标之间进行了折中: 温度跟踪和满足约束条件。较软的输出约束使控制器可以牺牲更多的约束要求来改善温度跟踪。

由于输出约束条件较软,控制器可通过允许少量违反浓度约束条件来保持一定的温度控制水平。一般来说,根据您的应用要求,您可以尝试使用不同的约束设置来实现可接受的控制目标折衷。

输出控制器
在 "调谐 "选项卡的 "分析 "部分,单击 "导出控制器 "将调谐控制器 mpc1 保存到 MATLAB 工作区。

1.11 删除被控对象、控制器和场景

要删除被控对象、控制器或场景,请在 "数据浏览器 "中右键单击要删除的项目,然后选择 “删除”。

不能删除当前控制器。此外,如果被控对象是唯一列出的工厂或方案,则无法删除。

如果某个工厂被任何控制器或场景使用,则无法删除该工厂。

要删除多个被控对象、控制器或场景,请按住 Shift 键并单击要删除的每个项目。

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1222293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15项基本SCADA技术技能

1. 人机界面 人机界面是将操作员连接到设备、系统或机器的仪表板或用户界面。 以下是 hmi 在 scada 技术人员简历中的使用方式: 完成了查尔斯湖废水处理厂和提升站的完整 HMI 图形界面。对加油系统、加油车、PLC、HMI、触摸屏进行故障排除和维修。对 Horner HMI …

吴恩达《机器学习》8-7:多元分类

在机器学习领域,经常会遇到不止两个类别的分类问题。这时,需要使用多类分类技术。本文将深入探讨多类分类,并结合学习内容中的示例,了解神经网络在解决这类问题时的应用。 一、理解多类分类 多类分类问题是指当目标有多个类别时…

homeassiant主题

下载主题 https://github.com/maartenpaauw/home-assistant-community-themes.git 使用file editor到homeassiant路径下,新建文件夹themes文件夹,用terminal新建也可以。 使用file editor上传文件 使用Terminal解压 mkdir themes unzip home-assistan…

达芬奇DaVinci Resolve Studio 18.6.3 for Mac

DaVinci Resolve Studio 18是一款专业的视频编辑和调色软件,适用于电影、电视节目、广告等各种视觉媒体的制作。它具有完整的后期制作功能,包括剪辑、调色、特效、音频处理等。 以下是DaVinci Resolve Studio 18的主要特点: - 提供了全面的视…

IDEA中安装Docker插件实现远程访问Docker

开启远程Docker访问 #修改Docker服务文件,需要先切换到root用户 vim /lib/systemd/system/docker.service #注释掉"ExecStart"这一行,并添加下面这一行信息 ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock…

【SpringBoot】 环境准备

一.SpringBoot准备 1.下载idea 社区版 2021.1 - 2022.1.4 专业版 无要求 2.Maven 是一个工具,和Java没有关系 . 主要功能是项目构建和依赖管理. 项目构建 上述对应的都是maven命令 . 依赖管理 添加坐标之后,点击刷新,右侧就会载入依赖. Maven还有依赖传递和依赖排除功…

Simulink 自动代码生成电机控制:模型预测控制(MPC)模块使用总结(1)

目录 前言 MPC模块使用步骤和参数设计 电机控制系统验证 MPC参数调整 MPC和PI控制器比较 总结 前言 前面尝试了基于电机DQ轴电流环的传递函数设计PI控制器的参数,最近尝试了下模型预测控制(MPC)对电流环进行控制,这里总结一下…

智能井盖传感器能不能监测井盖位移

智能井盖传感器能够精准监测井盖的位移。这些传感器运用了前沿科技对井盖状态进行实时监测。一旦井盖出现异常移动传感器会立即捕捉到信号,并通过与互联网相连接的智能系统发出警报或记录数据。这种智能监测仪为城市或相关部门的井盖管理提供了实时数据支持&#xf…

Acer宏碁Predator掠夺者笔记本PH315-51原装出厂Windows10系统工厂模式ISO镜像文件

下载链接:https://pan.baidu.com/s/1GGRKYLQzl6SxdtCXbnzhrA?pwdrel7 提取码:rel7 宏基原厂Win10系统自带重置功能、带所有驱动、PredatorSense风扇键盘控制中心、Office办公软件、出厂主题壁纸、系统属性Acer宏基专属的LOGO标志、 Acer Care Center…

C#,数值计算——插值和外推,双线性插值(Bilin_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 双线性插值 /// interpolation routines for two dimensions /// Object for bilinear interpolation on a matrix. /// Construct with a vector of x1. /// value…

Vue3-watchEffect函数

Vue3-watchEffect函数 功能&#xff1a;watchEffect 函数在一开始时就会执行一次&#xff0c;而当中的回调函数的属性发生变化&#xff0c;那么watchEffect 就会再执行一次&#xff0c;主要作用还是在于监视回调函数每次的变化。 // App.vue <template><h2>计数…

Idea 创建 Spring 项目(保姆级)

描述信息 最近卷起来&#xff0c;系统学习Spring&#xff1b;俗话说&#xff1a;万事开头难&#xff1b;创建一个Spring项目在网上找了好久没有找到好的方式&#xff1b;摸索了半天产出如下文档。 在 Idea 中新建项目 填写信息如下 生成项目目录结构 pom添加依赖 <depende…

Appium自动化测试完全指南

背景 在当今快速发展的互联网时代&#xff0c;UI 需求越来越大、越来越高大上、越来越复杂&#xff0c;相对应的 App 作为最重要的大前端的一部分&#xff0c;也不可避免。 App 迭代的不断加速&#xff0c;需求的不断复杂化&#xff0c;给测试人员增加了非常大的工作量&#…

CTFhub-RCE-过滤目录分隔符 /

根据源代码信息可知&#xff0c;过滤掉了/ <?php $res FALSE; if (isset($_GET[ip]) && $_GET[ip]) { $ip $_GET[ip]; $m []; if (!preg_match_all("/\//", $ip, $m)) { $cmd "ping -c 4 {$ip}"; exec($cmd,…

代码执行相关函数以及简单例题

代码/命令 执行系列 相关函数 &#xff08;代码注入&#xff09;

【开源】基于Vue和SpringBoot的民宿预定管理系统

项目编号&#xff1a; S 058 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S058&#xff0c;文末获取源码。} 项目编号&#xff1a;S058&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色…

什么是 802.1X?它是如何工作的?

什么是 802.1X&#xff1f;它是如何工作的&#xff1f; 什么是IEEE 802.1X&#xff1f;802.1X是如何工作的&#xff1f;802.1X EAP安全是什么&#xff1f;802.1X用在哪里&#xff1f;IEEE 802.1X和Wi-Fi是否相同&#xff1f;什么是有线802.1X&#xff1f; 802.1X的安全性有多高…

(论文阅读)TiDB:一款基于Raft的HTAP数据库

引言 混合事务分析处理&#xff08;HTAP&#xff09;数据库要求隔离处理事务查询和分析查询&#xff0c;以消除它们之间的干扰。要实现这一点&#xff0c;有必要维护为这两种查询类型指定的数据的不同副本。然而&#xff0c;为存储系统中的分布式副本提供一致的视图是一项挑战…

滚雪球学Java(09-3):Java中的逻辑运算符,你真的掌握了吗?

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

7.docker运行redis容器

1.准备redis的配置文件 从上一篇运行MySQL容器我们知道&#xff0c;需要给容器挂载数据卷&#xff0c;来持久化数据和配置&#xff0c;相应的redis也不例外。这里我们以redis6.0.8为例来实际说明下。 1.1 查找redis的配置文件redis.conf 下面这个网址有各种版本的配置文件供…