在更新仿真阶段,Simulink万博1manbetx®确定在模拟期间调用块方法的顺序。此块调用顺序为排序订单.
您不能设置这个顺序,但是您可以为非虚拟块分配优先级,以指示Simulink它们相对于其他块的执行顺序。万博1manbetx万博1manbetxSimulink试图尊重块优先级设置,除非与数据依赖发生冲突。要确认已设置的优先级的结果,或调试模型,请显示并检查非虚拟块和子系统的排序顺序。
的排序顺序vdp
模型:
打开van der Pol方程模型:
在模型窗口中,选择展示>块>执行顺序排序.
万博1manbetxSimulink在每个非横向块和每个非virtual子系统的右上角显示表示法。这些数字表示块执行的顺序。执行的第一个块有一个排序的顺序0
.
例如,在van der Pol等式模型中,集成器块具有排序顺序0:0
先执行。Out1块,以排序的顺序0:1
,执行第二个。类似地,剩余的块以数字顺序执行0:2
到0:8
.
您可以使用模型保存排序后的订单设置。要在重新打开模型时显示已排序的顺序,请选择模拟>更新图.
排序的顺序符号取决于块的类型。下表总结了排序顺序表示法的不同格式。每一种格式都在下面的章节中详细描述。
块类型 | 顺序的符号 | 描述 |
---|---|---|
Nonvirtual块 | 年代 : b |
|
年代 : b {x ,y } |
||
非凡子系统(不包括函数调用和操作子系统) | 年代 : b |
|
虚拟块和子系统 | 不适用 | 不执行虚拟块。 |
行动子系统 | 年代 : b” |
|
函数调用子系统和函数调用模型 | 一个非接地启动程序:
|
|
两个或多个启动器:
|
|
|
启动器为接地块或未连接:
|
|
|
扩展函数调用信号 |
|
|
功能呼叫反馈锁存块 |
|
|
具有异步功能呼叫输入的模型中的块 | 函数调用根级导入和输出块:F我 |
|
根级数据导入块:如果它们驱动函数调用子系统,那么它就是子系统的函数调用索引。 如果它们不是由异步函数调用输入驱动的模型的一部分,则不会显示函数调用索引。 |
||
根级函数调用: 根级分支函数调用块: |
|
|
块内部的导出函数模型(参见函数调用根级导入块的执行顺序) | 函数调用根级导入和输出块:F我 |
|
根级函数调用子系统: 根级分支函数调用子系统: |
|
|
合并和数据存储内存块:F我 ,Fj,...... |
|
|
根级数据导入和输出块:与它们所连接的函数调用子系统的执行顺序相同。 | ||
Bus-Capable块 |
|
|
在van der Pol方程模型中,模型中所有的非虚块都有一个排序的顺序。顶层模型的系统索引是0
,块执行顺序范围0
到8
.
下面的模型包含一个原子的、非虚拟的子系统,名为离散巡航控制器。
当您为根级系统启用排序顺序显示时,Simulink将显示块的排序顺序。万博1manbetx
这个模型中的Scope块排序顺序最低,但它的输入依赖于Car Dynamics子系统的输出。Car Dynamics子系统是虚拟的,因此它没有排序的顺序,也不作为一个原子单元执行。但是,子系统中的块在根级别执行,因此Car Dynamics子系统中的Integrator块首先执行。Integrator块将其输出发送到根级模型中的Scope块,后者将在第二步执行。
离散巡航控制器子系统有一个排序的顺序0:5
:
0
表示该原子子系统是由主系统和两个子系统组成的分层系统的根级的一部分。
5
表示原子子系统是Simulink相对于根级别内的块执行的第六块。万博1manbetx
离散巡航控制器子系统内的每个块的排序顺序具有表单1
:
b
, 在哪里:
1
是那个子系统的系统索引。
b
为执行顺序中的块位置。在离散巡航控制器子系统中,排序顺序为0
到8
.
根据您的模型配置,Simulink可以在模型中插入隐藏的、非虚拟的子系统。万博1manbetx因此,隐藏子系统块中的可见块可能具有与当前系统索引不同的系统索引。例如,如果您选择条件输入分支执行, 万博1manbetxSimulink会创建隐藏的、非虚拟的子系统,这会影响排序后的执行顺序。
虚拟块,如Mux块,只在图形上存在而不执行。因此,它们不是排序顺序的一部分,也不显示任何排序顺序表示法。
虚拟子系统不执行为单位,如虚拟块,也不是排序顺序的一部分。虚拟子系统内的块是根级系统排序顺序的一部分,因此共享系统索引。
在模型中非凡子系统,虚拟子系统Car Dynamics没有排序顺序。但是,子系统中的块在根级模型的执行上下文中有一个排序的顺序。这些块具有与根级模型相同的系统索引。汽车动力学子系统内部的积分器块有一个排序的顺序0:0
,表示Integrator块是在顶级模型上下文中执行的第一个块。
单引发剂。当启动器调用函数调用子系统(或模型)时,函数调用子系统(或模型)就会执行,因此,函数调用子系统(或模型)没有独立于其启动器的排序顺序。特别地,对于连接到一个启动器的子系统,Simulink使用这种符号万博1manbetx年代
b:我
, 在哪里年代
系统的索引中是否包含启动器和b我
是子系统层次结构中的根启动器的块索引。
例如,子系统f和g的排序顺序是0:0
,因为它们的根启动器Chart的排序顺序是0:0
.
多个发起者。对于连接到多个发起者的函数呼叫子系统,排序的顺序表示法是年代
b:i1,
式中n为不接地启动器数量,年代
b:i2,......,年代
b:在年代
块所在的模型或子系统的系统索引,以及b我n
是子系统层次结构中第n根启动器的块索引。
例如,打开sl_subsys_fcncall6
模型。在子系统的层次结构中,f子系统有三个来自同一层次的启动器。两个来自statflow®图,Chart1,和状态流图,chart。
因为图表1有一个排序的订单0:2
和图表有一个排序的顺序0:4
,函数呼叫子系统f有一个排序的顺序符号0:2, 0:4
.
当函数调用信号使用函数调用拆分块时,Simu万博1manbetxlink显示连接到分支的子系统(或模型)在启动器调用函数调用时执行的顺序。万博1manbetxSimulink使用这种符号S:B.我
[Bk来表示这个顺序。年代
是块所在的模型或子系统的系统索引,b我
是子系统层次结构中根启动器的块索引,Bk表示它是一个分支索引为k的分支函数调用子系统。
例如,打开sl_subsys_fcncall11
模型和显示排序的顺序。排序后的顺序表明子系统f (B0
)在子系统g (B1
).
能够执行总线的块作为一个单位执行,因此没有唯一的排序顺序。这样的块显示其排序顺序年代
B:
在哪里B
代表公共汽车。
例如,打开sldemo_bus_arrays
模型和显示排序的顺序。打开每个子系统,看看总线分配块的排序顺序显示为1: B
.
有关更多信息,请参见Bus-Capable块.
为了确保排序顺序反映块之间的数据依赖关系,Simulink根据块输出对块输入端口的依赖关系对块输入端口进行分类。万博1manbetx一个输入端口,其电流值决定一个块输出的电流值direct-feedthrough端口。具有直接馈通端口的区块示例包括:
具有非直接馈通输入的块的示例:
要对块进行排序,Simulink万博1manbetx使用以下规则:
如果一个块驱动另一个块的直接馈通端口,则该块必须出现在它所驱动的块的前面。
该规则确保了当Simulink调用需要当前输入的块方法时,到块的直接馈通输入是有效的。万博1manbetx
没有直接馈通输入的块可以按照排序顺序出现在任何位置,只要它们位于它们所驱动的任何直接馈通块的前面。
将所有没有直接馈通端口的块放置在排序顺序的开始位置,满足此规则。这种安排允许Simulink在排序过程中忽略这些万博1manbetx块。
应用这些规则会得到排序后的顺序。没有直接馈通端口的块以没有特定顺序出现在列表的开头。这些块之后是直接馈通端口安排的块,以便它们可以向它们驱动的块提供有效的输入。
以下模型,来自非凡子系统,说明了这一结果。以下块没有直接馈通,因此出现在根级系统的排序顺序的开头:
汽车动力学虚拟子系统中的积分器块
在根级模型中的速度块
在离散巡航控制器子系统中,所有的获得块,有直接馈通端口,运行在和阻挡他们开车。
您可以为非虚拟块或整个子系统分配优先级。按照排序顺序,高优先级块出现在低优先级块之前。数字越小,优先级越高。的块优先级一般的选项卡的“块属性”对话框。
万博1manbetxSimulink尊重您指定的块优先级,除非它们违反数据相关性。(块优先级违规描述导致块属性违反的情况。)
在评估优先级分配时,Simulink试图创建一个排序的顺序,以便根级系万博1manbetx统或非虚拟子系统中各个块的优先级相对于彼此得到尊重。
有三条规则与优先级有关:
重点是相对的;块的优先级与同一系统或子系统中的块的优先级相关。
例如,假设您在模型中的离散巡航控制器子系统中设置了以下优先级非凡子系统.
块 | 优先级 |
---|---|
获得 | 3. |
Gain1 | 2 |
Gain2 | 1 |
更新图后,增益块的排序顺序如下。
的排序顺序值获得,Gain1,和Gain2分块反映了各自分配的优先事项:Gain2优先级最高,在Gain1和Gain之前执行;Gain1具有第二优先级,在Gain2之后执行;和Gain在Gain1之后执行。万博1manbetxSimulink会考虑相对于子系统中的其他块所分配的优先级。
的获得块不是执行的第一,第二和第三个块。他们也没有连续排序的订单。排序的订单值不一定对应于优先级值。万博1manbetxSimulink排列块,以便它们的优先级相对于彼此荣誉。
在Car Dynamics虚拟子系统中,假设您按照如下方式设置增益块的优先级。
块 | 优先级 |
---|---|
获得 | 2 |
Gain1 | 1 |
在更新图表之后,增益块的排序顺序如图所示。有了这些优先级,Gain1总是在Gain之前执行。
您可以设置优先级为1
由于模型中各子系统的层次化特性,所以将其转换为两个子系统中的每一个块。万博1manbetxSimulink从不将一个子系统中的块的优先级与任何其他子系统中的块的优先级进行比较。
例如,再考虑一下这个模型。
Car Dynamics虚拟子系统中的块是根级系统层次结构的一部分,也是根级排序顺序的一部分。离散巡航控制器子系统具有独立的排序顺序,各分块依次排列1:0
到1:7
.
对于给定块,缺乏优先级不一定会导致低优先级(更高的排序顺序)。在具有直接馈通端口的块之前,没有直接馈通端口的块,无论其优先级如何。
如果模型有两个原子子系统,A和B,则可以分配优先级1
和2
这个优先级使得A中的所有块在b中的任何块之前执行。原子子系统中的块作为一个单独的单元执行,所以子系统有自己的系统索引和自己的排序顺序。
万博1manbetxSimulink软件尊重您指定的块优先级,除非它们违反数据相关性。如果S万博1manbetximulink无法尊重一个块优先级,它会显示一个块优先违反
诊断信息。
作为一个例子:
打开sldemo_bounce
模型。
请注意,存储器块的输出为恢复系数增益块提供输入。
设置恢复系数块系数的优先级1
,并设置Memory块的优先级为2
.
设置这些优先级指定恢复系数块在内存块之前执行。然而,恢复系数块依赖于Memory块的输出,因此您刚才设置的优先级违反了数据依赖关系。
在“模型”窗口中,通过选择启用排序顺序格式>块显示>排序订单.
选择模拟>更新图.
块优先级违反警告出现在诊断观众.打开诊断观众窗口,点击看法>诊断观众.该警告包含了相应块的优先级:
警告:无法尊重用户指定的优先级。'sldemo_bounce/Memory' (pri=[2])必须在'sldemo_bounce/恢复系数' (pri=[1])之前执行,以满足数据相关性
从恢复系数和内存块中删除优先级并再次更新图表以查看正确的排序顺序。