文档

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

此示例显示如何根据接口控制文档(ICD)中的规范配置模型的代码生成设置万博1manbetx万博1manbetx仿真软件。参数对象,在数据字典中。

ICD是两个软件组件之间的数据接口。为了交换和共享数据,组件声明和定义了全局变量来存储信号和参数值。ICD为变量命名,并列出数据类型、物理单位和参数值等特征。当您在Simulink中创建组件模型时,您可以配置生成的代码以符合接口规范。万博1manbetx

在本例中,ICD是Microsoft®Excel®工作簿。

探索接口控制文档

导航到该文件夹草根/示例/电子编码器打开)。将此文件复制到可写的工作文件夹:

  • ex_ICD_PCG_inter.xls

在Microsoft®Excel®或其他兼容程序中,打开ex_ICD_PCG_inter.xls并查看第一个工作表,信号.工作表的每一行描述了一个跨越接口边界的信号。

检查工作表中的单元格值物主列表示为每个信号分配内存的组件的名称。的数据类型列表示内存中的信号数据类型。例如,工作表使用表达式总线:传感器指示名为的结构类型的步骤工程师传感器

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

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

结构类型工作表中,每一行表示结构类型或结构类型的字段。对于结构类型,数据类型列是结构体。不使用的后续行结构体表示上述结构类型的字段。这个ICD定义了一个结构类型,工程师传感器,共有四个字段:掐死速度自我地图

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

编写外部代码

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

创建头文件ex_inter_types.h在当前文件夹中。此文件定义结构类型工程师传感器和数字数据类型,例如u8En7

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

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

#包括“ex_inter_sigs.h”传感器;/*仪器测量*/

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

#包括“ex_inter_types.h”外部传感器;/*仪器测量*/

探索示例模型

运行脚本准备演示燃料系统.对于本例,脚本准备了一个系统模型,sldemo_fuelsys_dd

运行(完整文件)(matlabroot,“例子”“ecoder”“主要的”“准备演示燃料系统”))

打开系统模型sldemo_fuelsys_dd

sldemo_fuelsys_dd

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

打开控制器模型sldemo_fuelsys_dd_控制器

sldemo_fuelsys_dd_控制器

控制器模型中的某些信号具有名称,例如,输入信号传感器.模型中的某些块参数参考万博1manbetx仿真软件。参数数据字典中的对象。例如空气流量计算子系统泵恒块使用参数对象PumpCon快车印刷品。这些参数对象设置相应块参数的值。您可以对信号和参数对象应用代码生成设置。

控制器模型连接到数据字典,sldemo_fuelsys_dd_controller.sldd. 在模型的左下角,单击字典标记以在模型资源管理器中打开字典。然后,在模型管理器中模型层次结构窗格中,选择设计数据节点。

词典已存储:

  • 参数对象

  • 万博1manbetxSimulink.NumericType对象(如u8En7

  • 一个万博1manbetx仿真软件。公共汽车对象工程师传感器

  • 枚举数据类型的定义,sldemo_FuelModes

请根据ICD配置型号

导航到控制器模型的根级别并选择视图>模型数据编辑器

在模型数据编辑器中,激活变更范围按钮。模型数据编辑器现在显示关于子系统中的数据项的信息。

点击显示/刷新其他信息按钮。模型数据编辑器现在显示关于数据对象的信息万博1manbetx仿真软件。参数模型使用的数据字典中的对象。

选择入口/出口选项卡(默认情况下处于选中状态)。

在模型中,选择标记为的输入块传感器. “模型数据编辑器”将亮显相应的行。

在ICD中,选择信号标签。

使用模型数据编辑器根据ICD中的信息配置信号:

  • 中设置值数据类型列到总线:传感器.在本例中,该值已经设置。

  • 设定改变看法下拉列表到密码以及传感器,设置存储类导入文件。使用此存储类,因为物主ICD中的列表示不同的组件,而不是sldemo_fuelsys_dd_控制器的c代码定义传感器变量。使用此存储类,生成的代码不定义变量。

  • 头文件ex_inter_sigs.h.当您使用表示导入数据的存储类时,例如导入文件,您不能指定定义文件而是包含定义文件(在本例中,ex_inter_sigs.c)在代码生成和构建过程中,使用配置参数>代码生成>自定义代码>附加构建信息>源文件

在模型中,选择标记为的输出端口块fuel_rate

使用模型数据编辑器进行配置fuel_rate根据ICD。要访问设计属性,如最小值(分钟)和实体单位(单元),集改变看法设计. 对于代码生成设置,因为ICD指定sldemo_fuelsys_dd_控制器作为其他信号的所有者,设置存储类出口文件

检查信号标签。

改变看法密码并为信号配置代码生成设置燃料模式

您不能使用模型数据编辑器来配置的设计属性燃料模式(如数据类型)因为燃料模式是状态流程图的输出。在模型中,导航到该图表。

选择视图>模型管理器>模型管理器

在模型管理器中目录窗格(中间窗格),选择燃料模式数据项。

在对话框窗格(右侧窗格)中,配置燃料模式根据ICD。在这种情况下,信号数据类型已设置,因此您只能指定说明。

导航到模型的根级别。

在ICD和模型数据编辑器中,选择参数选项卡。在模型数据编辑器中,设置改变看法设计

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

使用模型数据编辑器进行配置压力根据ICD。参数值价值列)已设置。因为ICD指定sldemo_fuelsys_dd_控制器作为压力,设置存储类出口文件

