主要内容

配置C代码生成参数

在为代码生成配置模型时,您可以识别和配置可调性参数,例如校准参数。该表中列出了可配置的参数类型。

参数类型 描述
模型参数参数 作为模型参数配置的模型工作区中的块参数。包含模型参数参数的模型的每个实例都可以将参数设置为唯一的值。
模型参数 在模型中定义的参数,例如模型工作区中的参数。
外部参数 定义为基本工作区或数据字典中的对象的参数。
常数 常数参数。

若要配置用于代码生成的参数,必须将参数与数据对象关联。例如,在为代码生成配置MATLAB变量之前,在Model Explorer中,将变量转换为参数对象。

中打开模型时嵌入式编码器App、模型参数、模型参数参数和常量在“代码映射”编辑器中显示与数据对象关联的。在编辑器中,您可以配置代码生成的参数。如果模型使用外部参数,则可以通过单击“代码映射”编辑器刷新链接到参数名称右侧。该链接启动一个更新图,并在编辑器视图中添加模型使用的外部参数。

将参数数据配置为:

  • 在执行生成的代码时,使数据可用于交互。

  • 尽量减少存储在内存中的数据量。

  • 控制代码生成器在内存中放置参数数据的位置。

  • 将参数数据提升到模型接口,以便其他组件和系统可以访问该数据。

  • 提高生成代码的可读性和可追溯性。

为了控制整个模型的参数是否可调,您可以访问模型配置参数默认参数行为通过使用'Auto'是可调的/内联的链接到代码映射编辑器数据默认值选项卡。例如,你可以使用该链接在以下情况下使参数可调:

  • 在快速原型制作过程中细化参数设置

  • 校准参数

  • 优化生产代码的参数

对于代码生成,示例展示了如何为模型配置模型参数和模型参数参数rtwdemo_configinterface.属性配置代码映射代码映射编辑器或代码映射编程接口(coder.mapping.api.CodeMapping).

选择参数的自定义选项

默认情况下,模型中的参数在生成的代码中以字段的形式出现命名为:

  • 模型_P对于模型参数

  • 模型_InstP对于模型参数参数

  • 模型_ConstP对于常数参数

根据您的代码接口需求,决定是否自定义生成参数数据。如果不配置自定义,代码生成器将确定是否消除或更改所生成代码中的参数表示,以实现优化目的。如果您配置自定义,请确定:

  • 是否设置默认配置

    如果一个模型包含一个类别的大量必须可调的参数(例如,超过10个),通过使用默认设置来配置该类别的参数,然后为特殊情况覆盖该设置会更有效。如果模型包含给定类别的一些参数,这些参数具有惟一的来源、命名或放置需求,那么可以考虑单独配置这些参数。

  • 如何在生成的代码中声明和处理模型参数数据

    • 作为单独的全局变量

    • 从外部代码中定义的全局变量读取模型参数数据

    • 作为访问函数的调用。需要嵌入式编码器®

    有关这些选项的详细信息,请参见生成代码中的控制数据和函数接口

模型参数的其他考虑因素包括:

有关与具有相应存储类和存储类属性的参数相关的接口要求的列表,请参见选择“数据存储的存储类”和“存储类属性”

示例模型的参数要求rtwdemo_configinterface是:

  • 默认情况下,在生成的代码中保留模型参数以进行调优。不要通过内联参数来优化代码。

  • 类定义和声明的单独全局变量表示模型参数常量而且挥发性类型限定符。

  • 应用前缀mp_到表示模型参数的变量名。

  • 启用常量参数而且较低的为模型的每个实例提供不同的值。

  • 对于模型参数参数的每个实例,默认情况下,分配一个内存区域,表示为导出结构中唯一命名的字段。

  • 在生成的代码中,模型参数参数作为单独的模型函数参数出现。启用代码生成器来优化模型中不被模块使用的模型参数参数。

本例中,需要配置模型参数和模型参数参数rtwdemo_configinterface以满足这些代码生成需求。

为参数配置默认代码生成设置

参数的默认代码生成设置可以减少为代码生成准备模型的工作,特别是当模型具有大量的参数时,您需要在生成的代码执行时与这些参数进行交互。选择一次配置设置,代码生成器将这些设置应用于整个模型的参数。金宝app动态仿真模块®将默认配置存储为模型的一部分。

如果您的模型为相同的类别使用了多个没有唯一需求的参数,请考虑为模型参数配置默认的代码生成设置或者使用共享的嵌入式编码器字典

