MATLAB_simulink中的示波器scope设置


2024年1月2日发(作者:googleearth卫星地图)

一、打印输出(Print) 将系统仿真结果的输出信号打印出来。 二、视图自动缩放(Autoscale) 点击此按钮可以自动调整显示范围以匹配系统仿真输出信号的动态范围。 三、X轴缩放、Y轴缩放以及视图整体缩放 可以分别对X坐标轴、Y坐标轴或同时对X、Y坐标轴的信号显示进行缩放,以满足用户对信号做局部观察的需要。使用时,单击缩放按钮后选择需要观察的信号范围即可。若需要缩小视图,单击鼠标右键,选择弹出菜单的Zoom out即可。 四、保存和恢复坐标轴设置 使用Scope模块观察输出信号时,用户可以保存坐标轴设置。这样,当信号的视图发生改变后,单击恢复坐标轴设置可以恢复以前保存的坐标轴设置。 五、Scope参数设置 点击Scope模块工具栏的参数设置按钮(Parameters),可以打开Scope模块的参数设置界面,见图9.2(a)。Scope模块的参数设置包含两个选项卡:General和Data

History。

1、 General选项卡 通常参数设置界面首先显示General选项卡的内容。在General选项卡中可以进行下列设置: (1)坐标系数目(Number of axes)

在一个Scope模块中可以使用多个坐标系窗口同时输出多个信号。同时可使用的坐标系数目由此处设置。

默认设置下,Scope模块仅显示一个坐标系窗口。

(2)悬浮Scope开关(floating scope) 用来将Scope模块切换为悬浮Scope模块。悬浮Scope模块将在9.1.2中介绍。 (3)显示时间范围(Time range)

用来设置信号的显示时间范围。需要注意的是信号显示的时间范围和系统仿真的时间范围可以不同。坐标系所显示的时间范围并非为绝对时间,而是指相对时间范围,坐标系左下角的时间偏移(Time offset)规定时间的起始时刻。

(4)坐标系标签(Tick labels) 确定Scope模块中各坐标系是否带有坐标系标签。此选项提供3种选择:全部坐标系都使用坐标系标签(all)、最下方坐标系使用标签(bottom axis only)以及都不使用标签(none)。 2、Data history选项卡 在Data history选项卡中可以进行下列设置: (1)信号显示点数限制(Limit data points to last) 用来限制显示信号的数据点的数目,Scope模块会自动对信号进行截取,只显示信号最后n个点(n为设置的点数)。 (2)保存信号至工作空间(Save data to workspace) 将Scope模块显示的信号保存至MATLAB工作空间中,以便于对信号进行更深入的定量分析。 (3)数据保存变量名

设置被保存至MATLAB工作空间中数据的变量名。

(4)数据保存类型 设置被保存至MATLAB工作空间中数据的保存类型。数据的保存类型有三种:带时间变量的结构体(Structure with time)、结构体(Structure)以及数组变量(Array)。 另外,在Scope模块中的坐标系中单击鼠标右键,选择弹出菜单中的坐标系属性(axes properties),将弹出如图9.3所示的对话框。用户可以对Scope模块的坐标系标题和信号显示范围进行设置,以便于更好地分析显示信号。

9.1.2 悬浮Scope模块的使用 在进行系统仿真分析时,用户往往需要对多个信号进行观察和做定性的分析。如果将每个信号都与一个Scope模块相连接,则系统模型中就会存在多个Scope模块,使得系统模型显得凌乱、不简练,且不易对不同Scope模块中显示的信号进行比较。使用悬浮Scope模块可以解决这个问题。 与Scope模块不同,悬浮Scope模块没有输入端口,它在仿真过程中可以显示任何选定的信号,而Scope模块只能显示输入到其端口的信号。 这里以8.4节中例8.2连续的非线性系统的输出结果为例说明悬浮Scope模块的使用技术。图8.28求解Van der Pol方程的Simulink模型中Scope1是一个悬浮Scope模块。在Simulink模型中,悬浮Scope

模块的创建有三种方法。第一,

直接从Sink模型库中选择悬浮Scope模块;第二,点中普通的Scope模块的parameters中的floating

