(MATLAB)第二十一章 Simulink仿真设计初步

news2024/12/23 18:04:42

        Simulink是MATLAB的重要组成部分,可以非常容易地实现可视化建模,并把理论研究和工程实践有机地结合在一起,不需要书写大量程序,只需要使用鼠标和键盘对已有模块进行简单的操作和设置。

21.1 Simulink简介

        Simulink是MATLAB软件的扩展,它提供了集动态系统建模、仿真和综合分析于一体的图形用户环境,是实现动态系统建模和仿真的一个软件包。它与MATLAB的主要区别在于,其与用户的交互接口是基于Windows的模型化图形输入,其结果是用户可以把更多的精力投入到系统模型的构建,而非语言的编程上。

        Simulink 提供了大量的系统模块,包括信号、运算、显示系统等多方面的功能,可以创建各种类型的仿真系统,实现丰富的仿真功能。用户也可以定义自己的模块,进一步扩展模型的范围和功能,以满足不同的需求。为了创建大型系统,Simulink 提供了系统分层排列的功能的设计,在Simulink中可以将系统分为从高级到低级的几个层次,每层又可以细分几个部分,每层系统构建完成后,将各层连接起来构成一个完整的系统。模型创建完成之后,可以启动系统的仿真功能分析系统的动态特性,Simulink内置的分析工具包括各种仿真算法、系统线性化、寻求平衡点等,仿真结果可以以图形的方式显示在示波器窗口,以便于用户观察系统的输出结果;Simulink也可以将输出结果以变量的形式保存起来,并输入到MATLAB工作空间中以完成进一步的分析。

        Simulink 可以支持多采样频率系统,即不同的系统能够以不同的采样频率进行组合,可以仿真较大、较复杂的系统

1.图形化模型与数学模型间的关系

现实中每个系统都有输入、输出和状态3个基本要素,它们之间随时间变化的数学函数关系即数学模型。图形化模型也体现了输入、输出和状态随时间变化的某种关系。只要这两种关系在数学上是等价的,就可以用图形化模型代替数学模型

2.图形化模型的仿真过程

Simulink的仿真过程包括以下几个阶段。

(1)模型编译阶段

        Simulink 引擎调用模型编译器,将模型翻译成可执行文件。其中编译器主要完成以下任务。

→计算模块参数的表达式,以确定它们的值。

→ 确定信号属性(如名称、数据类型等)。

→传递信号属性,以确定未定义信号的属性。

→优化模块。

→展开模型的继承关系(如子系统)。

→确定模块运行的优先级。

→确定模块的采样时间。

(2)连接阶段

        Simulink 引擎按执行次序创建运行列表,初始化每个模块的运行信息。

(3)仿真阶段

        Simulink 引擎从仿真的开始到结束,在每一个采样点按运行列表计算各模块的状态和输出。该阶段又分成以下两个子阶段。

→初始化阶段:该阶段只运行一次,用于初始化系统的状态和输出。

→迭代阶段:该阶段在定义的时间段内按采样点间的步长重复运行,并将每次的运算结果用于更新模型。在仿真结束时获得最终的输入、输出和状态值。

 21.1.1 Simulink模型的特点

         (1)仿真结果的可视化

         (2)模型的层次性

         (3)可封装子系统

21.1.2 Simulink模型的数据类型

        Simulink在仿真开始之前和运行过程中会自动确认模型的类型安全性,以确保该模型产生的代码不会上溢或者下溢。

1. Simulink支持的数据类型

        Simulink支持所有的MATLAB内置的数据类型,除此之外,Simulink还支持布尔类型,绝大多数模块都默认double类型的数据,但有些模块需要布尔类型和复数类型。

2. 数据类型的统一

        若模块的输入输出支持的数据类型不相同,则在仿真时会弹出错误提示对话框,告知冲突的信号和端口,此时可以尝试在冲突的模块间插入DataTypeConversion(数据类型转换)模块来解决。示例如下:

3. 复数类型

        Simulink默认的信号值都是复数,但在实际问题中需要处理复数信号。在Simulink中通常用Real-Image to Complex模块和Magnitude-Angle to Complex模块来建立处理复数信号的模型。如下图示例所示:

21.2 Simulink模块库

21.2.1 常用模块库

