基于CAN總線通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)
3.2 數(shù)據(jù)接收機(jī)制
CAN接收機(jī)制負(fù)責(zé)將數(shù)據(jù)從CAN總線上接收下來(lái),按照數(shù)據(jù)源節(jié)點(diǎn)的地址將其還原為發(fā)送前的格式,準(zhǔn)確無(wú)誤的傳遞給上層,并負(fù)責(zé)為上層提供接口函數(shù)。在CPU將數(shù)據(jù)取走以后,清空相應(yīng)的數(shù)組。
在底層開辟了一個(gè)臨時(shí)緩沖區(qū)用于暫時(shí)存放從CAN總線上接收下的數(shù)據(jù),臨時(shí)緩沖區(qū)采用二維數(shù)組的格式,容量為4*3*64。第一維的容量為4,分別指示發(fā)送節(jié)點(diǎn)的地址;第二維容量為3,作為數(shù)據(jù)的擴(kuò)展緩存,指示可連續(xù)存放來(lái)自于同一節(jié)點(diǎn)的包的數(shù)目;第三維的容量為64,用來(lái)存放經(jīng)過(guò)整理以后的數(shù)據(jù)。一般來(lái)說(shuō),開辟一個(gè)二維的空間就可以使協(xié)議周轉(zhuǎn),但是,在實(shí)際系統(tǒng)中可能會(huì)出現(xiàn)CPU還未能將整理完畢的數(shù)據(jù)取走此時(shí)又接到來(lái)自于同一節(jié)點(diǎn)的新的數(shù)據(jù),這樣就可能導(dǎo)致新的數(shù)據(jù)覆蓋掉原來(lái)的數(shù)據(jù),造成數(shù)據(jù)的丟失。為避免這種潛在地危險(xiǎn),因此開辟了三維空間,在最壞的情況下,每個(gè)節(jié)點(diǎn)都可同時(shí)容納來(lái)自于同一節(jié)點(diǎn)連續(xù)發(fā)送的3包數(shù)據(jù),大大降低了數(shù)據(jù)丟失的可能性。接收數(shù)據(jù)流程如圖二所示。
圖 二: 數(shù)據(jù)發(fā)送流程
5 總結(jié)
本文創(chuàng)新點(diǎn):CAN總線以其卓越的特性、極高的可靠性和獨(dú)特的設(shè)計(jì),在工業(yè)過(guò)程監(jiān)控設(shè)備的互聯(lián)方面得到廣泛的應(yīng)用,受到工業(yè)界的廣泛重視,并被公認(rèn)為是最有前途的現(xiàn)場(chǎng)總線之一。作為通用、有效、可靠及經(jīng)濟(jì)的平臺(tái),CA N協(xié)議也已經(jīng)廣泛地受到了歡迎。由于CAN2.0規(guī)范固有的局限性,客觀上要求用戶建立高層協(xié)議對(duì)CAN進(jìn)行完善。本文所設(shè)計(jì)的CAN總線應(yīng)用層協(xié)議已經(jīng)投入使用,具有簡(jiǎn)單、靈活、移植方便等特點(diǎn)。
評(píng)論