如何構建專屬自己的CAN bus應用層協議

2021-09-23 06:56:17 字數 1778 閱讀 2576

隨著can-bus相關晶元**的下降,內建can控制器mcu的增多,can-bus當前已經進入了眾多早期由於成本問題無法使用的領域,成為極具生命力的現場匯流排,今天我們就來**如何構建專屬自己的can-bus應用層協議。

在can-bus網路上,can報文以廣播的形式傳送,can報文不包含位址資訊,是否處理接收到的can報文由接收點的軟體確定。can-bus只提供可靠的報文傳輸服務,can報文的使用由應用者定義, 所以can網路中的節點要相互通訊就必須制定乙個統一的規則。can應用層協議就是這樣乙個規則。

這個規則,定義了can報文中幀id及幀資料的使用方式,如將幀id定義為需要處理該幀資料的can節點位址等。根據應用場合的不同,國際上出現了多種can應用層協議,常見的can-bus應用層協議如下:

接下來,我們看一下如何構建can-bus應用層協議

構建乙個現場匯流排網路,需要解決的關鍵技術問題有:

匯流排傳輸資訊的速度、容量、優先等級、節點容量等;

高電磁干擾環境下的可靠資料傳輸;

最大傳輸距離時延時大小的確定;

網路的容錯技術;

網路的監控和故障診斷功能。

要解決以上問題,需要充分考慮現場匯流排網路所採用的匯流排型別,因為以上問題和匯流排的效能特點是密切相關的,那麼我們就看一下can-bus匯流排的上述特性:

can-bus網路傳輸速度最高可達1mbps,並採用無損仲裁,通過報文識別符號指示報文優先順序;

can-bus採用差分訊號傳輸,並採用可靠的資料校驗和錯誤檢測機制;

can-bus採用幀傳輸,每個報文允許傳輸最多8個位元組,幀結構有嚴格規定,能夠確定最大傳輸延時;

can-bus具有可靠的錯誤機制和檢測機制,傳送的資訊遭到破壞後可以重新傳送;節點在錯誤嚴重的情況下,具有自動退出匯流排的功能;

可以通過制定嚴禁的can-bus應用層協議解決網路監控和診斷。

can報文的分配

包含報文識別符號的分配和報文資料的分配,報文格式的定義,實質是將can報文的分配規則進行詳細的描述。

報文id的定義:

can2.0a幀:11位id

can2.0b幀,29位id

報文資料的定義:每幀報文最多包含8位元組資料

can網路資料通訊的實現

在can網路中,通過報文的識別符號進行資訊的區分,因此通過報文的各種識別符號分配來達到建立資訊鏈結的目的。

can應用層協議:面向節點和面向報文的協議

資料通訊協議基本上可以劃分為「面向節點的協議」和「面向報文的協議」兩種型別,如下圖:

制定乙個can應用層協議

為了給讀者演示can應用層協議的開發和使用方法,下面定義乙個簡單的can應用協議棧,該協議棧中只用到can標準幀中的資料幀,幀id中的11個位的分配和使用方法如下表所列,協議中另外還定義了功能引數長度變數fundatalen的功能引數陣列fundata,該陣列在需要時可以為某些特定功能函式提供足夠的控制引數。

javascript專題 如何構建自己的js庫

首先看看這個 function 紅色括號裡面是乙個匿名函式,紅色括號是分割,表示裡面的函式是乙個部分,綠色的括號表示乙個運算子,表示紅色括號裡面的函式要執行。相當於定義完乙個匿名函式後讓它直接執行。構建自己的js庫就是用以下模板 function 定義自己的命名空間 window ic window...

如何在華為雲上構建專屬簡訊平台

一 目標 簡訊傳送主要通過兩種方式,閘道器傳送和裝置傳送。閘道器傳送存在安全性問題,也就是說,所有傳送的內容,在後台都可以被審核。如果傳送的是機密資訊,是不能用這種方式的。裝置傳送是直接通過裝置傳送到基站,基站再發到對方手機,沒有中間人工參與的環節,安全性非常好。問題是,如何把裝置連線到華為雲平台的...

教你打包自己的專屬docker映象

前序 一 docker環境的搭建 1 檢查系統是否可以上網 2 安裝epel的軟體倉庫 4 安裝docker系統環境 5 啟動docker服務 7 測試基礎映象centos是否可用 二 建立自己的定製映象 序 這裡以定製nginx應用為例,以下是具體操作 1 首先建立乙個基目錄 也就是建立乙個資料夾...