1.Commonly Used Blocks库(常用模块库)

模块名

功能

Bus Creator

将输入信号合并成向量信号

Bus Selector

将输入向量分解成多个信号,输入只接收从MuxBusCreator输出的信号

Constant

输出常量信号

Data Type Conversion

数据类型的转换

DemuX

将输入向量转换成标量或更小的标量

Discrete-Time lntegrator

离散积分器模块

Gain

增益模块

In1

输入模块

Integrator

连续积分模块

Logical Operator

逻辑运算模块

Mux

将输入的向量、标量或矩阵信号合成

Out1

输出模块

Product

乘法器,执行标量、向量或矩阵的乘法

Relational Operator

关系运算,输出布尔类型数据

Saturation

定义输入信号的最大值和最小值

Scope

在示波器中输出

Subsystem

创建子系统

Sum

加法器

Switch

选择器,根据第二个输入信号来选择输出第一个信号还是第三个信号

Terrainator

终止输出,用于防止模型最后的输出端没有接任何模块时报错

Unit Delay

单位时间延迟

2. Continuous库(连续系统库)

模块名

功能

Derivative

数值微分

Integrator

积分器与 Commonly Used Blocks 子库中的同名模块一样

State-Space

创建状态空间模型

dx/dt= Ax + Bu

y= Cx+ Du

Transport Delay

定义传输延迟,如果将延迟设置得比仿真步长大,就可以得到更精确的结果

Transfer Fen

用矩阵形式描述的传输函数形

Variable Transport Delay

定义传输延迟,第一个输入接收输入,第二个输入接收延迟时间用

Zero-Pole

矩阵描述系统零点,用向量描述系统极点和增益

21.2.2 子系统及其封装

        若模型的结构过于复杂,则需要将功能相关的模块组合在一起形成几个小系统,即子系统,后在这些子系统之间建立连接关系,从而完成整个模块的设计。这种设计方法实现了模型图表的次化,使整个模型变得非常简洁,使用起来非常方便。

用户可以把一个完整的系统按照功能划分为若干个子系统,而每个子系统又可以进一步划分为更小的子系统,由此可以将系统分为多层。

 1. 子系统的创建方法
(1)通过子系统模块来创建子系统;
(2)组合已经存在的模块集
 2. 封装子系统

21.3 模块的创建

        模块是Simulink建模的基本元素,了解各模块的作用是熟练掌握Simulink的基础。下面介绍利用Simulink进行系统建模和仿真的基本步骤。

(1)绘制系统流程图。首先将所要建模的系统根据功能划分为若干子系统,然后用模块来搭建每个子系统;
(2)启动Simulink模块库浏览器,建立一个空白模型窗口;
(3)将所需模块放入空白模型窗口中,将系统流程图的布局连接各模块,并封装子系统;
(4)设置各模块的参数以及仿真有关的各种参数;
(5)保存模型,模型文件的后缀名为.mdl
(6)运行并调试模型

21.3.1 创建模块文件

21.3.2 模块的基本操作

       1. 模块的选择

         2. 模块的放置

         3. 模块的位置调整

         4. 模块的属性编辑

21.3.3 模块参数设置

         1. 参数设置

         2. 属性设置

                  示例1:滤波信号输出

   

                示例2:正弦信号输出

 

21.3.4 模块的连接

         1. 直线的连接

         2. 直线的编辑

                  示例1:正弦信号的最大值、最小值输出

 

                  示例2:信号输出

21.4 仿真分析

21.4.1 仿真参数设置

       (1)Solver(求解器)面板

        主要用于设置仿真开始和结束的时间,选择解法器并设置相应的参数。

         (2)Data Import/Export(输入/输出数据)面板

21.4.2 仿真的运行和分析

         1. 仿真结果输出分析

         (1)在模型中将信号输入Scope(示波器)模块或XY Graph模型;
         (2)将输出写入To Workspace模块,然后使用MATLAB绘图功能;
         (3)将输出写入To File模块,然后使用MATLAB文件读取和绘图功能。

         2. 线性化分析

         3. 平衡点分析

21.4.3 仿真错误分析

