主要内容

控制和显示执行顺序

执行顺序为一个模型是在Simulink中的顺序金宝app®在模拟期间调用块输出方法。金宝appSimulink在模型更新期间确定该顺序,您可以通过单击来启动该顺序更新模型建模选项卡。金宝appSimulink还在仿真过程中更新模型。

您不能设置执行顺序,但可以为非虚拟块分配优先级,以指示它们相对于相应块图中的其他块的执行顺序。金宝appSimulink试图尊重块优先级设置,除非与数据依赖发生冲突。要确认已设置的优先级的结果或调试模型,请显示并检查非虚拟块和子系统的执行顺序。

请注意

有关块方法和执行的更多信息,请参见:

执行顺序查看器

调试选项卡上,选择信息覆盖>执行顺序.执行顺序查看器将在Simulink编辑器右侧的窗格中打开。金宝app

执行顺序查看器显示当前系统的任务列表。

每一个系统指标值对应于一组独立于其他块执行的块,例如非虚拟子系统中的块。在模型中系统指标值是唯一的。在模型引用层次结构中也是如此系统指标值可以被多次使用,但它在该层次结构中的每个模型中保持唯一。要确定子系统是否是模型中相同系统的一部分,请比较它们系统指标值。

列表中列出的每个任务任务ID列对应于共享一个抽样率的一组块。对于固定步长,则将每一个离散的速率视为一个单独的任务配置参数决定Simulink是否在一个或多个任务中以离散的速率执行块。金宝app

在执行顺序查看器中选择任务会突出显示属于该任务的块并显示它们的执行顺序。默认情况下,Simuli金宝appnk选择与活动框图相对应的第一个任务。

当活动块关系图不包含作为给定任务一部分执行的任何块时,您不能在“执行顺序”查看器中选择任务。活动框图可能包含虚拟块,例如轮廓尺寸block,这是这个任务的一部分。

要隐藏突出显示和执行顺序,请单击明显突出按钮

从块导航到任务

若要显示块执行的任务,请单击块。

选中的子系统块有一个信息覆盖,上面写着“Task: 0,1”。信息覆盖层包含每个任务编号的链接。

标签中的任务编号是链接,您可以单击这些链接在“执行顺序”查看器中选择相应的任务。当模型有许多任务时,这些链接提供了在执行顺序查看器中滚动任务列表的替代方法。

要在块之间比较任务,请选择多个块。

执行顺序的符号

金宝appSimulink在每个非虚拟块的右上角显示一个数字。这些数字表示块执行的顺序。要执行的第一个块的执行顺序通常是最低的1.显示的执行顺序可能会跳过数字,但是块总是按照可见数字的顺序执行。假设一个任务显示执行顺序1、2和4。标记为1的块在标记为2的块之前执行,标记为2的块在标记为4的块之前执行。

例如,在vdp模型,块执行顺序从19,每个非虚拟块接收一个执行指令。

虚拟和非虚拟子系统

虚拟子系统块只在图形上存在,不执行。因此,它们不属于执行命令的一部分。虚拟子系统中的块在根级模型的上下文中有一个执行顺序。对于虚拟子系统,子系统中的块执行顺序用花括号{}列出。

Nonvirtual子系统块在功能上存在,并作为一个单元执行。它们有一个单一的执行顺序和与父模型不同的系统索引。非虚拟子系统中的块有它们自己的执行顺序,它们独立于父模型。

例如,以下模型包含一个名为Car Dynamics的虚拟子系统和一个名为离散巡航控制器的原子非虚拟子系统。

虚拟汽车动力学子系统用花括号显示了它所包含的块的执行顺序列表。它包含的块在根级执行。的积分器块首先执行并将其输出发送给范围块,它执行第二步。

非虚拟离散巡航控制器子系统只有一个执行顺序(5),这表明子系统及其内部的块相对于根级别的块是第五个要执行的。

请注意

根据您的模型配置,Simulink可以在模型中插入隐藏的、非虚拟的子系统。金宝app因此,可见块内隐藏子系统块可以具有与当前系统索引不同的系统索引。例如,如果您选择条件输入分支执行配置参数时,Simulink会创建隐藏的、非虚拟的金宝app子系统,这可能会影响排序后的执行顺序。

代数循环

代数循环中的块被移动到一个隐藏的非虚拟子系统中。隐藏子系统的执行顺序在其他块的上下文中确定;然后,确定隐藏子系统中各块的执行顺序。

函数调用子系统和动作子系统

对于函数调用和操作子系统,子系统的执行与启动器的执行绑定在一起。因此,子系统和它的启动器共享一个执行顺序。

在导出函数模型的根级上,函数调用执行顺序具有F前缀。

有关更多信息,请参见导出功能模型概述

总线和多个启动器

当一个块根据到该块的不同执行路径执行多次时,该块有多个执行顺序。例如:

  • 连接到总线的块具有与总线所包含的每个信号相对应的执行顺序。

  • 具有多个启动器的函数调用或操作子系统具有与每个启动器相对应的执行顺序。