使用模型数据编辑器配置其他参数。或者,要同时对多个参数应用更改,请在数据表中选择多行。

在模型的左下角,单击字典标识以在model Explorer中打开数据字典。

模型层次结构窗格中,选择设计数据节点。

目录窗格(中间窗格),选择万博1manbetxSimulink.NumericType对象u8En7。此对象表示一个基元类型定义声明ex_inter_types.h

在ICD中,选择数值类型标签。

使用“模型资源管理器”对话框窗格(右侧窗格)根据ICD配置对象。

使用模型资源管理器配置其他万博1manbetxSimulink.NumericType对象。您可以使用目录窗格以执行批处理操作。

目录窗格中,单击万博1manbetx仿真软件。公共汽车对象工程师传感器。此对象表示ex_inter_types.h定义。

在对话框窗格(右侧窗格)中,单击启动总线编辑器

在ICD中,选择结构类型标签。

使用总线编辑器配置总线对象和总线中的信号元素(例如掐死)根据ICD。

在ICD中,选择枚举类型标签。

在模型管理器中目录窗格中,单击枚举类型定义sldemo_FuelModes

使用“对话框”窗格根据ICD配置类型。集存储类型本机整数数据范围出口

生成并检查代码

通过清除模型配置参数,配置控制器模型以将生成的代码编译为可执行文件只生成代码

从控制器模型生成代码。

###开始模型的构建过程:sldemo_fuelsys_dd_控制器###成功完成模型的构建过程:sldemo_fuelsys_dd_控制器

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

typedef枚举{LOW=1,/*默认值*/RICH,DISABLED}sldemo_FuelModes;

档案sldemo\u fuelsys\u dd\u控制器\u类型.h包括(# include)外部头文件ex_inter_types.h,它定义了数据类型,例如u8En7以及结构类型工程师传感器

#包括“ex_inter_types.h”

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

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

/*导出数据声明*/ /*自定义存储类声明:ExportToFile */ extern u8En7 PressEst[855];走读生s16En15 PumpCon [551];走读生s16En15 RampRateKiZ [25];走读生s16En3速度[1305];走读生s16En7 ThrotEst [551];走读生sldemo_FuelModes fuel_mode;走读生s16En7 fuel_rate;

数据定义(内存分配)出现在ICD指定的源文件中:params.c信号.例如,params.c定义并初始化参数拉普拉特基兹

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识别的全局数据。例如,该算法使用信号的值燃料模式在一个转换块来控制执行流。

/*开关箱:“/Switch Case'*/Switch(fuel_mode){Case LOW:/*iAction子系统的输出:“/LOW_mode”包含:*动作端口:“/Action Port'*/*离散滤波器:”/Discrete Filter'包含:“/Discrete Integrator'*/Discrete Filter tmp=(int16_T)(int32_T)((int32_T)((int32_T))rtDWork.discreteintegratordstate<<14)-(int32_T)(-12137*(int32_T)rtDWork.DiscreteFilter_g))>>14);

相关话题

这个话题有用吗?