tag是什么文件_Simulink模型的A2L文件生成

按:本文作者为泛亚技术中心的模型开发工程师,文章实例很长,公众号文章中没有完全刊出,需要的网友可以通过文末左下角的

一. 先导知识

CCP   https://mp.weixin.qq.com/s/D3-iHC63BcIL4YK7c0P7vA?

XCP   https://blog.csdn.net/nibiewuxuanze/article/details/78856714

A2L的作用:观测或更改CHARACTERISTIC(标定)、MEASUREMENT(观测量)、AXIS(查表)等标定或信号的信息。

1. CHARACTERISTIC生成方法:  92fa56f3068b811c597815326c920ed0.png  ,在Workspace中添加同名Simulink.Parameter(aa),选择ConstVolatile、Datatype、Value、头文件calib.h、定义文件calib.c。

2. MEASUREMENT生成方法:任一信号(名称长度<32)选择

80920b0fbc0ba4fc94fa8ae92d75f5aa.png

,在Workspace中添加同名Simulink.Signal,选择SimulinkGlobal、Datatype、Inital Value,名称过长会导致无法生成A2L(缩短至<=31位,Autosar4.0要求)。

3. AXIS生成方法:

619b141a6d12f9db737db8a378b98ad2.png

,在Workspace中添加同名Simulink.Parameter(aaa,bbb),选择ConstVolatile、Datatype、Value、头文件calib.h、定义文件calib.c。

A2L包含scalar(单值标定)、Lookup1D(curve)、Lookup2D(mapping)、Measurable可测量但不可调 applicable可调。

Simulink在生成A2L时使用如下文件:

文件夹:matlabroot\toolbox\rtw\targets\asap2\asap2

getCompuMethodName.m用于获取Compu_Method的名称,CM_DataType_DocUnits,其中Units将数字和字母以外的符号变成’_’;

asap2userlib.tlc定义了生成A2L的形式,可以对标定/信号之类的加A2L属性

向标定或者信号中加上MemoryAddress_ASAP2 属性即可生成A2L时加上地址; 

asap2post.m可以对A2L进行地址map,与编译器的Linker map/ELF文件进行关联使用,规则可以在该.m中修改;

asap2post_targets.m函数可以把a2l文件中的虚拟地址根据map文件中的地址改掉;

asap2post(ASAP2File, MAPFile)可以替换a2l文件里的地址,但是系统自带的一般无法直接使用,需要修改里面部分匹配规则,具体参考正则匹配。以适合你的map文件格式。然后直接运行ok了。

Help提示:可以根据asap2post.pl文件和asap2post_targets.m文件推出来工作工程,需要学一点很简单的perl语言,只改一两行就可以了。

二. 哪些参数对象可生成到A2L

Simulink.Parameter选择不同Storage Class对代码中定义形式和A2L的影响:

SimulinkGlobal: 不能生成A2L(若是MEASUREMENT则可以生成)

struct P_micr_DEMO_Changed_AllPrmIsI_T_ {int32_T aa;         };

ExportedGlobal: 可以生成A2L,int32_T aa = 0; (且在头文件中加extern);

ImportedExtern: 可以生成A2L,无定义直接使用aa;

ImportedExternPointed: 可以生成A2L,无定义直接使用*aa;

Default(Custom):可以生成A2L,int32_T aa = 0; (且在头文件中加extern);

BitField(Custom):不能生成A2L,rt_Simulink_BitField_type rt_Simulink_BitField = {0};

typedef struct rt_Simulink_BitField_tag {

int32_T aa;

} rt_Simulink_BitField_type;

Const(Custom): 可以生成A2L,const int32_Taa = 0; (且在头文件中加extern);

Volatile(Custom): 可以生成A2L,volatile int32_Taa = 0; (且在头文件中加extern);

ConstVolatile: 可以生成A2L,const volatile int32_Taa = 0;(且在头文件中加extern);

Define(Custom): 不能生成A2L,#define aa   0;

ImportedDefine: 不能生成A2L必须定义头文件:无定义直接使用(int32_T)aa(可能在规定头文件定义);

ExportToFile(Custom): 可以生成A2L,在规定的.c中定义int32_Taa = 0;

ImportFrom File(Custom): 可以生成A2L,无定义直接使用aa;

FileScope(Custom): 不能生成A2L,staticint32_Taa = 0;

Struct(Custom): 不能生成A2L,rt_Simulink_BitField_typert_Simulink_BitField = {0};

typedef struct rt_Simulink_BitField_tag {int32_T aa;} rt_Simulink_BitField_type;

GetSet(Custom): 不能生成A2L,get_aa();

