生活随笔
收集整理的這篇文章主要介紹了
接收诊断响应的相关CAPL函数,具有较高的可复用性
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- 🍅 我是螞蟻小兵,專注于車載診斷領(lǐng)域,尤其擅長(zhǎng)于對(duì)CANoe工具的使用
- 🍅 尋找組織 ,答疑解惑,摸魚(yú)聊天,博客源碼,點(diǎn)擊加入👉【相親相愛(ài)一家人】
- 🍅 玩轉(zhuǎn)CANoe,博客目錄大全,點(diǎn)擊跳轉(zhuǎn)👉
📘前言
- 🍅 CAPL診斷相關(guān)函數(shù)的再封裝(發(fā)送相關(guān)),具有較高的可復(fù)用性中集中學(xué)習(xí)了診斷發(fā)送相關(guān)的函數(shù),本節(jié)就學(xué)習(xí)下接收相關(guān)CAPL函數(shù)
- 🍅 演示軟硬件環(huán)境 Windows11 x64 ; CANoe 11 SP2 x64,Python 3.8 x64
目錄
- 📘前言
- 📙 診接收送相關(guān)函數(shù)
- DiagGetRespPrimitiveSize (獲取診斷響應(yīng)的單個(gè)數(shù)據(jù))
- diagGetPrimitiveData (獲取診斷返回的所有數(shù)據(jù))
- DiagGetRespParameter(數(shù)值類型)
- DiagGetRespParameter(字符串類型)
- DiagGetRespParameter(byte數(shù)組)
- 🌎總結(jié)
📙 診接收送相關(guān)函數(shù)
- 為了和診斷發(fā)送函數(shù)一致性,減少diagResponse變量的接入,只選擇了 DiagGetRespxx形式的函數(shù)
DiagGetRespPrimitiveSize (獲取診斷響應(yīng)的單個(gè)數(shù)據(jù))
-
封裝函數(shù)名:Diag_SendAndGetResponseData;
-
DiagGetRespPrimitiveSize : 根據(jù)索引獲取診斷返回的數(shù)據(jù)大小,
-
DiagGetRespPrimitiveByte : 根據(jù)索引讀取診斷返回?cái)?shù)據(jù)
void Diag_SendAndGetResponseData(diagrequest
*DiagReq
, long ExpResCode
,byte SendType
, byte resData
[], long & resSize
)
{long i
;Send_DiagRequest_diag(DiagReq
,ExpResCode
,SendType
);if(TestGetVerdictLastTestCase() == 0){resSize
= DiagGetRespPrimitiveSize(DiagReq
);if (elCount(resData
) >= resSize
){for(i
= 0; i
< resSize
; i
++){resData
[i
] = DiagGetRespPrimitiveByte(DiagReq
, i
); }TestStepPass("Response Data getted.");}else{TestStepFail("Parameter resData arrary too small.");} }
}
testcase
TC_004()
{ const long NoResponse
= 0;const long PostitiveResponse
= -1;const long NrcResponse_7E
= 0x7E;const long phy_diagRequest
= 0;byte resData
[256];long resSize
; diagRequest System_Supplier_ECU_Hardware_Version_Number_Read ECU_HW_VersionNumber_Read
; diagSetTarget(ECU_Name
);Diag_SendAndGetResponseData(ECU_HW_VersionNumber_Read
, PostitiveResponse
, phy_diagRequest
,resData
,resSize
);
}
<testmodule title="診斷函數(shù)測(cè)試" version="1.1"><externalref type="url" title="CSDN螞蟻小兵">https://blog.csdn.net/qq_34414530
</externalref><testgroup title="TestGroup_1"><capltestcase name="TC_001" title="TC_001"/> <capltestcase name="TC_002" title="TC_002"/><capltestcase name="TC_003" title="TC_003"/><capltestcase name="TC_004" title="TC_004"/></testgroup>
</testmodule>
diagGetPrimitiveData (獲取診斷返回的所有數(shù)據(jù))
-
封裝函數(shù)名:Diag_SendAndGetResponseData;
-
diagGetPrimitiveData : 獲取診斷返回的所有數(shù)據(jù),但是沒(méi)有CAP里沒(méi)有內(nèi)置diagGetRespPrimitiveData 這個(gè)函數(shù),這就意味著要多定義一個(gè)diagResponse 診斷變量,所以在接收診斷函數(shù)的時(shí)候,一般不用這個(gè),用上面那個(gè)函數(shù)就行
void Diag_SendAndGetResponseData(diagrequest
*DiagReq
,diagResponse
*DiagRes
, long ExpResCode
,byte SendType
, byte resData
[], long & resSize
)
{long i
;Send_DiagRequest_diag(DiagReq
,ExpResCode
,SendType
);if(TestGetVerdictLastTestCase() == 0){resSize
= DiagGetRespPrimitiveSize(DiagReq
);if (elCount(resData
) >= resSize
){diagGetPrimitiveData (DiagRes
,resData
,resSize
);TestStepPass("Response Data getted.");}else{TestStepFail("Parameter resData arrary too small.");} }
}
DiagGetRespParameter(數(shù)值類型)
-
封裝函數(shù)名:Diag_SendAndGetParameter_numeric ;
-
因?yàn)閜arameter是在cdd/odx診斷數(shù)據(jù)文件中定義命名的,所以要求cdd/odx做的比較完善
-
函數(shù)help文檔參數(shù):double diagGetRespParameter (diagRequest req, char parameterName[]); 返回的是數(shù)值
long Diag_SendAndGetParameter_numeric(diagrequest
*DiagReq
, char Parameter
[], byte resData
[],int64
& resValue
)
{long i
,resSize
;resSize
= 0;Send_DiagRequest_diag(DiagReq
);if(TestGetVerdictLastTestCase() == 0){resSize
= DiagGetRespPrimitiveSize(DiagReq
);if (elCount(resData
) >= resSize
){resValue
= (int64
)DiagGetRespParameter(DiagReq
,Parameter
);write("**resValue**:0x%I64x",resValue
);TestStepPass("Response Data getted.");}else{TestStepFail("Parameter resData arrary too small.");} }return resSize
;
}
testcase
TC_005()
{ byte resData
[256];int64 resValue
; diagRequest DefaultSession_Start DefaultSession_Start
; diagSetTarget(ECU_Name
);Diag_SendAndGetParameter_numeric(DefaultSession_Start
,"P2",resData
,resValue
);
}
<testmodule title="診斷函數(shù)測(cè)試" version="1.1"><externalref type="url" title="CSDN螞蟻小兵">https://blog.csdn.net/qq_34414530
</externalref><testgroup title="TestGroup_1"><capltestcase name="TC_001" title="TC_001"/> <capltestcase name="TC_002" title="TC_002"/><capltestcase name="TC_003" title="TC_003"/><capltestcase name="TC_004" title="TC_004"/><capltestcase name="TC_005" title="TC_005"/></testgroup>
</testmodule>
DiagGetRespParameter(字符串類型)
- 封裝函數(shù)名:Diag_SendAndGetParameter_string;
- 函數(shù)參數(shù):long diagGetRespParameter (diagRequest req, char parameterName[], char buffer[], dword bufferLen); 返回的是char 數(shù)組
long Diag_SendAndGetParameter_string(diagrequest
*DiagReq
, char Parameter
[], char resData
[])
{long i
,resSize
;resSize
= 0;Send_DiagRequest_diag(DiagReq
);if(TestGetVerdictLastTestCase() == 0){resSize
= DiagGetRespPrimitiveSize(DiagReq
);if (elCount(resData
) >= resSize
){DiagGetRespParameter(DiagReq
,Parameter
,resData
,resSize
);write("**resValue**:%s",resData
);TestStepPass("Response Data getted.");}else{TestStepFail("Parameter resData arrary too small.");} } return resSize
;
}
testcase
TC_006()
{ char resData
[256];int64 resValue
; diagRequest System_Supplier_ECU_Hardware_Version_Number_Read ECU_HW_VersionNumber_Read
; diagSetTarget(ECU_Name
);Diag_SendAndGetParameter_string(ECU_HW_VersionNumber_Read
,"Hardware_Version/DID_F193_VersionNumber",resData
);
}
<testmodule title="診斷函數(shù)測(cè)試" version="1.1"><externalref type="url" title="CSDN螞蟻小兵">https://blog.csdn.net/qq_34414530
</externalref><testgroup title="TestGroup_1"><capltestcase name="TC_001" title="TC_001"/> <capltestcase name="TC_002" title="TC_002"/><capltestcase name="TC_003" title="TC_003"/><capltestcase name="TC_004" title="TC_004"/><capltestcase name="TC_005" title="TC_005"/><capltestcase name="TC_006" title="TC_006"/></testgroup>
</testmodule>
DiagGetRespParameter(byte數(shù)組)
- 封裝函數(shù)名:Diag_SendAndGetParameter_raw;
- 函數(shù)參數(shù):long diagGetRespParameter (diagRequest req, char parameterName[], char buffer[], dword bufferLen); 返回的是char 數(shù)組
long Diag_SendAndGetParameter_raw(diagrequest
*DiagReq
, char Parameter
[], byte resData
[])
{long i
,resSize
;resSize
= 0;Send_DiagRequest_diag(DiagReq
);if(TestGetVerdictLastTestCase() == 0){resSize
= DiagGetRespPrimitiveSize(DiagReq
);if (elCount(resData
) >= resSize
){diagGetRespParameterRaw (DiagReq
,Parameter
,resData
,resSize
);write("**resValue**:0x%x",resData
[0]);TestStepPass("Response Data getted.");}else{TestStepFail("Parameter resData arrary too small.");} } return resSize
;
}
testcase
TC_007()
{ byte resData
[256];int64 resValue
; diagRequest System_Supplier_ECU_Hardware_Version_Number_Read ECU_HW_VersionNumber_Read
; diagSetTarget(ECU_Name
);Diag_SendAndGetParameter_raw(ECU_HW_VersionNumber_Read
,"Hardware_Version/DID_F193_VersionNumber",resData
);
}
🌎總結(jié)
- 🍅 有需要演示中所用demo工程的,可以關(guān)注下方公眾號(hào)網(wǎng)盤(pán)自取啦,感謝閱讀。
- 🍅 資料網(wǎng)盤(pán)路徑:CANoe學(xué)習(xí)資料?CANoe學(xué)習(xí)資料?CANoe演示工程代碼?CAPL Scripts>診斷函數(shù)
- 🚩要有最樸素的生活,最遙遠(yuǎn)的夢(mèng)想,即使明天天寒地凍,路遙馬亡!
- 🚩如果這篇博客對(duì)你有幫助,請(qǐng) “點(diǎn)贊” “評(píng)論”“收藏”一鍵三連 哦!碼字不易,大家的支持就是我堅(jiān)持下去的動(dòng)力。
總結(jié)
以上是生活随笔為你收集整理的接收诊断响应的相关CAPL函数,具有较高的可复用性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。