此示例显示如何根据接口控制文档(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
导航到控制器模型的根级别并选择视图>模型数据编辑器.
在模型数据编辑器中,激活变更范围按钮。模型数据编辑器现在显示关于子系统中的数据项的信息。
点击显示/刷新其他信息按钮。模型数据编辑器现在显示关于数据对象的信息万博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);