邵丙新
摘要:文章介紹計(jì)算機(jī)通過(guò)CAN總線技術(shù)實(shí)現(xiàn)的計(jì)算機(jī)數(shù)據(jù)采集、溫濕度測(cè)量和控制技術(shù),重點(diǎn)簡(jiǎn)介CAN總線的特點(diǎn)、數(shù)據(jù)格式、報(bào)文和濾波器的設(shè)置。
關(guān)鍵詞:CAN總線;計(jì)算機(jī)遠(yuǎn)程控制;設(shè)計(jì)應(yīng)用
現(xiàn)代化工業(yè)生產(chǎn)和商品銷售中離不開(kāi)信息技術(shù),無(wú)論是分散式還是集中式生產(chǎn)經(jīng)營(yíng)活動(dòng)都需要信息的參與。大型企業(yè)的自動(dòng)化生產(chǎn)技術(shù)和信息通信的結(jié)合得更加緊密。CAN總線技術(shù)以其可靠性高,抗干擾能力強(qiáng),應(yīng)用靈活、方便等特點(diǎn)得到廣泛的應(yīng)用。本文介紹CAN在計(jì)算機(jī)遠(yuǎn)程信息傳送和控制中的應(yīng)用。
1 CAN總線技術(shù)概述
CAN(Controller Area Net)即控制器局域網(wǎng)是主要用于各種過(guò)程(設(shè)備)監(jiān)測(cè)及控制的一種網(wǎng)絡(luò)。CAN最初是則德國(guó)BOSCH公司為汽車的監(jiān)測(cè)、控制系統(tǒng)而設(shè)計(jì)的。CAN的信號(hào)傳輸采用短幀結(jié)構(gòu),每一幀的有效字節(jié)數(shù)為8個(gè),因而傳輸時(shí)間短,受干擾的概率低。當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)向總線傳送數(shù)據(jù)時(shí),它采用總線仲裁機(jī)制,高優(yōu)先級(jí)的節(jié)點(diǎn)優(yōu)先發(fā)送,優(yōu)先級(jí)低的節(jié)點(diǎn)停止發(fā)送,從而不免總線沖突。由于CAN具有卓越的特性極高的可靠性,特別適合于工業(yè)過(guò)程中監(jiān)控設(shè)備的互連,因此,越來(lái)越受到工業(yè)界的重視。
2 CAN總線報(bào)文和幀類型
2.1 CAN報(bào)文:CAN是以報(bào)文的形式傳輸信息的,報(bào)文包括ID號(hào)和數(shù)據(jù)場(chǎng)兩個(gè)部分,標(biāo)準(zhǔn)ID號(hào)是11位的,擴(kuò)展ID號(hào)是29位,數(shù)字場(chǎng)可以是1-8個(gè)字節(jié)的數(shù)據(jù)。報(bào)文以幀的形式傳輸。CAN的報(bào)文可以是一對(duì)一傳輸,也可以多對(duì)一或一對(duì)多的形式,這取決于CAN節(jié)點(diǎn)濾波器的設(shè)置。CAN總線中傳送的報(bào)文是以幀的形式出現(xiàn)的,每幀由7部分組成。CAN協(xié)議支持兩種報(bào)文格式,即標(biāo)準(zhǔn)格式和擴(kuò)展格式。兩者的區(qū)別是標(biāo)識(shí)符(ID)長(zhǎng)度不同,標(biāo)準(zhǔn)格式為11位,擴(kuò)展格式為29位。在標(biāo)準(zhǔn)格式中,報(bào)文的起始位稱為幀起始(SOF),然后是由11位標(biāo)識(shí)符和遠(yuǎn)程發(fā)送請(qǐng)求位(RTR)組成的仲裁場(chǎng)。RTR位標(biāo)明是數(shù)據(jù)幀還是請(qǐng)求幀,在請(qǐng)求幀中沒(méi)有數(shù)據(jù)字節(jié)??刂茍?chǎng)包括標(biāo)識(shí)符擴(kuò)展位(IDE),指出是標(biāo)準(zhǔn)格式還是擴(kuò)展格式。它還包括一個(gè)保留位 (ro),為將來(lái)擴(kuò)展使用。它的最后四個(gè)字節(jié)用來(lái)指明數(shù)據(jù)場(chǎng)中數(shù)據(jù)的長(zhǎng)度(DLC)。數(shù)據(jù)場(chǎng)范圍為0~8個(gè)字節(jié),其后有一個(gè)檢測(cè)數(shù)據(jù)錯(cuò)誤的循環(huán)冗余檢查(CRC)。應(yīng)答場(chǎng)(ACK)包括應(yīng)答位和應(yīng)答分隔符。發(fā)送站發(fā)送的這兩位均為隱性電平(邏輯1),這時(shí)正確接收?qǐng)?bào)文的接收站發(fā)送主控電平(邏輯0)覆蓋它。用這種方法,發(fā)送站可以保證網(wǎng)絡(luò)中至少有一個(gè)站能正確接收到報(bào)文。報(bào)文的尾部由幀結(jié)束標(biāo)出。在相鄰的兩條報(bào)文間有一很短的間隔位,如果這時(shí)沒(méi)有站進(jìn)行總線存取,總線將處于空閑狀態(tài)。
2.2 CAN的幀結(jié)構(gòu)和功能位的定義:
CAN有以下四種不同類型的幀:
(1)數(shù)據(jù)幀(DATA):數(shù)據(jù)幀將數(shù)據(jù)從發(fā)送器傳輸?shù)绞瞻l(fā)器。
(2)遠(yuǎn)程幀(Remote):總線單元發(fā)出遠(yuǎn)程幀,請(qǐng)求發(fā)送具有同一標(biāo)識(shí)的數(shù)據(jù)幀。
(3)錯(cuò)誤幀(Error):任何單元檢測(cè)到總線錯(cuò)誤就發(fā)出錯(cuò)誤幀。
(4)過(guò)載幀(Overload):過(guò)載幀用在相鄰數(shù)據(jù)幀或遠(yuǎn)程幀之間提供附加的延時(shí)。
數(shù)據(jù)幀或遠(yuǎn)程幀與前一個(gè)幀之間都會(huì)有一個(gè)間隔域,即幀間隔,作為一個(gè)幀的界定。數(shù)據(jù)幀和遠(yuǎn)程幀可以使用標(biāo)準(zhǔn)幀及擴(kuò)展幀兩種格式。
在報(bào)文傳輸時(shí),不同的幀具有不同的傳輸結(jié)構(gòu),下面將分別介紹四種傳輸幀的結(jié)構(gòu),只有嚴(yán)格按照該結(jié)構(gòu)進(jìn)行幀的傳輸,才能被節(jié)點(diǎn)正確接收和發(fā)送。
2.2.1 CAN數(shù)據(jù)幀結(jié)構(gòu)
數(shù)據(jù)幀是攜帶數(shù)據(jù)由發(fā)送器至接收器的幀,是CAN的4種幀格式之一,這4種幀格式分別是數(shù)據(jù)幀、遠(yuǎn)程幀、出錯(cuò)幀和超載幀。
數(shù)據(jù)幀的主要結(jié)構(gòu)有:
(1)幀起始:幀起始(SOF)標(biāo)志著數(shù)據(jù)幀和遠(yuǎn)程幀的起始,僅由一個(gè)“顯性”位組成。在CAN的同步規(guī)則中,當(dāng)總線空閑時(shí)(處于隱性狀態(tài)),才允許站點(diǎn)開(kāi)始發(fā)送(信號(hào))。所有的站點(diǎn)必須同步于首先開(kāi)始發(fā)送報(bào)文的站點(diǎn)的幀起始前沿(該方式稱為“硬同步”)。
(2)仲裁場(chǎng):由11位標(biāo)識(shí)符(ID10~I(xiàn)D0)和 遠(yuǎn)程發(fā)送請(qǐng)求位(RTR)組成,RTR位為顯位表示數(shù)據(jù)幀,隱位表示遠(yuǎn)程幀。標(biāo)識(shí)符由高至低次序發(fā)送,且前7位 (ID10~I(xiàn)D4)不能全為隱性位,標(biāo)識(shí)符用于提供關(guān)于傳送報(bào)文和總線訪問(wèn)的優(yōu)先權(quán)信息,其數(shù)值越小,表示優(yōu)先權(quán)越高,發(fā)生沖突時(shí)優(yōu)先發(fā)送。
(3)控制場(chǎng):由6位構(gòu)成,前2位為保留位,為顯性, 后4位為數(shù)據(jù)長(zhǎng)度碼;(DLC),表示數(shù)據(jù)場(chǎng)中數(shù)據(jù)的字節(jié)數(shù),必須在0~8范圍內(nèi)變化。
(4)數(shù)據(jù)場(chǎng):由被發(fā)送數(shù)據(jù)組成,數(shù)目為控制場(chǎng)中決定的0~8個(gè)字節(jié),第一個(gè)字節(jié)的最高位首先被發(fā)送。
(5)CRC場(chǎng):包括CRC(循環(huán)冗余碼校驗(yàn))序列(15位)和CRC界定符(1個(gè)隱位),用于幀校驗(yàn)。
(6)ACK場(chǎng):由應(yīng)答間隙和應(yīng)答界定符組成,共兩位。
(7)幀結(jié)束:由7位隱性位組成,此期間無(wú)位填充。
2.2.2 CAN遠(yuǎn)程幀結(jié)構(gòu)
遠(yuǎn)程幀也有標(biāo)準(zhǔn)格式和擴(kuò)展格式,而且都由6個(gè)不同的位域組成:幀起始、仲裁域、控制域、CRC域、應(yīng)答域、幀結(jié)尾。與數(shù)據(jù)幀相比,遠(yuǎn)程幀的RTR位為隱性,沒(méi)有數(shù)據(jù)域,數(shù)據(jù)長(zhǎng)度編碼域可以是0~8個(gè)字節(jié)的任何值,這個(gè)值是遠(yuǎn)程幀請(qǐng)求發(fā)送的數(shù)據(jù)幀的數(shù)據(jù)域長(zhǎng)度。當(dāng)具有相同仲裁域的數(shù)據(jù)幀和遠(yuǎn)程幀同時(shí)發(fā)送時(shí),由于數(shù)據(jù)幀的RTR位為顯性,所以數(shù)據(jù)幀獲得優(yōu)先。發(fā)送遠(yuǎn)程幀的節(jié)點(diǎn)可以直接接收數(shù)據(jù)。
2.3 CAN 報(bào)文濾波器設(shè)置
CAN 報(bào)文濾波器是基于PHILIPS 公司CAN 控制器SJA1000 的PeliCAN 模式來(lái)進(jìn)行設(shè)計(jì)的。SJA1000 的濾波器由4 組(4 字節(jié))驗(yàn)收代碼寄存器(ACR)和4 組(4 字節(jié))驗(yàn)收屏蔽寄存器(AMR)構(gòu)成。ACR 的值是預(yù)設(shè)的驗(yàn)收代碼值,AMR 值是用來(lái)表征相對(duì)應(yīng)的ACR 值是否用作驗(yàn)收濾波。
但是在SJA1000 的某些模式下,濾波器的某些寄存器沒(méi)有用到,為了使用方便,所以在配置軟件中使用的是直接ID號(hào)進(jìn)行濾波設(shè)置和屏蔽,摒棄一些無(wú)關(guān)的內(nèi)容。
濾波的一般規(guī)則是:每一位驗(yàn)收屏蔽分別對(duì)應(yīng)每一位驗(yàn)收代碼,當(dāng)該位驗(yàn)收屏蔽位為1的時(shí)候(即設(shè)為無(wú)關(guān)),接收的相應(yīng)幀ID 位無(wú)論是否和相應(yīng)的驗(yàn)收代碼位相同均會(huì)表示為接收;但是當(dāng)驗(yàn)收屏蔽位為0 的時(shí)候(即設(shè)為相關(guān)),只有相應(yīng)的幀ID 和相應(yīng)的驗(yàn)收代碼位值相同的情況才會(huì)表示為接收。并且只有在所有的位都表示為接收的時(shí)候,CAN 控制器才會(huì)接收該幀報(bào)文。
濾波的方式上又分“單濾波”和“ 雙濾波”兩種。并且在標(biāo)準(zhǔn)幀和擴(kuò)展幀情況下濾波又略有不同。在配置軟件的“自定過(guò)濾屏蔽碼”的情況下開(kāi)放濾波器所有功能。
3 總體設(shè)計(jì)
電路如圖3-1所示,計(jì)算機(jī)通過(guò)USB轉(zhuǎn)CAN將數(shù)據(jù)傳輸?shù)目偩€,在總線上連接N個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都有一個(gè)唯一的ID號(hào),并通過(guò)傳感器進(jìn)行溫濕度的測(cè)量,其結(jié)果通過(guò)總線傳給計(jì)算機(jī)。計(jì)算機(jī)根據(jù)數(shù)據(jù)變化向節(jié)點(diǎn)發(fā)出指令,以實(shí)現(xiàn)溫濕度控制。根據(jù)CAN技術(shù)規(guī)范,節(jié)點(diǎn)數(shù)可達(dá)110個(gè),有最大效傳輸距離能達(dá)到10000米。
4 結(jié)束語(yǔ)
多點(diǎn)數(shù)據(jù)的傳輸,在各點(diǎn)同時(shí)傳送時(shí),經(jīng)常出現(xiàn)數(shù)據(jù)沖突,使得網(wǎng)絡(luò)癱瘓,利用CAN總線技術(shù),利用CAN的仲裁功能,能避免數(shù)據(jù)在傳輸中發(fā)生擁堵。同時(shí),CAN總線糾錯(cuò)能力強(qiáng),傳輸距離遠(yuǎn),實(shí)時(shí)性好,抗干擾能力強(qiáng),所以利用CAN總線技術(shù)實(shí)現(xiàn)計(jì)算機(jī)遠(yuǎn)程控制是一個(gè)理想的方案。