模型切片器的注意事项和局限性
使用模型切片器时,请注意以下行为和限制:
模型编译与仿真
打开模型切片器后,模型将被编译。为避免编译错误,在打开模型切片器之前,请确保模型是可编译的。
当模型在仿真中暂停时,您可以打开模型切片器,突出显示每个时间步的端口、信号和模块的依赖关系,并使用端口值标签查看信号值 (自 R2025a 起)。
模型高亮显示和模型编辑
当切片高亮显示处于活动时,您无法编辑模型。您可以切换到模型编辑模式并保留高光部分。当您切换回切片模式时,切片配置将被重新计算,高亮显示也会更新。
独立切片模型生成
切片模型生成需要一个或多个起始点来突出显示您的模型。以下模型不支持切片生成:
前向传播(包括双向)依赖关系
约束
活动高亮中存在的排除点
切片模型生成需要在 MATLAB® 中有一个可写的工作文件夹。
在仿真过程中使用模型切片器
自 R2025a 起
在仿真中启动的模型切片器不支持:
为仿真时间窗口生成切片。
在不具有正常模式可见性的模型引用中添加起始点。有关详细信息,请参阅正常模式可见性。
通过函数调用子系统和消息触发子系统进行高亮显示。
切片模型考虑因素
从模型高亮显示生成切片模型时,简化模型可能会改变仿真行为或阻止切片模型编译。例如:
模型简化可能会改变切片模型中与原始模型相比的排序执行顺序,这会影响切片模型的仿真行为。
如果生成的切片模型包含总线,但不包含该总线的源信号,则切片模型可能包含未解析的总线元素。
如果生成切片模型,该模型内联掩码模块内容的子集,请确保子系统内容解析为掩码参数。如果内容和掩码无法解析,则切片模型可能无法编译。
如果源模型使用总线信号,请确保切片模型信号已正确初始化。在创建切片模型之前,请考虑在源模型中包含总线信号的显式副本。例如,您可以包含一个 Signal Conversion 模块,并将输出选项设置为信号副本。
对于设置为
auto的求解器步长,Simulink® 根据模型中的块计算部分中的最大时间步长。如果切片模型移除了影响时间步长确定的块,则切片模型的时间步长可能与源模型的时间步长不同。时间步长的差异会导致仿真的差异。考虑将步长明确设置为与源模型中计算的值相同的值。
端口属性考虑因素
您可以使用模型切片器在模型简化期间删除的块来确定编译属性,例如继承的采样时间、信号维度和数据类型。模型切片器可以在模型简化过程中更改切片模型端口属性,以解决模型端口属性未指定的问题。如果模型切片器无法解决这些不一致问题,您可以通过以下方式解决一些模型端口属性不一致问题:
在源模型中明确指定属性,而不是依赖传播规则。
在切片模型中包含负责源模型中属性传播的块。在对模型进行切片之前,将这些块添加为源模型高亮显示的附加起始点。
没有将负责模型端口属性的模型块内联到切片模型中。有关可内联到切片模型中的模型项的更多信息,请参阅 内联内容选项。
由于 Simulink 处理模型引用的方式,您不能同时编译两个都包含对同一模型的模型引用的模型。生成切片模型时,如果满足以下条件,模型切片器将进入切片器已锁定 (用于属性检查) 模式:
父模型包含一个被引用的模型。
父模型中高亮显示的部分包含引用的模型。
由于以下原因之一,引用的模型未内联到切片模型中:
您选择不在模型切片器选项的内容内联选项窗格中内联模型块。
模型切片器无法内联引用的模型。有关模型切片器无法内联的模型项的更多信息,请参阅 内联内容选项。
要继续细化父模型的突出显示部分,您必须首先激活切片突出显示模式
。
仿真时间窗口考虑因素
根据模型的步长以及您输入的仿真时间窗口的开始时间和结束时间的值,模型切片器可能会改变实际的仿真开始时间和结束时间。
如果您输入的停止时间或开始时间落在模型求解器的时间步之间,则模型切片器会改用与您输入的值的前一个时间步相匹配的停止时间或开始时间。有关 Simulink 中的步长的更多信息,请参阅 比较求解器。
仿真时间窗口的停止时间不能大于总仿真时间。
在仿真中启动模型切片器时,仿真时间窗口将被禁用。
基于仿真的切片模型简化
当您使用仿真时间窗口对模型进行切片时,在创建简化的独立模型时,源模型中的一些模块(例如开关模块、逻辑运算符模块等)可以被替换。例如,移除一个总是传递一个输入的开关模块,并将活动输入直接连接到输出目的地。未使用的输入信号也会从独立模型中移除。
此表描述了模型切片器在模型简化过程中可以替换的模块。
| 源模型中的模块 | 简化 |
|---|---|
Switch Multiport Switch | 如果只有一个输入端口处于活动,则开关将被连接到活动输入端口和模块输出端口的信号所取代。 |
使能子系统或模型 | 如果子系统或模型始终启用,则移除控制输入并转换为标准子系统或模型。 如果子系统从未启用,则将子系统替换为由初始条件定义的常量值。 |
触发子系统或模型 | 如果子系统或模型总是被触发,则移除触发输入并转换为标准子系统或模型。 如果子系统从未被触发,则将子系统替换为由初始条件定义的常量值。 |
已启用和已触发的子系统或模型 | 如果子系统始终执行,则将其转换为标准子系统或模型。 如果子系统永远不会执行,则将子系统替换为由初始条件定义的常量值。 |
Merge | 如果只有一个输入端口处于活动,则合并操作将被连接到活动输入端口和模块输出端口的信号所取代。 |
If If Action | 如果只有一个动作子系统处于活动,则转换为标准子系统或模型,并删除 If 模块。 |
Switch case 切换用例操作 | 如果只有一个动作子系统处于活动,则转换为标准子系统或模型并删除 Switch Case 模块。 |
逻辑运算符 | 如果模块始终输出 true 或始终输出 false,则将其替换为常量。 如果输入信号始终为真或始终为假,则将输入信号替换为常量。 |
模型切片器对 Simulink 软件功能的支持限制
模型切片器不支持以下功能:
对Simulink Test™_测试框架的分析
包含 Simscape™ 物理建模模块的模型
包含代数环的模型
从源模型加载初始状态以生成切片模型,例如数据导入/导出条目。在切片模型配置参数中,明确定义切片模型的初始状态。
对具有多个速率的子系统和参考模型进行组件切片。
基于组件的函数调用触发子系统和模型块的切片生成。
模型切片器对仿真步进器的支持限制
当使用模型切片器和仿真步进器时,回退一步后的切片高亮显示可能不仅限于一步。高亮显示可受以下设置影响:仿真步进选项>存储的回退步之间的区间。有关详细信息,请参阅Interval between stored back steps。
模型切片器对 Simulink 块的支持限制
该表列出了模型切片器对 Simulink 块的支持限制。
| 模块 | 限制 |
|---|---|
For Each Subsystem 模块 | 对于 For Each 子系统中的模块,仿真影响将被忽略。因此,应用仿真时间窗口会得到与不使用仿真时间窗口的依赖性分析相同的依赖性分析结果。 |
MATLAB Function 模块 | 模型切片器假设任何输出都取决于上游方向的所有输入,并且任何输入都会影响下游方向的所有输出。 |
Merge 模块 | 如果使用仿真时间窗口生成切片,则在独立模型中,如果只执行一条路径,则会删除 Merge 块。 |
Model 模块 | 模型切片器无法解析由全局数据存储内存生成的数据依赖关系,这些内存位于 Model 块中,且仿真模式设置为加速模式。 模型切片器不会分析对 引用来自第三方的受保护模型 的引用中的内容。当您对包含受保护模型引用的模型进行切片时,模型切片器会将整个模型引用包含在切片模型中。 |
S-function 模块 | 模型切片器假设任何输出都取决于上游方向的所有输入,并且任何输入都会影响下游方向的所有输出。 模型切片器无法确定 S-Function 模块访问依赖于仿真时间窗口的模型信息所产生的依赖关系。 |
Simulink Functions | 依赖关系从 Simulink Function 定义传播到其所有 Function Callers 定义。 依赖关系从 Function Callers 传播到其 Simulink Function 定义以及所有其他 Function Callers。 在生成切片时,对于包含端口范围的 Simulink Function 的模型,不支持模型引用内联。 |
模型切片器对 Stateflow 的支持限制
当您突出显示包含 Stateflow® 图或状态转换表的模型时,模型切片器假定 Chart 模块或 State Transition Table 模块的任何输出都依赖于 Chart 模块或 State Transition Table 模块的所有输入。
当您使用 Stateflow 图或状态转换表对模型进行切片时,模型切片器不会简化图或表格。图或表格完整地包含在切片模型中。
如果您在 Stateflow 图或状态转换表中突出显示功能依赖关系时没有使用 定义仿真时间窗口,模型切片器会假定图或表格中的所有元素都处于活动。模型切片器会突出显示此类图和表格的全部内容。
当您在 Stateflow 图或状态转换表中突出显示已定义仿真时间窗口的功能依赖关系时,模型切片器不会仅突出显示影响所选起始点的状态和转换。相反,模型切片器会突出显示您指定的时间窗口内处于活动的元素。
模型切片器不确定 Stateflow 图形函数与其他 Stateflow 图中的函数调用之间的依赖关系。
在某些情况下,在选定的时间窗口内未活动的图形功能及其内容可能会保持高亮显示状态。
在某些情况下,因事件而被排除在外的 entry into 状态可能会保持突出显示。例如,在进入父状态后,事件操作可以退出该状态并阻止进入子状态。在这种情况下,模型切片器会突出显示进入子状态的入口。
Stateflow 基于活动的时区划分考虑因素
根据“已执行子状态”决策覆盖率衡量,状态活动指的是以下期间/退出操作:
进入某个国家并不构成活动。
状态或转换的活动时间区间包括所选状态退出和进入后续状态的时刻。
间接退出某个状态或过渡状态不构成活动。例如,如果状态 C 因其父状态 P 退出而退出,则状态 C 不被视为活动。
有关 Stateflow 图的决策覆盖率的更多信息,请参阅 Stateflow 图的决策覆盖率 (Simulink Coverage)。
当您使用 利用基于活动的时间切片突出显示活动时间段 时,您可以只选择状态和转换作为活动约束。您不能选择这些 Stateflow 对象作为约束:
平行状态
无条件转换,例如未标记的转换,它们不接受决策覆盖率。
库链接图中的状态或转换
XOR 表示没有同级元素的状态。例如,如果状态 P 只有一个子状态 C,则不能选择状态 C 作为活动约束,因为状态 P 没有针对已执行子状态的决策覆盖率。