scope选项,将普通的Scope模块设置为悬浮Scope模块;第三,点击图9.1所示的悬浮Scope开关也可将普通的Scope模块设置为悬浮Scope模块。 要使用悬浮Scope模块显示指定的信号,必须进行正确的设置 一、设置需要显示的信号 显示信号的选择是悬浮Scope使用的关键。使用悬浮Scope模块的信号选择器选择需要显示的信号。点击图9.1所示的悬浮时信号选择器即可打开信号选择器对话框,见图9.4,然后在可显示信号列表中选择需要显示的信号。

二、设置信号存储缓冲区与全局变量 默认情况下,Simulink的信号都是局部变量,Simulink重复使用存储信号的缓冲区。使用悬浮Scope模块时,由于信号和模块之间没有实际的连接,用户需要对要显示的信号进行正确设置以避免Simulink对变量的缓冲区重复使用。 关闭Simulink仿真参数对话框(Configuration Parameters)中的Optimization选项卡,选择禁用Signal storage reuse功能可以避免Simulink对变量的缓冲区重复使用。如图9.5。

对于例8.2,使用悬浮Scope模块的信号选择器选择

需要显示的信号1x和2x,在进行了必要的信号存储缓冲区及全局变量设置后,重新运行,悬浮Scope模块的显示的仿真结果见图9.6。

9.2 Simulink的工作原理

尽管Simulink的初衷是为用户提供一个具有友好用户界面的系统级仿真平台,通过它的图形化仿真环境,可以为用户屏蔽掉许多繁琐的编程工作,而把主要精力放在模型的构建上,从而使用户快速完成系统的设计任务。但为了能够高效灵活地使用Simulink,必须了解Simulink的工作原理。Simulink通过系统模型(框图)与MATLAB求解器直接的交互对话完成系统仿真的,见图9.7。Simulink传递模块参数和差分(微分)方程给MATLAB求解器,而MATLAB求解器计算系统模块的输出以更新离散系统的状态并确定下一步仿真时间。

9.2.1 系统模型 简单地说,Simulink中的每个模块都是一个具有输入、输出和状态三个基本元素的系统。在Simulink中,模块都是用向量来表示这三个基本元素的,假设u、x和y分别表示输入、状态和输出向量。图9.8能够表示这三个元素的关系。其中状态向量是非常重要的概念,状态决定了模块的输出,而它的当前值是前一个时间模块的状态和(或)

输入的函数。拥有状态的模块必须能够保存前面的状态值,计算当前的状态值,并且具有保存以前状态值或输入值的存储空间。Simulink的Integrator模块是有状态的模块,Integrator模块输出的是输入信号从仿真开始时刻到当前时刻的积分值,当前积分值依赖于Integrator模块的输入的历史记录,因此积分值是模块的一个状态。而Gain模块则是无状态的模块,其输出完全由当前的输入值和增益决定,因此,Gain模块没有状态。

Simulink中的状态向量可以分为连续状态、离散状态或两者的结合。无论是连续系统还是离散系统,在用计算机进行仿真时,都需要在采样时间点(即采样时间步长)估计系统的输入、输出和状态向量。在每一个采样时刻,Simulink根据当前的时间、输入和状态来决定该采样时刻的输出。 9.2.2 Simulink求解器概念 Simulink求解器在Simulink进行仿真计算的过程中起着非常重要的作用,它是Simulink进行仿真计算的核心。因此,要了解Simulink的工作原理,必须先对Simulink求解器有所了解。 一、离散求解器 离散系统一般是用差分方程描述的,其输入与输出仅在离散的采样时刻取值,系统的状态每隔固定的时间才更新一次,而Simulink对离散系统的仿真核心是对离散

系统差分方程的求解。因此,Simulink可以做到对离散系统仿真的绝对精确(除了有限的数据截断误差)。

要对纯粹的离散系统进行仿真,需要使用离散求解器对其进行求解。用户需要选择Simulink仿真参数设置对话框中的求解器选项卡中的discrete(no

continuous states)选项,即没有连续状态的离散求解器,便可对离散系统进行精确的求解与仿真。见8.4节 8.4.2 离散系统仿真分析算例8.3。 二、连续求解器 与离散系统不同,连续系统的输入、输出与状态都是连续的,并且输入、输出与状态的关系需要用微分方程描述。因此需要使用数字计算机对系统的微分或偏微分方程进行求解,所以只能求出其数值解(即近似解),不可能得到系统的

