一、A2L文件簡(jiǎn)介
A2L文件是一個(gè)標(biāo)定的描述文件,基于文本格式,描述ECU的通信等相關(guān)的參數(shù),以及標(biāo)定,觀測(cè)變量的地址以及物理值計(jì)算公式等等。A2L 文件中的信息允許 XCP 主站通過(guò) XCP 連接與從站模塊通信。格式化的文本文件包含事件和測(cè)量定義以及其他配置信息,用于采集和激勵(lì)數(shù)據(jù)以及執(zhí)行其他函數(shù)。
二、A2L文件結(jié)構(gòu)
按A2L文件結(jié)構(gòu)分Version,Project,Module,及Module下的Keyword。

三、A2L文件組成
A2L文件頭(項(xiàng)目配置信息等,一般不隨軟件編譯變化,除非對(duì)應(yīng)參數(shù)調(diào)整)
標(biāo)定變量描述(包含的地址信息每次編譯都有可能變化)
觀測(cè)變量描述(包含的地址信息每次編譯都有可能變化)
其他輔助信息,轉(zhuǎn)換公式等 (一般不隨軟件編譯變化,除非對(duì)應(yīng)參數(shù)調(diào)整)
四、A2L文件分解
ASAP2_Version:
ASAP2_VERSION 1 60 /* Version 1.60 */
HEADER:
該塊里邊包含了項(xiàng)目信息,包括項(xiàng)目編號(hào),項(xiàng)目版本等信息
/begin HEADER "Header Comments go here"
/end HEADER
MODULE:
該塊里邊包含了在標(biāo)定測(cè)量層面來(lái)描述ECU需要的所有信息,一個(gè)ECU對(duì)應(yīng)一個(gè)MODULE塊,MODULE由許多子塊來(lái)組成1MOD_PAR這個(gè)塊里包含了用于管理ECU的數(shù)據(jù),例如客戶(hù)名,編號(hào),CPU類(lèi)型,ECU的內(nèi)存分配等,其中最重要的就是ECU的內(nèi)存分配,開(kāi)發(fā)人員需要根據(jù)ECU內(nèi)存分段情況定義MEMORY SEGMENT和SEGMENT里邊的PAGE,這里的SEGMENT/PAGE的概念和在線標(biāo)定中的概念是一致的,一個(gè)MODULE里邊只能出現(xiàn)一次。
/begin MODULE ModuleName "Module Comment Goes Here"
/begin MOD_PAR "MOD PAR Comment Goes Here"
/end MOD_PAR
/begin MOD_COMMON "Mod Common Comment Here"
BYTE_ORDER MSB_LAST
/end MOD_COMMON
/*......以下所有信息都包含在MODULE內(nèi)*/
/end MODULE
MOD_PAR:
MOD_PAR關(guān)鍵字用于描述要為設(shè)備配置的管理數(shù)據(jù)。除了注釋之外,所有參數(shù)都是可選的。暫時(shí)沒(méi)有用到。
/begin MOD_PAR "MOD PAR Comment Goes Here"
/end MOD_PAR
MOD_COMMON:
該塊用來(lái)指定ECU的一些標(biāo)準(zhǔn)的一般性描述信息,比如大小端,數(shù)據(jù)的對(duì)齊方式,F(xiàn)LOAT變量的處理方式等,一個(gè)MODULE里也只能出現(xiàn)一次。
/begin MOD_COMMON "Mod Common Comment Here"
BYTE_ORDER MSB_LAST
ALIGNMENT_BYTE 1
ALIGNMENT_WORD 2
ALIGNMENT_LONG 4
ALIGNMENT_FLOAT32_IEEE 4
ALIGNMENT_FLOAT64_IEEE 8
ALIGNMENT_INT64 8
/end MOD_COMMON
BYTE_ORDER:字節(jié)序,MSB_LAST=Intel,默認(rèn)為Intel
ALIGNMENT_BYTE:聲明整個(gè)模塊中的BYTE對(duì)齊方式。如果參數(shù)缺失,對(duì)齊方式為1,其他同理。
RECORD_LAYOUT:
該塊用來(lái)定義標(biāo)定變量的物理存儲(chǔ)結(jié)構(gòu)(單個(gè)變量,二維表,三維表等)。
/begin RECORD_LAYOUT Scalar_BOOLEAN
FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Scalar_UBYTE
FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Scalar_BYTE
FNC_VALUES 1 SBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Scalar_UWORD
FNC_VALUES 1 UWORD COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Scalar_SWORD
FNC_VALUES 1 SWORD COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Scalar_ULONG
FNC_VALUES 1 ULONG COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Scalar_LONG
FNC_VALUES 1 SLONG COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Scalar_FLOAT32_IEEE
FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Scalar_FLOAT64_IEEE
FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_BOOLEAN
FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_X_BOOLEAN
AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_BYTE
FNC_VALUES 1 SBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_X_BYTE
AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_UBYTE
FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_X_UBYTE
AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_UWORD
FNC_VALUES 1 UWORD COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_X_UWORD
AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_WORD
FNC_VALUES 1 SWORD COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_X_WORD
AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_ULONG
FNC_VALUES 1 ULONG COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_X_ULONG
AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_SLONG
FNC_VALUES 1 SLONG COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_X_LONG
AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_FLOAT32_IEEE
FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_X_FLOAT32_IEEE
AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_FLOAT64_IEEE
FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup1D_X_FLOAT64_IEEE
AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_BOOLEAN
FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_X_BOOLEAN
AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_UBYTE
FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_X_UBYTE
AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_BYTE
FNC_VALUES 1 SBYTE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_X_BYTE
AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_UWORD
FNC_VALUES 1 UWORD COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_X_UWORD
AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_WORD
FNC_VALUES 1 SWORD COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_X_WORD
AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_ULONG
FNC_VALUES 1 ULONG COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_X_ULONG
AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_LONG
FNC_VALUES 1 SLONG COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_X_LONG
AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_FLOAT32_IEEE
FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_X_FLOAT32_IEEE
AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_FLOAT64_IEEE
FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT
/end RECORD_LAYOUT
/begin RECORD_LAYOUT Lookup2D_X_FLOAT64_IEEE
AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT
/end RECORD_LAYOUT
該塊用來(lái)定義標(biāo)定變量,里邊包含了可以被標(biāo)定的變量的名字,地址,長(zhǎng)度,計(jì)算公式,精度,最大最小值等信息,一個(gè)MODULE里邊可以出現(xiàn)很多次這樣的塊,也就是說(shuō)一個(gè)ECU可以有很多的標(biāo)定變量。
/begin CHARACTERISTIC
/* Name */ KtAEBS_CrvtRateWeightFactor
/* Long Identifier */ ""
/* Characteristic Type */ CURVE
/* ECU Address */ 0x0000 /* @ECU_Address@KtAEBS_CrvtRateWeightFactor@ */
/* Record Layout */ Lookup1D_FLOAT32_IEEE
/* Maxdiff */ 0
/* Conversion Method */ AEBS_subsystem_integrated_CM_single
/* Lower Limit */ -3.4E+38
/* Upper Limit */ 3.4E+38
/begin AXIS_DESCR
/* Description of X-Axis Points */
/* Axis Type */ COM_AXIS
/* Reference to Input */ NO_INPUT_QUANTITY
/* Conversion Method */ AEBS_subsystem_integrated_CM_single
/* Number of Axis Pts */ 2
/* Lower Limit */ -3.4E+38
/* Upper Limit */ 3.4E+38
AXIS_PTS_REF KaAEBS_AXIS_SpdForCrvtRateWF
/end AXIS_DESCR
/end CHARACTERISTIC
AXIS_PTS:
該塊用來(lái)定義數(shù)組或查表變量對(duì)應(yīng)的軸的類(lèi)型,它將被RECORD_LAYOUT塊來(lái)引用,一個(gè)ECU里邊可以有很多種不同的軸類(lèi)型,用于實(shí)現(xiàn)查表和插值,一般很少用到。MEASUREMENT該塊用來(lái)定義測(cè)量變量,里邊包含了可以被測(cè)量的變量的名字,地址,長(zhǎng)度,計(jì)算公式,精度,最大最小值等信息,一個(gè)MODULE里邊可以出現(xiàn)很多次這樣的塊,也就是說(shuō)一個(gè)ECU可以有很多的測(cè)量變量。
/begin AXIS_PTS
/* Name */ KaAEBS_AXIS_SpdForCrvtRateWF
/* Long Identifier */ ""
/* ECU Address */ 0x0000 /* @ECU_Address@KaAEBS_AXIS_SpdForCrvtRateWF@ */
/* Input Quantity */ NO_INPUT_QUANTITY
/* Record Layout */ Lookup1D_X_FLOAT32_IEEE
/* Maximum Difference */ 0
/* Conversion Method */ AEBS_subsystem_integrated_CM_single
/* Number of Axis Pts */ 2
/* Lower Limit */ -3.4E+38
/* Upper Limit */ 3.4E+38
/end AXIS_PTS
MEASUREMENT:
用來(lái)定義測(cè)量變量,里邊包含了可以被測(cè)量的變量的名字,地址,長(zhǎng)度,計(jì)算公式,精度,最大最小值等信息,一個(gè)MODULE里邊可以出現(xiàn)很多次這樣的塊,也就是說(shuō)一個(gè)ECU可以有很多的測(cè)量變量。
/begin MEASUREMENT
/* Name */ VfAEBS_AEB_acceleration_req
/* Long identifier */ ""
/* Data type */ FLOAT32_IEEE
/* Conversion method */ AEBS_subsystem_integrated_CM_single
/* Resolution (Not used) */ 0
/* Accuracy (Not used) */ 0
/* Lower limit */ -3.4E+38
/* Upper limit */ 3.4E+38
ECU_ADDRESS 0x0000 /* @ECU_Address@VfAEBS_AEB_acceleration_req@ */
/end MEASUREMENT
COMPU_METHOD:
該塊用于定義計(jì)算公式,及原始值和物理值之前的轉(zhuǎn)換關(guān)系,這些公式可以被標(biāo)定變量和測(cè)量變量來(lái)引用,從而將原始值轉(zhuǎn)換成便于用戶(hù)閱讀和使用的物理值。COMPU_TAB該塊用來(lái)定義原始值和物理值的映射關(guān)系,是一種特殊的轉(zhuǎn)換關(guān)系,它一般應(yīng)用于枚舉變量,例如我們想采集一個(gè)代表XCP狀態(tài)機(jī)的變量,分別為0對(duì)應(yīng)DISCONNECTED,1對(duì)應(yīng)CONNECTED,2對(duì)應(yīng)RESUME,那么我們就可以把這樣的映射關(guān)系定義成一個(gè)COMPU_TAB,然后關(guān)聯(lián)到對(duì)應(yīng)的變量上,這時(shí)候如果上位機(jī)采集到1這樣的原始值,它就可以將當(dāng)前的狀態(tài)顯示成“CONNECTED”字樣,方便用于閱讀和使用。FUNCTION該塊為可選項(xiàng),很少使用。
/begin COMPU_METHOD
/* Name of CompuMethod */ AEBS_subsystem_integrated_CM_single
/* Long identifier */ "Q = V"
/* Conversion Type */ RAT_FUNC
/* Format */ "%8.6"
/* Units */ ""
/* Coefficients */ COEFFS 0 1 0 0 0 1
/end COMPU_METHOD
GROUPS:
該塊是把標(biāo)定變量和測(cè)量變量按照一定的邏輯(比如功能模塊)組織起來(lái),在上位機(jī)中形成一個(gè)下拉菜單,使得用于可以從中選擇變量,這塊是可選的。
/begin GROUP
/* Name */ AEBS_subsystem_integrated
/* Long identifier */ "AEBS_subsystem_integrated"
/* Root */ ROOT
/begin SUB_GROUP
Root_AEBS
/end SUB_GROUP
/begin REF_MEASUREMENT
VbAEBS_DeactivePrefil_Visn
VbAEBS_Deactive_Visn
VbAEBS_FullBrkDeactVisn
VbAEBS_FullBrkReqVisn
VbAEBS_OnComigVehVisn
VbAEBS_PartBrkDeactVisn
VbAEBS_PartBrkReqVisn
VbAEBS_PrefillDeactVisn
VbAEBS_PrefillReqVisn
VfAEBS_AreqFinalVisn
VfAEBS_InhibitCodeVisn
VfAEBS_InhibitVisn
/end REF_MEASUREMENT
/end GROUP
Data type:
FLOAT32_IEEE:IEEE 754 格式的 32 位浮點(diǎn)數(shù)。 FLOAT64_IEEE:IEEE 754 格式的 64 位浮點(diǎn)數(shù)。 UBYTE:無(wú)符號(hào) 8 位整數(shù)。 SBYTE:有符號(hào) 8 位整數(shù)。 UWORD:無(wú)符號(hào) 16 位整數(shù)。 SWORD:有符號(hào) 16 位整數(shù)。 ULONG:無(wú)符號(hào) 32 位整數(shù)。 SLONG:有符號(hào) 32 位整數(shù)。 CHAR:字符。 STRING:字符串。 ENUM:枚舉類(lèi)型,通常用于定義屬性的可選值。 STRUCT:結(jié)構(gòu)類(lèi)型,用于組織多個(gè)數(shù)據(jù)元素到一個(gè)數(shù)據(jù)結(jié)構(gòu)中。 ARRAY:數(shù)組類(lèi)型,用于定義相同數(shù)據(jù)類(lèi)型的多個(gè)元素的集合。 COUNTER:計(jì)數(shù)器類(lèi)型,用于描述一個(gè)值在時(shí)間內(nèi)的變化。 BOOLEAN:布爾類(lèi)型,表示真(TRUE)或假(FALSE)。 RECORD:記錄類(lèi)型,通常用于組合不同數(shù)據(jù)類(lèi)型的元素。 CURVE:曲線類(lèi)型,用于描述參數(shù)隨輸入變化的關(guān)系。 MAP:地圖類(lèi)型,用于描述兩個(gè)輸入?yún)?shù)和一個(gè)輸出參數(shù)之間的關(guān)系。
-
XCP
+關(guān)注
關(guān)注
0文章
12瀏覽量
12111 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67501
原文標(biāo)題:XCP之A2L文件簡(jiǎn)介
文章出處:【微信號(hào):eng2mot,微信公眾號(hào):汽車(chē)ECU開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
XCP之A2L文件簡(jiǎn)介
評(píng)論