21.5 回调函数

 21.6 S函数

        S函数(System 函数)是一种描述动态系统的计算机语言,可以用MATLAB、C、C++、Ada和 FORTRAN 语言编写。用mex 命令可将C、C++等语言编写的S函数编译成 MEX文件,从而可以像 MATLAB 中的其他 MEX文件一样,动态地连接到MATLAB。S函数采用一种特殊的调用语法和 Simulink 解法器进行交互,这种交互与解法器和 Simulink 自带模块间的交互十分类似。S函数可以用来描述连续、离散和混杂系统。

        S函数是扩展Simulink 功能的强有力的工具,可以实现以下操作:

        (1)用多种语言来创建新的通用性的 Simulink 模块;

        (2)可以在 User-Defined Functions 模块库的 S-function 模块中通过名称来调用并封装;        

        (3)将一个系统描述成一个数学方程;

        (4)便于图形化仿真;

        (5)可以创建代表硬件驱动的模块。

21.7 综合实例——轴系扭转振动仿真

         某柴油机4级系统振动方程:$ I\ddot{\varphi}+C\dot{\varphi}+K\varphi =T $其中,$ \varphi $轴系各质量点扭振转角位移;轴系节点向量$ T=1200N·m $;轴系转动惯量$ I=\left( 0.002~6.7 \right) kg·m^2 $,阻尼$ C=13000\left( N·m \right) s/rad $,刚度矩阵$ K=2000N/m $。当$ T=0 $时,计算系统自由振动;当$ T\ne 0 $,计算系统受迫振动。

        系统受迫振动微分方程表述为$ 5\ddot{\varphi}+13000\dot{\varphi}+2000\varphi =1200 $,将原微分方程修改为$ \ddot{\varphi}=240-2600\dot{\varphi}-400\varphi $

 

        转化方程组:对于系统受迫振动微分方程 $ 5\ddot{\varphi}+13000\dot{\varphi}+2000\varphi =t $$ t=2000 $,转化为高阶微分方程,这里需要将其转换为一阶微分方程组即状态方程,然后使用函数ode45()进行求解。令$ x_1=\varphi ,\ x_2=\dot{\varphi} $ ,则状态方程为

        创建函数文件verderpol.m:

function [xn]=verderpol(t,x)
global mu
xn=[x(2);0.2*mu-400*x(1)-2600*x(2)];
end

        在命令行窗口中输入下面的程序:

>> global mu;
>> mu=1200;
>> y0=[1200;0];
>> [t,x]=ode45(@verderpol,[0,1200],y0);
>> subplot(1,2,1);plot(t,x);
>> title('时间响应曲线')
>> xlim([-200,1500])
>> subplot(1,2,2);plot(x(:,1),x(:,2))
>> title('平面曲线')
>> xlim([0,1500])

        结果:

 

参考资料:

[1] 天工在线. MATLAB2020从入门到精通·实战案例版[M]. 北京: 中国水利水电出版社, 2020.

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

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

相关文章

汽车ECU的虚拟化技术(五) -- 对MCU虚拟化实现难点的思考

目录 1.概述 2.虚拟化软件的难点 2.1 虚拟化中的中断处理 2.2 虚拟ECU的通信 3.小结 1.概述 在上面文章里汽车ECU的虚拟化技术(四) -- 对MCU虚拟化实现难点的思考-CSDN博客,解了OEM面临新的电子电气架构下的集成难点,引入了hypervisor以及VM调度机制…

内网使用rustdesk进行远程协助

文章目录 前言一、搭建rustdesk中继服务器二、搭建文件下载服务器三、创建引导脚本四、使用 前言 内网没有互联网环境,没法使用互联网上有中继服务器的远程协助工具,如teamviewer、todesk、向日癸等;在内网进行远程维护可以自己搭建中继服务…

缤纷浏览器 —— 一键换肤,个性随心换(H5实现浏览器换肤效果)

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

新版仿蓝奏网盘|城通网盘|百度网盘|闪客网盘|网盘源码系统,个人网盘系统

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买!购买本专栏住如有什么源码需要,可向博主私信,第二天即可发布!博主有几万资源) 这是一款仿蓝奏网盘、城通网盘、百…

BGP4+简介

