主要内容

为不同系统生成预处理器条件

定义变量控制

对于变量系统,称为变量控制的条件表达式决定了哪个变量选择是活跃的。可以将变体控件指定为条件表达式金宝app仿真软件。变体对象指定一个条件表达式,MATLAB®变量,或金宝app仿真软件。参数对象。这个例子展示了如何将变量控件定义为金宝app仿真软件。参数对象。

  1. 打开模型资源管理器。选择基本工作空间

  2. 在模型资源管理器中,选择添加>金宝app模型参数.为新参数指定名称。

  3. 使用的函数金宝appSimulink.VariantManager.findVariantControlVars寻找和转换MATLAB变量中使用的变控制表达式金宝app仿真软件。参数对象。例如,请参见转换变控制变量到Simulink。金宝app参数对象

  4. 金宝app仿真软件。参数属性对话框中指定价值数据类型

  5. 选择其中一个存储类值。

    • 定义

    • ImportedDefine(自定义)

    • CompilerFlag(自定义)

    • 使用自定义存储类设计器创建的存储类。存储类必须具有数据初始化参数设置为数据范围参数设置为进口.看到通过配置存储类属性来控制数据表示为更多的信息。

  6. 指定变体控件的值。如果存储类是ImportedDefine(自定义),执行以下步骤:

    1. 指定头文件的自定义属性部分中的外部头文件金宝app仿真软件。参数属性对话框。

    2. 在外部头文件中输入变量控件的值。

      请注意

      生成的代码将变体控件引用为用户定义的宏。生成的代码不包含宏的值。变体控件的值决定已编译代码中的活动变体。

      如果变量控件是CompilerFlag自定义存储类,变体控件的值在编译时设置。使用配置参数>代码生成>自定义代码>额外的构建信息>定义了参数向编译器命令行添加变量控件列表(宏定义)。例如,对于变量控制VSSMODE的文本字段中定义了输入参数:

      -DVSSMODE = 1

      如果想在生成makefile后修改变体控件的值,请在编译代码时使用makefile选项。例如,在MATLAB之外的命令行,输入:

      makecommand- f模型楼上DEFINES_CUSTOM = " -DVSSMODE = 1 "

请注意

您可以使用金宝app仿真软件。参数枚举类型的对象。这种方法提供了有意义的名称,并提高了条件的可读性。生成的代码包含预处理器条件,用于检查变体条件是否包含枚举类型的有效值。

为生成预处理器条件指令配置模型

  1. 打开“配置参数”对话框。

  2. 选择代码生成面板,设置系统目标文件作为ert.tlc

  3. 报告窗格中,选择创建代码生成报告

  4. 在“配置参数”对话框中,清除“配置参数”忽略自定义存储类参数。为了生成预处理器条件,必须使用自定义存储类。

  5. 在变体子系统、变体源或变体接收器块参数对话框中,设置变体激活时间参数代码编译

  6. 生成的代码。

生成预处理器条件的特殊注意事项

  • 每个子变体子系统的端口号和名称必须属于父变体子系统块的端口号和名称的子集。

  • 代码生成过程通过使用存储在基本工作区中的变体控件值来检查是否至少有一个活动变体。计算结果为的变体控件真正的成为活跃的变体。如果没有一个变量控件的计算结果为真正的,如果指定,则默认变量变为活动变量。如果活动变体不存在,代码生成过程会发出错误。

  • 实现变量对象的条件表达式,使其只有一个值为真正的.生成的代码包括对变体对象的测试,以确定只有一个活动变体。如果这个测试失败,您的代码将无法编译。

  • 控件中列出的子子系统变量的选择表中的变量子系统块参数对话框中,则代码生成器不会为注释掉的子系统生成代码。

  • 如果默认变体的样本时间与其他变体选择的样本时间不同,则其他#不为默认变量生成条件预处理器。相反,一个#如果!<变异条件>是生成的。

  • 对于变体子系统,则model_private.h文件包含条件参数定义。例如,如果常量块的值是金宝app仿真软件。参数与一个ImportedDefine的条件定义金宝app仿真软件。参数是在model_private.h文件。

