1、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) 用来设置信号的显示时间范围。需要注意的是信号显
2、示的时间范围和系统仿真的时间范围可以不同。坐标系所显示的时间范围并非为绝对时间,而是指相对时间范围,坐标系左下角的时间偏移(Time offset)规定时间的起始时刻。 】 休一 坐标系数目 的 笨 【悬浮Scope开关 博 微 浪显示时间范围 新 的 坐标轴标签 我注 关 迎欢 (a)Scope模块的General选项卡 信号显示点数设置 保存信号至工作空间 保存数据的变量名 数据保存类型 (b) Scope模块的Data history选项卡 106 图9.2 Scope模块的参数设置界面 (4)坐标系标签(Tick labels) 确定Scope模块中各坐标系是否带有坐标系标签。此选项提
3、供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)数据保存变量
4、名 设置被保存至MATLAB工作空间中数据的变量名。 (4)数据保存类型 设置被保存至MATLAB工作空间中数据的保存类型。数据的保存类型有三种:带时间变量的结构体(Structure with time)、结构体(Structure)以及数组变量(Array)。 另外,在Scope模块中的坐标系中单击鼠标右键,选择弹出菜单中的坐标系属性(axes properties),将弹出如图9.3所示的对话框。用户可以对Scope模块的坐标系标题和信号显示范围进行设置,以便于更】好地分析显示信号。 休一 的 笨 设置信号显示范围 【 博 微浪 新设置坐标系标题 的 我注 关 迎图9.3 坐标系属性设置
5、对话框 欢 9.1.2 悬浮Scope模块的使用 在进行系统仿真分析时,用户往往需要对多个信号进行观察和做定性的分析。如果将每个信号都与一个Scope模块相连接,则系统模型中就会存在多个Scope模块,使得系统模型显得凌乱、不简练,且Scope模块可以解决这个问题。 不易对不同Scope模块中显示的信号进行比较。使用悬浮与Scope模块不同,悬浮Scope模块没有输入端口,它在仿真过程中可以显示任何选定的信号,而Scope模块只能显示输入到其端口的信号。 这里以8.4节中例8.2连续的非线性系统的输出结果为例说明悬浮Scope模块的使用技术。图8.28求解Van der Pol方程的Simul
6、ink模型中Scope1是一个悬浮Scope模块。在Simulink模型中,悬浮Scope模块的创建有三种方法。第一,直接从Sink模型库中选择悬浮Scope模块;第二,点中普通的Scope模块的parameters中的floating scope选项,将普通的Scope模块设置为悬浮Scope模块;第三,点击图9.1所示的悬浮Scope开关也可将普通的Scope模块设置为悬浮Scope模块。 要使用悬浮Scope模块显示指定的信号,必须进行正确的设置。 一、设置需要显示的信号 显示信号的选择是悬浮Scope使用的关键。使用悬浮Scope模块的信号选择器选择需要显示的信号。 107点击图9.1
7、所示的悬浮时信号选择器即可打开信号选择器对话框,见图9.4,然后在可显示信号列表中选择需要显示的信号。 可显示 信号列表 】 图9.4 悬浮Scope模块的信号选择 休一二、设置信号存储缓冲区与全局变量 的默认情况下,Simulink的信号都是局部变量,Simulink重复使用存储信号的缓冲区。使用悬浮Scope笨模块时,由于信号和模块之间没有实际的连接,用户需要对要显示的信号进行正确设置以避免Simulink【对变量的缓冲区重复使用。 博 关闭Simulink仿真参数对话框(Configuration Parameters)中的Optimization选项卡,选择禁用Signal 微浪sto
8、rage reuse功能可以避免Simulink对变量的缓冲区重复使用。如图9.5。 新的xx在进行了必要的信和, 对于例8.2,使用悬浮Scope模块的信号选择器选择需要显示的信号12我注号存储缓冲区及全局变量设置后,重新运行,悬浮Scope模块的显示的仿真结果见图9.6。 关 迎欢 禁用信号存 储复用选项 图9.5 信号存储缓冲区设置 108 图9.6 悬浮Scope显示的例8.2的仿真结果 】9.2 Simulink的工作原理 休一尽管Simulink的初衷是为用户提供一个具有友好用户界面的系统级仿真平台,通过它的图形化仿真的环境,可以为用户屏蔽掉许多繁琐的编程工作,而把主要精力放在模型
9、的构建上,从而使用户快速完成笨系统的设计任务。但为了能够高效灵活地使用Simulink,必须了解Simulink的工作原理。Simulink通过【系统模型(框图)与MATLAB求解器直接的交互对话完成系统仿真的,见图9.7。Simulink传递模块参博数和差分(微分)方程给MATLAB求解器,而MATLAB求解器计算系统模块的输出以更新离散系统的微浪状态并确定下一步仿真时间。 新 的 我注 关 迎欢 图9.7 Simulink仿真原理示意图 9.2.1 系统模型 简单地说,Simulink中的每个模块都是一个具有输入、输出和状态三个基本元素的系统。在Simulink中,模块都是用向量yux、和
10、分别表示输入、状来表示这三个基本元素的,假设态和输出向量。图9.8能够表示这三个元素的关系。其中状态向 图9.8 Simulink模块的基本模型 量是非常重要的概念,状态决定了模块的输出,而它的当前值是前一个时间模块的状态和(或)输入的函数。拥有状态的模块必须能够保存前面的状态值,计算当前的状态值,并且具有保存以前状态值或输入值的存储空间。Simulink的Integrator模块是有状态的模块,Integrator模块输出的是输入信号从仿真开始时刻到当前时刻的积分值,当前积分值依赖于Integrator模块的输入的历史记录,因此积分值是模块的一个状态。而Gain 109模块则是无状态的模块,
11、其输出完全由当前的输入值和增益决定,因此,Gain模块没有状态。 Simulink中的状态向量可以分为连续状态、离散状态或两者的结合。无论是连续系统还是离散系统,在用计算机进行仿真时,都需要在采样时间点(即采样时间步长)估计系统的输入、输出和状态向量。在每一个采样时刻,Simulink根据当前的时间、输入和状态来决定该采样时刻的输出。 9.2.2 Simulink求解器概念 Simulink求解器在Simulink进行仿真计算的过程中起着非常重要的作用,它是Simulink进行仿真计算的核心。因此,要了解Simulink的工作原理,必须先对Simulink求解器有所了解。 一、离散求解器 离散
12、系统一般是用差分方程描述的,其输入与输出仅在离散的采样时刻取值,系统的状态每隔固定的时间才更新一次,而Simulink对离散系统的仿真核心是对离散系统差分方程的求解。因此,Simulink可以做到对离散系统仿真的绝对精确(除了有限的数据截断误差)。 要对纯粹的离散系统进行仿真,需要使用离散求解器对其进行求解。用户需要选择Simulink仿真参数设置对话框中的求解器选项卡中的discrete(no continuous states)选项,即没有连续状态的离散求解器,便可对离散系统进行精确的求解与仿真。见8.4节 8.4.2 离散系统仿真分析算例8.3。 二、连续求解器 与离散系统不同,连续系统
13、的输入、输出与状态都是连续的,并且输入、输出与状态的关系需要用微分方程描述。因此需要使用数字计算机对系统的微分或偏微分方程进行求解,所以只能求出其数值解】(即近似解),不可能得到系统的精确解。 休一 Simulink对连续系统进行仿真,实质上是对系统的微分或偏微分方程进行求解。对微分方程的近似的求解的方法有多种,因此Simulink的连续求解器有多种不同的形式,如变步长求解器ode45、ode23、ode113,笨定步长求解器ode5、ode4、ode3等。采用不同的连续求解器会对连续系统的仿真结果和仿真速度产生不【同的影响,但一般不会对系统的性能分析产生较多的影响,因为用户可以设置具有一定误
14、差范围的连续博求解器进行相应的控制。连续求解器设置见图9.9。 微浪 新 连续求解器 的 我注 关 迎欢 仿真误差设置 仿真步长控制 图9.9 连续求解器设置 需要说明的一点是,实际系统很少是纯粹连续或离散的,大部分系统是混合系统。连续变步长求解器不仅考虑了连续状态的求解,也考虑了离散状态的求解,因此连续变步长求解器比较常用。连续变步长求解器首先尝试使用最大步长(仿真起始时采用初始步长)进行求解,如果在这个仿真区间内有离散状态更新,步长便减到与离散状态的更新相吻合。 9.2.3 仿真过程 110 Simulink的仿真过程包括两个阶段:初始化和模型计算。 一、初始化 在初始化阶段,要完成的工作
15、包括: 将模块参数传递给MATLAB进行估值,得到的数值结果将作为模块的实际参数; 模型的各个层次被展开。每个非条件执行子系统被它所包含的模块替代; 模型中的模块按更新的次序进行排序。排序算法产生一个列表确保具有代数环的模块在产生它的驱动输入的模块被更新后再更新; 决定模型中没有显式设置的信号属性,例如名称、数据类型、数值类型以及大小等,并且检查每个模块是否能够接收连接到它们输入端的信号。 Simulink使用属性传递的过程来决定未被设定的属性,属性传递是将源信号的属性传递到它所驱动模块的输入信号。 决定模型中所有没有显式设置采样时间的模块的采样时间; 分配和初始化用于存储每个模块的状态和输出
16、的当前值的存储空间。 二、模型计算 完成初始化工作后,Simulink就开始运行仿真了。Simulink是使用数值积分来仿真计算的。所以,Simulink求解器在仿真计算中起到非常重要的作用。 在仿真开始时,模型设置待仿真系统的初始状态和输出,在每个时间步长中,Simulink计算系统的】输入、状态和输出,并更新模型来反映计算出的值。在仿真结束时,模型得出系统的输入。状态和输出。 休一在每个时间步长中,Simulink所采取的动作依次是: 的按排列好的次序,更新模型中模块的输出。Simulink通过调用模块的输出函数计算模块的输出。笨Simulink把当前值、模块的输入和状态传给这些函数计算模
17、块的输出。对于离散系统,Simulink只有在当【前时间是模块采样时间的整数倍时,才会更新模块的输出; 博按排列好的次序,更新模型中的模块状态。Simulink调用模块的离散状态更新函数来计算一个模块微浪的离散状态;对连续状态的微分进行数值积分来获得当前的连续状态; 新检查模块连续状态的不连续点。Simulink使用过零检测(Zero crossing detection)状态的不连续点; 的计算下一个仿真步长的时间。 我注这里需要说明的是,Simulink在仿真中要根据事先确定的模块更新次序更新状态和输出。而更新次关序对仿真结果的正确性非常关键。特别的,当某个模块的输出是它当前时刻的输入值的
18、函数,则该模块迎欢必须在驱动它的模块被更新之后才能被更新,否则,模块的输出将无意义。 为了建立有效的更新次序,Simulink根据输出和输入的关系,将模块分为两类。当前输出依赖于当前时刻输入的模块称为直接馈入模块,所有其它的模块称为非直接馈入模块。比如,Simulink中的Gain、Product和Sum模块是直接馈入模块,而Constant模块(没有输入)、Memory模块(输出只依赖于前一个时间步长的输入)则是非直接馈入模块。基于上述的分类,Simulink使用两个基本规则对模块进行排序: 每个模块必须在它所要驱动的所有模块中的任何一个模块更新之前被更新,这条规则确保模块在被更新时,它的输
19、入有效; 非直接馈入模块可以按任何的次序更新,只要它们在它们所要更新的直接馈入模块之前更新。这条在排序过程中忽规则可以通过把所有非直接馈入模块以任何次序放在更新列表来满足。它允许Simulink略非直接馈入模块。 在排序过程中,Simulink检查和标记代数环的出现。有关代数环的概念本章将做较详细的介绍。 9.3 系统过零的概念与解决方案 Simulink对系统仿真的控制是通过系统模型(框图)与MATLAB求解器的直接交互对话进行的,见图9.7。Simulink将系统模型、模块参数传递给MATLAB求解器,而MATLAB求解器计算系统模块的输出、确定下一步仿真时间,并通过Simulink环境再
20、传递给系统模型。 111对话方式的核心是事件通知。系统模型通过Simulink仿真环境通知求解器前一个仿真步长内系统所发生的事件,以便求解器计算当前仿真时刻的结果。Simulink用过零检测来检测系统中是否有事件发生。系统模型正是通过过零检测与事件通知完成与MATLAB求解器的交互的。 9.3.1 过零事件及过零检测 在系统仿真的过程中,过零是指系统模型中的信号或系统模块特征产生显著变化。这种改变包括两种情况:(1)信号在上一个仿真步长中改变了符号;(2)系统模块在上一个仿真时间步长改变了模式(如积分器进入了饱和区)。 过零本身便是一个非常重要的事件,同时它也用来表示其它事件的发生,统称过零事
21、件。Simulink用过零来表征动态系统中的不连续性。例如系统响应的跳变等。过零事件的一个典型的示例是和地板相撞反弹的小球。要对这样的系统进行仿真,求解器不可能精确地使仿真时刻与小球和地面接触的时刻重合。这样,小球就像穿过了接触点,穿透了地板。 过零检测在检测过零事件是否发生方面发挥着重要的作用。Simulink使用过零检测使某仿真时刻精确地(在机器精度范围内)发生在状态事件发生的时刻。因此对于和地板相撞反弹的小球系统的仿真来说,仿真时刻可以精确地取在小球与地面接触的时刻,仿真就不会发生穿透现象,且小球的速度由负到正的转换非常迅速。Simulink中有一个弹球的演示示例,用户可在MATLAB命
22、令窗口键入bounce或在MATLAB的demo窗口直接找寻并打开它。感兴趣的读者也可以通过此例熟悉高级积分器的设置和使用,见9.5节高级积分器中例9.6。 】 9.3.2 事件通知 休一在动态系统仿真中,采用变步长求解器可以使Simulink正确地检测到系统模块与信号中过零事件的的发生。当一个模块通过Simulink仿真环境通知求解器在系统前一个仿真步长时间内发生了过零事件,变笨步长求解器就会缩小仿真步长,即使求解误差满足绝对误差和相对误差的上限要求。缩小仿真步长的目【的是判断事件发生的准确时间(也就是过零事件发生的准确时刻)。虽然这样做会使系统的仿真速度变慢,博但这样做对系统的某些模块是非
23、常重要的。因为这些模块的输出可能表示的一个物理值,它的零值可能微浪标志系统运行状态的改变,或可能控制着另外的模块。事实上,只有少数的模块可以发出事件通知。每新个模块发出专属于自己的事件通知,而且可能与不止一个类型的事件发生关联。 的事件通知是Simulink进行动态系统仿真的核心。可以说,Simulink动态系统仿真是基于事件驱动的,我注这符合当前交互式设计与面向对象设计的思想。在系统仿真中,系统模型与求解器均可看作某种对象,关事件通知可以理解为对象间的消息传递;对象通过消息的传递来完成系统模型和求解器之间的交互作用。 迎欢 9.3.3 支持过零的模块 事实上在Simulink的模型库中,只有
24、少数的模块能够产生过零事件。能够产生过零事件的模块有:Math模型库中的求绝对值模块Abs; 最值模块MinMax;符号运算模块Sign;Discontinuities模型库中的偏移模块Backlash;死区模块Dead Zone;交叉模块Hit Crossing;继电模块Relay;饱和模块Saturation;模型库中的积分模块Integrator;Logic and Bit Operations模型库中的关系运算模块Relational ContinuousOperator;Sources模型库中的阶跃模块Step;Subsystems模型库中的子系统模块Subsystem,以及Sign
25、al Routing模型库中的开关模块Switch等。一般来说,不同模块所产生的过零事件的类型不同。例如:对于求绝对值模块Abs,当输入改变符号时产生一个过零事件,而饱和模块Saturation则能够生成两个不同的过零事件,一个用于下饱和,一个用于上饱和。 对于其它不具备过零检测能力的模块,如果需要对它们进行过零检测,则可以使用Discontinuities模型库中的交叉模块Hit Crossing来实现。当Hit Crossing模块的输入穿过某个偏移值(offset)时会产生一个过零事件,所以它可以用来为不具备过零能力的模块提供过零检测的能力。 一般来讲,系统模型中模块过零的作用有两种:一
26、是用来通知求解器系统的运行模式是否发生了改变,即系统的动态特性是否发生改变;二是来驱动系统模型中的其它模块。过零信号包含三种类型:上升沿、下降沿、双边沿。其中,上升沿是指系统中的信号上升到零或穿过零,或者信号由零变为正;下降沿是指系统中信号下降到零或穿过零,或者信号由零变为负;双边沿是指任何信号的上升或下降沿的 112发生。 9.3.4 过零的举例 一、过零点的产生与影响 例91 举例说明过零的产生与影响 图9.10是例9.1的系统仿真模型和仿真结果图。由仿真模型可以看出系统中采用了User-Defined Functions模型库中的Fcn模块和Math Operations模型库中Abs模
27、块。其中Fcn模块和Abs模块的输入信号分别是正弦信号和偏差为0.5的正弦信号。这两个模块均完成对输入信号求绝对值的功能。 由本例可以看出不支持过零事件的Fcn模块在求绝对值时,一些拐点被漏掉了,而支持过零事件Abs模块能够使过零点处的仿真步长足够小,精确地捕获其输入信号改变符号的时刻,得到零点结果。 】 休一 的 笨 【 博 微浪 新 图9.10 过零事件及其对计算结果的影响 的二、关闭过零与影响 我注例9.1中过零表示系统穿过了零点。其实,过零不仅表示信号穿过了零点,还可表示信号的陡沿和饱关和。下面介绍的例9.2可以说明这个问题。 迎欢图9.11是例9.2的系统仿真模型及其仿真结果。在此例
28、中,系统实现了输入信号由其绝对值跳变到饱和值的功能,并且其跳变过程受到仿真时间的控制。此系统中所采用的模块Abs和Saturation都支持过零事件,因此在系统的响应输出中得到了理想的陡沿。 图9.11 例9.2的系统仿真模型及其仿真结果 113在使用Simulink进行动态仿真时,仿真参数默认选择使用过零检测功能。如果过零检测并不能给系统仿真带来很大的好处,用户可以关闭仿真过程中过零事件的检测功能。用户需要在SimulationConfiguration Parameters参数设置对话框的Solver选项卡中选择过零检测的开和关。(a)、(b)分别是过零检测设置及关闭过零检测后,例9.2系
29、统的仿真结果。显然,关闭过零检测功能后,系统的仿真结果在信号进入饱和时带有一些拐角,且在5s时的陡沿不理想。 9.3.5 使用过零检测的其它注意事项 在使用过零检测时,用户需要主要以下事项: 一、关闭系统仿真参数设置中的过零检测,可以使系统的仿真速度得到很大的提高。但可能会引起系统仿真结果的不精确,甚至出现错误的结果; 二、关闭系统过零检测对Hit Crossing交叉模块无影响; 三、对于离散模块及其产生的离散信号不需要进行过零检测。这是因为用于离散系统仿真的离散求解器与连续变步长求解器都可以很好地匹配离散信号的更新时刻。 在对某些特殊的动态系统进行仿真时,有可能在一个非常小的时间段内多次通过零点。这将导致在同一时间内多次探测到信号的过零,从而使得Simulink仿真终止。在这种情况下,用户
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1