精确解。 Simulink对连续系统进行仿真,实质上是对系统的微分或偏微分方程进行求解。对微分方程的近似求解的方法有多种,因此Simulink的连续求解器有多种不同的形式,如变步长求解器ode45、ode23、ode113,定步长求解器ode5、ode4、ode3等。采用不同的连续求解器会对连续系统的仿真结果和仿真速度产生不同的影响,但一般不会对系统的性能分析产生较多的影响,因为用户可以设置具有一定误差范围的连续求解器进行相应的控制。连续求解器设置见图

9.9

需要说明的一点是,实际系统很少是纯粹连续或离散的,大部分系统是混合系统。连续变步长求解器不仅考虑了连续状态的求解,也考虑了离散状态的求解,因此连续变步长求解器比较常用。连续变步长求解器首先尝试使用最大步长(仿真起始时采用初始步长)进行求解,如果在这个仿真区间内有离散状态更新,步长便减到与离散状态的更新相吻合。 9.2.3

仿真过程 Simulink的仿真过程包括两个阶段:初始化和模型计算。

一、初始化 在初始化阶段,要完成的工作包括:

将模块参数传递给MATLAB进行估值,得到的数值结果将作为模块的实际参数; 模型的各个层次被展开。每个非条件执行子系统被它所包含的模块替代; 模型中的模块按更新的次序进行排序。排序算法产生一个列表确保具有代数环的模块在产生它的驱动输入的模块被更新后再更新; 决定模型中没有显式设置的信号属性,例如名称、数据类型、数值类型以及大小等,并且检查每个模块是否能够接收连接到它们输入端的信号。 Simulink使用属性传递的过程来决定未被设定的属性,属性传递是将源信号的属性传递到它所驱动模块的输入信号。 决定模型中所有没有显式设置采样时间的模块的采样时间; 分配和初始化用

于存储每个模块的状态和输出的当前值的存储空间。

二、模型计算 完成初始化工作后,Simulink就开始运行仿真了。Simulink是使用数值积分来仿真计算的。所以,Simulink求解器在仿真计算中起到非常重要的作用。 在仿真开始时,模型设置待仿真系统的初始状态和输出,在每个时间步长中,Simulink计算系统的输入、状态和输出,并更新模型来反映计算出的值。在仿真结束时,模型得出系统的输入。状态和输出。

在每个时间步长中,Simulink所采取的动作依次是:

按排列好的次序,更新模型中模块的输出。Simulink通过调用模块的输出函数计算模块的输出。Simulink把当前值、模块的输入和状态传给这些函数计算模块的输出。对于离散系统,Simulink只有在当前时间是模块采样时间的整数倍时,才会更新模块的输出;

按排列好的次序,更新模型中的模块状态。Simulink调用模块的离散状态更新函数来计算一个模块的离散状态;对连续状态的微分进行数值积分来获得当前的连续状态;

检查模块连续状态的不连续点。Simulink使用过零检测(Zero crossing detection)状态的不连续点; 计算下一个仿真步长的时间。 这里需要说明的是,Simulink在仿真中要根据事先确定的模块更新次序更

新状态和输出。而更新次序对仿真结果的正确性非常关键。特别的,当某个模块的输出是它当前时刻的输入值的函数,则该模块必须在驱动它的模块被更新之后才能被更新,否则,模块的输出将无意义。 为了建立有效的更新次序,Simulink根据输出和输入的关系,将模块分为两类。当前输出依赖于当前时刻输入的模块称为直接馈入模块,所有其它的模块称为非直接馈入模块。比如,Simulink中的Gain、Product和Sum模块是直接馈入模块,而Constant模块(没有输入)、Memory模块(输出只依赖于前一个时间步长的输入)则是非直接馈入模块。基于上述的分类,Simulink使用两个基本规则对模块进行排序: 每个模块必须在它所要驱动的所有模块中的任何一个模块更新之前被更新,这条规则确保模块在被更新时,它的输入有效; 非直接馈入模块可以按任何的次序更新,只要它们在它们所要更新的直接馈入模块之前更新。这条规则可以通过把所有非直接馈入模块以任何次序放在更新列表来满足。它允许Simulink在排序过程中忽略非直接馈入模块。 在排序过程中,Simulink检查和标记代数环的出现。有关代数环的概念本章将做较详细的介绍。 9.3 系统过零的概念与解决方案

