主要内容

为变量系统生成预处理条件

定义变量控件

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

  1. 打开Model Explorer。选择基本工作空间.或者,您可以创建金宝app仿真软件。参数在数据词典。

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

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

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

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

    • 定义

    • ImportedDefine(自定义)

    • CompilerFlag(自定义)

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

  6. 指定变体控件的值。如果存储类是ImportedDefine(自定义),做以下工作:

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

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

      请注意

      生成的代码将变量控制作为用户定义的宏引用。生成的代码不包含宏的值。变量控件的值确定编译代码中的活动变量。

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

      -DVSSMODE = 1

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

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

请注意

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

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

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

  2. 选择代码生成窗格,然后设置系统目标文件作为ert.tlc

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

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

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

  6. 生成的代码。

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

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

  • 代码生成过程通过使用存储在基本工作空间中的变量控制值来检查至少有一个活动变量。计算为的变量控制真正的变成了主动变量。如果所有的变量控制都不等于真正的,如果指定,则默认变体成为活动变体。如果活动变量不存在,代码生成过程将发出错误。

  • 实现变量控件的条件表达式,使只有一个变量控件计算为真正的这个generated code includes a test of the variant controls to determine that there is only one active variant. If this test fails, your code will not compile.

  • 中列出的子子系统注释掉变量的选择表,代码生成器不会为注释掉的子系统生成代码。

  • 对于变型子系统,model_private.h文件包含条件参数定义。例如,如果Constant块的值是金宝app仿真软件。参数与一个导入定义类的条件定义金宝app仿真软件。参数是在model_private.h文件

在同一个头文件中生成变量控制宏

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

探索示例模型

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

运行(完整文件)(matlabroot,“例子”“是”“主要”“prepare_rtwdemo_preproc_subsys”));

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

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

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

每个对象的状态取决于变量控制变量的值,VSSMODE,这是一个金宝app仿真软件。参数对象在基本工作区中。参数对象使用自定义存储类定义,并配置为在生成的代码中以c代码宏的形式出现

通过模型资源管理器更改生成的头文件的名称

在本例中,将生成的头文件的名称改为variant_controls.h

建模选项卡上,选择模型浏览器

模型层次结构窗格中,展开金宝app仿真软件根并选择基本工作空间这个内容窗格显示基本工作区中的所有对象。

选择VSSMODE然后在金宝app仿真软件。参数:VSSMODE窗格中,单击代码生成选项卡。

HeaderFile参数,指定文件的名称为variant_controls.h

或者,您可以使用此命令以编程方式更改文件名。有关金宝app仿真软件。CoderInfo,请参阅金宝app仿真软件。CoderInfo

金宝appSimulink.CoderInfo.CustomAttributes.HeaderFile =“variant_controls.h”;

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

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

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

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

在命令提示符处,复制内置的金宝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仿真软件。参数对象VSSMODEmyPackage。参数对象。应用新的自定义存储类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。若要更改头文件的名称,请使用自定义存储类设计器。

相关的话题