方法的使用代码映射编辑器为模型参数配置默认设置和模型参数参数对于模型rtwdemo_configinterface.配置模型参数,使它们是可调的,并在生成的代码中定义和声明为单独的全局变量有类型限定符的常量而且挥发性配置模型参数参数以使用默认设置,其中代码生成器为每个参数实例分配一个内存区域,表示为导出结构中唯一命名的字段。

  1. 开放模式rtwdemo_configinterface.将模型的副本保存到可写位置。

    金宝app使用Simulink模型学习如何为代码生成配置模型参数。

  2. 打开嵌入式编码器应用程序。

  3. C代码选项卡上,选择代码接口>默认代码映射

  4. 在代码映射编辑器中,选择模型参数参数.将存储类设置为默认的.代码生成器为每个参数实例分配一个单独的内存区域。

  5. 在“代码映射”编辑器中参数,选择类别模型参数.链接文本'Auto'将被内联指示默认情况下将代码生成器配置为内联模型参数。这个例子的一个要求是模型参数是可调的。点击'Auto'将被内联

  6. 在“模型配置参数”对话框中,设置模型配置参数默认参数行为可调.保存更改并关闭对话框。在“代码映射”编辑器中,链接文本更改为Auto是可调的

  7. 在代码映射中,使用模型参数类别仍然选中,将存储类设置为ConstVolatile

    代码映射编辑器,选中数据默认选项卡,展开参数树节点,并将模型参数的存储类设置为ConstVolatile。

  8. 保存模型。

配置单个参数的代码生成

您可以为代码生成配置单独的参数。例如,如果一个模型有两个具有唯一代码生成需求的相同类别的参数,则分别配置参数。或者,如果为某类参数配置默认设置,则可以为特定参数覆盖这些设置。

如果您的模型至少满足其中一个条件,请考虑单独配置参数的代码生成设置:

  • 使用具有唯一来源、命名或放置要求的同一类别的多个参数。

  • 使用同一类别的几个参数。

  • 具有某一类参数的默认配置,您需要覆盖某些特定参数的配置。

此示例演示如何使用Code Mappings编辑器将模型参数的默认存储类设置应用到参数K1表1,表二在模型rtwdemo_configinterface.为这些参数配置代码标识符以及模型参数参数较低的而且.您可以指定代码生成标识符,例如用于集成,而无需修改模型设计。

  1. 如果您还没有这样做,请完成下面的步骤为参数配置默认代码生成设置

  2. 在代码映射编辑器中,单击参数选项卡。扩大模型参数参数.默认情况下,每个模型参数的存储类设置为汽车,这意味着代码生成器可能为了优化目的而消除或更改相关代码的表示。如果不可能进行优化,代码生成器将应用模型默认配置。对于本例,将存储类设置为汽车

  3. 扩大模型参数.默认情况下,每个参数的存储类设置为汽车.使用模型默认配置,它指定存储类ConstVolatile

    • 要避免优化并强制代码生成器使用默认配置,请将存储类设置为模型的默认

    • 若要覆盖默认配置,请为该参数指定满足代码生成要求的存储类。

  4. 在“代码映射”编辑器中模型参数,选择参数K1表1,表二.将存储类设置为模型默认值:ConstVolatile

    代码映射编辑器,选择参数选项卡,选择参数K1, Table1和Table2,并将存储类设置为Model default: ConstVolatile。

  5. 为名称包含前缀的模型参数配置代码标识符mp_.在代码映射编辑器中,选择模型参数K1.单击图标以配置其他代码映射属性图标并设置存储类属性标识符mp_K1.为参数表1而且表二,设置标识符mp_Table1而且mp_Table2

    选择参数选项卡的代码映射编辑器,模型参数树节点展开,参数K1、Table1和Table2的存储类设置为Model default: ConstVolatile。映射检查器显示参数Table2的Identifier属性设置为mp_Table2。

  6. 保存模型。

  7. 生成并查看代码。例如,查找模型参数的数据定义mp_K1rtwdemo_configinterface.c

    mp_K1 = 2;

    找到在步骤入口点函数中使用参数的位置。

    if (mode) {output = (real_T)mp_K1 * dout_Table1;} else {output = dstate_X;}

通过使用将参数数据组织到结构中结构体存储类

方法的使用结构体存储类,将块参数值组织到生成代码中的结构中。您可以将存储类直接应用于模型中的各个数据项。

要在生成的代码中创建参数数据的自定义结构,请考虑在Simulink中创建相应的结构。金宝app看到在生成的代码中将数据组织成结构

创建示例模型

用三个元素创建这个示例模型常数街区和三外港块。命名模型ex_struct_param

