一、自定义ASAP2文件的内容
ASAP2相关的TLC文件使您可以自定义从Simulink模型生成的ASAP2文件的格式。 大多数自定义是通过修改或添加matlabroot / toolbox / rtw / targets / asap2 / asap2 / user(open)文件夹中包含的文件来完成的。 此文中将此文件夹称为asap2 / user文件夹。
提供的用户自定义修改的文件分为两类:
静态文件定义ASAP2文件中与使用生成的代码环境相关的部分。它们描述了特定于用户或项目的信息。 静态文件不依赖于模型。
动态文件定义ASAP2文件的部分,这些部分是基于Simulink源模型的结构生成的。
自定义ASAP2文件的过程如下:
1、在进行修改之前,复制asap2 / user文件夹及子文件夹中所以文件。
2、从MATLAB®路径中删除旧的asap2 /user文件夹,或将新的asap2 / user文件夹添加到旧文件夹上方的MATLAB路径中。 MATLAB会话使用新文件夹中的ASAP2安文件asap2setup.tlc。
asap2setup.tlc指定在ASAP2文件生成过程中要包含在TLC路径中的文件夹和文件。 修改asap2setup.tlc以控制文件夹和包含在TLC路径中的文件夹。
3、修改ASAP2文件的静态部分。 这些包括:
- 项目和标题符号,在asap2setup.tlc中指定
- 文件的静态部分,例如文件头和尾部,A2ML,MOD_COMMON等,这些部分在asap2userlib.tlc中指定。
- 过修改现有ASAP2模板或定义新的ASAP2模板,指定ASAP2文件的动态内容的格式。 受影响的ASAP2文件的部分包括:
RECORD_LAYOUT:修改ASAP2模板文件的部分内容。
CHARACTERISTIC: 修改ASAP2模板文件的各个部分。
有关修改CHARACTERISTIC记录格式的更多信息,请参阅ASAP2模板。
MEASUREMENT: 这些在asap2userlib.tlc中指定。
COMPU_METHOD:这些在asap2userlib.tlc中指定。
二、ASAP2 模板
对于每种类型的CHARACTERISTIC,使用不同的模板来控制ASAP2文件中的CHARACTERISTIC记录的格式。 asap2 /user文件夹包含标定量,1-D查表块和2-D查表块的模板定义文件。 可以修改这些模板定义文件,也可以根据需要创建其他模板。
创建新ASAP2模板的过程如下:
创建模板定义文件。 请参见创建模板定义文件。
在TLC路径中包含模板定义文件。 该路径在ASAP2安装文件asap2setup.tlc中指定。
创建模板定义文件
本文介绍组成ASAP2模板定义文件的构成。 将采用asap2 lookup1d.tlc的代码作为示例,asap2 lookup1d.tlc是Lookup1D模板的模板定义文件。 此模板对应于Lookup1D参数组。
注:创建新模板时,请在显示的代码中使用相应的参数组名称代替Lookup1D。
模板注册函数
输入参数是与此模板关联的参数组的名称:
%<LibASAP2RegisterTemplate("Lookup1D")>
RECORD_LAYOUT名称定义函数
可以为每种数据类型任意指定记录布局名称(别名)。 此函数由此文件的其他函数部分使用。
%function ASAP2UserFcnRecordLayoutAlias_Lookup1D(dtId) void
%switch dtId
%case tSS_UINT8
%return
"Lookup1D_UBYTE"
...
%endswitch
%endfunction
写入RECORD_LAYOUT定义的函数
此函数写入与此模板关联的RECORD_LAYOUT定义。 该函数由ASAP2文件生成过程中涉及的内置函数调用。 必须如下所示定义函数名称,并在下划线后面加上模板名称:
%function ASAP2UserFcnWriteRecordLayout_Lookup1D() Output
/begin RECORD_LAYOUT
%<ASAP2UserFcnRecordLayoutAlias_Lookup1D(tSS_UINT8)>
...
/end RECORD_LAYOUT
%endfunction
写CHARACTERISTIC的功能
此函数写入与此模板关联的CHARACTERISTIC。 该函数由ASAP2文件生成过程中涉及的内置函数调用。 必须如图所示定义函数名称,并在下划线后面加上模板名称。
%function ASAP2UserFcnWriteCharacteristic_Lookup1D(paramGroup)
Output
%assign xParam =paramGroup.Member[0].Reference
%assign yParam =paramGroup.Member[1].Reference
%assign dtId =LibASAP2GetDataTypeId(xParam)
/begin CHARACTERISTIC
/* Name */ %<LibASAP2GetSymbol(xParam)>
/* Long identifier */ "%<LibASAP2GetLongID(xParam)>"
...
/end CHARACTERISTIC
%endfunction
此函数的输入参数是指向参数组记录的指针。显示的示例适用于具有两个成员的Lookup1D参数组。对相关x和y数据记录的引用是从参数组记录中获得的,如图所示。此函数调用许多内置函数以获取所需信息。 例如,LibASAP2GetSymbol返回指定数据记录的符号(名称)。
三、自定义计算方法名称
在生成的ASAP2文件中,计算方法将电子控制单元(ECU)内部的测量量和校定量转换为面向物理模型的表示。Simulink Coder™软件提供定制计算方法名称的功能。 您可以提供更直观的名称,增强ASAP2文件的可读性或符合组织要求的名称。
要自定义计算方法名称,请使用MATLAB函数getCompuMethodName,该函数在
matlabroot / toolbox / rtw / targets / asap2 /asap2 / user /getCompuMethodName.m中定义。
getCompuMethodName函数构造计算方法名称。 功能原型是
cmName = getCompuMethodName(dataTypeName, cmUnits)
其中,dataTypeName是与计算方法关联的数据类型的名称;
cmUnits是Simulink.Parameter或Simulink.Signal对象的Unit属性中指定的单位(例如,rpm或m / s);
cmName返回构造计算方法名称。
函数返回的默认构造名称具有格式
<localPrefix><datatype>_<cmUnits>
其中,<local_Prefix>
是本地前缀,CM_,在matlabroot / toolbox / rtw / targets / asap2 /asap2 / user / getCompuMethodName.m中定义。<datatype>
和<cmUnits>
是您为getCompuMethodName函数指定的参数。
此外,在生成的ASAP2文件中,构造的名称以<ASAP2CompuMethodName_Prefix>
作为前缀,该模板前缀在matlabroot/ toolbox / rtw / targets / asap2 / asap2 / user / asap2setup.tlc中定义。
例如,如果使用dataTypeName参数’int16’和cmUnits参数’m / s’调用getCompuMethodName函数,并为名为myModel的模型生成ASAP2文件,则计算方法名称将出现在生成的文件中,如下所示:
/begin COMPU_METHOD
/* Name of CompuMethod */myModel_CM_int16_m_s
/* Units */ "m/s"
...
/end COMPU_METHOD
抑制FIX_AXIS的计算方法
ASAP2规范1.51版本和更高版本声明,对于查找表轴描述的某些情况(整数数据类型且没有doc单元),不需要计算方法,并且必须将Conversion Method参数设置为NO_COMPU_METHOD。
可以使用目标语言编译器(TLC)选项ASAP2GenNoCompuMethod控制是否在不需要时抑制计算方法。 默认情况下禁用此TLC选项。
如果启用该选项,在不需要生成查找表描述的计算方法时,ASAP2文件将不生成计算方法,而是生成值NO_COMPU_METHOD。 例如:
/begin CHARACTERISTIC
/* Name */
lu1d_fix_axisTable_data
...
/begin AXIS_DESCR
...
/* Conversion Method */
NO_COMPU_METHOD
...
/end CHARACTERISTIC
ASAP2GenNoCompuMethod选项在
matlabroot / toolbox / rtw / targets / asap2 /asap2 / user / asap2setup.tlc中定义。