文档

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

导入规范(ICD)从一个接口控制文档,配置代码生成设置模型根据规范,并将设置存储在数据字典。

一个ICD描述两个软件组件之间的数据接口。交换和共享数据,组件声明和定义全局变量,存储信号和参数值。ICD的名称的变量和列表等特征数据类型、物理单位和参数值。当您创建的组件模型在仿真软件中,您可以配置生成的代码符合接口规范。金宝app

在这个例子中,ICD是Microsoft®Excel®工作簿。

探索接口控制文档

导航到文件夹matlabroot/ /例子是(开放)。将该文件复制到一个可写的,工作目录:

  • ex_ICD_PCG.xls

导航到文件夹matlabroot/ /是/主要例子(开放)。将这个文件复制到相同的可写,工作目录:

  • ex_importICD_PCG.m

在Microsoft®Excel®或另一个兼容的程序,打开ex_ICD_PCG.xls工作簿和查看第一个工作表,信号。工作表的每一行描述一个信号,跨越边界的接口。

检查工作表中的单元格值。的老板列显示组件的名称为每个信号分配内存。的数据类型列显示的信号数据类型在内存中。例如,工作表使用表达式总线:EngSensors来表示一个结构类型命名EngSensors

参数工作表,价值列显示每个参数的值。如果nonscalar参数的值,这个值是存储在它自己的单独的工作表,相同的名称作为参数。

数值类型工作表,每一行代表一个名叫数值数据类型。在这个ICD,数据使用定点数据类型(定点设计师)。的IsAlias列表明C代码使用数据类型的名称(例如,u8En7)或使用原始的整数数据类型的名称对应于这个词的长度。的DataScope列显示生成的代码是否出口或进口的定义类型。

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

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

编写外部代码

在ICD属于某些数据项其他组件,这是一个组件,MATLAB之外的存在。创建的代码文件,定义和声明这个外部数据。

创建源文件ex_inter_sigs.c在当前文件夹。这个文件定义导入的信号传感器

# include“ex_inter_sigs。h”EngSensors传感器;/ *仪器测量。* /

创建头文件ex_inter_sigs.h在当前文件夹。

# include“ex_inter_types.h”走读生EngSensors传感器; /* Instrument measurements. */

创建头文件ex_inter_types.h在当前文件夹。这个文件定义了结构类型EngSensors和数值数据类型等u8En7

的ifndef INTER_TYPES_H__ # define INTER_TYPES_H__ typedef短s16En3;typedef短s16En7;typedef unsigned char u8En7;typedef短s16En15;/ *结构类型仪器测量。* / typedef struct{/ *节气门角度。* / s16En3节流;/ *发动机转速。* / s16En3速度;/ *自我传感器。 */ s16En7 ego; /* Manifold pressure. */ u8En7 map; } EngSensors; #endif

探索模型示例

运行脚本prepare_sldemo_fuelsys_dd。脚本准备一个系统模型,sldemo_fuelsys_dd对于这个例子,。

运行(fullfile (matlabroot“例子”,“是”,“主要”,“prepare_sldemo_fuelsys_dd”))

打开系统模型,sldemo_fuelsys_dd

sldemo_fuelsys_dd

该系统模型引用一个控制器模型。在本例中,您从控制器模型生成代码。

打开控制器模型,sldemo_fuelsys_dd_controller

sldemo_fuelsys_dd_controller

数据项是指在控制器模型金宝appSimulink.Signal金宝appSimulink.Parameter基本工作空间中的对象。例如,输入信号传感器是指一个金宝appSimulink.Signal对象具有相同的名称。这些对象存储设置等数据类型,参数值,和物理单位。这些数据项的名称和对象匹配信号的名称和参数在ICD。

ICD规范导入仿真软件金宝app

配置代码生成设置数据项,导入ICD的设置。

打开示例脚本ex_importICD_PCG。脚本ICD的每个工作表数据导入工作空间变量的基地。然后配置的属性金宝appSimulink.Signal金宝appSimulink.Parameter基本工作空间中的对象通过使用导入的数据。

编辑(“ex_importICD_PCG”)

如果工作区底部已经包含一个数据对象对应于一个目标数据项在ICD,脚本配置现有对象的属性。如果对象不存在,该脚本创建对象。

运行ex_importICD_PCG脚本

运行(“ex_importICD_PCG”)

脚本配置基本工作空间中的数据对象代码生成根据ICD的规范。的金宝appSimulink.Bus对象EngSensors代表ICD的结构类型。的金宝appSimulink.NumericType对象,如u8En7,代表了定点数据类型。

生成和检查代码

配置控制器模型编译生成的代码到一个可执行清算模型配置参数只生成代码

从控制器模型生成代码。

# # #开始构建过程模型:sldemo_fuelsys_dd_controller # # #成功完成构建过程模型:sldemo_fuelsys_dd_controller # # #模型缓存构件“sldemo_fuelsys_dd_controller”创建的H: \ \ MATLAB文件\ \ ecoder-金宝appex18517932 \ sldemo_fuelsys_dd_controller.slxc的例子。

生成的头文件sldemo_FuelModes.h定义枚举sldemo_FuelModes

typedef enum{低= 1 / *默认值* /丰富,禁用}sldemo_FuelModes;