CompilerFlag(Custom): 不能生成A2L,无定义直接使用aa。

三. 生成A2L所需TLC

关键点:

matlabroot\rtw\c\tlc\mw目录下的asap2grouplib.tlc、asap2lib.tlc、asap2main.tlc;

matlabroot\toolbox\rtw\targets\asap2\asap2\user目录下asap2userlib.tlc和templates文件夹下的内容;

修改这些tlc可以修改A2L的生成格式

上述A2L包含了ASAP2_VERSION1、PROJECT1、HEADER2、MODULE1、MOD_PAR2、MOD_COMMON2、RECORD_LAYOUT3、CHARACTERISTIC3、MEASUREMENT3、COMPU_METHOD3、COMPU_TAB3、FUNCTION、GROUP2等环节(角标编号为下列tlc简介编号,标蓝为常用函数,标绿为引用标量,标黄为TLC函数调用);

生成A2L 过程,列出全部相关tlc

1. asap2main.tlc中定义了开头和全局结构,分为VERSION、PROJECT、Header、MODULE、Interface、DynamicContents、Groups:

%

%assignASAP2FullFileName = ASAP2FileName     %%Model.tlc

%openfileModelASAP2File = ASAP2FullFileName

%openfile ASAP2List ="asap2.lis"

%selectfileModelASAP2File

%

%assign asap2Version= ASAP2UserFcnASAP2Version()

%assign VersionNo =asap2Version[0]

%assign UpgradeNo =asap2Version[1]

 ASAP2_VERSION % %  /* Version %.% */

/begin PROJECT %"%"

  %<ASAP2UserFcnWriteHeader()>                   /* asap2userlib.tlc*/  

  /begin MODULE %  "%"

    %<ASAP2UserFcnWriteHardwareInterface()>\     /* asap2userlib.tlc*/  

    %<SLibASAP2WriteDynamicContents()>\          /* asap2lib.tlc*/

    %<SLibOutputGroups()>                        /*asap2grouplib.tlc*/

  /end MODULE

/end PROJECT

%\ /*结尾,加点注释什么的*/

 2. asap2userlib.tlc中定义了大量函数供其它A2L的TLC调用,如ASAP2UserFcnWriteHead、ASAP2UserFcnWriteHeader、ASAP2UserFcnWriteHardwareInterface、ASAP2UserFcnWriteFileTail、ASAP2UserFcnASAP2Version、ASAP2UserFcnDataTypeAlias、ASAP2UserFcnRecordLayoutAlias_Common、ASAP2UserFcnWriteMeasurement、ASAP2UserFcnWriteCompuVTab、ASAP2UserFcnWriteCompuMethods、ASAP2UserFcnWriteComAxis、ASAP2UserFcnWriteStdAxis、ASAP2UserFcnWriteFixAxis、ASAP2UserFcnWriteFixAxisList:

%function ASAP2UserFcnASAP2Version()void

  %assign VersionNo = "1"

  %assign UpgradeNo = "31"

  %return [%,%]

%endfunction

%function ASAP2UserFcnWriteHeader()Output

  /begin HEADER "Header Comments go here"

  /end HEADER

%endfunction

%function ASAP2UserFcnWriteHardwareInterface()Output

     /begin MOD_PAR "%"

     /end MOD_PAR

     /begin MOD_COMMON "%"

        BYTE_ORDER     %

     /end MOD_COMMON

%endfunction

3. asap2lib.tlc包含了定义RECORD_LAYOUTS、CHARACTERISTICS、MEASUREMENTS、COMPU_METHODS格式的函数,(前两个调用scalar、1D、2D中的内容,后两个调用userlib中的内容)

该tlc的主函数为SLibASAP2WriteDynamicContents(),其调用的函数均为asap2lib.tlc中自定义的函数,

%functionSLibASAP2WriteDynamicContents() Output

