車載網絡測試實操源碼_使用CAPL腳本模擬發送符合協議要求(Counter和CRC)的CAN報文

系列文章目錄

車載網絡測試實操源碼_使用CAPL腳本解析hex、S19、vbf文件
車載網絡測試實操源碼_使用CAPL腳本對CAN報文的Counter和CRC進行實時監控
車載網絡測試實操源碼_使用CAPL腳本模擬發送符合協議要求(Counter和CRC)的CAN報文
車載網絡測試實操源碼_使用CAPL腳本實現安全訪問解鎖
車載網絡測試實操源碼_使用CAPL腳本進行DTC自動化測試
車載網絡測試實操源碼_使用CAPL腳本進行UDS刷寫及其自動化測試
車載網絡測試實操源碼_使用CAPL腳本進行UDS協議測試
粉絲問題解答系列文章… …
其他持續更新中… …


文章目錄

  • 系列文章目錄
  • 前言
  • 一、CAPL簡介
  • 二、CAPL腳本示例
  • 總結


前言

在車載軟件開發和測試過程中,我們經常會需要模擬發生CAN報文,特別是有些CAN報文按照協議要求是包含Counter和校驗碼(比如CRC、checksum等)的,這個時候如果使用普通的CAN工具發送固定不變的CAN報文,則不會被認為是有效的CAN報文。如何按照協議模擬counter遞增且校驗碼正確的報文呢?今天我們就來講一下如何使用CAPL腳本模擬發送符合協議要求(Counter和CRC)的CAN報文。


一、CAPL簡介

CAPL(Communication Access Programming Language)是一種基于C語言開發的編程語言,專門用于CANalyzer和CANoe工具環境。CAPL語言的主要特點包括:
語法結構:CAPL具有類C語言的語法結構,支持多種數據類型,如變量、常量、函數、結構和數組。但CAPL簡化了C語言,移除了復雜的指針概念和一些不常用的關鍵字,同時融入了一些C++的概念,如函數重載等。
特性:CAPL語言支持在對象和圖像之間使用可編程語言,可以在PC上進行測試,支持腳本語言,使用可復用的模塊,實時診斷和控制,以及豐富的圖形和可視化效果等。這些特性使得CAPL在系統開發中更加容易、高效、可靠和安全。
編譯過程:CAPL的編譯過程簡潔高效,因為CAPL瀏覽器僅對單個文件進行編譯,無需進行復雜的鏈接操作。與C語言編程相比,CAPL的開發過程更為直接和易于上手。在編譯階段,任何語法或語義的錯誤都會被檢測出來,并在CANalyzer和CANoe的專用“write窗口”中報告運行時錯誤,從而提高了調試的效率。
應用領域:CAPL特別適用于制動系統、壓縮機、氣體機械和其他復雜的實時控制系統應用程序。同時,由于CAPL語言的簡潔和高效,它也被廣泛應用于各種測試和分析任務中。
腳本執行:CAPL腳本是基于事件驅動的,沒有main函數和程序入口。任何時間都有可能觸發CAPL腳本的執行,如按鍵事件、定時器事件、執行測試等。如果沒有事件發生,那么CAPL程序是“閑置的”。

二、CAPL腳本示例

模擬發送符合協議要求(Counter和CRC)的CAN報文的CAPL腳本示例如下:

/*@!Encoding:936*/
includes
{}variables
{//示例CAN報文message can1.0x123 msg_can1_123 = {dlc = 8,BRS = 0,byte(0) = 0xAA,byte(1) = 0xBB,byte(2) = 0x12,byte(3) = 0x34,byte(4) = 0x56,byte(5) = 0x78,byte(6) = 0x00,byte(7) = 0x00};/*定時器*/msTimer timer_10ms;
}/*CRC8 校驗算法*/
byte crc_sae_j1850_zero(byte dataArry[] ,int length)
{byte crc;byte poly;int  i = 0;int  j = 0;crc  = 0x00;poly = 0x1D;//可根據算法需要修改多項式for(i =0 ; i < length; i++){crc = crc ^ dataArry[i];for(j =0 ; j < 8; j++){if ((crc & 0x80) != 0){crc = (crc << 1) ^ poly;}      else{crc = (crc << 1);}    }       crc &= 0xFF;}crc = crc ^ 0x00;return crc;
}/*CRC8 校驗預處理*/
byte CRCChecksum_calc(message * msg,byte crc_byte_idx,byte len)
{byte dataArray[64] ;byte crc;byte i;msg.byte(crc_byte_idx) = 0;//初始化CRC為0for(i = 0; i < len; i++){dataArray[i] = msg.byte(len-1-i);//顛倒字節序(按需)}crc = crc_sae_j1850_zero(dataArray,len);return crc;
}/*填充發送counter遞增、CRC正確的CAN報文*/
void sendValidMsg_InTimer(message * msg,byte counter_byte_idx,byte counter_add,byte crc_byte_idx)
{msg.Dlc = 8;msg.BRS = 0;msg.byte(counter_byte_idx) += counter_add;msg.byte(crc_byte_idx) = CRCChecksum_calc(msg,crc_byte_idx,8);output(msg);
}/*10ms周期定時器*/
on timer timer_10ms
{sendValidMsg_InTimer(msg_can1_123,6,0x10,7);//byte6為counter,每次遞增0x10;byte7為CRCsetTimer(timer_10ms,10);
}/*啟動發送示例*/
on key 'a'
{setTimer(timer_10ms,0);
}/*停止發送示例*/
on key 'b'
{cancelTimer(timer_10ms);
}

