您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > simulink动态系统建模仿真 第6章
第6章Simulink动态系统仿真第6章Simulink动态系统仿真6.1Simulink动态系统仿真过程6.2离散系统仿真6.3连续系统仿真6.4混合系统仿真6.5模型离散化6.6诊断仿真错误6.7改善仿真性能和精度6.8综合实例第6章Simulink动态系统仿真6.1Simulink动态系统仿真过程6.1.1模型编译阶段在模型编译阶段,首先,Simulink调用模型编译器,由模型编译器把模型转换为可执行形式,这个转换过程称为编译。在这个阶段,Simulink编译器执行下列工作:(1)求取模型中模块的参数表达式,用以确定表达式的值。(2)确定模型中未明确指定的信号属性,如信号名称、数据类型、数值类型和信号维数,并检查每个模块输入端可允许的输入信号。Simulink利用属性传递过程确定用户未明确指定的属性,这个过程继承模块源信号的属性,并将这个属性传递到信号所驱动模块的输入端。第6章Simulink动态系统仿真(3)执行模块优化。(4)用原子子系统所包含的模块替代原子子系统,并平铺模型层次。(5)将模块进行排序,并排列仿真过程中模块的执行顺序,当模型进入仿真执行阶段时,将按照此时的排列顺序执行模块。(6)对于用户未明确指定采样时间的模块,确定所有这些模块的采样时间。在仿真过程中,Simulink会在每个时间步内更新一次模型中模块的状态和输出,模块的更新顺序是根据模块类型决定的,Simulink按照一定的方式对模块进行排序。第6章Simulink动态系统仿真1.直接馈通端口为了创建Simulink模型仿真过程中有效的模块更新顺序,Simulink依据模块的输出与输入的关系将模块的输入端口进行排序。对于那些输入当前值直接确定模块某一输出端口当前值的输入端口,我们称其为直接馈通端口。换言之,也就是模块的输出方程中包含输入,它的输出直接依赖于输入。例如,Gain模块、Product模块和Sum模块就是具有直接馈通端口的模块。具有非直接馈通输入的模块包括Integrator模块(它的输出完全是其状态的函数)、Constant模块(没有输入)以及Memory模块(它的输出与前一时刻的输入有关)。第6章Simulink动态系统仿真2.模块排序准则Simulink利用下面的基本更新规则对模块进行排序:在驱动任一模块的直接馈通端口之前必须对每个模块进行更新。这个规则可以确保更新模块时连接到模块直接馈通端口的输入是有效的。不带有直接馈通输入的模块可以以任意的顺序进行更新,但必须是在它们驱动任一带有直接馈通输入的模块之前进行更新。按照这个规则,把所有不带有直接馈通端口的模块以任意顺序放在更新列表的前端,这样Simulink在排序过程中就可以忽略这些模块。第6章Simulink动态系统仿真按照上述规则排列的更新列表中,不带有直接馈通端口的模块以任意顺序排列在列表的最前面,接下来是带有直接馈通端口的模块,这些模块按照它们为所驱动模块提供有效输入的顺序排列。在Simulink的模块排序过程中,Simulink会检查并标记代数循环事件,也就是,一个模块的直接馈通输出直接或间接地连接到该模块所对应的直接馈通输入的信号循环。这样的循环表面上看是个死循环,因为Simulink需要用直接馈通的输入值计算其输出值。但是,我们都知道,代数循环可以表示一组输入和输出均未知的联立代数方程,而且,这些方程在每个时间步上都存在有效解,因此,Simulink假设这些包含直接馈通端口的代数循环表示了一组可求解的代数方程,并在仿真过程中每次更新模块时解算这些方程。第6章Simulink动态系统仿真6.1.2模型链接阶段在模型链接阶段,Simulink会为方块图执行过程中的信号、状态和运行时间等参数分配内存,它也会为每个模块中存储运行信息的数据结构分配并初始化内存。对于内嵌模块,模块中主要的运行时间数据结构称为SimBlock,它存储指向模块输入和输出缓存、状态、工作向量的指针。在这个阶段,Simulink也会创建方法执行列表,这个列表列出了执行模型中模块方法计算模块输出的最有效顺序,Simulink使用在模型编译阶段生成的排序列表来构造方法执行列表。用户也可以指定模块的更新优先权,Simulink会在低优先权模块之前执行高优先权模块的输出方法。第6章Simulink动态系统仿真6.1.3仿真循环阶段至此,仿真进入执行阶段。在这个过程中,Simulink利用模型提供的信息,每隔一段时间计算由仿真起始时间到终止时间之间的系统状态和输出。计算状态和输出的这些连续的时间点被称为时间步(timesteps),两个时间步之间的长度称为步长(stepsize),步长的大小取决于用来计算系统连续状态的算法、系统的基本采样时间以及系统的连续状态中是否有不连续因素。仿真循环阶段包括两个子阶段:循环初始化阶段和循环迭代阶段。初始化阶段在循环过程中只执行一次;迭代阶段在整个仿真过程中的每个时间步内都要重复一次。第6章Simulink动态系统仿真在仿真开始时,Simulink首先确定被仿真系统的初始状态和输出。在每一步仿真中,Simulink重新计算系统新的输入值、状态值和输出值,并更新模型以反映所计算的值。当仿真结束时,模型反映的是系统输入、状态和输出的最终值,而且,Simulink还提供了数据显示和记录模块,用户可以在模型中添加这些模块以显示和(或)记录中间的结果数据。第6章Simulink动态系统仿真Simulink在每个仿真时间步中都执行如下操作:(1)按照模块的排列顺序,更新模型中所有模块的输出。Simulink通过调用模型的Outputs方法初始化这个阶段,模型的Outputs方法依次调用模型系统中模块的Outputs方法,它依照仿真链接阶段生成的Outputs方法列表中的顺序调用模型中每个模块的Outputs方法。系统的Outputs方法向每个模块的Outputs方法传递下列变量:指向模块数据结构和模块SimBlock结构的指针。SimBlock数据结构指向Outputs方法用来计算模块输出的信息,包括模块输入缓存和输出缓存的位置。第6章Simulink动态系统仿真(2)按照模块的排列顺序,更新模型中所有模块的状态。Simulink调用求解器来计算模型的状态,模型中使用的求解器类型取决于模型类型,即模型中是否含有状态、模型中只含有离散状态、模型中只含有连续状态,或者模型中含有连续状态和离散状态。如果模型中只包含离散状态,那么Simulink会调用用户选择的离散求解器,求解器计算满足模型采样时间的离散步长,然后调用模型的Update方法,模型的Update方法再调用模型系统的Update方法,也就是按照链接阶段生成的Update方法列表顺序调用系统中每个模块的Update方法。第6章Simulink动态系统仿真如果模型中只包含连续状态,那么Simulink会调用模型指定的连续求解器,根据求解器的不同,求解器或者依次调用模型的Derivatives方法,或者进入以最小时间步采样的子循环,在这个子循环中,求解器在较大时间步内以最小步长为采样间隔反复调用模型的Outputs方法和Derivatives方法,计算模型的输出和微分值。模型的Outputs方法和Derivatives方法会依次调用相应的系统方法,调用的顺序按照链接阶段生成的Outputs和Derivatives方法执行列表中指定的顺序。(3)检测模块连续状态中的不连续性。是否执行这步操作是根据用户的设置来决定的,如果用户在模型中选择了执行过零检测,那么Simulink会利用过零检测来检测模块连续状态中的不连续性。第6章Simulink动态系统仿真(4)计算下一个时间步的时间。Simulink在整个仿真过程中的每个时间步内均执行(1)~(4)步操作,这个过程会一直进行下去,直至仿真结束。Simulink的仿真循环过程如图6-1所示。第6章Simulink动态系统仿真初始化时间<终止时间?仿真结束模型更新(ModelUpdate)模型输出(ModelOutputs)代数循环求解器否代数循环求解器模型输出(ModelOutputs)·模型微分(ModelDerivatives),Xc数值积分:ccXX代数循环求解器模型输出(ModelOutputs)模型过零过零检测时间=时间+步长积分(最小时间)仿真循环是单任务(包括变步长)仿真循环·图6-1第6章Simulink动态系统仿真注意:在仿真过程中,Simulink在每个时间步内更新一次模型中各个模块的状态和输出,因此,模型中模块的更新顺序对于仿真结果的有效性是非常重要的。而且,如果在当前时间步模块的输出是其输入的函数,那么这个模块必须在驱动其输入的模块之后进行更新,否则模块的输出就是无效的。模块存储在模型文件中的顺序并不一定就是仿真过程中模块的更新顺序,因此,Simulink在模型初始化阶段就将所有的模块按照正确的顺序进行了排列。第6章Simulink动态系统仿真6.1.4求解器的分类Simulink利用模型提供的信息和求解器在指定的时间段内连续计算动态系统的状态来仿真动态系统,这个仿真计算系统模型状态的过程就是模型解算的过程。Simulink通常利用求解器来求解,求解器的主要功能是计算模块的输出。Simulink通过在系统和求解器之间建立对话的方式来对系统进行求解,如图6-2所示,这里,求解器计算模块的输出以更新模块的状态并确定下一个时间步,而系统则把参数、模型方程等信息传递给求解器。第6章Simulink动态系统仿真系统求解器系统信息:参数、模型方程计算得到的值:状态、输入、时间Simulink图6-2第6章Simulink动态系统仿真1.定步长求解器和变步长求解器Simulink算法分为定步长算法和变步长算法两类,相应的求解器即为定步长求解器和变步长求解器。定步长求解器:顾名思义,仿真步长是固定不变的,这些算法依据相等的时间间隔来解算模型,时间间隔称为步长。用户可以指定步长的大小,或者由算法自己选择步长。通常,减小步长可以提高仿真结果的精度,但同时也增加了系统仿真所需要的时间。第6章Simulink动态系统仿真变步长求解器:在仿真过程中,步长是变化的。当模型的状态变化很快时,可减小步长以提高精度;而当模型的状态变化很慢时,可增加步长以避免不必要的计算步数。当然,在每一步中计算步长势必增加了计算负荷,但却减少了仿真的总步数,而且对于快速变化的模型或具有分段连续状态的模型,在保证其所要求精度的前提下缩短了仿真时间。第6章Simulink动态系统仿真2.连续求解器和离散求解器Simulink提供了连续求解器和离散求解器。连续求解器:利用数值积分计算当前时间步上模型的连续状态,当前时刻的状态是由在此时刻之前的所有状态和这些状态的微分来决定的。对于离散状态,连续算法依赖模型中的模块来计算每个时间步上模型的离散状态值。目前,有很多种数值积分算法可以求解动态系统连续状态的常微分方程(ODE),Simulink提供了多种定步长和变步长的连续算法,用户可以根据自己的实际模型来选择这些算法。第6章Simulink动态系统仿真离散求解器:主要用来求解纯离散模型,这些算法只计算下一步的仿真时刻,而不进行其他的运算。它们并不求解连续状态值,而且这些算法依赖模型中的模块来更新模型的离散状态。Simulink有两种离散求解器:定步长离散求解器和变步长离散求解器。缺省时,定步长算法选择一个步长,选择的步长可使仿真速度足以跟踪模型中最快速变化的模块;变步长算法可调整仿真步长,以便与模型中离散状态的实际变化率相一致,这对于多速率模型来说可以避免不必要的仿真步数,并因此缩短仿真时间。第6章Simulink动态系统仿真注意:用户可以选择连续求解器,而不是离散求解器来求取既包含连续状态,也包含离散状态的模型,这是因为离散求解器无法处理连续状态。如果用户为连续模型选择了离散求解器,那么Simulink会忽略用户的选择,而使用连续求解器求解模型。第6章Simulink动态系统仿真6.2离散系统仿真6.2.1差分方
本文标题:simulink动态系统建模仿真 第6章
链接地址:https://www.777doc.com/doc-3194670 .html