连续系统PID的Simulink仿真-2

news2024/12/29 9:23:35

仍以二阶线性传递函数为被控对象,进行模拟PID 控制。被控对象形式为,其中b为在[103,163]范围内随机变化,a为在[15,35]范围内随机变化,则被控对象的描述方式可转换为:

S函数是Simulink一项重要的功能,采用S函数可实现在Simulink下复杂控制器和复杂被控对象的编程。在仿真一的基础上,利用S函数实现上述对象的表达、控制器的设计及仿真结果的输出。

在S函数中,采用初始化、微分函数和输出函数,即 mdlInitializeSizes函数、mdlDerivatives函数和mdlOutputs函数。在初始化中采用sizes结构,选择2个输出、3个输入,3个输入实现了P、I、D三项的输入。S函数嵌入在Simulink程序中。系统初始状态为:x(0)=0,。仿真结果如图所示。

仿真图:

主程序:chap_3s.m

%S-function for continuous state equation

function [sys,x0,str,ts]=s_function(t,x,u,flag)

switch flag,

%Initialization

case 0,

[sys,x0,str,ts]-mdlInitializeSizes;

%Outputs

case 3,

sys=mdlOutputs(t,x,u);

%Unhandled flags

case {2,4,9}

sys=[1;

%Unexpected flags

otherwise

error(['Unhandled flag-',num2str(flag)D);

end

%mdllnitializeSizes

function [sys,x0,str,ts]=mdlInitializeSizes

sizes= simsizes;

sizes.NumContStates =0;

sizes.NumDiscStates=0;

sizes.NumOutputs=1;

sizes.Numlnputs-3

sizes.DirFeedthrough=1;

sizes.NumSample Times= 0;

sys=simsizes(sizes);

x0=[ ];

str=[ ];ts=[ ];

function sys=mdIOutputs(t,x,u)

error=u(1);

derror=u(2);

errori=u(3);

kp=60;

ki=1;

kd=3;

ut=kp*error+kd*derror+ki*errori;

sys(1)=ut;

被控对象程序:chap_3plant.m

%S-function for continuous state equation

function [sys,x0,str,ts]=s_function(t,x,u,flag)

switch flag,

%Initialization

case 0,

[sys,x0,str,ts]=mdllnitializeSizes;

case 1,

sys=mdlDerivatives(t,x ,u);

%Outputs

case 3,

sys=mdIOutputs(t,x,u);

%Unhandled flags

case {2,4,9}

sys =D;

%Unexpected flags

otherwise

error(TUnhandled flag =',num2str(flag)]);

end

%mdlInitializeSizes

function [sys,x0,str,ts]=mdllnitializeSizes

sizes = simsizes;

sizes.NumContStates=2;

sizes.NumDiscStates=0;

sizes.NumOutputs=1;

sizes.Numlnputs=1;

sizes.DirFeedthrough=0;

sizes.NumSampleTimes= 0;

sys=simsizes(sizes);

x0=[0.0]:

str=[ ];

ts=[ ];

function sys-mdlDerivatives(t,x,u)

sys(1)=x(2);

%sys(2)=-(25+5*sin(t))*x(2)+(133+10*sin(t))*u;

sys(2)=-(25+10*rands(1))*x(2)+(133+30*rands(1))*u;

function sys=mdlOutputs(t,x,u)

sys(1)=x(1);

作图程序:chap1_3plot.m

close all;

plot(ty(, 1).'r,ty(:,2),k:1,linewidth',2);

xlabel('time(s)');ylabel('yd.y');

legend('Tdeal position signal',Position tracking');

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

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

相关文章

Pandas 数据清洗

Pandas 数据清洗数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。在这个教程中,我们将利用 Pandas包来进行数…

微软ATP带你看| 爆火的ChatGPT是什么?

(本文阅读时间:7分钟)OpenAI最新聊天机器人ChatGPT火爆全网!能写代码、编剧本,马斯克都盛赞它“好得吓人”!ChatGPT是什么GPT(Generative Pre-trained Transformer)系列是由OpenAI提出的非常强大的预训练语…

MaxCompute SQL示例解析

MaxCompute SQL示例解析 介绍MaxCompute SQL常见使用场景,掌握SQL的写法。 准备数据集 本文以emp表和dept表为示例数据集。您可以自行在MaxCompute项目上创建表并上传数据。 emp.csv中数据如下 7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,20 7499,ALLEN,SALES…

aws codebuild 使用和配置codebuild测试报告

参考资料 使用 Amazon CodeBuild 中的测试报告在 CodeBuild 使用AWS CLI样本中创建测试报告aws-codebuild-samples 在codebuild构建过程中获取有关在构建期间运行的测试的详细信息。 codebuild测试报告 通过在buildspec.yaml中配置报告组,运行构建项目时系统将运…

【代码随想录】96.不同的二叉搜索树

96.不同的二叉搜索树 思路 n为1的时候有一棵树,n为2有两棵树,这个是很直观的。 n为3的时候,有哪几种情况。 当1为头结点的时候,其右子树有两个节点,看这两个节点的布局,是不是和 n 为2的时候两棵树的布…

控价公司可以帮我们做什么?什么时候需要找第三方控价公司?

如果,我们品牌的销售渠道遭遇了低价乱价、窜货、侵权、假冒等问题,扰乱了我们品牌的渠道秩序,或者是我们在品牌发展的过程中,想通过对行业和竞品的了解来明确发展方向和策略,而自己又分身乏术或无从下手,这…

车辆信息查询

要想查一辆汽车的信息,除了去各个汽车平台上查询,比如汽车之家、易车网、懂车帝等,还可以使用“汽车公告查询”。 通过常规网页百度搜索引擎,输入关键字“汽车公告查询”,就会获取到相关搜索结果,汽车公告查…

C进阶_内存库函数

目录 memcpy 模拟实现memcpy memmove 模拟实现memmove memcmp memcpy 它的函数原型为: void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数…

104、【树与二叉树】leetcode ——98. 验证二叉搜索树:递归法[先序+中序+后序]+迭代法(C++版本)

题目描述 原题链接:98. 验证二叉搜索树 解题思路 BST的特点是:当前结点的值,比左子树中的全部结点都大,比右子树中全部结点都小。在代码实现中,要注意不要对比的是某一结点和某一侧的全部值之间的关系,不…

【论文阅读】CenterNet

论文题目:Objects as Points(CVPR2019) 论文地址:https://arxiv.org/pdf/1904.07850.pdf 发布时间:2019.4.16 机构:UT Austin,UC Berkeley 代码:https://github.com/xingyizhou/…

小程序事件基础

小程序事件--基础小程序事件事件简介小程序事件—事件传参事件对象属性target和currentTarget事件对象属性获取和设置data数据获取&设置data获取和设置data数据—进阶小程序的渲染层与逻辑层小程序事件 事件简介 事件是视图层到逻辑层的通讯方式。负责将用户对于的页面的操…

云上的米开朗基罗:在不确定时代,寻找建筑般的确定性

文艺复兴三杰之一的米开朗基罗,被称为“天才建筑师”。其实他一生留下的建筑并不多,仅仅有美第奇礼拜堂、卡比多广场、圣彼得大教堂穹顶等寥寥几座。但米开朗基罗却凭借对建筑层次与结构的精妙把握,影响了此后数百年的建筑风格。很多人认为&a…

【代码随想录】动态规划:关于01背包问题,你该了解这些!(滚动数组)

01 背包 有n件物品和一个最多能背重量为w的背包 第i件物品的重量是weight[i], 得到的价值是value[i] , 每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 每一件物品其实只有两个状态,取或者不取,所以…

win下编译opencv+libjpeg-turbo

文章目录前言编译环境下载opencv和jpeg-turbo源码编译jpeg-turbo编译opencv失败?那就直接调用jpeg-turbo库进行编解码前言 opencv默认自带第三方jpeg编解码库,但其性能一般,对高性能需求的程序来说是不适合的,因此我们可以把jpeg…

设计模式学习(八):Proxy代理模式

一、什么是Proxy模式 Proxy是“代理人”的意思,它指的是代替别人进行工作的人。当不一定需要本人亲自进行工作时,就可以寻找代理人去完成工作。但代理人毕竟只是代理人,能代替本人做的事情终究是有限的。因此,当代理人遇到无法自己…

文件上传oss,并查询上传进度(SpringBoot+Redis+Oss+Swagger3)

文章目录诉求技术选型pom配置项目结构文件树图示结构代码实现配置相关配置文件yamlSwagger3配置跨域问题配置oss相关ServiceControllerApplicationSwagger接口操作获取上传文件标识号获取文件上传进度小结诉求 将文件上传到oss,并实时监听上传进度,并将进…

【javaSE】中基本类型和引用类型对象的比较及PriorityQueue中的比较方法

写博客是为了提升自己,也是为了展现自己的学习成果,坚持!坚持!坚持!未来是什么样的,闯一闯就知道啦。喜欢就留个关注吧!!! 目录 一、java对象的比较 1.1java中基本类型的比较 1.2引用对象的比较 1.3引用…

使用云端的GPU进行yolov5的训练

前言本文介绍了使用云端GPU进行yolov5训练环境配置的过程一、创建实例这里使用的是恒源云的GPU服务器,官方网址为恒源云_GPUSHARE-恒源智享云他的用户文档为Tmux - 恒源云用户文档一般的问题在用户文档中都可以找到解决办法。注册并登录后的界面如下图所示。点击云市…

c++11 标准模板(STL)(std::forward_list)(十)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

UPerNet:Unified Perceptual Parsing for Scene Understanding论文解读

Unified Perceptual Parsing for Scene Understanding 论文&#xff1a;[1807.10221] Unified Perceptual Parsing for Scene Understanding (arxiv.org) 代码&#xff1a;CSAILVision/unifiedparsing: Codebase and pretrained models for ECCV’18 Unified Perceptual Parsi…