以上是模擬發送符合協議要求(Counter和CRC)的CAN報文的CAPL腳本示例,可根據需要修改CRC校驗算法,或者改為checksum校驗和算法等。按下按鍵’a’后啟動發送CAN報文,按下按鍵’b’后停止發送CAN報文,效果如下:
在這里插入圖片描述


總結

本文簡單介紹了如何使用CANoe+CAPL腳本模擬發送符合協議要求(Counter和CRC)的CAN報文,希望對大家有所幫助。各位可根據本文的示例,結合自己的需求,進行完善和二次開發。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14347.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14347.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14347.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用神經網絡學習語言(四)——深度循環神經網絡

相關說明 這篇文章的大部分內容參考自我的新書《解構大語言模型&#xff1a;從線性回歸到通用人工智能》&#xff0c;歡迎有興趣的讀者多多支持。 本文涉及到的代碼鏈接如下&#xff1a;regression2chatgpt/ch10_rnn/char_rnn_batch.ipynb 《循環神經網絡&#xff08;RNN&…

【移花接木】OpenCV4.8 For Java 深度學習 實時人臉檢測

學習《OpenCV應用開發&#xff1a;入門、進階與工程化實踐》一書&#xff0c;學會本文所有技能就這么簡單&#xff01; 做真正的OpenCV開發者&#xff0c;從入門到入職&#xff0c;一步到位&#xff01; 前言 我寫這篇文章之前&#xff0c;我搜索整個網絡文章跟問各種語言大模…

速賣通測評揭秘:如何選擇安全的渠道操作

許多商家對測評存在誤解&#xff0c;認為只需進行幾次測評就能迅速打造爆款。實際上&#xff0c;測評是一個需要計劃和持久性的過程&#xff0c;以便讓平臺檢測到產品的受眾程度并提高產品的曝光和權重。 在進行測評時&#xff0c;安全是首要考慮的問題。平臺可以通過設備、網…

黑馬點評1——短信篇(基于session)

&#x1f308;hello&#xff0c;你好鴨&#xff0c;我是Ethan&#xff0c;一名不斷學習的碼農&#xff0c;很高興你能來閱讀。 ??目前博客主要更新Java系列、項目案例、計算機必學四件套等。 &#x1f3c3;人生之義&#xff0c;在于追求&#xff0c;不在成敗&#xff0c;勤通…

如何使用多種算法解決LeetCode第135題——分發糖果問題

?????? 歡迎來到我的博客。希望您能在這里找到既有價值又有趣的內容&#xff0c;和我一起探索、學習和成長。歡迎評論區暢所欲言、享受知識的樂趣&#xff01; 推薦&#xff1a;數據分析螺絲釘的首頁 格物致知 終身學習 期待您的關注 導航&#xff1a; LeetCode解鎖100…

WPF 的 style 定義 使用 繼承 復用

style 樣式 如何定義一個 style 樣式 <Button Content"樣式" Width"100" Height"50"><Button.Style><Style></Style></Button.Style></Button>擁有的屬性 targetType “” 針對什么類型生效setter 設置屬…

Ubuntu中 petalinux 安裝 移植linux --tftp/tftp-hpa服務的方法

Xilinx 文檔 PetaLinux 指南&#xff1a;如何創建 PetaLinux 環境 &#xff08;2019.1&#xff09; PetaLinux工具參考指南 PetaLinux安裝詳解(Xilinx , linux, zynq, zynqMP) petalinux 2020.1安裝教程 一、PetaLinux工具和庫安裝 PetaLinux 工具要求主機系統 /bin/sh 為“b…

18.網絡編程

網絡編程 又稱為Socket編程。 Java中網絡編程主要是以Java語言完成信息數據在網絡上的傳輸。 網絡 計算機網絡&#xff0c;指的是將不同地理位置的多臺計算機連接起來&#xff0c;可以實現信息共享和信息傳輸。 Java是Internet上的語言&#xff0c;提供了對網絡應用程序的…