Simulink对系统仿真的控制是通过系统模型(框图)

与MATLAB求解器的直接交互对话进行的,见图9.7。Simulink将系统模型、模块参数传递给MATLAB求解器,而MATLAB求解器计算系统模块的输出、确定下一步仿真时间,并通过Simulink环境再传递给系统模型。 对话方式的核心是事件通知。系统模型通过Simulink仿真环境通知求解器前一个仿真步长内系统所发生的事件,以便求解器计算当前仿真时刻的结果。Simulink用过零检测来检测系统中是否有事件发生。系统模型正是通过过零检测与事件通知完成与MATLAB求解器的交互的。

9.3.1 过零事件及过零检测 在系统仿真的过程中,过零是指系统模型中的信号或系统模块特征产生显著变化。这种改变包括两种情况:(1)信号在上一个仿真步长中改变了符号;(2)系统模块在上一个仿真时间步长改变了模式(如积分器进入了饱和区)。 过零本身便是一个非常重要的事件,同时它也用来表示其它事件的发生,统称过零事件。Simulink用过零来表征动态系统中的不连续性。例如系统响应的跳变等。过零事件的一个典型的示例是和地板相撞反弹的小球。要对这样的系统进行仿真,求解器不可能精确地使仿真时刻与小球和地面接触的时刻重合。这样,小球就像穿过了接触点,穿透了地板。 过零检测在检测过

零事件是否发生方面发挥着重要的作用。Simulink使用过零检测使某仿真时刻精确地(在机器精度范围内)发生在状态事件发生的时刻。因此对于和地板相撞反弹的小球系统的仿真来说,仿真时刻可以精确地取在小球与地面接触的时刻,仿真就不会发生穿透现象,且小球的速度由负到正的转换非常迅速。Simulink中有一个弹球的演示示例,用户可在MATLAB命令窗口键入bounce或在MATLAB的demo窗口直接寻并打开它。感兴趣的读者也可以通过此例熟悉高级积分器的设置和使用,见9.5节高级积分器中例9.6。

9.3.2 事件通知 在动态系统仿真中,采用变步长求解器可以使Simulink正确地检测到系统模块与信号中过零事件的发生。当一个模块通过Simulink仿真环境通知求解器在系统前一个仿真步长时间内发生了过零事件,变步长求解器就会缩小仿真步长,即使求解误差满足绝对误差和相对误差的上限要求。缩小仿真步长的目的是判断事件发生的准确时间(也就是过零事件发生的准确时刻)。虽然这样做会使系统的仿真速度变慢,但这样做对系统的某些模块是非常重要的。因为这些模块的输出可能表示的一个物理值,它的零值可能标志系统运行状态的改变,或可能控制着另外的模块。事实上,只有少数的模块可以发出事件通知。

每个模块发出专属于自己的事件通知,而且可能与不止一个类型的事件发生关联。 事件通知是Simulink进行动态系统仿真的核心。可以说,Simulink动态系统

仿真是基于事件驱动的,这符合当前交互式设计与面向对象设计的思想。在系统仿真中,系统模型与求解器均可看作某种对象,事件通知可以理解为对象间的消息传递;对象通过消息的传递来完成系统模型和求解器之间的交互作用。 9.3.3 支持过零的模块 事实上在Simulink的模型库中,只有少数的模块能够产生过零事件。能够产生过零事件的模块有:Math模型库中的求绝对值模块Abs; 最值模块MinMax;符号运算模块Sign;Discontinuities模型库中的偏移模块Backlash;死区模块Dead Zone;交叉模块Hit

Crossing;继电模块Relay;饱和模块Saturation;Continuous模型库中的积分模块Integrator;Logic and

Bit Operations模型库中的关系运算模块Relational