如何金宝app决定执行顺序

金宝appSimulink使用基于任务的排序来设置块和端口的执行顺序,基于它们派生的样本时间信息。基于任务的排序为确定块的执行顺序提供了一个有效而简单的过程。

基于任务的排序:

  • 任务是基于样本时间单独排序的。

  • 生成多个排序列表,而不是在所有任务中生成一个扁平的、排序的块列表。

  • 速率转换处理是简化的。

  • 避免了涉及不同任务中的块的虚假数据依赖关系违反。

  • 代码生成结果以有效速率分组。

  • 一个子系统可以属于多个任务中的不同排序列表。

直接馈通端口对执行顺序的影响

为了确保执行顺序反映块之间的数据依赖关系,Simulink根据块输出对块输入端口的依赖关系对块输入端口进行分类。金宝app一个输入端口,其电流值决定一个块输出的电流值direct-feedthrough端口。具有直接馈通端口的区块示例包括:

具有非直接馈通输入的区块示例包括:

  • 积分器-输出是其状态的函数。

  • 常数—无输入。

  • 内存-输出依赖于前一个时间步长的输入。

确定块执行顺序的规则

为了排序块,Simulink使用金宝app以下规则:

  • 如果一个块驱动另一个块的直接馈通端口,则该块必须出现在它所驱动的块的执行顺序之前。

    该规则确保了当Simulink调用需要当前输入的块方法时,到块的直接馈通输入是有效的。金宝app

  • 没有直接馈通输入的块可以出现在执行顺序的任何地方,只要它们在它们驱动的任何直接馈通块之前。

    在执行顺序的开始处放置所有没有直接馈通端口的块满足这一规则。这种安排允许Simulink在排序过程中忽略这些金宝app块。

应用这些规则会产生执行顺序。没有直接馈通端口的块以没有特定顺序出现在列表的开头。这些块之后是直接馈通端口安排的块,以便它们可以向它们驱动的块提供有效的输入。

下面的模型说明了这个结果。下面的块没有直接馈通,因此出现在根级系统的执行顺序的开头:

  • 汽车动力学虚拟子系统中的积分器块

  • 在根级模型中的速度块

在离散巡航控制器子系统中,所有的获得块,有直接馈通端口,运行在总和阻挡他们开车。

在包含异步任务的模型中确定块执行顺序的规则

在模拟中,异步函数调用启动器在确定任务中的块排序顺序时具有最高的优先级。有关更多信息,请参见异步采样时间速率转换和异步块(金宝app仿真软件编码器)

为了确定包含异步样例时间的模型中的块执行顺序,Simulink使用了以下规则:金宝app

  • 如果异步函数调用发起者是由相应的速率转换块共享的离散速率触发的,那么在共同离散速率的任务中,异步函数调用发起者将首先被排序。

    例如,在下面的模型中,有一个由离散速率触发的异步函数调用启动器D1.在离散任务中,异步函数调用发起者首先被排序。的率转换块之间的转换异步率,A1,离散率,D1

  • 如果一个率转换块被简化为无操作,率转换块不执行,其在离散任务中按排序顺序的位置被转移到与其连接的上游或下游离散块。

    例如,在上面的模型中,RTB2减少到无操作,则其在排序后的位置被转移到下游获得块。

  • 如果两个异步函数调用启动器共享一个共同的离散速率任务,那么具有较高优先级的异步函数调用启动器将首先在离散速率任务中执行。

    例如,在下面的模型中,两个异步函数调用启动器由相同的离散速率触发,D1.任务优先级高的优先排序。

  • 基于任务的排序不支持异步样例时间的并集。金宝app包含多个异步样例时间联合的模型默认为全局执行顺序,其中所有块都在单个任务中排序。

检查涉及数据存储内存块的执行顺序更改

模型的升级

使用基于任务的排序代替传统的(块)排序可以改变相关的执行顺序数据存储内存块。Upgrade Advisor检查检测更改,并提供一个选项,以在从早期版本的Simulink升级模型时保持原始的执行顺序。金宝app

  1. 打开升级顾问。在建模选项卡上,选择模型的顾问>升级顾问

  2. 选中的复选框检查“数据存储读”和“数据存储写”块的相关执行顺序

  3. 点击运行这个检查

  4. 检查所有的变更结果表格如果您想保持原来的执行顺序,请单击修改

代码生成

为生成代码而编译模型时,的相对执行顺序数据存储读取数据存储写块在生成的代码中可能与正常模拟模式中的顺序不同。Model Advisor检查检测这些差异,并提供一个选项来更改正常模拟模式中的执行顺序,以匹配生成的代码中的顺序。

  1. 打开Model Advisor。在建模选项卡上,选择模型的顾问>通过产品>金宝app仿真软件编码器

  2. 选中的复选框检查数据存储读和数据存储写块的相对执行顺序变化

  3. 点击运行这个检查

  4. 检查所有的变更结果表格如果列出了差异,并且您希望更改正常模拟中的执行顺序以符合生成代码中的执行顺序,请单击修改块优先级

相关的话题