筆記 | 《css權威指南》

網絡安全色 URL text-indent line-height & vertical-align 字體 font-weight 400 normal 700 bold background-attachment

SpringBoot項目集成JetCache緩存框架步驟

JetCache是阿里開源的基于java開發的緩存框架&#xff0c;支持多種緩存類型&#xff1a;本地緩存、分布式緩存、多級緩存。能夠滿足不同業務場景的緩存需求。 1.導入依賴 <!--jetcache緩存 --> <dependency><groupId>com.alicp.jetcache</groupId>&l…

【調試筆記-20240516-Windows-使用VS2019編譯edk2(上)】

調試筆記-系列文章目錄 調試筆記-20240516-Windows-使用VS2019編譯edk2&#xff08;上&#xff09; 文章目錄 調試筆記-系列文章目錄調試筆記-20240516-Windows-使用VS2019編譯edk2&#xff08;上&#xff09; 前言一、安裝開發工具1. 安裝 VS20192. 安裝 Python 3.103. 安裝 …

pdf加水印怎么加?3種添加水印方法分享

pdf加水印怎么加&#xff1f;PDF加水印不僅是為了保護文檔內容&#xff0c;確保信息的安全性和完整性&#xff0c;更是一種有效的版權保護措施。通過添加水印&#xff0c;您可以在文檔中嵌入公司名稱、日期、編號等信息&#xff0c;以明確文檔的歸屬權和使用限制。此外&#xf…

小而美:兩步完成從源碼到應用的極簡交付

作者&#xff1a;花三&#xff08;王俊&#xff09; Serverless 應用引擎 SAE 是阿里云推出的一款零代碼改造、極簡易用、自適應彈性的容器化應用托管平臺&#xff0c;面市以來為幾萬家企業客戶提供服務&#xff0c;運行穩定&#xff0c;廣受好評。 SAE 的出現解決了眾多企業…

Python庫之lxml的簡介、安裝、使用方法詳細攻略

Python庫之lxml的簡介、安裝、使用方法詳細攻略 簡介 lxml是一個用于處理XML和HTML文檔的Python庫&#xff0c;它提供了簡單易用的API來解析和生成這些文檔。lxml以其性能和易用性而受到廣泛歡迎&#xff0c;特別適合于需要處理大量數據或需要高性能解析的場景。 安裝 安裝…

運行時異常和編譯時異常的區別

Java中的異常被分為兩大類&#xff1a;編譯時異常和運行時異常。 都是RuntimeException類及其子類異常&#xff0c;如NullPointerException、IndexOutOfBoundsException。這些異常是不檢查異常&#xff0c;運行時異常的特點是Java編譯器不會檢查它&#xff0c;程序中可以選擇捕…

純代碼如何實現WordPress搜索包含評論內容?

WordPress自帶的搜索默認情況下是不包含評論內容的&#xff0c;不過有些WordPress網站評論內容比較多&#xff0c;而且也比較有用&#xff0c;所以想要讓用戶在搜索時也能夠同時搜索到評論內容&#xff0c;那么應該怎么做呢&#xff1f; 網絡上很多教程都是推薦安裝SearchWP插…

RK3588 Android13 預安裝自己的apk應用及把這個應用設置為默認桌面

1、cp -rf device/rockchip/rk3588/rk3588m_s/preinstall device/rockchip/rk3588/rk3588_t/ 2、給device/rockchip/rk3588/rk3588_t/preinstall/的存放app的文件夾改名為app-imms2&#xff0c;在app-imms2放入app-imms2.apk,編譯安卓源碼即可&#xff0c; 3、編譯完會在out/…

android sp指針的cast

sp<Base> b; sp<Derived> d; b static_cast<Base*>(d.get()); 對于c原生的智能指針&#xff0c;有static_pointer_cast之類的操作方法。可以看cppreference。

Spring Web MVC介紹及詳細教程

目錄 1.什么是Spring Web MVC&#xff1f; 1.1 MVC定義 1.2 Spring MVC與MVC關系 2.為什么要學習Spring MVC 3.項目創建 4.Spring MVC連接 4.1 RequestMapping 4.2 PostMapping和GetMapping 5.Spring MVC參數獲取 5.1 獲取單個參數 5.2 獲取多個參數 5.3 獲取普通對…

通用代碼生成器應用場景一,項目前期

通用代碼生成器是一種自動化編程軟件&#xff0c;是一種先進的編譯系統。它具有表級抽象。把系統抽象為域對象&#xff0c;枚舉&#xff0c;彈性登錄模塊&#xff0c;復雜版面和圖形報表。使用通用代碼生成器完成項目前期&#xff0c;比直接使用對應的高級語言快的多&#xff0…