在模拟和代码生成工作流的不同阶段激活变量
使用可变激活时间,Simulink金宝app®在模拟和代码生成工作流的不同阶段设置不同块和不同参数中的活动选择。
主动选择设置:
在模型编译阶段,或仿真工作流的仿真循环阶段。
在模型编译阶段,代码编译阶段,或者代码生成工作流的模型启动阶段。
为了设置活动选项,Simulink计算您在工作区浏览金宝app器、命令行或回调中指定的变体控件,例如InitFcn
,PreLoadFcn
,PostLoadFcn
.有关回调的详细信息,请参见模型的回调.
在中间阶段设置活动选择,使您能够重用前一次运行的工件,从而提高模拟和代码生成工作流的速度。它还使您能够在模拟和代码生成之前分析不兼容的变体选择,例如数据类型和维度不匹配。
例如,使用生成的代码代码编译
激活时间包含所有选项。在代码编译之前,您可以指定变量控制变量的值。Simulink根据变量控制变量的值设置主动选择,代码只针对主动选择进行有条件编译。金宝app每次更改变量控制变量的值时,都可以重用相同的代码。代码有条件地编译给定的主动选择。
类似地,使用生成的代码启动
激活时间也包含所有选项。在运行代码的可执行文件之前,您可以通过更改变量控制变量的值来指定活动选项。每次更改变量控制变量的值时,都可以重用相同的可执行文件。可执行文件为给定的主动选择有条件地运行。此外,启动
激活时间使您可以跳过重新编译,直接开始模拟模型。为了得到准确的结果,不需要重新编译模型。
请注意
在模拟和代码生成工作流的任何给定阶段,只有一种选择可以被激活。
在变量块和变量参数中设置活动选项的阶段
这些表描述了在仿真和代码生成工作流中,Simulink设置变量块和变量参数的主动选择金宝app的阶段。
仿真工作流程阶段 | 描述 | 变体激活时间 |
---|---|---|
模型编译 | 这是模拟工作流程的第一阶段。在该阶段,对模型的块参数表达式和回调函数进行求值,确定信号属性、采样时间属性和块执行顺序,并对块进行优化,提高仿真速度。 | |
simulation-loop | Simu金宝applink从仿真开始时间到仿真结束时间,以一定的时间间隔依次计算系统的状态和输出。 | 启动 |
有关模拟工作流程中各阶段的详细信息,请参见动态系统仿真阶段“,.
变量块和变量参数中变量激活时间的类型
金宝appSimulink使用这些变量激活时间在模拟和代码生成工作流的不同阶段设置变量块和变量参数的主动选择:
更新图
在仿真过程中,Simulink在信号属金宝app性传播到块之前,在模型编译阶段的开始设置并保留主动选择。不活跃的选择从模拟工作流程中删除。信号属性然后只传播到主动选择,因此只有主动选择参与后续的模拟阶段。信号属性在整个模型中不进行一致性分析。
代码生成工作流程与仿真工作流程相同。由于在模型编译阶段只保留活动的选择,而删除非活动的选择,因此在代码生成阶段生成的代码只包含活动的选择。
有关如何使用更新图
不同块和不同参数中的激活时间,请参见变体激活时间而且ActivationTime.
更新图表分析所有选项
在仿真过程中,Simulink将信号属金宝app性传播给所有的变量选择。分析选项中的信号属性,以检查每个块是否可以接受连接到其输入的信号。金宝app然后,Simulink在模型编译阶段的后期设置并保留主动选择。不活跃的选择从模拟工作流中删除,因此只有活跃的选择参与模拟的后续阶段。
代码生成工作流程与仿真工作流程相同。由于在模型编译阶段只保留活动的选择,而删除非活动的选择,因此在代码生成阶段生成的代码只包含活动的选择。
有关如何使用更新图表分析所有选项
不同块和不同参数中的激活时间,请参见变体激活时间而且ActivationTime.
代码编译
仿真流程与更新图表分析所有选项
.
在代码生成过程中,Simulink将信号属性传播金宝app到所有变量选择。分析所有选项中的信号属性,以检查每个块是否可以接受连接到其输入的信号。所有的选择都参与了工作流的代码生成阶段。因此,生成的代码包含了所有的选项。在代码中,选项包含在C预处理器条件中#如果
而且其他#
.
金宝appSimulink仅在编译代码以从中生成可执行文件时设置活动选项。换句话说,当编译代码时,编译器接受活动选择作为输入。编译器编译活动选项的预处理器条件,并仅为活动选项生成可执行文件。此选项不要求您在下次指定不同的活动选项时重新生成代码。只需生成一次代码,然后可以在代码编译之前指定不同的活动选项,并为该活动选项构建可执行文件。
请注意
在代码编译
:
您必须安装金宝app仿真软件编码器™仅为模型中的活动选择生成代码。
您必须安装嵌入式编码器®为模型中的主动和非主动选择生成代码。
有关如何使用代码编译
不同块和不同参数中的激活时间,请参见变体激活时间而且对相同维数和不同维数的变量参数的所有值有条件地编译代码.
启动
在仿真过程中,Simulink将信号属金宝app性传播给所有的变量选择。分析所有选项中的信号属性,以检查每个块是否可以接受连接到其输入的信号。金宝app然后,Simulink在模拟循环阶段设置并保留主动选择,并删除非主动选择。只有主动选择才参与模拟循环阶段。该选项不要求您在下次更改活动选项时编译模型。您只需编译模型一次,然后可以在模拟循环阶段之前指定不同的活动选择并模拟模型。金宝appSimulink依次计算该主动选择的模型的状态和输出。
在代码生成过程中,Simulink将信号属性传播金宝app到所有的变量选择。分析所有选项中的信号属性,以检查每个块是否可以接受连接到其输入的信号。所有的选择都参与了工作流的代码生成阶段,因此,生成的代码包含了所有的选择。在代码中,选项包含在regular中如果
条件。
金宝appSimulink仅在运行由生成的代码构建的可执行文件时设置活动选项。换句话说,当您运行可执行文件时,中央处理单元接受活动选择作为输入。处理器执行如果
条件的主动选择,并仅为主动选择生成输出。使用此选项的优点是,下次指定不同的活动选项时,不需要重新生成可执行文件。您只需生成一次可执行文件。然后,您可以在运行可执行文件之前指定不同的活动选择,然后为该活动选择生成输出。
请注意
在启动
,则必须安装金宝app仿真软件编码器或嵌入式编码器为模型中的活动和非活动选择生成代码。
与启动
激活时间,您可以:
在模型上执行快速重新启动模拟,并在模拟循环阶段之前更改活动选择,而无需每次都重新编译模型。这通过快速重启改进了Simulink金宝app Test工作流程。有关更多信息,请参见使用快速重启的变体系统运行迭代模拟而不重新编译模型,使用parsim模拟可变子系统的启动激活,用启动激活时间验证和验证变量模型.
在您的模型上执行加速器或快速加速器模拟。当模型中没有结构变化时,您可以通过每次更改活动的变量来增量地模拟模型,而不需要重新生成代码。有关更多信息,请参见模拟不同的块在加速器和快速加速器模式启动激活时间而且在不重新编译代码的情况下运行不同变量参数值的可执行文件.
收集和聚合来自变体子系统、变体源和变体接收器块的多个模拟的覆盖结果。激活时间设置为
启动
,覆盖率报告显示所有的变量选择,而不管它们是否在模拟过程中被激活。如果一个变体在模拟过程中不活跃,覆盖率分析报告该变体选择的覆盖率为0%。有关更多信息,请参见不同块的模型覆盖(金宝app仿真软件覆盖).使用Variant块从Simulink模型模拟和创建实时应用程序,并在连接到物理系统的Speed金宝appgoat目标计算机硬件上运行它们。要创建实时模型,必须将variables更改为
原子
并将variant参数设置为金宝app仿真软件。参数
.有关更多信息,请参见使用变体和Simulink实时创建实时应用程序金宝app在Simulink外部创建具有不同变体配置的独立可执行文件,并通过可执行文件的输入金宝app更改活动变体来模拟独立可执行文件。欲了解更多信息,使用Simulink编译器创建带有变体的独立可执行文件金宝app.
生成包含活动和非活动选项的HDL代码不同的子系统块。在生成的HDL代码中,变量控制变量是一个可调端口。您可以通过在模型启动时提供变量控制变量的值来设置活动选择。有关更多信息,请参见变体子系统:使用变体子系统生成HDL代码(高密度脂蛋白编码器).
用内联变量块导出和导入模型,并将变量子系统导出到独立的功能模拟单元(FMU)。变体块的变体激活时间必须设置为
启动
.您还可以使用FMU块导入现有的FMU。有关更多信息,请参见从具有不同子系统块的模型导出和导入功能模型单元(FMU).
的限制信息启动
激活时间,参见启动变量激活时间的已知限制.
继承自Simulink。金宝appVariantControl
变体块从其类型的变体控制变量继承激活时间金宝app仿真软件。VariantControl
.从变量控制变量继承激活时间可以帮助您一致地切换变量元素,例如块和参数。如果一个变量块有多个类型的变量控制变量金宝app仿真软件。VariantControl
,则所有这些变量的激活时间必须相同。
有关如何使用继承自Simulink。金宝appVariantControl
不同块中的激活时间,请参见变体激活时间.有关示例,请参见金宝app仿真软件。VariantControl Variables for Coherent Switching of Choices in Variant Blocks.
不同变体激活时间的说明
该图显示了Simulink为不同的变量激活时间设置主动选择的阶段。金宝app
变体块的变体激活时间
本节解释如何指定变量激活时间,支持的变量控制模式,以及变量块中不同激活时间的变量条件传播。金宝app
在不同的方块中使用不同的激活时间
这个例子解释了如何在不同的块中使用不同的激活时间来指定主动选择。
考虑这个模型。变型子系统VSS1
有两种可能的变体,线性
而且非线性
.对象关联的变量条件表达式线性
是V == 1
.对象关联的变量条件表达式非线性
是V == 2
.的对话框VSS1
,变体激活时间参数被指定为代码编译
.
当您从这个模型生成代码时,生成的代码包含的所有变量选择VSS1
.在代码中,选项包含在C预处理器条件语句中#如果
而且# elif
.在编译代码以生成可执行文件之前,可以指定值V
作为编译器的输入。在编译代码时,编译器接受值V
计算每个预处理器条件语句。基于计算为的条件真正的
,编译器设置活动选项,然后仅为活动选项生成可执行文件。例如,如果将输入提供给编译器为1
时,可执行文件只包含线性
变体的选择。
为生成可执行文件非线性
变量选择,将输入值更改为编译器2
并重新编译生成的代码。
金宝app变体块中支持的变体激活时间
本节列出了每种类型的变体块支持的变体激活时间:金宝app
分层变量块和内联变量块
基于事件的变量块
金宝app仿真软件的功能-该块默认从对应的Function Caller块继承变量激活时间。您可以将继承的激活时间重写为
代码编译
或更新图
属性生成预处理器条件参数在其块参数对话框中的值。初始化函数,重置功能,终止函数—变量激活时间默认为
更新图
.你可以把它改成代码编译
通过选择生成预处理器条件参数在其块参数框上。
该表列出了不同控制方式下,不同块支持的不同激活时间。金宝app
变体激活时间 | |||||
---|---|---|---|---|---|
变体块 | 变型控制方式 | 更新图 |
更新图表分析所有选项 |
代码编译 |
启动 |
不同的子系统,变体模型,变异来源,变体水槽 | 表达式 |
✓ | ✓ | ✓ | ✓ |
标签 |
✓ | x | x | x | |
Sim码原交换 |
✓ | ✓ | x | x | |
不同的连接器(Simscape),手动变量来源,手动变型水槽 | 表达式 |
✓ | x | x | x |
标签 |
不支持金宝app | ||||
Sim码原交换 |
不支持金宝app | ||||
金宝app仿真软件的功能,初始化函数,重置功能,终止函数 | 表达式 |
✓ | ✓ | ✓ | x |
标签 |
不支持金宝app | ||||
Sim码原交换 |
不支持金宝app |
请注意
可用于在不同块中形成不同条件表达式的操作符取决于其不同的激活时间。看到不同激活时间的不同块中的操作符类型.
不同块中不同激活时间的不同条件传播
变量条件传播允许您将变量块之外的条件表达式分配给连接块,以提高性能。当您在Variant块之外传播条件时,不活跃的选择不会在模拟期间运行,这可以提高性能,特别是在大型模型中。不同的激活时间,不同条件在不同块外的传播也不同。有关信息,请参见将不同的条件传播到不同的子系统之外.
通过级联块传播条件会导致复合条件。金宝appSimulink不支持来自金宝app不同块的复合条件启动
而且代码编译
不同的激活时间。有关更多信息,请参见启动变量激活时间的考虑和限制.
变量参数中的变量激活时间
介绍如何指定变量激活时间,以及变量参数中支持的变量控制方式。金宝app
在变量参数中使用变量激活时间
这个例子解释了如何在不同的参数中使用不同的激活时间来指定主动选择。
考虑这个模型。的获得参数。获得Block是一个变量参数,其值设置为K
.的变量K
有两个值:3.5
而且8.5
.的变体激活时间K
指定为代码编译
使用金宝app仿真软件。VariantControl
.此设置意味着您可以在开始代码编译之前指定活动选项。
V = 金宝appSimulink。VariantControl(“价值”, 1“ActivationTime”,代码编译的) K = 金宝appSimulink。VariantVariable(“选择”, {“V = = 1”, 3.5,“V = = 2”, 8.5})
当您从这个模型生成代码时,生成的代码包含的活动和非活动选项K
.在代码中,选项包含在C预处理器条件语句中#如果
而且# elif
.编译此代码以生成可执行文件时,编译器接受值V
作为输入来计算每个预处理器条件语句。基于计算为的条件真正的
,编译器设置活动选项,然后仅为活动选项生成可执行文件。例如,如果将输入提供给编译器为1
,可执行文件是为之构建的K
设置为3.5
.
生成可执行文件K
设置为8.5
,将输入值改为compiler to2
并再次编译生成的代码。您不需要重新生成代码来为不同的变量值生成可执行文件。
金宝app在变量参数中支持变量激活时间
该表列出了变量参数可用的变量激活时间。
请注意
中列出了可用于在变量参数中形成变量条件表达式的操作符变量形参中的操作符类型.
变型控制方式 | 变体激活时间 | |||
---|---|---|---|---|
更新图 |
更新图表分析所有选项 |
代码编译 |
启动 |
|
表达式 |
✓ | ✓ | ✓ | ✓ |
标签 |
不支持金宝app | |||
Sim码原交换 |
不支持金宝app |
不同变体激活时间的存储类
当指定条件表达式以确定活动选择时,表达式的每个变量控制变量都有一个与之关联的存储类。使用存储类来控制生成代码中变量控制变量的外观和位置。存储类还防止优化,例如在生成的代码中消除变量控制变量的存储。有关更多信息,请参见选择在生成的代码中控制数据表示的存储类(金宝app仿真软件编码器).
变体条件表达式中使用的变量必须满足这些条件才能生成代码金宝app仿真软件编码器或嵌入式编码器。
变量条件表达式中的变量控制变量必须具有这些存储类。
该表列出了用于生成代码的不同激活时间所支持的内置存储类金宝app金宝app仿真软件编码器和嵌入式编码器。
内置存储类 变体激活时间 代码编译
启动
ExportedGlobal(金宝app仿真软件编码器) x ✓ 模型的默认(金宝app仿真软件编码器) x ✓ ImportedExtern, ImportedExternPointer(金宝app仿真软件编码器) x ✓ 汽车(金宝app仿真软件编码器) x x 该表列出了使用Embedded Coder生成代码的不同激活时间所支持的自定义存储类。金宝app
自定义存储类 变体激活时间 代码编译
启动
GetSet(嵌入式编码) x ✓ 定义、ImportedDefine(嵌入式编码) ✓ x CompilerFlag(嵌入式编码) ✓ x Const和ConstVolatile。看到的,Const, Volatile和ConstVolatile(嵌入式编码) x x 设置(嵌入式编码) x ✓ 结构体(嵌入式编码) x ✓ ExportToFile(嵌入式编码) x ✓ ImportFromFile(嵌入式编码) x ✓ 不稳定。看到的,Const, Volatile和ConstVolatile(嵌入式编码) x ✓
如果将变量控制变量的激活时间设置为
启动
,则不支持将其存储类指定为其中任何一个:金宝app存储类,例如
定义
在代码中生成宏。存储类,例如
常量
这会在代码中生成常量限定变量。
使用标量MATLAB®变量作为变量控制变量在变量块中,没有任何存储类用于代码生成,选择
可调
随着默认参数行为从模型设置下代码生成>优化.此标准不适用于AUTOSAR后构建变体。