主要内容

根据接口控制文件规范配置生成的代码

此示例显示如何根据接口控制文档(ICD)中的规范配置模型的代码生成设置。此示例还显示如何在数据字典中存储共享Simulink变量和数据对象。金宝app

ICD是软件组件之间的数据接口。为了交换和共享数据,组件根据ICD声明和定义全局变量来存储信号和参数值。ICD为变量命名,并列出数据类型、物理单位和参数值等特征。当您在Simulink中创建组件模型时,您可以配置模型,使生成的代码符合金宝appICD。例如,您可以在交互配置模型时使用ICD作为参考源,或者您可以通过使用脚本从ICD导入数据来自动化配置。

探索接口控制文档

在Microsoft®Excel®或其他兼容程序中,打开ex_ICD_PCG.xlsx并复习工作表的内容。

开放ex_ICD_PCG.xlsx
  • 信号工作表。每一行代表一个跨越接口边界的信号。检查工作表中的单元格值。的物主列标识为信号分配内存的组件的名称。的数据类型列名称内存中的信号数据类型。例如,工作表使用表达式总线:传感器命名结构类型的步骤EngSensors

  • 参数工作表。价值列列出每个参数的值。如果参数的值为非标度,则该值存储在其单独的工作表中,该工作表与参数同名。

  • 数值类型工作表。每一行表示一个命名的数字数据类型。在此ICD中,数据使用定点数据类型(定点设计器)IsAlias列指示C代码是否使用数据类型的名称(例如,s16En3)或使用与单词长度相对应的基本整数数据类型的名称(例如).这个数据镜列指示生成的代码是导出还是导入数据类型定义。

  • 结构类型工作表。每行表示一种结构类型或结构类型的字段数据类型列是结构体。不使用的后续行结构体表示前面结构类型的字段。此ICD定义结构类型,EngSensors,共有四个字段:节气门速度自我地图

  • 枚举类型工作表。类似于结构类型工作表中,每行表示一个枚举类型或枚举成员。此ICD定义枚举类型sldemo_FuelModes

探索外部代码

ICD中的某些数据项属于other_component,这是一个存在于MATLAB之外的组件。打开并浏览这些示例文件的内容,这些文件定义并声明外部数据:

编辑ex_inter_types.h编辑ex_inter_sigs.c编辑ex_inter_sigs.h

探索示例模型

在本例中,您将从控制器模型生成代码rtwdemo_fuelsys_dd_controller.打开您的副本模式l

