此示例显示如何根据接口控制文档(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.
。探索数据字典。
在控制器型号的左下角,单击模型数据徽章。
点击外部数据关联。
在模特资源管理器中模型层次结构窗格,展开节点RTWDEMO_FUELSYS_DD_CONTROLLER.那外部数据, 和RTWDEMO_FUELSYS_DD_CONTROLLER.。
选择设计数据。
字典商店:
参数对象
金宝appsimulink.numerictype.
对象,如U8EN7.
金宝appsimulink.bus.
目的,EngSensors.
打开ICD电子表格,如果未打开。
在“控制器”模金宝app型的“Simulink编辑器”窗口中,导航到模型的根级别。
在这一点造型选项卡,单击模型数据编辑器。
在“模型数据编辑器”中,单击“改变范围按钮。模型数据编辑器显示有关模型子系统中的数据项的信息。
点击显示/刷新其他信息按钮。模型数据编辑器显示有关数据对象的信息(金宝appSimulink.Parameter.
数据字典中的对象)模型使用。
在ICD中,点击信号标签。
在“模型数据编辑器”中,单击“Inports / Outports.标签。
确保Inport块的配置设置传感器
符合ICD规范。数据类型必须设置为总线:engsensors.
。
确保出口块的配置设置Fuel_rate.
匹配ICD规范。数据类型必须设置为S16EN7。
闵必须设置为0.8000。
最大限度必须设置为1.7000。
单元必须设置为G / S.
。
确保信号的配置设置fuel_mode
匹配ICD规范。因为fuel_mode
是StateFlow图表的输出信号,必须使用Model Explorer配置设计设置。在模型中,导航到StateFlow图表。开放式资源管理器。在模特资源管理器中内容窗格(中间窗格),选择fuel_mode
。数据类型必须设置为枚举:sld_fuelmodes.
。
在ICD中,点击参数标签。
导航到控制模型的根级别。
在“模型数据编辑器”中,单击“参数标签。
使用过滤器件框以搜索参数最高
。模型数据编辑器显示两行:一行对应于参数对象最高
一行对应于使用的块参数最高
。
确保参数的配置设置最高
匹配ICD规范。数据类型必须是U8EN7。
价值必须是19x45的数值矩阵。
确保数据类型和价值参数设置泵送
那最快
那throtest.
, 和Rampratekiz.
匹配ICD规范。
在ICD中,点击数字类型标签。
如果模型资源管理器未打开,请打开它。
在里面模型层次结构窗格,导航到控制器模型的数据字典中的设计数据(RTWDEMO_FUELSYS_DD_CONTROLLER.>外部数据>RTWDEMO_FUELSYS_DD_CONTROLLER.>设计数据)。
在里面内容(中间)窗格,选择金宝appsimulink.numerictype.
目的U8EN7.
。该对象代表其中一个typedef.
陈述ex_inter_types.h.
。
在正确的窗格中,在设计选项卡,确认设置为数据类型模式与ICD规范对齐。
确保数字类型的设计配置S16EN3.
那S16EN7.
, 和S16EN15
符合ICD规范。
在ICD中,点击结构类型标签。
在模特资源管理器中内容窗格,选择EngSensors.
。这个金宝appsimulink.bus.
对象表示定义的结构类型ex_inter_types.h.
。
确认数据类型配置与ICD规范对齐。在正确的窗格中,在设计选项卡或在总线编辑器中,调整总线信号配置(例如,设置闵和最大限度)与ICD规范对齐。
在ICD中,点击枚举类型标签。
打开文件sld_fuelmodes.m.
,它定义了迷人类型的类sld_fuelmodes.
。
确认类定义与ICD规范对齐。在文件sld_fuelmodes.m中,调整成员名称和底层整数值以与ICD规范对齐。
打开ICD电子表格,如果未打开。
打开嵌入式编码器应用程序。
在ICD中,点击信号标签。ICD中的所有者列意味着不同的组件(Other_componnent.
), 不是RTWDEMO_FUELSYS_DD_CONTROLLER.
,提供代码定义传感器
多变的。
包括定义变量的C源代码文件传感器
。在Simuli金宝appnk编辑器中,在C代码选项卡上,选择设置>C / C ++代码生成设置。确保代码生成自定义代码参数源文件被设定为ex_inter_sigs.c.
。
在Simuli金宝appnk编辑器中,在C代码选项卡,选择代码界面>个人元素代码映射。
在代码映射编辑器中,单击inports.标签。
选择行传感器
。因为源代码定义是在外部文件中提供的ex_inter_sigs.c.
,您在步骤2中配置了哪些,存储类必须设置为ImportFromFile.
。
在物业检查员,展开代码。检查这一点标题文件属性设置匹配ICD规范,ex_inter_sigs.h.
。确保为该值指定了值标识符财产。此属性指定生成代码中数据元素的变量名称。
在代码映射编辑器中,单击出口标签。
选择行Fuel_rate.
。因为ICD指定了RTWDEMO_FUELSYS_DD_CONTROLLER.
作为所有者Fuel_rate.
那存储类必须设置为exportTofile.
。
在物业检查员,展开代码。确保属性的设置标题文件,定义文件, 和所有者匹配ICD规范global_data.h.
那信号
, 和RTWDEMO_FUELSYS_DD_CONTROLLER.
, 分别。确保为该值指定了值标识符财产。
在代码映射编辑器中,单击信号/状态标签。列出的第三信号信号ICD的标签是fuel_mode
。
添加fuel_mode
信号到模型代码映射。在模型图中,选择信号fuel_mode
。将光标放在信号线上方或下方的省略号上以打开动作栏。点击将所选信号添加到代码映射按钮。在代码映射编辑器中,信号节点展开并列出您添加的信号。存储类设置必须指示信号解析为信号对象,并将对象的存储类设置为exportTofile.
。由于信号与信号对象相关联,因此必须使用模型资源管理器确认代码生成配置与ICD规范对齐。
打开模型资源管理器。在“模型层次结构”窗格中,导航到控制器模型的数据字典中的设计数据(RTWDEMO_FUELSYS_DD_CONTROLLER.>外部数据>RTWDEMO_FUELSYS_DD_CONTROLLER.>设计数据)。在里面内容窗格,选择fuel_mode
。
在右侧窗格中,单击代码生成标签。存储类必须设置为exportTofile.
。确认属性标题文件那defintionfile., 和所有者匹配ICD规范global_data.h.
那信号
, 和RTWDEMO_FUELSYS_DD_CONTROLLER.
, 分别。
在ICD中,点击参数标签。
在代码映射编辑器中,单击参数标签。
使用过滤器件框以搜索参数最高
。代码映射编辑器显示与参数对象对应的行最高
。因为ICD指定了RTWDEMO_FUELSYS_DD_CONTROLLER.
作为所有者最高
那存储类应该设置为exportTofile.
。
在物业检查员,展开代码。检查属性的设置标题文件,定义文件, 和所有者匹配ICD规范global_data.h.
,参数S.C.
, 和RTWDEMO_FUELSYS_DD_CONTROLLER.
, 分别。此外,请确保为该值指定了值标识符财产。
检查存储类那标题文件那定义文件那标识符, 和所有者参数设置泵送
那最快
那throtest.
, 和Rampratekiz.
。
在ICD中,点击数字类型标签。
如果模型资源管理器未打开,请打开它。
在里面模型层次结构窗格,导航到控制器模型的数据字典中的设计数据(RTWDEMO_FUELSYS_DD_CONTROLLER.>外部数据>RTWDEMO_FUELSYS_DD_CONTROLLER.>设计数据)。
在里面内容窗格,选择金宝appsimulink.numerictype.
目的U8EN7.
。该对象代表其中一个typedef.
陈述ex_inter_types.h.
。
在右侧窗格中,单击代码生成标签。确认设置的设置数据范围和标题文件与ICD规范对齐,进口
和ex_inter_types.h.
, 分别。
检查并调整数字类型的代码生成配置S16EN3.
那S16EN7.
, 和S16EN15
。
在ICD中,点击结构类型标签。
在模特资源管理器中内容窗格,选择EngSensors.
。这个金宝appsimulink.bus.
对象表示定义的结构类型ex_inter_types.h.
。
在右侧窗格中,单击代码生成标签。确认设置的设置数据范围和标题文件与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'那'-丢弃')
您可以使用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.
对象将配置设置存储在模型文件之外。或者,您可以使用块和端口参数在模型数据编辑器,属性检查器和其他对话框中访问模型文件中的配置设置。看存储信号和状态的设计属性。