定义 BGP是一种用于自治系统AS(Autonomous System)之间的动态路由协议,常用版本是BGP-4,BGP-4只能传递IPv4路由。针对IPv6的BGP4扩展,通常称为BGP4。 目的 BGP4用于在AS之间传递路由信息,并不是所有情况…

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好,我是淘小白~ 首先,感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新,此次版本更新修改增加了一些内容: 1、自定义多条指令,软件自动判断指令条数,进行输入 2、增加谷歌浏览多账号轮询&#xf…

Orbit 使用指南 07 | 创建强化学习环境 | Isaac Sim | Omniverse |

如是我闻 在谈论了如何创建基础环境后,我们现在将探索如何为强化学习创建任务环境。 基础环境被设计为一个感知-行动环境(sense-act environment),代理(agent)可以向环境发送命令并从环境接收观测。这种最…

Meta 推出SceneScript,一种全新的3D场景重建方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

高项-案例分析练习(范围管理)

案例一 公司在2014年初承接了一个医疗信息系统项目,要求2014年底完成该项目研发任务并进行试运行,2015年负责项目全年的运行维护,运行稳定后甲方验收合格项目才能结束。由于张工具有多年的医疗系统开发管理经验,公司领导任命他为项…

用BSP优化3D渲染

3D渲染引擎设计者面临的最大问题之一是可见性计算:只必须绘制可见的墙壁和物体,并且必须以正确的顺序绘制它们(应该在远处的墙壁前面绘制近墙) 。 更重要的是,对于游戏等应用程序来说,开发能够快速渲染场景…

Flutter动画(一)Ticker、Animate 原理

在任何系统的UI框架中,动画原理都是类似的,即:在一段时间内,快速地多次改变UI外观;由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。 Flutter中对动画进行了抽象,主要涉及 Anim…

2.6、媒体查询(mediaquery)

概述 媒体查询作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景: 针对设备和应用的属性信息(比如显示区域、深浅色、分辨率),设计出相匹配的布局。当屏幕发生动态改变时(比如分屏…

2016年认证杯SPSSPRO杯数学建模B题(第二阶段)多帧图像的复原与融合全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 多帧图像的复原与融合 原题再现: 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制,拍摄设备只能在较低的分辨率下成像。为简单起见,我们只考虑单色成像。假设成像的分辨率为 32 64&#x…

QT作业。。

1.使用手动连接,将登录框中的取消按钮使用t4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数将登录按钮使用t5版本的连接到自定义的槽函数中,在槽函数中判断u界面上输入的账号是否为"admin",密码是否为&q…

(done) 机器学习中的方差 variance 和 偏差 bias 怎么理解?

来源:https://blog.csdn.net/weixin_41479678/article/details/116230631 情况1属于:低 bias,高 variance (和 human performance 相近,但和 验证集dev set 相远) 通常意味着模型训练轮数太多 情况2属于:高 bias&#…

基于NetCoreServer的WebSocket客户端实现群播(学习笔记)

一、NetCoreServer介绍 超快速、低延迟的异步套接字服务器和客户端 C# .NET Core 库,支持 TCP、SSL、UDP、HTTP、HTTPS、WebSocket 协议和 10K 连接问题解决方案。 开源地址:https://github.com/chronoxor/NetCoreServer 支持: Example: TC…

分享Pandas 数据分析实战课程

分享Pandas 数据分析实战课程,3 小时掌握数据分析核心技能。 链接:https://pan.baidu.com/s/1Ikk3I1dfoFO0id3EBZJdGg?pwd4y83 提取码:4y83 链接:https://pan.quark.cn/s/fa2acd7513f4 提取码:yWu7

【3DsMax】展UV记录

目录 一、概念 二、边的颜色 三、UV的连续性 四、合理的划分UV接缝 五、总结 一、概念 展uv的概念可以理解为把三维的模型铺平展成一个平面,然后在这个平面上去绘制图案。 二、边的颜色 我们先创建一个长方体,然后在修改器列表中添加“UVW展开”…

数据格式化方法

首先你需要一个可以展示代码的组件; 我使用的是tech-ui(内部组件库); 你如果没有类似的组件,可以参考以下链接替代: react-monaco-editor -- 代码编辑器(适用Umi)_umi monaco editor-CSDN博客 Codemirror -- 代码编辑器(react…

schweizer-electronic 公司 safedat2 操作使用说明

schweizer-electronic 公司 safedat2 操作使用说明