本發明涉及一種算法,具體的說,涉及了一種基于can2.0長報文數據標準幀的組織算法。
背景技術:
can總線協議是一種用于實時應用的串行通訊總線協議,它可以使用雙絞線來傳輸信號,是世界上應用最廣泛的現場總線之一。最開始can總線協議用于汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束。該協議的健壯性使其用途延伸到其他自動化和工業應用,例如航空航天、機器人、數控機床、醫療器械及傳感器等。can協議的特性包括完整性的串行數據通訊、提供實時支持、傳輸速率高達1mb/s、同時具有11位的尋址以及檢錯能力。can總線協議規定一幀數據最多攜帶8個字節的數據,這使得利用can總線協議傳送長數據報文時必須將完整的用戶報文拆分成若干幀can協議幀,通常情況下,用戶數據報文都分為許多不同類型的數據,以讓can總線上的通信結點區分所接受到的數據類型,現有的數據幀沒有幀序號的標識,出現混亂時難以區分。因此,如何區分用戶數據類型,以及如何使can協議幀的組織變得簡單清晰、易于實現,就成為了一個工程師不得不面對的問題。
為了解決以上存在的問題,人們一直在尋求一種理想的技術解決方案。
技術實現要素:
本發明的目的是針對現有技術的不足,從而提供一種設計科學、簡單清晰、通用性高、穩定性強、識別快速準確的基于can2.0長報文數據標準幀的組織算法。
為了實現上述目的,本發明所采用的技術方案是:一種基于can2.0長報文數據標準幀的組織算法,標準幀的11位標識符分為報文類型部分和幀序號部分,所述報文類型部分為高8位,所述幀序號部分為低3位。
基于上述,包括以下步驟:1)根據報文長度計算需要發送的總幀數;2)第一個標準幀記錄本次報文的總幀數,且第一個標準幀的幀序號為0;3)從第二個標準幀開始到最后一個標準幀結束,其標準幀的幀序號從1-7循環使用。
基于上述,總幀數的計算方法為n=((userdatalen+7)/8)+1其中n為總幀數,userdatalen為報文字節數。
本發明相對現有技術具有突出的實質性特點和顯著的進步,具體的說,本發明采用can2.0標準幀格式,該格式含有11位標識符,將11位標識符分為兩部分,第一部分為高8位,用來存放用戶定義的數據報文的類型;第二部分為低3位,用來在發送can數據幀時存放幀序號用,接受can數據幀時用以根據幀序號先后順序組織用戶報文。其具有設計科學、簡單清晰、通用性高、穩定性強、識別快速準確的優點。
具體實施方式
下面通過具體實施方式,對本發明的技術方案做進一步的詳細描述。
一種基于can2.0長報文數據標準幀的組織算法,采用can2.0標準幀格式進行數據傳輸,兼容can2.0a和can2.0b協議。將標準幀的11位標識符分為報文類型部分和幀序號部分,所述報文類型部分用于區分報文數據的類型,所述報文類型部分為高8位,所述幀序號部分為低3位。當接收端接收到can數據幀后,通過取得11位標識符高8位解析出來報文類型,通過取得11位標識符的低3位解析出來幀序號。根據報文類型和幀序號準確判斷數據幀是否發生丟幀等混亂,如果發生混亂,則及時丟棄數據,避免數據錯誤。
優選地,該組織算法包括以下步驟:1)根據報文長度計算需要發送的總幀數;2)第一個標準幀記錄本次報文的總幀數,且第一個標準幀的幀序號為0;3)從第二個標準幀開始到最后一個標準幀結束,其標準幀的幀序號從1-7循環使用。
當接收端接收到can數據幀后,通過取得11位標識符高8位解析出來用戶報文類型,通過取得11位標識符的低3位解析出來幀序號,如果幀序號為0,則該幀為第1幀,根據該第1幀的8字節內容解析得出本次接收后續還有多少幀。接收過程中可通過判斷幀序號是否連續來識別出是否有丟幀。
優選地,總幀數的計算方法為n=((userdatalen+7)/8)+1,其中n為總幀數,userdatalen為報文字節數。
最后應當說明的是:以上實施例僅用以說明本發明的技術方案而非對其限制;盡管參照較佳實施例對本發明進行了詳細的說明,所屬領域的普通技術人員應當理解:依然可以對本發明的具體實施方式進行修改或者對部分技術特征進行等同替換;而不脫離本發明技術方案的精神,其均應涵蓋在本發明請求保護的技術方案范圍當中。