第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作 Simulink模型并不一定要包含全部的三种元素,在实际应用 中通常可以缺少其中的二个或两个。例如,若要模拟一 个 统离平衡位置后的恢复行为,就可以建立二个这没有输 人二 个 个函薮复合的特殊信等,则可以使师源模块生成詹号并 巴 送入Matlab工作间成文件中 二、仿真运行原理 Simulink仿真包括两个阶段;初始化阶段和模型执行阶段 (1)模块初始化 在初始化阶段主要完成以下工作: ①模型参数传给Matlab:进行估值,得到的数值结果将作为模 型的实际参数: 2 展开模型的各个层次,每一个非条件执行的子系统被它所包 含的模块所代替
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作 ◼ Simulink模型并不一定要包含全部的三种元素,在实际应用 中通常可以缺少其中的一个或两个。例如,若要模拟一个系 统偏离平衡位置后的恢复行为,就可以建立一个没有输入而 只有系统模块加一个显示模块的模型。在某种情况下,也可 以建立一个只有源模块和显示模块的系统。若需要一个由几 个函数复合的特殊信号,则可以使用源模块生成信号并将其 送入Matlab工作间或文件中。 二、仿真运行原理 Simulink仿真包括两个阶段;初始化阶段和模型执行阶段 (1) 模块初始化 在初始化阶段主要完成以下工作: ① 模型参数传给Matlab进行估值,得到的数值结果将作为模 型的实际参数; ② 展开模型的各个层次,每一个非条件执行的子系统被它所包 含的模块所代替;
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作 模型中的模块按更新的次序进行排序。排序算法产生一个列表 以确保具有代数环的模块在产生之的躯动输入的模块被更新后才 更新。 $然,这一步要先检测出模型中存在的代数环。 决定模型中有无显示设定的信号属性,例如乌称、,数据类型 值类型以及大小等,并耳检查每个模块是杏能够接受连接到它 只瑞雨信穹。Simulink使用属性传递的过程联确定耒被设定的 输 雪住,这个过程将源信号的属性传递到它所驱动的模块的 决定所有无显示设定采样时间的模块的采样时间 ⑥ 分配和初始化用于存储每个模块的状态和输入当前值的存储空 完成这些工作后就可以进行仿真了。 2)模型执行 隆学分 般模型是使用数值积分来进行仿真的。, 可以分两步进行:
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作 ③ 模型中的模块按更新的次序进行排序。排序算法产生一个列表 以确保具有代数环的模块在产生它的驱动输入的模块被更新后才 更新。当然,这一步要先检测出模型中存在的代数环。 ④ 决定模型中有无显示设定的信号属性,例如名称、数据类型、 数值类型以及大小等,并且检查每个模块是否能够接受连接到它 输入端的信号。Simulink使用属性传递的过程来确定未被设定的 属性,这个过程将源信号的属性传递到它所驱动的模块的输入信 号; ⑤ 决定所有无显示设定采样时间的模块的采样时间; ⑥ 分配和初始化用于存储每个模块的状态和输入当前值的存储空 间。 完成这些工作后就可以进行仿真了。 2) 模型执行 一般模型是使用数值积分来进行仿真的。所运用的仿真解法器 (仿真算法)依赖于模型提供它的连续状态微分能力。计算微分 可以分两步进行:
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作 首先,按照排序所决定的次序计算每个模块的输出。 ②然后,根据当前时刻的输入和状态来决定状态的微分 得到微分可童后用把它返回给解送鉴上后者来江算下 个采样点的厌态向鼻。一二旦新的厌态向量讦算完毕,被采 样的数据源模块和接受模奂牙被更新。 在仿真开始时模型设定待仿真系统的视始状态和输出:,在 二个时间:单,Simulink计算系统的输入、 状态和输出 羚入、代态和 更新模型来反唤计算出的值。在仿真结束时,模型得由 在每个时间步中,Simulink所采取的动作依次为 ①按排列好的次序更新模型中模块的输出。Simulink通过 清中关麦美餐铃。 对于离散系统,Simulink只有在当前时间是模块采样时间 的整数倍时,才会更新模块的输出
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作 ① 首先,按照排序所决定的次序计算每个模块的输出。 ◼ ② 然后,根据当前时刻的输入和状态来决定状态的微分; 得到微分向量后再把它返回给解法器;后者用来计算下一 个采样点的状态向量。一旦新的状态向量计算完毕,被采 样的数据源模块和接受模块才被更新。 ◼ 在仿真开始时模型设定待仿真系统的初始状态和输出。在 每一个时间步中,Simulink计算系统的输入、状态和输出, 并更新模型来反映计算出的值。在仿真结束时,模型得出 系统的输入、状态和输出。 ◼ 在每个时间步中,Simulink所采取的动作依次为: ◼ ① 按排列好的次序更新模型中模块的输出。Simulink通过 调用模块的输出函数计算模块的输出。Simulink只把当前 值、模块的输入以及状态量传给这些函数计算模块的输出。 对于离散系统,Simulink只有在当前时间是模块采样时间 的整数倍时,才会更新模块的输出
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作 按排列好的次序更新模型中模块的状态,Simulink计算 个模块的离散状态的方法时调用模块的离散状态更新函数。 而对于连续状态,则对连续状态的微分(在模块可调用的函 数里,有一个用于计算连续微分的函数)进行数值积分来获 得当前的连续状态。 ③检查模块连续状态的不连续点。Simulink使用过零检测 来检测连续状态的不连续点。 ④计算下一个仿真时间步的时间。这是通过调用模块获得 下一个采样时间函数来完成的。 (3)定摸块更新次序 在仿真中,Simulink更新状态和输出都要根据事先确定的模 块更新次序,而更新次序对方针结果的有效性来说非常关键。 特别当模块的输出是当前输入值的函数时,这个模块必须在 驱动它的模块被更新之后才能被更新,否则,模块的输出将 没有意义
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作 ◼ ② 按排列好的次序更新模型中模块的状态,Simulink计算 一个模块的离散状态的方法时调用模块的离散状态更新函数。 而对于连续状态,则对连续状态的微分(在模块可调用的函 数里,有一个用于计算连续微分的函数)进行数值积分来获 得当前的连续状态。 ◼ ③ 检查模块连续状态的不连续点。Simulink使用过零检测 来检测连续状态的不连续点。 ◼ ④ 计算下一个仿真时间步的时间。这是通过调用模块获得 下一个采样时间函数来完成的。 ◼ (3) 定模块更新次序 ◼ 在仿真中,Simulink更新状态和输出都要根据事先确定的模 块更新次序,而更新次序对方针结果的有效性来说非常关键。 特别当模块的输出是当前输入值的函数时,这个模块必须在 驱动它的模块被更新之后才能被更新,否则,模块的输出将 没有意义
第七章Simulinki建模和仿真 7.1 Simulink的概述和基本操作 注意:不要把模块保存到模块文件的次序与仿真过程模块被更新 的次序相混淆。Simulink在模块初始化时以将模块排好正确的次 为又建立有效的更新次序,sm叫lnk根据输入和输出鲍养系将模 分。县知 前输逆依赖王当前输入的模块称为直接入 块,所有其他的模块都标为罪虚拟摸县。真接人模的例字 有 Gain、Product和Sum模块i非直接馈入模块的例子有 Integrator模块(它的输出只依赖于它的状态),Constant模块(没 有输入)和Memory模块(它的输出只依赖于前一个模块的输入 基于上述分类,Simulink使用下面两个基本规则对模块进行排序 每个模块必须在它驱动的所有模块更新之前被更新。这条规 则确保了模块被更新时输入八有效。 ②若非直接馈入模块在直接馈入模块之前更新,则它们的更新 次序可以是准意的。这条规测允许$imulink在排序过程中忽略非 虚拟模块。 另外一个约束模块更新次序的因素是用户给模块设定优先级 Simulink在低优先级模块之前更新高优先级模块
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作 ◼ 注意:不要把模块保存到模块文件的次序与仿真过程模块被更新 的次序相混淆。Simulink在模块初始化时以将模块排好正确的次 序。 ◼ 为了建立有效的更新次序,Simulink根据输入和输出的关系将模 块分类。其中,当前输出依赖于当前输入的模块称为直接馈入模 块,所有其他的模块都称为非虚拟模块。直接馈入模块的例子有 Gain、Product和Sum模块;非直接馈入模块的例子有 Integrator模块(它的输出只依赖于它的状态),Constant模块(没 有输入)和Memory模块(它的输出只依赖于前一个模块的输入)。 ◼ 基于上述分类,Simulink使用下面两个基本规则对模块进行排序: ◼ ① 每个模块必须在它驱动的所有模块更新之前被更新。这条规 则确保了模块被更新时输入有效。 ◼ ② 若非直接馈入模块在直接馈入模块之前更新,则它们的更新 次序可以是任意的。这条规则允许Simulink在排序过程中忽略非 虚拟模块。 ◼ 另外一个约束模块更新次序的因素是用户给模块设定优先级, Simulink在低优先级模块之前更新高优先级模块