开放式系统(“rtwdemo\u fuelsys\u dd\u控制器”

控制器模型中的一些信号有名称,例如,输入信号传感器.模型中的某些块参数参考金宝app仿真软件。参数对象在数据字典中。例如,在空气流量计算子系统,泵恒块使用参数对象PumpCon快车PressVect. 这些参数对象设置相应块参数的值。可以将代码生成设置应用于信号和参数对象。

控制器模型链接到数据字典rtw演示燃料系统控制器.sldd.探索数据字典。

  1. 在控制器模型的左下角,单击模型数据面板。

  2. 点击外部数据链接

  3. 在模型浏览器中模型层次结构窗格中,展开节点rtwdemo_fuelsys_dd_controller外部数据rtwdemo_fuelsys_dd_controller

  4. 选择设计数据

字典存储:

  • 参数对象

  • 金宝appSimulink.NumericType对象,如u8En7

  • 金宝app仿真软件。公共汽车对象EngSensors

根据ICD配置模型设计数据

  1. 打开ICD电子表格(如果尚未打开)。

  2. 在控制器模型的金宝appSimulink Editor窗口中,导航到模型的根级别。

  3. 建模选项卡上,单击模型数据编辑器

  4. 在模型数据编辑器中,单击变化范围按钮。模型数据编辑器显示了关于模型子系统中的数据项的信息。

  5. 点击显示/刷新的额外信息按钮。模型数据编辑器显示有关数据对象的信息(金宝app仿真软件。参数对象)。

配置信号的设计设置

  1. 在ICD中,单击信号选项卡。

  2. 在模型数据编辑器中,单击港口/外港选项卡。

  3. 确保导入块的配置设置传感器符合ICD规格。数据类型必须设置为Bus: ENGS传感器

  4. 确保Outport块的配置设置fuel_rate符合ICD规格。数据类型必须设置为s16En7。分钟必须设置为0.8000。马克斯必须设置为1.7000。单元必须设置为g / s

  5. 确保信号的配置设置fuel_mode符合ICD规格。因为fuel_mode是状态流图的输出信号,则必须使用Model Explorer配置设计设置。在模型中,导航到状态流图。模型浏览器打开。在模型浏览器中内容窗格(中间窗格),选择fuel_mode数据类型必须设置为枚举:sld_燃料模式

设置参数的设计设置

  1. 在ICD中,单击参数选项卡。

  2. 导航到控件模型的根级别。

  3. 在模型数据编辑器中,单击参数选项卡。

  4. 使用过滤内容框来搜索参数压力.模型数据编辑器显示了两行:一行对应于参数对象压力以及一行,该行对应于使用压力

  5. 确保参数的配置设置压力符合ICD规格。数据类型必须是u8En7。价值必须是一个19x45的数值矩阵。

  6. 确保数据类型价值设置参数PumpCon速度抽搐拉普拉特基兹符合ICD规格。

配置数字类型的设计设置

  1. 在ICD中,单击数值类型选项卡。

  2. 如果模型资源管理器未打开,请打开它。

  3. 模型层次结构窗格中,导航到控制器模型的数据字典中的设计数据(rtwdemo_fuelsys_dd_controller>外部数据>rtwdemo_fuelsys_dd_controller>设计数据).

  4. 内容(中)窗格中,选择金宝appSimulink.NumericType对象u8En7.该对象表示类型定义声明ex_inter_types.h

  5. 在右边的窗格中设计选项卡,确认设置为数据类型模式与ICD规格一致。

  6. 确保数字类型的设计配置s16En3s16En7s16En15符合ICD规格。

配置结构的设计设置

  1. 在ICD中,单击结构类型选项卡。

  2. 在模型浏览器中内容窗格中,选择EngSensors.这金宝app仿真软件。公共汽车对象表示中定义的结构类型ex_inter_types.h

  3. 确认数据类型配置与ICD规范一致。在右边的窗格中设计选项卡,或在总线编辑器中,调整总线信号配置(例如分钟马克斯)以符合ICD规格。

配置枚举类型的设计设置

  1. 在ICD中,单击枚举类型选项卡。

  2. 打开文件sld_FuelModes.m,它定义枚举类型的类sld_FuelModes

  3. 确认类定义与ICD规范一致。在sld_FuelModes文件中。m,调整成员名称和基础整数值以与ICD规范一致。

根据ICD配置代码生成模型

  1. 打开ICD电子表格(如果尚未打开)。

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

配置输入和输出块的代码生成设置

  1. 在ICD中,单击信号标签。ICD中的所有者列表示不同的组件(other_componnent),不是rtwdemo_fuelsys_dd_controller的代码定义传感器变量

  2. 包括定义变量的C源代码文件传感器. 在Simuli金宝appnk编辑器的“C代码”选项卡上,选择设置>C/ c++代码生成设置。请确保代码生成自定义代码参数源文件设置为ex_inter_sigs.c

  3. 在Simuli金宝appnk编辑器中,在C代码选项卡上,选择代码接口>单个元素代码映射

  4. 在代码映射编辑器中,单击入口选项卡。

  5. 选择用于传感器。因为源代码定义是在外部文件中提供的ex_inter_sigs.c,您在步骤2中配置的,存储类必须设置为导入文件

  6. 点击图标。检查头饰属性设置与ICD规范匹配,ex_inter_sigs.h.的值,请确保已指定标识符财产。此属性指定生成代码中的数据元素的变量名。

  7. 在代码映射编辑器中,单击前哨选项卡。

  8. 选择用于fuel_rate.因为ICD指定rtwdemo_fuelsys_dd_controller作为fuel_rate存储类必须设置为出口文件

  9. 点击图标。确保属性的设置头文件,定义文件物主符合ICD规范global_data.h信号rtwdemo_fuelsys_dd_controller,分别进行。请确保为标识符财产。

配置信号的代码生成设置

  1. 在代码映射编辑器中,单击信号/州表4.1中列出的第三个信号信号选项卡为fuel_mode

  2. 添加fuel_mode信号到模型代码映射。在模型图中,选择信号fuel_mode。将光标放在信号线上方或下方出现的省略号上,以打开操作栏。单击将所选信号添加到代码映射按钮。在代码映射编辑器中信号Node展开并列出您添加的信号。存储类设置必须表明信号解析为信号对象,并且对象的存储类设置为出口文件.因为信号与信号对象相关联,所以必须使用Model Explorer来确认代码生成配置与ICD规范一致。

  3. 打开Model Explorer。在模型层次结构窗格中,导航到控制器模型的数据字典中的设计数据(rtwdemo_fuelsys_dd_controller>外部数据>rtwdemo_fuelsys_dd_controller>设计数据).在内容窗格中,选择fuel_mode

  4. 在右侧窗格中,单击代码生成选项卡。存储类必须设置为出口文件.确认属性头饰DefintionFile物主符合ICD规范global_data.h信号rtwdemo_fuelsys_dd_controller,分别。

配置参数的代码生成

  1. 在ICD中,单击参数选项卡。

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

  3. 使用过滤内容框来搜索参数压力.代码映射编辑器显示与参数对象对应的行压力.因为ICD指定rtwdemo_fuelsys_dd_controller作为压力存储类应设置为出口文件

  4. 点击偶像检查属性的设置是否正确头文件,定义文件物主符合ICD规范global_data.h,参数s、 crtwdemo_fuelsys_dd_controller分别地此外,请确保为指定了一个值标识符财产。

  5. 检查存储类头饰定义文件标识符物主设置参数PumpCon速度抽搐拉普拉特基兹

配置数字类型的代码生成

  1. 在ICD中,单击数值类型选项卡。

  2. 如果模型资源管理器未打开,请打开它。

  3. 模型层次结构窗格中,导航到控制器模型的数据字典中的设计数据(rtwdemo_fuelsys_dd_controller>外部数据>rtwdemo_fuelsys_dd_controller>设计数据).

  4. 内容窗格中,选择金宝appSimulink.NumericType对象u8En7.该对象表示类型定义声明ex_inter_types.h

  5. 在右侧窗格中,单击代码生成选项卡。确认设置数据范围头文件与ICD规格一致,进口ex_inter_types.h,分别。

  6. 检查并调整数字类型的代码生成配置s16En3s16En7s16En15

配置结构的代码生成

  1. 在ICD中,单击结构类型选项卡。

  2. 在模型浏览器中内容窗格中,选择EngSensors.这金宝app仿真软件。公共汽车对象表示中定义的结构类型ex_inter_types.h

  3. 在右侧窗格中,单击代码生成选项卡。确认设置数据范围头文件与ICD规格一致,进口ex_inter_types.h,分别。

生成并检查代码

1.为控制器模型生成代码。

slbuild(“rtwdemo\u fuelsys\u dd\u控制器”
###第二,第三,第三,第三,第四,第二,第三,第三,第三,第三,第四,第四,第四,第四,第,第四,第,第,第,第,第,第,第四,第,第四,第四,第四,第四,第四,第四,第四,第四,第二,第四,第二,第,第四,第四,控制器,控制器,建立,建立,建立,总结,总结,重点,模型,重点,模型,重点,模型,重点,模型,模型,模型,重点,模型,模型,目标,模型,模型,模型,目标,模型,模型,模型,模型,模型,模型,模型,模型,模型,模型,模型,行动,模型,模型,模型,行动,模型,模型,模型,行动,模型,模型,模型,模型,行动,模型,行动,模型,模型,模型,行动,行动,重建,模型,模型,模型,模型,模型,模型,模型,模型,行动,模型,控制er代码生成和编译的代码生成信息文件不存在。已生成1个模型中的1个(0个模型已更新)生成持续时间:0h 3m 1.371s

2.检查生成的代码。生成的头文件是rtwdemo_fuelsys_dd_controller_types.h:

  • 包括(# include)外部头文件ex_inter_types.h,它定义数值数据类型u8En7,s16En3s16En7以及结构类型EngSensors

  • 定义枚举sld_FuelModes

文件= fullfile (“rtwdemo\u fuelsys\u dd\u控制器\u ert\u rtw”...“rtwdemo\u fuelsys\u dd\u controller\u types.h”);rtwdemodbtype(文件,“# include“ex_inter_types.h””“}sld_FuelModes;”, 1, 1)
#包括“ex_inter_types.h”/*模型代码变体*/#为sld_FuelModes定义的ifndef_TYPEDEF_#为sld_FuelModes定义的_TYPEDEF_(类型定义)枚举{LOW=1,/*默认值*/RICH,DISABLED}sld_FuelModes;

档案rtwdemo_fuelsys_dd_controller_private.h包含头文件ex_inter_sigs.h. 此外部头文件包含走读生信号声明传感器,由不同的软件组件拥有。

数据头文件global_data.h声明ICD指定的导出参数和信号。要共享此数据,其他组件可以包含此头文件。

文件= fullfile (“rtwdemo\u fuelsys\u dd\u控制器\u ert\u rtw”“global_data.h”);rtwdemodbtype(文件,“/*导出的数据声明*/”...“燃油率”, 1, 1)
/*导出数据声明*/ /*自定义存储类声明:ExportToFile */ extern real32_T PressEst[855];/* reference by: '/Pressure Estimation' */ extern real32_T PumpCon[551];/*引用by: '/Pumping Constant' */ extern real32_T RampRateKiz[25];/*引用by: '/Ramp Rate Ki' */ extern real32_T SpeedEst[1305];/* reference by: '/Speed Estimation' */ extern real32_T ThrotEst[551];/* reference by: '/Throttle Estimation' */ extern sld_FuelModes fuel_mode;/* '/control_logic' */ extern real32_T fuel_rate;/ * < Root > / fuel_rate * /

算法代码在模型中一步函数在文件RTWdemo_fuelsys_dd_controller.c.算法使用ICD识别的全局数据。例如,算法使用信号的值fuel_mode在一个转换块来控制执行流。

文件= fullfile (“rtwdemo\u fuelsys\u dd\u控制器\u ert\u rtw”...“rtwdemo_fuelsys_dd_controller.c”);rtwdemodbtype(文件,'/*多端口开关的结尾:“”/多端口开关'*/'...'/*输出端口:'/fuel\u rate''包含:',0,0)
/* SwitchCase: '/Switch Case' */ Switch (fuel_mode) {Case LOW: /* Outputs for iffaction SubSystem: '/low_mode' inclusions: * ActionPort: '/Action Port' */ /* DiscreteFilter: '/Discrete Filter' inclusions: * DiscreteIntegrator: '/Discrete Integrator' */ denAccum = rtDWork。* rtdwork . distefilter_stat_g;
bdclose (“rtwdemo\u fuelsys\u dd\u控制器”)S金宝appimulink.data.dictionary.closeAll(“rtwdemo_fuelsys_dd_controller.sldd”“-丢弃”

将ICD规范导入Simulink金宝app

您可以使用MATLAB脚本将数据设置从ICD导入到Simulink基础工作空间中的变量中。金宝app

1.打开并检查示例脚本ex_importICD_PCG.m

编辑ex_importICD_PCG

这个脚本

  • 将ICD的每个工作表中的数据导入基本工作区中的变量。

  • 使用导入的数据配置的设计和代码生成属性金宝app模拟信号金宝app仿真软件。参数基本工作空间中的对象。

如果基本工作区已包含与ICD中的数据元素相对应的数据对象,则脚本将配置现有对象的属性。如果该对象不存在,则脚本将创建该对象。

2.加载模型并运行脚本。

load_system (“rtwdemo\u fuelsys\u dd\u控制器”)跑(“ex_importICD_PCG”

3.重新生成并检查代码。

slbuild(“rtwdemo\u fuelsys\u dd\u控制器”
###正在启动:rtwdemo\u fuelsys\u dd\u控制器的生成过程成功完成:rtwdemo\u fuelsys\u dd\u控制器生成摘要生成的顶级模型目标:模型操作生成原因======================================================================================================================================================================================================================编译生成的代码已过期。已生成1个模型中的1个(0个模型已更新)生成持续时间:0h 1m 36.732s

注意事项

  • 对ICD进行更改时,可以重用导入脚本来重新配置模型。

  • 如果使用脚本将数据从ICD导入到基本工作区,请考虑将数据对象和变量迁移到数据字典。数据字典永久存储并跟踪对数据对象和变量的更改。例如,可以导入枚举类型的定义。sld_FuelModes进入控制器模型字典。请参阅导入和导出字典数据数据字典中的枚举

  • 可以存储信号和状态数据元素的配置设置,例如数据类型、最小值和最大值以及模型文件内部或外部的物理单位。金宝app模拟信号对象将配置设置存储在模型文件的外部。或者,您可以通过使用块和端口参数在模型文件中存储配置设置,您可以通过模型数据编辑器、属性检查器和其他对话框访问这些参数。看到存储信号和状态的设计属性

相关话题