设置常量参数

  1. 打开模型数据编辑器。在建模选项卡上,单击模型数据编辑器

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

  3. 在模型中,选择鞋面常数块。

  4. 在“模型数据编辑器”中,使用价值列,将常量值设置为p1.旁边p1,点击操作按钮并选择创建

  5. 2 .在“创建新数据”对话框中设置价值金宝appSimulink.Parameter (1.0)并点击创建

    金宝appSimulink添加金宝app仿真软件。参数对象命名p1到模型工作区。

  6. 的属性对话框中p1,点击好吧

    如果不需要设置其他参数,则可以单击代码生成选项卡。然后,单击在编码器应用程序中配置按钮,该按钮打开嵌入式编码器app和代码映射编辑器。

  7. 使用模型数据编辑器通过使用命名的参数对象来设置其他常量值p2(值2.0),p3(值3.0).

为代码生成配置常量参数

  1. 打开嵌入式编码器应用程序。

  2. C代码选项卡上,选择代码接口>单个元素代码映射

  3. 在代码映射编辑器中,单击参数选项卡。

  4. 扩大模型参数

  5. 为参数设置存储类p1p2,p3结构体

  6. 选择参数p1.单击图标以配置其他代码映射属性图标和设置属性StructNamemy_struct.为参数p2而且p3,设置StructNamemy_struct

  7. 保存模型。

生成和检查代码

生成并检查代码。

该文件ex_struct_param.h定义结构类型,my_struct_type

/*自定义存储类的类型定义:Struct */ typedef Struct my_struct_tag {real_T p1;real_T p2;real_T p3;} my_struct_type;

该文件ex_struct_param.c定义全局变量my_struct

/*定义自定义存储类:Struct */ my_struct_type my_struct = {/* p1 */ 1.0, /* p2 */ 2.0, /* p3 */ 3.0};

以编程方式配置参数的代码生成设置

要自动配置代码生成的参数,请使用代码映射的编程接口。例如,当创建自定义块库或应用程序测试环境的一部分时,使用编程接口来自动化数据配置。

这个例子展示了如何配置模型参数的默认设置和模型参数参数为模型rtwdemo_configinterface.配置模型参数,使它们是可调的,并在生成的代码中定义和声明为单独的全局变量有类型限定符的常量而且挥发性配置模型参数参数以使用默认设置,其中代码生成器为每个参数实例分配一个内存区域,表示为导出结构中唯一命名的字段。将模型参数的默认存储类设置应用于参数K1表1,表二.为这些参数配置代码标识符。

  1. 打开示例模型。

    open_system(“rtwdemo_configinterface”);
  2. 设定模型配置参数默认参数行为可调

    模型=“rtwdemo_configinterface”;
    set_param(模型、“DefaultParameterBehavior”可调);
  3. 创建对象厘米通过调用函数coder.mapping.api.get.对象存储数据元素的代码生成配置和功能在模型rtwdemo_configdefaults

    Cm = code .mapping.api.get('rtwdemo_configinterface');
  4. 通过调用function为模型参数配置默认设置setDataDefault.对于参数,指定这些值:

    • 返回的对象。coder.mapping.api.get

    • ModelParameters对于默认类别

    • 属性名StorageClass具有财产价值ConstVolatile

    setDataDefault (cm,‘ModelParameters’,‘StorageClass’,‘ConstVolatile’);
  5. 为模型参数参数配置默认设置。在对setDataDefault,为参数指定这些值:

    • 返回的对象。coder.mapping.api.get

    • ModelParameterArguments对于默认类别。

    • 属性名StorageClass具有财产价值默认的

    setDataDefault (cm,‘ModelParameterArguments’,‘StorageClass’,‘默认’);
  6. 验证模型参数的默认配置和模型参数参数发出呼叫getDataDefault返回的对象coder.mapping.api.get、类别ModelParametersModelParameterArguments,StorageClass

    getDataDefault(cm, 'ModelParameters', 'StorageClass') ans = 'ConstVolatile'
    getDataDefault(cm, 'ModelParameterArguments', 'StorageClass') ans = 'Default'
  7. 将模型参数的默认配置应用于参数K1表1,表二

    默认情况下,Simuli金宝appnk将单个参数的存储类设置为汽车.当存储类为汽车,代码生成器:

    • 确定是否为优化目的从生成的代码中删除数据。

    • 如果保留数据,则决定如何在生成的代码中有效地表示数据,并考虑默认配置设置。

    配置代码生成器,将默认模型参数设置应用于参数K1表1,表二.对于每个参数,调用函数setModelParameter.指定返回的对象coder.mapping.api.get,参数名,属性名StorageClass,及物业价值模型的默认

    setModelParameter (cm, K1, StorageClass,默认模式);setModelParameter(厘米,“表1”、“StorageClass”,“默认模式”);setModelParameter(厘米,“表”、“StorageClass”,“默认模式”);
  8. 验证参数的配置更改K1表1,表二通过调用函数getModelParameter

    getModelParameter(cm,'K1','StorageClass') ans = 'Model default' getModelParameter(cm,'Table1','StorageClass') ans = 'Model default' getModelParameter(cm,'Table2','StorageClass') ans = 'Model default'
  9. 为模型参数配置代码标识符。对于每个参数,调用函数setModelParameter.指定返回的对象coder.mapping.api.get,参数名,属性名标识符,以及这些属性值之一。

    模型参数 代码标识符
    K1 mp_K1
    表1 mp_Table1
    表二 mp_Table2
    setModelParameter (cm, K1,“标识符”,“mp_K1”);setModelParameter(厘米,“表1”,“标识符”,“mp_Table1”);setModelParameter(厘米,“表”,“标识符”,“mp_Table2”);
  10. 通过使用函数调用来验证模型参数的配置更改getModelParameter

    getModelParameter(cm,'K1','Identifier') ans = 'mp_K1' getModelParameter(cm,'Table1','Identifier') ans = 'mp_Table1' getModelParameter(cm,' Table2', 'Identifier') ans = 'mp_Table2'
  11. 保存模型。

  12. 生成并查看代码。例如,查找模型参数的数据定义mp_K1rtwdemo_configinterface.c

    mp_K1 = 2;

    找到在步骤入口点函数中使用参数的位置。

    if (mode) {output = (real_T)mp_K1 * dout_Table1;} else {output = dstate_X;}