%with ::CompiledModel

  %<FcnOutputRecordLayouts()> \  /*RECORD_LAYOUT所有内容,该函数调用scalar、1D、2D的ASAP2UserFcnWriteRecordLayout_XXX函数*/

  %<FcnLoopThruParamGroups()> \  /*1D和2D的xyz标定和轴AXIS_DESCR/PTS,调用先1D后2D的ASAP2UserFcnWriteCharacteristic函数*/

  %<FcnLoopThruModelParameters()> \ /*写scalar标定,调用ASAP2UserFcnWriteCharacteristic_Scalar函数*/

  %if IsModelReferenceTarget()

    % \

  %endif

  %if !IsModelReferenceTarget()

    %<FcnLoopThruExternalInputs()> \      /*ExternalInputs外部输入信号参数,调用ASAP2UserFcnWriteMeasurement函数*/

    %<FcnLoopThruExternalOutputs()> \     /*ExternalOutputs外部输出信号参数,调用ASAP2UserFcnWriteMeasurement函数*/

  %endif

  %<FcnLoopThruBlockOutputs()> \          /*ExternalOutputs内部信号参数,调用ASAP2UserFcnWriteMeasurement函数*/

  % \                /*Dwork中的离散状态变量,调用ASAP2UserFcnWriteMeasurement函数*/

  %<FcnOutputCompuMethods()> \       /*写整型-物理转换关系的COMPU_METHODS的参数,调用ASAP2UserFcnWriteCompuMethods*/

  % \/*写标准表格调用1D、2D中的ASAP2UserFcnWriteSTDAxisRecordLayout函数*/

%endwith

%endfunction

4.  asap2grouplib.tlc包含了GROUP的格式定义函数

主函数为SLibOutputGroups

5. asap2setup.tlc供main和userlib使用,中定义了上面的ASAP2FileName、ASAP2ProjectName/Comment、ASAP2ModuleName/Comment、ASAP2MOD_COMMON_Comment、ASAP2ModParComment、ASAP2BYTE_ORDER:

%assign ASAP2FileName               ="%.a2l"

%assign ASAP2ProjectName            = "ProjectName"

%assign ASAP2ProjectComment         = "Project Comment GoesHere"     

%assign ASAP2ModuleName             = "ModuleName"

%assign ASAP2ModuleComment          = "Module Comment GoesHere"

%assign ASAP2MOD_COMMON_Comment     = "Mod Common Comment Here"

%assignASAP2NumberFormat           ="%0.6"

%assign ASAP2HeaderName             = "Header Name GoesHere"

%assign ASAP2ModParComment          = "MOD PAR Comment GoesHere"

%assignASAP2CompuMethodName_Prefix = "%_"

%assignASAP2GenNoCompuMethod       = TLC_FALSE

%assignASAP2EnableTestPoints       = TLC_TRUE

%assignASAP2EnableRootLevelIO      = TLC_FALSE

%if  CompiledModel.ConfigSet.TargetEndianess =="LittleEndian"

   %assign ASAP2BYTE_ORDER = "MSB_LAST"

%else

   %% other cases: Unspecified, BigEndian 一般默认设置为小端

   %% The default

   %assign ASAP2BYTE_ORDER ="MSB_FIRST"   

%endif

6. 2D.tlc(与scalar、1D类似)中的函数:(XXX表示scalar、1D、2D都有)

1) ASAP2UserFcnRecordLayoutAlias_XXX               写标定DT,scalar、1D、2D都有;

2) ASAP2UserFcnRecordLayoutAlias_X_AXIS_LookupXD   写坐标轴DT,查表专用;

3) ASAP2UserFcnWriteRecordLayout_XXX                轮流调用第1、2个函数,scalar只调用第一个;

4) ASAP2UserFcnWriteSTDAxisRecordLayout_LookupXD   写查表的recordlayout以符合某种标准,但一般没用到;

5) ASAP2UserFcnWriteCharacteristic_XXX              写标定属性,若是查表还写轴的属性;

6) ASAP2UserFcnWriteStructCharacteristic_Scalar    scalar专属,写结构体标定属性(写scalar标定,暂没使用到);

总结A2L各部分内容所处的tlc,想修改A2L生成内容只需要修改对应tlc就行了,新加元素可直接在asap2main.tlc或者其他tlc的对应位置中添加内容。

ASAP2_VERSION1:asap2userlib.tlc

PROJECT1:asap2setup.tlc

HEADER2:asap2userlib.tlc

MODULE1:asap2setup.tlc

MOD_PAR2:asap2setup.tlc

MOD_COMMON2:asap2userlib.tlc

RECORD_LAYOUT3:scalar、1D、2D.tlc

CHARACTERISTIC3:scalar、1D、2D.tlc(包含标定和轴)

MEASUREMENT3:asap2userlib.tlc

COMPU_METHOD3:asap2userlib.tlc

GROUP4:asap2grouplib.tlc

TLC调用依赖关系:

ff807f5cd9b7e3207f7411e9e5248711.png

另有tlc文件修改的实例,请通过

推荐阅读

Automotive SPICE和Automotive SPICE评估的那些事

什么样的模型算正确的模型?

雕虫小技 | Simulink模型开发中的一些自动化方法

结构体变量建模之终极解决方案(续)

ISO26262软件部分的测试: (1) 软件单元测试

70948d3081290654ce1f04d93dd0cc42.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值