该文件sldemo_fuelsys_dd_controller_types.h包括(# include)外部的头文件ex_inter_types.h例如,它定义了数据类型u8En7和结构类型EngSensors

# include“ex_inter_types.h”

该文件sldemo_fuelsys_dd_controller_private.h包含头文件ex_inter_sigs.h。这个外部头文件包含走读生宣言的信号传感器,它拥有一个不同的软件组件。

头文件的数据global_data.h声明了ICD指定的出口参数和信号。分享这些数据,其他组件可以包含这个头文件。

/ *导出的数据声明* / / *声明自定义存储类:ExportToFile * /走读生u8En7总统[855];/ *查找表来估计压力传感器故障。* /走读生s16En15 PumpCon [551];/ *查找表来确定泵恒基于测量发动机转速和多方面的压力。* /走读生s16En15 RampRateKiZ [25];/ *查找表来确定调节率。* /走读生s16En3速度[1305];/ *查找表来估计发动机转速传感器故障。* /走读生s16En7 ThrotEst [551];/ *查找表来估计节气门角度传感器故障。 */ extern sldemo_FuelModes fuel_mode; /* Fueling mode of engine. Enrich air/fuel mixture on sensor failure. */ extern int16_T fuel_rate; /* Fuel rate setpoint. */

数据定义(内存分配)出现在ICD指定的源文件,params.csignals.c。例如,params.c定义并初始化参数RampRateKiZ

s16En15 RampRateKiZ [25] = {393, 786, 1180, 1573, 1966, 786, 1573, 2359, 3146, 3932, 1180, 2359, 3539, 4719, 5898, 1573, 3146, 4719, 6291, 7864, 1966, 3932, 5898, 7864, 9830};/ *查找表来确定调节率。* /

该算法在模型中一步文件中的函数sldemo_fuelsys_dd_controller.c。该算法使用ICD的全局数据标识。例如,该算法使用价值的信号fuel_mode在一个开关块来控制执行流。

/ * SwitchCase:“< S10 > /切换实例”包含:*不变:“< S11 > /关闭”* /开关(fuel_mode){例低:/ * IfAction子系统输出:“< S10 > / low_mode”包含:* ActionPort:“< S12 > /行动端口”* / / * DiscreteFilter:“< S12 > /离散滤波器”包含:* DiscreteIntegrator:“< S1 > /离散集成器”* / DiscreteFilter_tmp = (int16_T) (int32_T) ((int32_T) ((int32_T) (rtDWork (int32_T)。DiscreteIntegrator_DSTATE < < 14) - (int32_T) (-12137 * (int32_T) rtDWork.DiscreteFilter_states_g)) > > 14);

在ICD改变数据的所有权

当你更改ICD,您可以重用ex_importICD_PCG脚本配置模型。改变信号的所有权传感器、结构类型和定点数据类型other_componentsldemo_fuelsys_dd_controller

在ICD,信号工作表的信号传感器,设置这些细胞值:

  • 老板sldemo_fuelsys_dd_controller

  • HeaderFileglobal_data.h

  • DefinitionFilesignals.c

数值类型工作表、定点数据类型设置:

  • DataScope出口

  • HeaderFileexported_types.h

结构类型工作表,结构类型EngSensors设置:

  • DataScope出口

  • HeaderFileexported_types.h

重新运行ex_importICD_PCG脚本。

从模型中生成代码。

# # #开始构建过程模型:sldemo_fuelsys_dd_controller # # #成功完成构建过程模型:sldemo_fuelsys_dd_controller # # #模型缓存构件“sldemo_fuelsys_dd_controller”创建的H: \ \ MATLAB文件\ \ ecoder-金宝appex18517932 \ sldemo_fuelsys_dd_controller.slxc的例子。

生成的文件exported_types.h定义了结构类型EngSensors和定点数据类型。

typedef int16_T s16En3;typedef int16_T s16En7;typedef uint8_T u8En7;/ *结构类型仪器测量。* / typedef struct{/ *节气门角度。* / s16En3节流;/ *发动机转速。* / s16En3速度;/ *自我传感器。* / s16En7自我; /* Manifold pressure. */ u8En7 map; } EngSensors; typedef int16_T s16En15;

该文件signals.c现在包括信号的定义传感器

/ *导出的数据定义* / / *定义自定义存储类:ExportToFile * / sldemo_FuelModes fuel_mode;/ *加油模式引擎。丰富的空气/燃料混合物在传感器故障。* / int16_T fuel_rate;/ *燃料消耗率定位点。* / EngSensors传感器;/ *仪器测量。* /

基础空间数据迁移到数据字典

您创建的对象和变量的基本工作空间(例如,金宝appSimulink.Parameter与模型对象)还未得救。当你结束你的MATLAB会话,对象和变量不存在。永久存储对象和变量,一个或多个模型链接到一个或多个数据字典。

数据字典也使您能够跟踪更改的对象和变量,这能帮助你:

  • 协调MATLAB中存储的数据和数据存储在ICD。

  • 出口数据从MATLAB ICD。

  1. 在上面的模型中,sldemo_fuelsys_dd,在建模选项卡,在设计,点击链接到数据字典

  2. 在模型属性对话框中,单击

  3. 在创建一个新的数据字典对话框中,设置文件名称sysDict并点击保存

  4. 点击迁移数据

  5. 点击改变所有的模型为了应对信息为参考模型使用字典。

  6. 点击迁移为了应对信息复制引用变量。

的变量和对象模型使用中存在新数据字典sysDict.sldd,这是在当前文件夹。这三个模型的模型引用层次结构与这本字典。

枚举类型定义存储在数据字典中

你可以进口枚举类型的定义sldemo_FuelModes控制器的字典。看到枚举的数据字典(金宝app模型)。

存储信号和状态设计的内部或外部属性模型文件

在本例中,您使用金宝appSimulink.Signal对象指定设计属性,如数据类型,最大和最小值,和物理单位。信号对象存储这些规范之外的模型文件。

或者,您可以将这些规范存储在模型文件使用的块和端口参数,您可以通过访问模型数据编辑,属性检查器和其他对话框。

决定在哪里存储规范,明白了商店设计信号的属性和状态(金宝app模型)。

相关的话题