为模型参数选择存储类和存储类属性

根据您的代码生成需求,从这些存储类中进行选择,以配置模型参数的代码生成。对于常量,只有默认的适用。仅用于模型参数参数汽车默认的,模型的默认适用。

需求 存储类
启用优化,可能会生成更高效的代码。 汽车(仅限单个映射)
对于无法优化的数据元素,将数据表示为标准数据结构的字段。 默认的(仅默认映射)
防止优化消除数据元素的存储,并对数据元素类别使用默认映射。 模型的默认(仅限单个映射),词典默认(仅限单个映射)
生成一个在命名位域中存储布尔数据的结构。 设置(仅限个别地图)
金宝app支持使用编译器标志或选项定义的预处理器条件。 CompilerFlag
属性的全局变量定义和声明常量挥发性,或常量而且挥发性类型限定符。 Const, Volatile和ConstVolatile
生成宏(#定义指令)或使用外部代码中头文件中定义的宏的代码。 定义、ImportedDefine
生成全局变量定义和声明。 ExportedGlobal
生成指定文件的全局变量定义和声明。 ExportToFile
属性的全局变量定义和声明静态类型限定符。 FileScope(仅限本地和共享本地数据存储映射)
通过调用自定义访问器函数生成与数据交互的代码。 GetSet
生成从外部代码定义的全局变量或全局变量指针读取和写入的代码。 ImportedExtern, ImportedExternPointer
生成读取和写入外部头文件定义的全局变量的代码。 ImportFromFile
生成一个具有名称的全局结构,您可以指定名称。 结构体(仅限单个映射)

可用存储类的列表可能包括嵌入式编码器字典中定义的其他特定于项目的存储类。如果您有列出的存储类无法满足的特殊需求,并且您有嵌入式Coder软件,那么您可以定义一个存储类。看到为软件架构定义存储类、内存段和功能模板

对于单个模型参数,请使用标识符属性为表示生成代码中的参数的变量配置名称。使用Embedded Coder,您还可以根据所选择的存储类配置这些属性。

财产 描述 存储类
DefinitionFile 包含全局数据定义的源定义文件,由参数和外部代码读取 ExportToFile而且挥发性
GetFunction 参数在生成的代码中显示为对指定的得到函数 GetSet
HeaderFile 包含全局数据声明的源头文件,全局数据由参数和外部代码读取 ExportToFileGetSetImportFromFile,挥发性
记忆的部分(仅限默认参数配置) 包含由参数读取的数据的内存段 默认的
老板 代码生成器将参数定义放在为共享定义的模型层次结构中的多个模型之一生成的代码中。您必须选择模型配置参数使用数据对象的所有者来放置数据定义.看到控制在生成的文件中全局数据定义和声明的放置 ExportToFile而且挥发性
PreserveDimensions 代码生成器保留在生成的代码中表示为多维数组的参数数据的维度。必须设置模型配置参数阵列布局.看到在生成的代码中保留多维数组的维度 ExportToFileFileScopeImportFromFile可以定位的而且挥发性
SetFunction 参数在生成的代码中显示为对指定的函数。 GetSet
StructName 所生成的参数代码中结构的名称。 设置而且结构体

另请参阅

|

相关的话题