日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

接收诊断响应的相关CAPL函数,具有较高的可复用性

發(fā)布時(shí)間:2023/12/31 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 接收诊断响应的相关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ù)

// @DiagReq :發(fā)送診斷 // @ExpResCode:可以對(duì)診斷響應(yīng)進(jìn)行判斷,可以期望正響應(yīng),NRC,或者沒(méi)響應(yīng) // @SendType :可以指定物理請(qǐng)求還是功能請(qǐng)求 // @resData : 讀取數(shù)據(jù) // @resSize :讀取返回?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 代碼:
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); }
  • xml 代碼:
<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>
  • 測(cè)試報(bào)告:


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ù)就行

// @DiagReq :發(fā)送診斷 // @ExpResCode:可以對(duì)診斷響應(yīng)進(jìn)行判斷,可以期望正響應(yīng),NRC,或者沒(méi)響應(yīng) // @SendType :可以指定物理請(qǐng)求還是功能請(qǐng)求 // @resData : 讀取數(shù)據(jù) // @resSize :讀取返回?cái)?shù)據(jù)的大小 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ù)值

// @DiagReq :發(fā)送診斷 // @Parameter : cdd paramter 字符串 // @resData : 讀取數(shù)據(jù) // @resSize :讀取返回?cái)?shù)據(jù)的大小 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){// DiagGetRespParameter 返回值時(shí)double 類型,但實(shí)際上都是ascii// 因?yàn)閐ouble占8個(gè)字節(jié),所以轉(zhuǎn)int64比較合適resValue = (int64)DiagGetRespParameter(DiagReq,Parameter);write("**resValue**:0x%I64x",resValue);TestStepPass("Response Data getted.");}else{TestStepFail("Parameter resData arrary too small.");} }return resSize; }
  • testcase 代碼:
testcase TC_005() { byte resData[256];int64 resValue; diagRequest DefaultSession_Start DefaultSession_Start; //1001diagSetTarget(ECU_Name);Diag_SendAndGetParameter_numeric(DefaultSession_Start,"P2",resData,resValue); }
  • xml 代碼:
<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>
  • 測(cè)試結(jié)果

DiagGetRespParameter(字符串類型)

  • 封裝函數(shù)名:Diag_SendAndGetParameter_string;
  • 函數(shù)參數(shù):long diagGetRespParameter (diagRequest req, char parameterName[], char buffer[], dword bufferLen); 返回的是char 數(shù)組
// @DiagReq :發(fā)送診斷 // @Parameter : cdd paramter 字符串 // @resData : 讀取數(shù)據(jù)(字符串形式) // @resSize :讀取返回?cái)?shù)據(jù)的大小 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 代碼:
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); }
  • xml 代碼:
<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>
  • 測(cè)試結(jié)果


DiagGetRespParameter(byte數(shù)組)

  • 封裝函數(shù)名:Diag_SendAndGetParameter_raw;
  • 函數(shù)參數(shù):long diagGetRespParameter (diagRequest req, char parameterName[], char buffer[], dword bufferLen); 返回的是char 數(shù)組
// @DiagReq :發(fā)送診斷 // @Parameter : cdd paramter 字符串 // @resData : 讀取數(shù)據(jù)(字節(jié)數(shù)組形式) // @resSize :讀取返回?cái)?shù)據(jù)的大小 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 代碼:
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); }
  • 測(cè)試結(jié)果


🌎總結(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ò),歡迎將生活随笔推薦給好友。