標簽:cte amp 通信 pac condition man 沒有 參數錯誤 family
7.1定義
應用層協議通常作為確認消息的傳輸,意味着從客戶端發送的每一個請求都將有由服務器端產生的與之相對的響應。
唯一的例外在於:例如使用了功能尋址方式,或者該請求/指示沒有指定生成響應/確定的少數情況下。為了減輕不必要的消息對系統造成的壓力,在個別場合即使服務器處理請求診斷服務失敗了也不發送否定響應。
應用層協議是與會話層協議並行執行,這樣,即使客戶端等待上一個請求的響應時,也將會保持正確的會話層校時功能(例如:發送一個TesterPresent以使其他服務器的診斷會話持續下去;具體實施細則取決於所使用的數據鏈路層)。
7.2 PDU(Protocol Data Unit)規范
A_PDU(應用層協議數據單元)直接建立於A_SDU(應用層服務數據單元)和層專屬控制信息:A_PCI(Application layer Protocol Control Information應用層服務控制信息)。A_PDU一般格式:
A_PDU (
SA,
TA,
TA_type,
[RA,]
A_Data = A_PCI + [parameter 1, ...]
)
條件:
——“SA, TA, TA_type, RA”在相同A_SDU中使用相同的參數。
——A_Data是一個定義了每一個應用層服務的字節序列字符串。 A_Data字符串以A_PCI起頭,后接A_SDU的全部服務專屬參數,以此來指定每一個服務。部分參數用方括號括起說明這部分參數可以為空。
7.3 應用控制信息
A_PCI有兩個可以替換的格式,具體取決於調用哪種類型的服務原語和結果參數的值。對於所有的服務請求和Result=positive的服務響應確認/服務確認,將應用下面的定義:
A_PCI(
SI
)
條件:當“SI”是服務定義的參數。
對服務響應確認和服務確認,當Result=negative時,將應用以下的定義:
A_PCI(
NR_SI,
SI
)
條件:
——“NR_SI”是特殊的參數用以定義否定服務響應/服務確認。
——“SI”是服務標識符參數。
注釋:對利用響應消息類型#2所定義的服務ReadDataByPeriodicIdentifier (2A hex,以周期標識讀取數據,參考10.5)的周期性消息傳輸,當前無A_PCI存在於應用層協議數據單元(A_PDU)。
7.3.1 服務標識符(SI)
類型:1 byte無符號整型值
值域:00-FF16,根據表2定義的16進制數值
表2——服務標識(SI)值
| 服務標識符(hex) |
服務類型(6 bit) |
定義方 |
| 00 – 0F |
OBD服務請求 |
ISO 15031-5 |
| 10 – 3E |
ISO 14229服務請求 |
ISO 14229 |
| 3F |
不適用 |
文檔保留 |
| 40 – 4F |
OBD服務響應 |
ISO 15031-5 |
| 50 – 7E |
ISO 14229服務肯定響應 |
ISO 14229 |
| 7F |
服務否定相應標識 |
ISO 14229 |
| 80 |
不適用 |
ISO 14229預留 |
| 81 – 82 |
不適用 |
ISO 14229預留 |
| 83 – 88 |
ISO 14229 服務請求 |
ISO 14229 |
| 89 – 9F |
服務請求 |
根據需要預留將來擴展 |
| A0 – B9 |
服務請求 |
車輛生產商定義 |
| BA – BE |
服務請求 |
系統供應商定義 |
| BF |
不適用 |
文檔預留 |
| C0 |
不適用 |
ISO 14229預留 |
| C1 – C2 |
不適用 |
ISO 14229預留 |
| C3 – C8 |
ISO 14229服務肯定響應 |
ISO 14229 |
| C9 – DF |
服務肯定響應 |
根據需要預留將來擴展 |
| E0 – F9 |
服務肯定響應 |
車輛生產商定義 |
| FA – FE |
服務肯定響應 |
系統供應商定義 |
| FF |
不適用 |
文檔預留 |
注意:在服務標識(SI)請求消息和服務標識肯定響應消息之間是一對一的,16進制SI值第6 bit指示服務類別:所有請求消息SI bit 6 = 0,所有響應消息SI bit 6 =1。除了響應消息類別#2的服務ReadDataByPeriodicIdentifier(2A hex,參見10.5節)
描述:
SI被服務原語調用時用於對制定的服務進行編碼,每一個請求服務都被分配一個唯一的SI值,每一個肯定響應的服務也都被分配一個相對應的唯一SI值。
服務標識(SI)被用來表示從應用層發送到下層(以及從下層返回)的A_Data數據串的服務。
7.3.2否定響應服務標識(NR_SI)
類型:1 byte無符號整型值
固定值:7F (16進制)
描述:
NR_SI是特為標識否定服務響應/否定服務確認的特殊參數,是A_PCI中的一部分:否定響應/確認的信息。
注意:NR_SI值相對應於SI值;為使A_Data編碼和解碼方便,NR_SI的值不能用於SI。
7.4 否定響應/確認服務原語
每個診斷服務都具有根據表3 A_DATA字節中指定的否定響應/否定確認消息。第一個A_DATA字節(A_PCI.NR_SI)經常指定否定響應服務標識,第二個A_DATA(A_PCI.SI)作為與否定響應對應的服務請求/指示消息的復制。
表3—否定響應A-PDU
| A_PDU parameter |
Parameter name |
Cvt |
Hex value |
Mnemonic |
| SA |
Source Address |
Ma |
xx |
SA |
| TA |
Target Address |
M |
xx |
TA |
| TA_type |
Target Address type |
M |
xx |
TA Type |
| RA |
Remote Address(optional) |
Cb |
xx |
RA |
|
|
||||
| A_Data.A_PCI.NR_SI |
Negative Response Service Id |
M |
7F |
SIDNR |
| A_DATA.A_PCI.SI |
<Service Name> Request Service Id |
M |
xx |
SIDRQ |
| A_Data.parameter1 |
ResponseCode |
M |
xx |
NRC_ |
| aM(Mandatory)如果發出否定響應A_PDU的情況下這些A_PDU參數會出現。 b C(Conditional)RA(Remote Address) PDU參數只出現在遠程地址的環境下。 |
||||
注意 A_DATA代表否定響應消息的消息數據字節序列
參數response code(響應碼)用在否定響應消息中用於指示診斷服務失敗或者無法及時完成的原因。值定義在A.1中。
7.5 服務響應實施細則
7.5.1 一般定義
在執行一項服務時,一下小姐指定服務器的行為。服務器和客戶端應遵循這些執行規則。
小節圖例:7.5.2,7.5.3和7.5.4
縮寫 描述
SuppressPosRspMsgIndicationBit TRUE=服務器應不發送肯定響應消息
FALSE=服務器應發送肯定或否定響應消息
PosRsp 肯定響應消息縮寫
NegRsp 否定響應消息縮寫
NoRsp 未發送肯定或否定響應消息
NRC 否定響應碼縮寫
ALL 服務器支持的所有請求數據參數(沒有子函數參數的服務)的客戶端請求信息
at list 1 服務器支持至少一個客戶端請求數據參數(沒有子函數參數
服務)
NONE 服務器支持無客戶端請求數據參數(沒有子函數參數
服務)
服務器不論尋址模式(物理、功能尋址類型)都應支持該診斷服務列表。
重點——按照上表的要求,SNS1、SFNS2和ROOR3的否定響應消息與否定響應碼,當請求消息使用功能尋址方式的情況下不應被傳輸。
注釋:1 SNS(serviceNotSupported), 2 SFNS(subFunctionNotSupported), 3 ROOR(requestOutOfRange)
7.5.2 帶有子函數參數的請求消息和服務器響應動作
7.5.2.1 功能尋址客戶端請求消息
在本節指定的服務響應行為,被支持客戶端物理尋址請求消息子函數參數的每個服務的服務描述所引用。
表4展示可能的物理尋址對話格式。
表4——帶子函數參數的物理尋址請求消息和服務器響應行為
| 服務器示例# |
客戶端請求消息 |
服務器功能 |
服務器響應 |
服務器響應注釋 |
||||
| 尋址格式 |
子函數(抑制PosRsp指示位) |
支持服務ID |
支持子函數 |
支持數據參數(僅在適用情況) |
消息 |
否定: |
||
| 1 |
物理 |
FLASE(bit=0) |
YES |
YES |
At least 1 |
PosRsp |
-- |
服務器發送肯定響應 |
| 2 |
-- |
NegRsp |
NRC=xx |
服務器否定響應,因為讀請求消息的數據參數時出現錯誤。 |
||||
| 3 |
NO |
-- |
-- |
NRC=SNS |
帶有NRC 11 hex的否定響應 |
|||
| 4 |
YES |
NO |
-- |
NRC=SFNS |
帶有NRC 12 hex的否定響應 |
|||
| 5 |
TRUE(bit=1) |
YES |
YES |
At least 1 |
NoRsp |
-- |
服務器未發送響應 |
|
| 6 |
-- |
NegRsp |
NRC=xx |
服務器否定響應,因為讀取請求消息的數據參數時出現錯誤 |
||||
| 7 |
NO |
-- |
-- |
NRC=SNS |
帶有NRC 11 hex的否定響應 |
|||
| 8 |
YES |
NO |
-- |
NRC=SFNS |
帶有NRC 12 hex的否定響應 |
|||
下列描述出物理尋址情況下在客戶端發出帶有子函數的請求消息后服務器的響應用例:
1)服務發出積極響應消息,因為該服務標識和子函數參數是支持客戶端帶有指示響應消息的請求。
2)服務器發送否定響應消息(例如IMLOIF:不正確的消息長度或消息格式)因為客戶端請求的服務標識和子函數參數被支持,但是在處理子函數時發生一些其他的錯誤(例如:請求消息的服務標識和子函數參數)。
3)服務器發送了帶有否定響應碼SNS(service not supported)的否定響應消息,是因為客戶端請求的服務標識符被響應消息所指示為不支持。
4)服務器發送了帶有否定響應碼SFNS(sub-function not supported)的否定消息,是因為響應消息指示了服務標識符被支持,而客戶端請求的子函數參數不被支持。
5)服務器發送無響應消息,因為服務標識和子函數參數被客戶端的請求(帶有無響應消息的指示)支持。如果使用否定響應碼RCRRP(requestCorrectlyReceivedResponsePending,請求正確接收,響應掛起),最終的響應要賦予獨立的suppressPosRspMsgIndicationBit值。
6)和2)效果相同(例如:發送否定響應消息)因為suppressPosRspMsgIndicationBit(抑制肯定響應消息標識)忽任何需要在其上發送物理尋址請求消息回執的否定響應。
7)和3)效果相同(例如,發送否定響應消息)因為suppressPosRspMsgIndicationBit(抑制肯定響應消息標識)忽任何需要在其上發送物理尋址請求消息回執的否定響應。
8)和4)效果相同(例如,發送否定響應消息)因為suppressPosRspMsgIndicationBit(抑制肯定響應消息標識)忽任何需要在其上發送物理尋址請求消息回執的否定響應。
7.5.2.2 功能性尋址客戶端請求消息
服務器請求行為在本節中引用每個服務的服務描述,這些服務是支持在功能尋址模式下子函數參數請求消息從客戶端接收的。
表5——帶有子函數參數和服務器相應動作的功能尋址請求消息
| 服務器示例# |
客戶端請求消息 |
服務器功能 |
服務器響應 |
服務器響應注釋 |
||||
| 尋址格式 |
子函數(抑制肯定響應指示位) |
支持服務ID |
支持子函數 |
支持數據參數(僅在適用情況) |
消息 |
否定: |
||
| 1 |
功能 |
FLASE(bit=0) |
YES |
YES |
At least 1 |
PosRsp |
-- |
服務器發送肯定響應 |
| 2 |
At least 1 |
At least 1 |
NRC=xx |
服務器發送否定響應,因為讀取請求消息的數據參數時發生錯誤 |
||||
| 3 |
None |
NoRsp |
-- |
服務器未發送相應 |
||||
| 4 |
NO |
-- |
-- |
-- |
服務器未發送相應 |
|||
| 5 |
YES |
NO |
-- |
-- |
服務器未發送相應 |
|||
| 6 |
TRUE(bit=1) |
YES |
YES |
At least 1 |
NoRsp |
-- |
服務器未發送相應 |
|
| 7 |
At least 1 |
NegRsp |
NRC=xx |
服務器發送否定響應,因為讀取請求消息的數據參數時出現錯誤 |
||||
| 8 |
None |
|
-- |
服務器未發送相應 |
||||
| 9 |
NO |
-- |
-- |
-- |
服務器未發送相應 |
|||
| 10 |
YES |
NO |
-- |
-- |
服務器未發送相應 |
|||
功能尋址模式下,帶有子函數的客戶端請求消息的服務器響應用例:
1)服務器發送肯定相應消息因為客戶端請求(帶有響應消息標識)支持該服務標識和子函數參數。
2)服務器發送否定響應消息(例如 IMLOIF:incorrectMessageLengthOrIncorrectFormat)因為服務標識符和子函數參數被客戶端請求支持,但某些其他錯誤發生在子函數執行過程中(,例如根據請求消息的服務標識符和子函數參數的長度錯誤)。
3)服務器發送無響應消息,因為否定響應碼ROOR(所以服務器標識requestOutOfRange因為服務標識和子函數參數被支持,但是一個必要的數據參數不被客戶端請求所支持)在功能尋址請求消息的情況下總是被抑制。supressPosRspMsgIndicationBit抑制肯定響應消息標識位在這種情況下不受影響。
4)服務器發送無響應消息,因為否定響應碼SNS(服務器標識serviceNotSupported,因為服務標識不被客戶端請求支持)在功能尋址請求消息的情況下總是被抑制。supressPosRspMsgIndicationBit抑制肯定響應消息標識位不受此影響。
5)服務器發送無響應出消息,因為否定響應碼SFNS(服務器標識subFunctinNotSupported因為服務標識被客戶端請求支持,而子函數參數不被其支持)通常在功能尋址請求的狀況下被抑制。supressPosRspMsgIndicationBit抑制肯定響應標識位不受此影響。
6)服務器發送無響應消息因為服務標識和子函數參數被客端請求(帶有無響應消息的指示)支持。
注釋:如果使用否定響應碼RCRRP(requestCorrectlyReceivedResponsePending,請求正確接收,響應掛起),一個最終響應賦予獨立的suppressPosRspMsgIndicationBit(抑制肯定響應標識位)值。
7)同2)(例如發送否定響應)因為suppressPosRspMsgIndicationBit被所有否定響應忽略。如果請求為功能尋址方式,此項值為TRUE。
8)同3)(例如發送無響應消息)因為否定響應碼ROOR(requestOutOfRange,這是由服務器確定的,因為服務標識和子函數參數受到客戶端請求支持,但是一個必要的數據參數不被支持)通常在功能尋址請求消息情況下被抑制。supressPosRspMsgIndicationBit不受此影響。
9)同4)(例如發送無響應消息)因為否定響應碼SNS(被服務器標記serviceNotSupported,因服務標識符不被客戶端請求所支持)在功能尋址請求消息的情況下通常被抑制。
10)同5)(例如發送無響應消息)因為否定響應碼SFNS(服務器標識subFunctionNotSupported因服務標識符不被客戶端請求消息支持,而子函數參數不被客戶端請求消息所支持。)在功能尋址請求消息的情況下通常被抑制。suppressPosRspMsgIndicationBit一致肯定響應消息標識符不受此影響。
7.5.3 不包含子函數參數和服務器響應行為的請求參數
7.5.3.1物理尋址的客戶端請求
本節每個服務(不支持子函數參數,但一個從客戶端接收物理尋址請求消息的數據參數被支持)的服務描述指定的服務器響應動作。
表6體現了可能的物理尋址通信格式
表6——物理尋址不包含子函數參數和服務響應行為的請求消息
| 服務器示例# |
客戶端請求 |
服務器功能 |
服務器響應 |
服務器響應注解 |
||
| 尋址方式 |
支持服務ID |
支持參數 |
消息 |
否定: |
||
| 1 |
物理 |
YES |
ALL |
PosRsp |
-- |
服務器發送肯定響應 |
| 2 |
At least 1 |
-- |
服務器發送肯定響應 |
|||
| 3 |
Atleast1, |
NegRsp |
NRC=xx |
服務器發送否定響應,因為讀取請求消息參數數據發生錯誤 |
||
| 4 |
NONE |
NRC=ROOR |
否定響應 NRC 31 hex |
|||
| 5 |
NO |
-- |
NRC=SNS |
否定響應 NRC 11 hex |
||
下面描述了服務器相呼應示例,在物理尋址模式下,客戶端帶有無子函數數據參數和服務標識。
1) 服務器發送肯定相應消息,因為服務標識符和全部數據參數均被客戶端請求消息所支持。
2) 服務器發送肯定相應消息,因為服務標識和一個單獨的數據參數被客戶端請求消息所支持。
3) 服務器發送否定響應消息(例如IMLOIF: incorrectMessageLengthOrIncorrectFormat錯誤的消息長度或錯誤的格式)因為服務標識、多於等於一個的數據參數被客戶端請求消息所支持。但是在運行服務的時候出現一些其他的錯誤(例如錯誤的請求消息長度)。
4) 服務器發送否定響應消息,帶有否定響應碼ROOR(requestOutOfRange請求越界),因為客戶端請求消息支持該服務標識,但所有的請求數據參數均不被支持。
5) 服務發送否定響應消息,帶有否定響應碼SNS(serviceNotSupport服務不支持),請求消息不支持服務標識。
7.5.3.2 功能殉職客戶端請求消息
在本節指定的服務器響應行為,在功能尋址請求消息的情況下被每個服務的服務描述所引用,這些服務不支持一個子函數參數,但是支持一個數據參數。
表7展示了可能的功能尋址下的通信格式。
表7——功能尋址請求消息,不帶有子函數參數和服務器相應行為
| 服務器示例# |
客戶端請求消息 |
服務器功能 |
服務器響應 |
服務器響應注解 |
||
| 尋址模式 |
支持服務ID |
支持參數 |
消息 |
否定: |
||
| 1 |
功能性 |
YES |
YES |
PosRsp |
-- |
服務器發送肯定響應 |
| 2 |
At least 1 |
-- |
服務器發送肯定響應 |
|||
| 3 |
At least 1, more than 1,or ALL |
NegRsp |
NRC=xx |
服務器發送否定響應,因為讀取請求消息的數據參數錯誤 |
||
| 4 |
NONE |
NoRsp |
-- |
服務器不能發送相應 |
||
| 5 |
NO |
-- |
-- |
服務器不能發送相應 |
||
下面描述了服務器響應示例,在功能尋址情況下客戶端不帶有子函數的請求消息(數據參數遵循服務標識符)。
1) 服務器發送肯定響應消息,因為服務標識符和單獨數據參數被客戶端請求消息所支持。
2) 服務器發送肯定響應出消息,因為服務標識和至少一個數據參數被客戶端請求消息摳支持。
3) 服務器發送否定響應消息(例如IMLOIF:incorrectMessageLengthOrIncorrectFormat)因為服務標識符被至少一個數據參數被客戶端請求消息支持,但是一些其他的錯誤發生在服務執行過程中(例如錯誤的請求消息長度)。
4) 服務器發送無響應消息因為否定響應碼ROOR(requestOutOfRange,由於服務標識被客戶端請求所支持,但是沒有請求數據參數被支持的情況下產生)在功能殉職請求時通常被抑制。
5) 服務器發送無響應消息因為否定響應碼SNS(serviceNotSupported,因為服務標識不被客戶端請求所支持,而被服務器標識該否定響應碼。)通常在功能尋址模式請下被抑制。
7.5.4 服務器響應行為偽代碼示例
接下來的服務器為代碼示例用來描述:服務器當正在接收客戶端請求時應執行的步驟。
SWITCH (A_PDU.A_Data.A_PCI.SI)
{
CASE Service_with_subFunction: /* 測試,當支持服務子函數*/
SWITCH (A_PDU.A_Data.A_Data.Parameter1 & 0x7F) /* 獲取子函數參數,不包括第7bit */
{
CASE subFunction_00: /* 測試,如果支持子函數參數值*/
IF (message_length == expected_subFunction_message_length) THEN
: /* 准備響應消息 */
responseCode = positiveResponse; /* 響應消息;賦值內部 NRC = 0x00 */
ELSE
responseCode = IMLOIF; /* NRC 0x13: incorrectMessageLengthOrInvalidFormat */
ENDIF
BREAK;
CASE subFunction_01: /* 測試,當支持子函數參數值 */
: /* 預備響應消息*/
responseCode = positiveResponse; /* 肯定響應消息; 賦值內部 NRC = 0x00 */
:
:
CASE subFunction_127: /* 測試,如果支持子函數參數*/
: /* 預備響應消息 */
responseCode = positiveResponse; /* 肯定響應消息; 設置內部 NRC = 0x00 */
BREAK;
DEFAULT:
responseCode = SFNS; /* NRC 0x12: subFunctionNotSupported */
}
suppressPosRspMsgIndicationBit = (A_PDU.A_Data.Parameter1 & 0x80); /* 結果為0x00 或 0x80 */
IF ( (suppressPosRspMsgIndicationBit) && (responseCode == positiveResponse) ) THEN
/* 測試,如果需要積極響應和響應碼為肯定的0x00 */
suppressResponse = TRUE; /* 標記不發送肯定響應消息 */
ELSE
suppressResponse = FALSE; /* 發送相應消息標記 */
ENDIF
BREAK;
CASE Service_without_subFunction: /* 測試,如果服務不包括子函數 */
suppressResponse = FALSE; /* 發送相應消息標記 */
IF (message_length == expected_message_length) THEN
IF (A_PDU.A_Data.Parameter1 == supported) THEN
/* 測試,如果一支持以下SID的數據參數*/
: /* read data and 預備響應消息 */
responseCode = positiveResponse; /* 肯定響應消息;設置內部NRC = 0x00 */
ELSE
responseCode = ROOR; /* NRC 0x31: requestOutOfRange */
ENDIF
ELSE
responseCode = IMLOIF; /* NRC 0x13: incorrectMessageLengthOrInvalidFormat */
ENDIF
BREAK;
DEFAULT:
responseCode = SNS; /* NRC 0x11: serviceNotSupported */
}
IF (A_PDU.TA_type == functional && ((responseCode == SNS) || (responseCode == SFNS) || (responseCode == ROOR))) THEN
/* 抑制否定響應消息 */
ELSE
IF (suppressResponse == TRUE) THEN
/* suppress 肯定響應消息 */
ELSE
/*發送肯定或否定響應*/
ENDIF
ENDIF
當請求消息使用功能尋址,在接收請求消息后,對PDU分析結果帶有NRC=SNS(服務不支持)、NRC=SFNS(子函數不支持)或者NRC=ROOR(請求越界)的情況下,應當不實施帶有否定響應碼(NRC)78 hex的否定響應消息和RCRRP(請起去正確接收,響應掛起)。
7.5.5 在物理尋址和功能尋址模式下的多並發請求消息
UDS(ISO14229-2006) 漢譯(No.7 應用層協議)【未完,待續】
標簽:cte amp 通信 pac condition man 沒有 參數錯誤 family
原文地址:http://www.cnblogs.com/sam-snow-v/p/6028973.html