Operator;Sources模型库中的阶跃模块Step;Subsystems模型库中的子系统模块Subsystem,以及Signal Routing模型库中的开关模块Switch等。一般来说,不同模块所产生的过零事件的类型不同。例如:对于求绝对值模块Abs,当输入改变符号时产生一个

过零事件,而饱和模块Saturation则能够生成两个不同的过零事件,一个用于下饱和,一个用于上饱和。

对于其它不具备过零检测能力的模块,如果需要对它们进行过零检测,则可以使用Discontinuities模型库中的交叉模块Hit Crossing来实现。当Hit Crossing模块的输入穿过某个偏移值(offset)时会产生一个过零事件,所以它可以用来为不具备过零能力的模块提供过零检测的能力。 一般来讲,系统模型中模块过零的作用有两种:一是用来通知求解器系统的运行模式是否发生了改变,即系统的动态特性是否发生改变;二是来驱动系统模型中的其它模块。过零信号包含三种类型:上升沿、下降沿、双边沿。其中,上升沿是指系统中的信号上升到零或穿过零,或者信号由零变为正;下降沿是指系统中信号下降到零或穿过零,或者信号由零变为负;双边沿是指任何信号的上升或下降沿的发生。 9.3.4 过零的举例 一、过零点的产生与影响 例9.1 举例说明过零的产生与影响

图9.10是例9.1的系统仿真模型和仿真结果图。由仿真模型可以看出系统中采用了User-Defined Functions模型库中的Fcn模块和Math Operations模型库中Abs模块。其中Fcn模块和Abs模块的输入信号分别是正弦信号和偏差为0.5的正弦信号。这两个模块均完成

对输入信号求绝对值的功能。

由本例可以看出不支持过零事件的Fcn模块在求绝对值时,一些拐点被漏掉了,而支持过零事件Abs模块能够使过零点处的仿真步长足够小,精确地捕获其输入信号改变符号的时刻,得到零点结果。

二、关闭过零与影响 例9.1中过零表示系统穿过了零点。其实,过零不仅表示信号穿过了零点,还可表示信号的陡沿和饱和。下面介绍的例9.2可以说明这个问题。

图9.11是例9.2的系统仿真模型及其仿真结果。在此例中,系统实现了输入信号由其绝对值跳变到饱和值的功能,并且其跳变过程受到仿真时间的控制。此系统中所采用的模块Abs和Saturation都支持过零事件,因此在系统的响应输出中得到了理想的陡沿。

在使用Simulink进行动态仿真时,仿真参数默认选择使用过零检测功能。如果过零检测并不能给系统仿真带来很大的好处,用户可以关闭仿真过程中过零事件的检测功能。用户需要在Simulation-Configuration Parameters参数设置对话框的Solver选项卡中选择过零检测的开和关。(a)、(b)分别是过零检测设置及关闭过零检测后,例9.2系统的仿真结果。显然,关闭过零检测功能后,系统的仿真结果在信号进入饱和时带有一些拐角,且在5s时的陡沿不理想。

9.3.5 使用过零检测的其它注意事项 在使用过零

检测时,用户需要主要以下事项: 一、关闭系统仿真参数设置中的过零检测,可以使系统的仿真速度得到很大的提高。但可能会引起系统仿真结果的不精确,甚至出现错误的结果; 二、关闭系统过零检测对Hit

Crossing交叉模块无影响; 三、对于离散模块及其产生的离散信号不需要进行过零检测。这是因为用于离散系统仿真的离散求解器与连续变步长求解器都可以很好地匹配离散信号的更新时刻。 在对某些特殊的动态系统进行仿真时,有可能在一个非常小的时间段内多次通过零点。这将导致在同一时间内多次探测到信号的过零,从而使得Simulink

仿真终止。在这种情况下,用户应该关闭过零检测功能再进行仿真。但是对于模块过零非常重要的系统,用户可以采用在系统模型中串接交叉Hit Crossing模块,并关闭过零检测功能的方法来实现过零的检测。


本文发布于:2024-09-22 00:58:38,感谢您对本站的认可!

本文链接:https://www.17tex.com/fanyi/52804.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模块   系统   信号   求解   状态   进行   输出   输入
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议