在同一个头文件中生成不同的控制宏

这个例子展示了如何聚合多个变量控制宏(#定义)写入同一个生成的头文件。这种聚合使您能够更容易地管理具有多个交互变量条件的系统中固有的复杂性。

探索模型示例

运行脚本prepare_rtwdemo_preproc_subsys,打开模型rtwdemo_preprocessor_subsys为这个例子做准备。

运行(fullfile (matlabroot“例子”“是”“主要”“prepare_rtwdemo_preproc_subsys”));

该模型包含两个变体子系统块。

在变体子系统中导航。每个子系统都有一个线性和一个非线性算法变体。

在模型的根级,打开标记为变量子系统的块对话框LeftController.子系统中的算法变体基于两种状态激活金宝app仿真软件。变体对象,线性非线性,在基本工作区中。

每个对象的状态取决于两个变量控制变量的值,MODE_AMODE_B,这是金宝app仿真软件。参数对象在基本工作区中。参数对象使用自定义存储类定义中的c代码宏被配置为在生成的代码中显示macros.h

通过模型数据编辑器更改生成头文件的名称

在本例中,将生成的头文件的名称更改为macros.hvariant_controls.h.必须更改每个参数对象中的文件名。

在模型中,选择建模>模型数据编辑器

在模型数据编辑器中,选择参数选项卡。

单击显示/刷新的额外信息按钮。

设置改变观点下拉列表,代码

内容过滤框中,输入模式.模型数据编辑器显示了与参数对象对应的两行。

选择两个行。然后,对于其中一行,使用头文件列来更改头文件名称macros.hvariant_controls.h.模型数据编辑器将更改应用于这两行。

通过创建自定义存储类减少维护工作量

要更改头文件的名称,必须更改每个参数对象的配置。您可以使用Model Data Editor来执行批处理编辑,但是当您添加一个新的变量控制变量(参数对象)时,您必须记住为该对象指定头文件的名称。此外,模型数据编辑器每次只显示一个模型使用的参数对象。

相反,您可以创建一个自定义存储类并只指定头文件的名称一次:在自定义存储类的定义中。

将当前文件夹设置为可写位置。

在命令提示符处,复制内置的金宝appSimulinkDemos文件包到当前文件夹中myPackage

拷贝文件(fullfile (matlabroot,...“工具箱”“金宝app模型”“simdemos”“dataclasses”' 金宝app+ SimulinkDemos '),...' + myPackage '“f”

内导航+ myPackage文件夹到文件Parameter.m然后打开文件。

取消的方法定义该方法的setupCoderInfo.在函数调用中useLocalCustomStorageClasses、替换“packageName”“myPackage”.当您完成时,该节显示如下:

方法函数setupCoderInfo (h)%使用此包中的自定义存储类useLocalCustomStorageClasses (h,“myPackage”);结束结束%的方法

保存并关闭文件。

将当前文件夹设置为包含该包的文件夹myPackage

打开自定义存储类设计器。

cscdesigner (“myPackage”

选择自定义存储类定义

点击复制.一个新的自定义存储类,Define_1,出现了。选择这个新的自定义存储类。

的名字VariantControlVar

头文件指定.在文本框中输入variant_controls.h

点击应用保存,好吧

在命令提示符处,替换金宝app仿真软件。参数对象MODE_AMODE_BmyPackage。参数对象。应用新的自定义存储类VariantControlVar

MODE_A = myPackage.Parameter;MODE_A。价值= 1; MODE_A.DataType =“int32”;MODE_A.CoderInfo。StorageClass =“自定义”;MODE_A.CoderInfo。CustomStorageClass =“VariantControlVar”;MODE_B = myPackage.Parameter;MODE_B。价值= 1; MODE_B.DataType =“int32”;MODE_B.CoderInfo。StorageClass =“自定义”;MODE_B.CoderInfo。CustomStorageClass =“VariantControlVar”;

现在,为了指示参数对象表示变量控制变量,您可以应用自定义存储类VariantControlVar.若要更改头文件的名称,请使用自定义存储类设计器。

相关的话题