用于系统开发的v型模型动态仿真模块变体
动态仿真模块®通常用于为表示产品线的系统建模。产品线中的系统虽然基于相同的定义,但在几个方面可能有所不同。例如,考虑一个乘用车产品线,其中每个变体具有不同的功能集。与设计多个模型来表示所有可能的变体不同,您可以使用Simulink变体在单个模型中对产品线中的所有变体进行建模。Simulink的变量功能允许您创建具有内置变量的灵活模型,以更有效地管理、配置和重用您的设计。有关Simulink变体基础知识的信息,请参见什么是变量?什么时候使用.
v模型表示一个开发过程。该模型在左侧展示了开发周期的每个阶段与其关联的验证阶段在右侧之间的关系。Simulink变体通过提供从系统级模型阶段到代码生成阶段,再到交互和测试阶段的变体功能来支持v模型开发过程。在系统级模型和组件阶段,您可以使用变量块和变量参数来捕获结构和数据的变化。您可以使用Simulink的变体管理器来防止无效的变体组合,并减少变体模型以只包含所选的变体。生成的代码包含模型和组件中定义的变化。在测试阶段,您可以使用仿真软件设计校验™生成测试用例,以识别隐藏的设计错误并加以使用仿真软件测试™执行用户定义的测试。你也可以用仿真软件覆盖™以覆盖所有的变种。
根据您的应用程序及其在流程中的角色,您可以专注于v模型中调用的一个或多个步骤,或者在v模型的几个阶段重复步骤。
这些表列出了当您在模型中应用变化时可能有的目标,并指导您如何实现这些目标。您可以打开并运行下面链接的示例来应用变量并生成代码。有关在Simulink中显示不同功能的模型列表,请参见模型变量的例子.
系统级模型
您可以为系统体系结构模型中的任何组件建模变体。一个组件可能有两个或两个以上的变量选项,表示交替的结构分解。您还可以将行为(在Simulink模型中定义)和体系结构(在System Composer™体系结构模型中定义)的混合定义为变体选择。有关System Composer体系结构模型的更多信息,请参见组成结构可视化(系统作曲家).
目标 | 能力 | 例子 |
---|---|---|
在体系结构模型中添加具有可选结构设计的组件。 | 不同的组件(系统作曲家) | 创建变体(系统作曲家) |
管理具有结构组件变化的系统。 | Simulink的变体管理器 | 创建和激活不同的配置 |
组件—创建具有结构变化的模型
一旦您理解了您的建模需求,您就可以开始识别系统的不同组件了。在顶层结构中识别组件及其关系有助于系统地构建潜在的复杂模型。通过Simulink中的变量块,您可以在单个模型中设计一个系统的多个设计方案。每个设计选择都作为变量选择并入模型中。在模拟过程中,您可以根据您的需求选择激活或禁用变量选项。有关更多信息,请参见什么是变量?什么时候使用.
本节将介绍:
实现组件的结构变化
通过使用模型中的变量块,您可以在所有领域中实现结构变量,包括控制逻辑、状态机、流程图和物理工厂。有关可变块的更多信息,请参见Simulink中的变体块.
目标 | 能力 | 例子 |
---|---|---|
在模型中封装组件的变体。您可以封装子系统(虚拟和非虚拟)块、模型块和子系统引用块,以有条件地执行它们。 |
变子系统,变模型 | 使用不同的子系统在独立的层次结构中实现变化 |
|
变异来源而且变体水槽 | |
表示具有固定的公共结构,但不同的输入和输出接口的组件。 | 变子系统,变模型 | 不同子系统的自适应接口 |
在模型中表示相同级别的变量,并使用简单的切换开关机制在变量选择之间切换。 | 手动变异来源而且手动变体水槽 | 使用手动变源和手动变接收块在信号的源和目的地提供变化 |
在模型上有条件地执行事件驱动函数初始化、重置和终止事件。 |
初始化函数,重置功能,终止函数 | 带有初始化、重置和终止块的变量条件传播 |
有条件地执行触发器驱动的函数(执行由外部信号控制)。 |
启用子系统,触发子系统,启用和触发子系统 | |
使用函数调用子系统 | ||
有条件地执行Simulink函数(类似于过程式编程语言中的函数)。 | 仿真软件的功能 | |
合并有条件执行的Simulink函数的输出信号。 | 使用函数调用子系统 | 变量子系统输出端口上的变量函数调用信号 |
将Simulink模型封装为变量选择,并有条件地执行它们。 | 变子系统,变模型 | 模型参考变异体 |
在不修改模型的情况下添加或删除变量选择。 | 变体装配子系统 | 使用外部文件添加或删除变体程序集子系统块的变体选择 |
在实际物理组件中实现变化。 |
不同的连接器(Simscape) |
|
|
在变体块中使用标签模式 | 使用变体块中的标签在选择之间切换 |
在模型中创建只应用于模拟或只应用于代码生成的分支。 | 在变体块中使用sim码原切换模式 | 在不使用变量块中的控制变量的模拟和代码生成工作流的选择之间切换 |
从上游和下游的可变块传播条件
您可以通过自动地将变量条件从变量块传播到上游和下游的其他块,将变量控制扩展到模型的任何区域。变量条件可以通过信号线、总线和函数调用传播,以到达受变量选择影响的模型中的块。有关更多信息,请参见变条件传播概述.
目标 | 能力 | 例子 |
---|---|---|
通过在父变量块之外传播底层块的状态,提高模型的准确性,并避免手动计算分配给依赖块的变量条件。 | 变子系统,变模型 | 将变量条件传播到变量子系统之外 |
通过将变量块的状态传播到所有与其相连的块,提高模型的准确性,并避免手动计算分配给依赖块的变量条件。 | 用不同的源和汇传播不同的条件 | |
当没有活动的变量时,从模型执行中完全删除变量区域。 | 允许零活动变量控件 | 将变量条件传播到变量子系统之外 |
停止在上游和下游传播变量的状态。 | 地面而且《终结者》 | 控制变条件传播 |
通过在复合信号中传播不同的元素来减少视觉复杂度。 |
|
|
控制不同区域的可见性
您可以根据您的需求在适当的工作空间中定义变量控件,从而控制变量区域的可见性。限制作用域有助于避免名称冲突,并在块之间建立变量控件的明确所有权。它还使您能够在不同的作用域中为变量控件使用相同的名称。有关更多信息,请参见变量块中变量控制变量(操作数)的存储位置而且不同激活时间的不同块中的操作符类型.
目标 | 能力 | 例子 |
---|---|---|
|
屏蔽原理 | |
|
本地数据:模型工作区 | 利用掩码或模型工作区控制变量块的主动变量选择的方法 |
存储全局变量控件。 | 创建一个简单的变量模型 | |
为自定义锁定库块的多个实例设置不同的活动变量。 | 利用掩码或模型工作区控制变量块的主动变量选择的方法 | 利用掩码参数的自定义库变量子系统的控制主动选择 |
为模型的不同级别的多个变量区域定义全局变量控制。 | 数据存储内存 | 变量条件和数据存储(模型) |
结构变化系统中的变量控制
模型中的每个变量选择都与一个变量控件相关联。变量控件确定哪个变量选择是活动的。通过更改变量控件的值,可以切换活动变量的选择。在模型中实现不同区域时,可以使用不同类型的变量控制变量。有关更多信息,请参见变量块中的变量控制变量(操作数)的类型而且变量块中变量控制变量(操作数)的存储位置.
目标 | 能力 | 例子 |
---|---|---|
在相关块和参数中连贯地切换变量选择。 | 仿真软件。变体Control |
仿真软件。变体Control Variables for Coherent Switching of Choices in Variant Blocks |
当你还在构建模型的时候,快速创建变量控件的原型。 |
标量变量 | 基于可变块快速成型的标量变量控制变量 |
通过封装变量控件来降低它们的复杂性。 |
仿真软件。变体 |
仿真软件。变体Objects for Variant Condition Reuse of Variant Blocks |
通过将变量控件表示为有意义的名称而不是整数来提高可读性。 |
仿真软件枚举 | |
通过在结构中分组相关的变量控件来提高可读性。 |
结构体 |
对变量块的相关变量控制变量进行分组的结构 |
控制结构变化系统的可变激活时间
在模拟或代码生成之前,您可以检查不兼容性,例如变量中的数据类型和维度不匹配。您可以设计可以在模拟和代码生成工作流的不同阶段激活的变量。在代码生成期间,您可以选择在生成的代码中包含哪些变量,并根据需求和目标平台在不同的阶段激活它们。您还可以检查不兼容性,例如变量中的数据类型和维度不匹配。有关更多信息,请参见在模拟和代码生成工作流的不同阶段激活变量.
目标 | 能力 | 例子 |
---|---|---|
在模型编译阶段早期保留活动变量,删除非活动变量,使信号属性不兼容的变量在仿真工作流中共存。 |
更新图 | 考虑这样一个场景,您只想模拟活动的变体。您已经安装了模拟活动变体所需的所有产品,但是您没有模拟2022世界杯八强谁会赢?非活动变体所需的许可证。在这种情况下,您可以使用更新图 在模拟工作流开始时从执行中删除非激活变量的激活时间。 |
在模拟循环阶段之前,分析信号属性(如尺寸和数据类型)中的不兼容的活动和非活动变量。 | 更新图表分析所有的选择 | 在模拟和代码生成工作流的不同阶段激活变量 |
执行迭代模拟并提高模拟速度,而不必在每次更改活动变体时重新编译模型或终止模拟。 |
启动 |
组件—创建参数值变化的模型
您可能有一组需求,其中模型的结构保持不变,但是每个需求的参数值是不同的。您可以创建具有固定结构的单一模型,并创建具有有限值集的参数,其中每个值对应不同的需求。然后,您可以在模拟过程中选择激活或禁用变量选择。有关值变化的更多信息,请参见使用变量参数重用具有不同值的块参数.
本节将介绍:
在参数值中实现变量
通过使用模型中的变量参数,您可以在所有域中实现值的变量,包括控制逻辑、状态机、流程图和物理工厂。
目标 | 能力 | 例子 |
---|---|---|
在块参数值中设计变量 | 使用变量参数重用具有不同值的块参数 | 创建一个简单的变量参数模型 |
创建具有不同维度的变量的参数。 | 允许符号维度规范 | 有条件地编译具有相同和不同维度的变量参数的所有值的代码 |
变量控制的变化参数值
变量控制仿真软件。变体Control
对象关联的价值
的变体控件的ActivationTime
.在仿真和代码生成工作流的不同阶段,使用变量控制对象来确定变量参数的活动值。在实现模型中的不同区域时,可以为不同的控制对象指定不同类型的值。有关更多信息,请参见变量参数中变量控制变量(操作数)的存储位置而且变量参数中的变量控制变量(操作数)类型.
目标 | 能力 | 例子 |
---|---|---|
当你还在构建模型的时候,快速创建变量控件的原型。 |
数值 | 快速成型变参数的数值变控制值 |
|
仿真软件。变体 |
仿真软件。变体Objects for Variant Condition Reuse of Variant Parameters |
通过将变量控件表示为有意义的名称而不是整数来提高可读性。 |
仿真软件枚举 | 改进变参数变控制变量代码可读性的枚举类型 |
通过将变量参数值表示为有意义的名称而不是整数来提高可读性。 |
仿真软件枚举 | 使用枚举类型提高变量参数的代码可读性 |
控制可变参数值的可变激活时间
在模拟或代码生成之前,您可以检查不兼容性,例如变量中的数据类型和维度不匹配。您可以设计可以在模拟和代码生成工作流的不同阶段激活的变量。在代码生成期间,您可以选择在生成的代码中包含哪些变量,并根据需求和目标平台在不同的阶段激活它们。您还可以检查不兼容性,例如变量中的数据类型和维度不匹配。有关更多信息,请参见在模拟和代码生成工作流的不同阶段激活变量.
目标 | 能力 | 例子 |
---|---|---|
在模型编译阶段早期保留活动变量,删除非活动变量,使信号属性不兼容的变量在仿真工作流中共存。 |
更新图 | 更改变量参数的激活值和激活时间 |
在模拟循环阶段之前,分析信号属性(如尺寸和数据类型)中的不兼容的活动和非活动变量。 | 更新图表分析所有的选择 | |
执行迭代模拟,而不必在每次更改活动变量时重新编译模型或终止模拟。 | 启动 | 对使用快速重启的变系统运行迭代仿真而不重新编译模型 |
组件——在转换路径中创建具有变化的模型
您可以在状态流中控制向多个设计配置的转换®使用不同转换的图表。
目标 | 能力 | 例子 |
---|---|---|
有条件地执行从源对象到目标对象的转换路径。 | 条件(Stateflow)而且条件的行为(Stateflow) | 在状态流图中创建不同的配置(Stateflow) |
组件—创建具有尺寸变化的模型
您可以使用符号维度来模拟各种维度选择集,而不必为每个集重新生成代码。在模拟过程中,这些符号在模型中传播,然后进入生成的代码。
目标 | 能力 | 例子 |
---|---|---|
将尺寸存储在符号中,以便在不同的选择之间灵活切换。 | 允许符号维度规范 | 生成具有不同输出信号尺寸子子系统的变子系统代码(嵌入式编码) |
创建具有不同维度的变量的参数。 | 生成代码中的符号维度(嵌入式编码) | 有条件地编译具有相同和不同维度的变量参数的所有值的代码 |
组件-在AUTOSAR接口中创建具有变化的模型
您可以使用AUTOSAR软件组件中的可变点在执行路径中启用或禁用AUTOSAR接口或实现。在Simulink中,AUTOSAR系统常数作为控制元件变化点的输入。变分点表示在两个或多个变分之间进行选择。有关更多信息,请参见模型AUTOSAR变体(AUTOSAR Blockset).
目标 | 能力 | 例子 |
---|---|---|
启用或禁用AUTOSAR端口和可运行程序。 | 端口和可运行程序的变量(AUTOSAR Blockset) | 为AUTOSAR端口和可运行程序配置变量(AUTOSAR Blockset) |
通过在可运行状态中指定不同的条件来改变AUTOSAR可运行状态的实现。 | 可运行实现的变量(AUTOSAR Blockset) | 为AUTOSAR可运行实现配置变量(AUTOSAR Blockset) |
模型AUTOSAR校准数据结合不同类型的变化条件。 | 导出AUTOSAR校准数据的变异点(AUTOSAR Blockset) | |
在AUTOSAR软件组件中导入变量点。 | 预定义变量和系统常值集(AUTOSAR Blockset) | 使用预定义值组合控制AUTOSAR变量(AUTOSAR Blockset) |
将AUTOSAR元素(如端口)的尺寸存储在符号中,以便在代码编译期间在可变点之间灵活切换。 | 数组大小的变体(AUTOSAR Blockset) | 配置AUTOSAR阵列尺寸的尺寸变量(AUTOSAR Blockset) |
在编译代码并部署到电子控制单元(ECU)后,可以在AUTOSAR组件之间灵活切换。 | 为AUTOSAR软件组件配置后生成变量条件(AUTOSAR Blockset) | |
在代码编译之前,或者在代码编译并部署到ECU之后,可以在AUTOSAR元素的值组合之间灵活切换。 | 为AUTOSAR元素配置不同的参数值(AUTOSAR Blockset) |
组件——管理模型中的结构变化
变量管理器使您能够可视化地跟踪变量,同时管理变量,并防止系统模型中的无效变量组合或状态流程图中的变量转换。您还可以通过自动减少变量模型以只包含所选的变量来简化变量模型。有关更多信息,请参见Simulink的变体管理器.
目标 | 能力 | 例子 |
---|---|---|
可视化一个变量模型层次结构的树形视图,并编辑变量元素的属性。 |
管理不同的元素 | |
创建变量配置来表示跨模型层次结构的变量选择的组合。 |
Simulink的变体管理器 | 创建和激活不同的配置 |
为变量配置定义约束,以防止无效的变量组合。 |
不同配置的约束 | 为不同的配置定义约束 |
创建一个变量配置数据对象来存储、分发和重用模型的变量配置。 |
可变配置数据对象 | 使用变量配置数据对象保存和重用变量配置 |
在更新图阶段的早期,验证并应用一个变量配置到一个模型。 |
激活一个变体配置 | 创建和激活不同的配置 |
自动生成一个简化的模型,它只包含从具有许多变量的父模型中选择的变量配置。 |
使用变型减速器减少变型型号 | 包含可变块的简化模型 |
可视化和比较不同的配置,以定位和诊断配置中潜在的故障或不一致。 |
分析包含不同块的模型中的不同配置 |
生成的代码
您可以在生成的代码中包含变量,以便为不同的开发阶段重用和配置代码,例如测试不同的实现或向第三方提供多功能代码。
为结构变化的系统生成代码
您可以指定要包含在生成的代码中的变量块的变量。您还可以在生成的代码中控制变量控件的外观、位置、定义和声明。
目标 | 能力 | 例子 |
---|---|---|
生成包含活动和非活动变量的代码,并使您能够在代码编译之前在变量之间切换。 | 代码编译 |
|
生成一个包含活动和非活动变量的可执行文件,并使您能够在模型启动时在变量之间切换。 | 启动 | |
在多个块之间共享变量控件,从它们的数据类型和其他属性中分离值,控制生成代码中变量控件的外观、位置、定义和声明。 | 仿真软件。参数 |
仿真软件。参数Type of Variant Control Variables for Code Generation in Variant Blocks |
通过在生成的代码中将变量控件表示为有意义的名称而不是整数来提高代码的可读性。 |
仿真软件枚举 |
生成可变参数值的代码
您可以指定要包含在生成的代码中的变量参数的可变性。您还可以在生成的代码中控制变量控件和变量参数的外观、位置、定义和声明。有关更多信息,请参见在生成的代码中表示变量参数的选项(嵌入式编码).
目标 | 能力 | 例子 |
---|---|---|
生成包含所有变量的代码,并使您能够在代码编译之前在变量之间切换。 | 代码编译 | 有条件地编译具有相同和不同维度的变量参数的所有值的代码 |
生成一个包含所有变量的可执行文件,并使您能够在模型启动时在变量之间切换。 | 启动 | 为不同的变量参数值运行可执行文件,无需重新编译代码 |
在多个块之间共享变量控件,从它们的数据类型和其他属性中分离值,控制生成代码中变量控件的外观、位置、定义和声明。 | 仿真软件。参数Type of Variant Control Variables for Code Generation of Variant Parameters | |
通过将变量控件表示为有意义的名称而不是整数来提高代码的可读性。 |
仿真软件枚举 | 改进变参数变控制变量代码可读性的枚举类型 |
通过将变量参数值表示为有意义的名称而不是整数来提高代码的可读性。 |
仿真软件枚举 | 使用枚举类型提高变量参数的代码可读性 |
为不同的过渡路径生成代码
您可以使用可变转换在Simulink模型中创建状态流图,这些模型生成的代码将用于各种不同的软件情况。变量转换允许您在一个Stateflow图中对变量的完整子集建模,以便您可以在生成代码或编译生成的代码时选择您想要的变体。
目标 | 能力 | 例子 |
---|---|---|
生成只包含执行当前所选软件配置所需的数据成员的代码。 | 从状态流块生成C或c++代码(Stateflow) | 在状态流图中创建不同的配置(Stateflow) |
为不同的维度生成代码
您可以使用符号维度来模拟各种维度选择集,而不必为每个集重新生成代码。在模拟过程中,这些符号在模型中传播,然后进入生成的代码。
目标 | 能力 | 例子 |
---|---|---|
将尺寸存储在符号中,以便在代码编译期间在变量之间灵活切换。 | 允许符号维度规范 | 生成具有不同输出信号尺寸子子系统的变子系统代码(嵌入式编码) |
将尺寸存储在自动生成的符号中,以便在代码编译过程中灵活切换不同的参数值。 | 生成代码中的符号维度(嵌入式编码) | 有条件地编译具有相同和不同维度的变量参数的所有值的代码 |
将AUTOSAR元素(如端口)的尺寸存储在符号中,以便在代码编译期间在可变点之间灵活切换。 | 数组大小的变体(AUTOSAR Blockset) | 配置AUTOSAR阵列尺寸的尺寸变量(AUTOSAR Blockset) |
组件测试和系统级测试
通过使用生成测试用例,您可以识别隐藏的设计错误,并在导致整数溢出、死逻辑、数组访问违反和除零的变量中检测模型构造仿真软件设计验证器.有关更多信息,请参见关于使用Simulink设计验证器进行系统模型验证(仿真软件设计验证器).
可以在模型中的活动和非活动变量上进一步执行用户定义的测试仿真软件测试.
目标 | 能力 | 例子 |
---|---|---|
通过生成用于调试的测试用例,分析活动变量以检测设计错误和需求违反。 | 代码编译 | 看到SLDV运行工作流在用代码编译激活时间验证和验证变量模型 |
通过生成用于调试的测试用例,分析活动和非活动的变量,以检测设计错误和需求违反。 |
启动 | 看到SLDV运行工作流在验证和验证变量模型与启动激活时间 |
只分析活动变体,并重新运行测试以分析所有变体。 |
代码编译 | 看到仿真软件测试经理工作流在用代码编译激活时间验证和验证变量模型 |
在活动和非活动的变体上运行迭代测试,而不必为每个变体重新编译模型。 |
启动 | 看到仿真软件测试经理工作流在验证和验证变量模型与启动激活时间 |