主要内容

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

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

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

探索界面控制文档

在Microsoft®Excel®或其他兼容程序中,打开ex_icd_pcg.xlsx.工作簿并查看工作表的内容。

打开ex_icd_pcg.xlsx.
  • 信号工作表。每行代表一个交叉接口边界的信号。检查工作表中的单元格值。这所有者列标识分配信号的内存的组件的名称。这数据类型列在内存中命名信号数据类型。例如,工作表使用表达式公交车:Engsensors.命名结构类型EngSensors.

  • 参数工作表。价值列列出每个参数的值。如果参数的值是非卡尔卡,则该值存储在其自己的单独工作表中,其与参数具有相同的名称。

  • 数字类型工作表。每行代表一个命名的数字数据类型。在此ICD中,数据使用固定点数据类型(定点设计器)。这Isalias.列表示C代码是否使用数据类型的名称(例如,S16EN3.)或使用与单词长度对应的原始整数数据类型的名称(例如短的)。这datascope.列指示生成的代码是否导出或导入数据类型定义。

  • 结构类型工作表。每行代表结构类型或结构类型的字段。对于结构类型,值在数据类型列是塑造。不使用的后续行塑造表示前面结构类型的字段。此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.。打开你的副本模式

Open_System('RTWDEMO_FUELSYS_DD_CONTROLLER'

控制器模型中的一些信号具有例如输入信号传感器。模型中的一些块参数是指的金宝appSimulink.Parameter.数据字典中的对象。例如,在airflow_calc.子系统,这泵送常数块使用参数对象泵送SpeedVect., 和按下。这些参数对象设置相应块参数的值。您可以将代码生成设置应用于信号和参数对象。

控制器模型链接到数据字典RTWdemo_fuelsys_dd_controller.sldd.。探索数据字典。

  1. 在控制器型号的左下角,单击模型数据徽章。

  2. 点击外部数据关联。

  3. 在模特资源管理器中模型层次结构窗格,展开节点RTWDEMO_FUELSYS_DD_CONTROLLER.外部数据, 和RTWDEMO_FUELSYS_DD_CONTROLLER.

  4. 选择设计数据

字典商店:

  • 参数对象

  • 金宝appsimulink.numerictype.对象,如U8EN7.

  • 金宝appsimulink.bus.目的,EngSensors.

根据ICD配置模型设计数据

  1. 打开ICD电子表格,如果未打开。

  2. 在“控制器”模金宝app型的“Simulink编辑器”窗口中,导航到模型的根级别。

  3. 在这一点造型选项卡,单击模型数据编辑器

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

  5. 点击显示/刷新其他信息按钮。模型数据编辑器显示有关数据对象的信息(金宝appSimulink.Parameter.数据字典中的对象)模型使用。

配置信号的设计设置

  1. 在ICD中,点击信号标签。

  2. 在“模型数据编辑器”中,单击“Inports / Outports.标签。

  3. 确保Inport块的配置设置传感器符合ICD规范。数据类型必须设置为总线:engsensors.

  4. 确保出口块的配置设置Fuel_rate.匹配ICD规范。数据类型必须设置为S16EN7。必须设置为0.8000。最大限度必须设置为1.7000。单元必须设置为G / S.

  5. 确保信号的配置设置fuel_mode匹配ICD规范。因为fuel_mode是StateFlow图表的输出信号,必须使用Model Explorer配置设计设置。在模型中,导航到StateFlow图表。开放式资源管理器。在模特资源管理器中内容窗格(中间窗格),选择fuel_mode数据类型必须设置为枚举:sld_fuelmodes.

配置参数的设计设置

  1. 在ICD中,点击参数标签。

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

  3. 在“模型数据编辑器”中,单击“参数标签。

  4. 使用过滤器件框以搜索参数最高。模型数据编辑器显示两行:一行对应于参数对象最高一行对应于使用的块参数最高

  5. 确保参数的配置设置最高匹配ICD规范。数据类型必须是U8EN7。价值必须是19x45的数值矩阵。

  6. 确保数据类型价值参数设置泵送最快throtest., 和Rampratekiz.匹配ICD规范。

配置数字类型的设计设置

  1. 在ICD中,点击数字类型标签。

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

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

  4. 在里面内容(中间)窗格,选择金宝appsimulink.numerictype.目的U8EN7.。该对象代表其中一个typedef.陈述ex_inter_types.h.

  5. 在正确的窗格中,在设计选项卡,确认设置为数据类型模式与ICD规范对齐。

  6. 确保数字类型的设计配置S16EN3.S16EN7., 和S16EN15符合ICD规范。

配置结构的设计设置

  1. 在ICD中,点击结构类型标签。

  2. 在模特资源管理器中内容窗格,选择EngSensors.。这个金宝appsimulink.bus.对象表示定义的结构类型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. 打开嵌入式编码器应用程序。

配置Inport和Outport块的代码生成设置

  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. 在代码映射编辑器中,单击inports.标签。

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

  6. 在物业检查员,展开代码。检查这一点标题文件属性设置匹配ICD规范,ex_inter_sigs.h.。确保为该值指定了值标识符财产。此属性指定生成代码中数据元素的变量名称。

  7. 在代码映射编辑器中,单击出口标签。

  8. 选择行Fuel_rate.。因为ICD指定了RTWDEMO_FUELSYS_DD_CONTROLLER.作为所有者Fuel_rate.存储类必须设置为exportTofile.

  9. 在物业检查员,展开代码。确保属性的设置标题文件,定义文件, 和所有者匹配ICD规范global_data.h.信号, 和RTWDEMO_FUELSYS_DD_CONTROLLER., 分别。确保为该值指定了值标识符财产。

配置信号的代码生成设置

  1. 在代码映射编辑器中,单击信号/状态标签。列出的第三信号信号ICD的标签是fuel_mode

  2. 添加fuel_mode信号到模型代码映射。在模型图中,选择信号fuel_mode。将光标放在信号线上方或下方的省略号上以打开动作栏。点击将所选信号添加到代码映射按钮。在代码映射编辑器中,信号节点展开并列出您添加的信号。存储类设置必须指示信号解析为信号对象,并将对象的存储类设置为exportTofile.。由于信号与信号对象相关联,因此必须使用模型资源管理器确认代码生成配置与ICD规范对齐。

  3. 打开模型资源管理器。在“模型层次结构”窗格中,导航到控制器模型的数据字典中的设计数据(RTWDEMO_FUELSYS_DD_CONTROLLER.>外部数据>RTWDEMO_FUELSYS_DD_CONTROLLER.>设计数据)。在里面内容窗格,选择fuel_mode

  4. 在右侧窗格中,单击代码生成标签。存储类必须设置为exportTofile.。确认属性标题文件defintionfile., 和所有者匹配ICD规范global_data.h.信号, 和RTWDEMO_FUELSYS_DD_CONTROLLER., 分别。

配置参数的代码生成

  1. 在ICD中,点击参数标签。

  2. 在代码映射编辑器中,单击参数标签。

  3. 使用过滤器件框以搜索参数最高。代码映射编辑器显示与参数对象对应的行最高。因为ICD指定了RTWDEMO_FUELSYS_DD_CONTROLLER.作为所有者最高存储类应该设置为exportTofile.

  4. 在物业检查员,展开代码。检查属性的设置标题文件,定义文件, 和所有者匹配ICD规范global_data.h.,参数S.C., 和RTWDEMO_FUELSYS_DD_CONTROLLER., 分别。此外,请确保为该值指定了值标识符财产。

  5. 检查存储类标题文件定义文件标识符, 和所有者参数设置泵送最快throtest., 和Rampratekiz.

配置数字类型的代码生成

  1. 在ICD中,点击数字类型标签。

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

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

  4. 在里面内容窗格,选择金宝appsimulink.numerictype.目的U8EN7.。该对象代表其中一个typedef.陈述ex_inter_types.h.

  5. 在右侧窗格中,单击代码生成标签。确认设置的设置数据范围标题文件与ICD规范对齐,进口ex_inter_types.h., 分别。

  6. 检查并调整数字类型的代码生成配置S16EN3.S16EN7., 和S16EN15

配置结构的代码生成

  1. 在ICD中,点击结构类型标签。

  2. 在模特资源管理器中内容窗格,选择EngSensors.。这个金宝appsimulink.bus.对象表示定义的结构类型ex_inter_types.h.

  3. 在右侧窗格中,单击代码生成标签。确认设置的设置数据范围标题文件与ICD规范对齐,进口ex_inter_types.h., 分别。

生成和检查代码

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

SLBUILD('RTWDEMO_FUELSYS_DD_CONTROLLER'
###启动构建过程:RTWDEMO_FUELSYS_DD_CONTROLLER ###成功完成构建过程:RTWDEMO_FUELSYS_DD_CONTROLLER构建摘要顶部模型目标构建:模型动作重建原因============================================================================================= RTWDEMO_FUELSYS_DD_CONTROLLER代码生成和编译生成的代码已过期。1个(1个型号)建造(0型号已最新)构建持续时间:0H 1M 21.119S

2.检查生成的代码。生成的标题文件RTWdemo_fuelsys_dd_controller_types.h:

  • 包括(#包括)外部头文件ex_inter_types.h.,定义数字数据类型U8EN7,S16EN3., 和S16EN7.和结构类型EngSensors.

  • 定义枚举sld_fuelmodes.

file = fullfile('rtwdemo_fuelsys_dd_controller_ert_rtw'......'rtwdemo_fuelsys_dd_controller_types.h');RTWDEMODBTYPE(文件,'#include“ex_inter_types.h”'} sld_fuelmodes;',1,1)
#include“ex_inter_types.h”/ *模型代码变体* / #ifndef smote_ttypedef_for_sld_fuelmodes_ #define siment_typedef_for_sld_fuelmodes_ typedef enum {low = 1,/ *默认值* /富有,已禁用} sld_fuelmodes;

文件RTWDEMO_FUELSYS_DD_CONTROLLER_PRIVATE.H.包括标题文件ex_inter_sigs.h.。此外部头文件包含外部信号声明传感器,哪个不同的软件组件拥有。

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

file = fullfile('rtwdemo_fuelsys_dd_controller_ert_rtw''global_data.h');RTWDEMODBTYPE(文件,'/ *导出数据声明* /'......'fuel_rate',1,1)
/ *导出数据声明* / / *自定义存储类的声明:exportTofile * / external72_T最近[855];/ *引用:' /压力估计'* / extern Real32_t Pumpcon [551];/ *引用:' /泵送常数'* / extern Real32_t Rampratekiz [25];/ *引用:' / ramp率ki'* / external real32_t最快[1305];/ *引用:' / /速度估计'* / extern real32_t throtest [551];/ *引用:' ///trottle估计'* / extern sld_fuelmodes fuel_mode;/ *' / control_logic'* / extern real32_t fuel_rate;/ *' / cure_rate'* /

算法代码在模型中文件RTW中的函数demo_fuelsys_dd_controller.c.。该算法使用ICD识别的全局数据。例如,算法使用信号的值fuel_mode在一个转变阻止控制执行流程。

file = fullfile('rtwdemo_fuelsys_dd_controller_ert_rtw'......'rtwdemo_fuelsys_dd_controller.c');RTWDEMODBTYPE(文件,'/ * MultiportSwitch的结尾:'' / multiport开关''* /'......'/ *出口:'' / / fuel_rate''包含:',0,0)
/ * switchcase:' / switch case'* / switch(fuel_mode){cuise low:/ * ifaction子系统的输出:' low_mode'包含:* actionport:' / action port'*// * STOMETEFILTER:' /离散滤波器'包含:*离散仪器:' / /离散集成器'* / denaccum = RTDWORK.DISCRETEINTEGRATOR_DSTATE  -  -0.7408F * RTDWORK.DISCRETEFILTER_STATES_G;
bdclose('RTWDEMO_FUELSYS_DD_CONTROLLER')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的每个工作表中的数据导入基础工作区中的变量。

  • 使用导入的数据来配置设计和代码生成属性金宝appsimulink.signal.金宝appSimulink.Parameter.基础工作区中的对象。

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

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

load_system('RTWDEMO_FUELSYS_DD_CONTROLLER') 跑('ex_importicd_pcg'

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

SLBUILD('RTWDEMO_FUELSYS_DD_CONTROLLER'
###启动构建过程:RTWDEMO_FUELSYS_DD_CONTROLLER ###成功完成构建过程:RTWDEMO_FUELSYS_DD_CONTROLLER构建摘要顶部模型目标构建:模型动作重建原因============================================================================================= RTWDEMO_FUELSYS_DD_CONTROLLER代码生成和编译生成的代码已过期。1个型号中的1个(0型号已最新的型号)构建持续时间:0H 0M 39.824S

考虑

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

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

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

相关话题