魏立峰, 李洪亮, 王慶輝, 劉曉梅, 封岸松
(沈陽化工大學(xué) 信息工程學(xué)院, 遼寧 沈陽 110142)
一種基于CAN總線的通信系統(tǒng)設(shè)計與實現(xiàn)
魏立峰, 李洪亮, 王慶輝, 劉曉梅, 封岸松
(沈陽化工大學(xué) 信息工程學(xué)院, 遼寧 沈陽 110142)
設(shè)計了應(yīng)用于分布式控制結(jié)構(gòu)的CAN總線通信系統(tǒng).采用總線型拓?fù)浣Y(jié)構(gòu)以及利用分布式控制思想,在CAN控制器的鏈路層網(wǎng)絡(luò)協(xié)議基礎(chǔ)上,設(shè)計了應(yīng)用層協(xié)議和傳輸層協(xié)議,實現(xiàn)批量數(shù)據(jù)透明塊傳輸及自動錯誤重傳,提高數(shù)據(jù)通信的可靠性.系統(tǒng)已應(yīng)用于微量元素檢測儀器中,運(yùn)行結(jié)果表明:該通信系統(tǒng)工作穩(wěn)定,實時性好,執(zhí)行效率高.
CAN總線; 總線型拓?fù)浣Y(jié)構(gòu); 應(yīng)用層協(xié)議
控制器局域網(wǎng)(CAN:Controller Area Network)總線,是德國BOSCH公司首先應(yīng)用于汽車內(nèi)部的一種串行數(shù)據(jù)通信協(xié)議,是一種多主總線,通信介質(zhì)可以是雙絞線、同軸電纜或光導(dǎo)纖維,通信速率可達(dá)1 Mbps[1].由于結(jié)構(gòu)簡單、通信質(zhì)量好,在國內(nèi)外已經(jīng)得到較廣泛的應(yīng)用,成為工業(yè)采集領(lǐng)域中首選的現(xiàn)場總線之一.
從OSI網(wǎng)絡(luò)模型角度出發(fā),現(xiàn)場總線網(wǎng)絡(luò)一般只實現(xiàn)了第1層(物理層)、第2層(數(shù)據(jù)鏈路層)、第7層(應(yīng)用層).而CAN現(xiàn)場總線僅僅定義了第1層、第2層,這兩層完全由硬件實現(xiàn),無需再為此開發(fā)相應(yīng)軟件或固件.由此,為網(wǎng)絡(luò)中每一個有效設(shè)備提供一組有用的服務(wù)與協(xié)議,CAN應(yīng)用層設(shè)計至關(guān)重要,甚至影響整個CAN通信效率的高低.在CAN應(yīng)用層設(shè)計中,CANopen協(xié)議是一個通用、開放、標(biāo)準(zhǔn)的CAN應(yīng)用層協(xié)議.在CANopen協(xié)議基礎(chǔ)上,確定產(chǎn)品所需要的功能,然后選擇最適合的硬件系統(tǒng).但開發(fā)周期相對較長,后期驗證也需要較長的時間,對協(xié)議的不同理解造成的開發(fā)兼容性差[2].鑒于原子吸收分光光度計硬件特點以及各模塊通信的易可行性,CANopen協(xié)議相對復(fù)雜,為此設(shè)計了專門用于本儀器系統(tǒng)的專用CAN應(yīng)用層協(xié)議.
設(shè)計系統(tǒng)采用單主方式工作,PC機(jī)作為主控,其它5個模塊為從節(jié)點,主控和從節(jié)點之間通過USB-CAN板卡實現(xiàn)通信.從節(jié)點采用Cortex-M4為內(nèi)核的STM32F407VGT6作為主控制器,其內(nèi)置CAN總線控制器,使得該節(jié)點體積小、功耗低、抗干擾性能好.
該分析儀器基于分布式測量控制的思想,按照儀器各模塊功能和物理位置將功能分散到主控及5個從模塊.整體系統(tǒng)的功能由這6個子模塊協(xié)同完成,這些模塊均掛接在CAN通信總線上,從模塊通過USB-CAN板卡作為橋梁與主控通信,通過CAN控制網(wǎng)絡(luò)連接起來構(gòu)成一個分布式處理儀器系統(tǒng).
主控通過USB-CAN板卡作為橋梁與從模塊進(jìn)行通信.各個從模塊之間也需要通信,由于某些命令需要某兩個模塊同步協(xié)調(diào)完成,除了CAN信號線外,還需要在某些從模塊之間添加幾根同步信號線,用來進(jìn)行時間同步指示和數(shù)據(jù)的傳送.圖1為系統(tǒng)網(wǎng)絡(luò)總體結(jié)構(gòu).
圖1 系統(tǒng)網(wǎng)絡(luò)總體結(jié)構(gòu)
網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)是指網(wǎng)絡(luò)中節(jié)點的互連形式,是影響網(wǎng)絡(luò)性能的主要因素.最常用的CAN網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)是總線型拓?fù)渑c星型拓?fù)?
星型結(jié)構(gòu)中,網(wǎng)絡(luò)中的每一個節(jié)點通過一個中央設(shè)備連接在一起,各節(jié)點將數(shù)據(jù)發(fā)送到中央設(shè)備,再由中央設(shè)備將數(shù)據(jù)轉(zhuǎn)發(fā)到目標(biāo)節(jié)點.星型網(wǎng)絡(luò)中任何單根電纜只連接兩個設(shè)備(如一個節(jié)點和一個集線器),各節(jié)點相互獨立.
在星型網(wǎng)絡(luò)中,中央設(shè)備故障會導(dǎo)致整個網(wǎng)絡(luò)的癱瘓.另外,星型結(jié)構(gòu)所需的線纜和配置明顯多于總線型網(wǎng)絡(luò),但其總長度與總線型網(wǎng)絡(luò)一樣受波特率、節(jié)點數(shù)量等因素制約[3].
在原子吸收分光光度計系統(tǒng)中,各節(jié)點之間都存在通信的可能,與星型網(wǎng)絡(luò)的節(jié)點獨立性原則相違背.總線型網(wǎng)絡(luò)相對于星型網(wǎng)絡(luò),網(wǎng)絡(luò)布線更簡單,工作量更少.因此,本系統(tǒng)的設(shè)計采用總線型網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),也可采用優(yōu)化的總線型結(jié)構(gòu)——菊花鏈型網(wǎng)絡(luò).
系統(tǒng)CAN-bus網(wǎng)絡(luò)采用總線拓?fù)浣Y(jié)構(gòu),在網(wǎng)絡(luò)中有6個CAN-bus節(jié)點.在總線的兩個終端各安裝一個120 Ω終端電阻.在同一CAN-bus通信網(wǎng)絡(luò)中所有CAN節(jié)點的通信波特率必須一致,同時計算得出的CAN通信波特率也僅是適合一個具體數(shù)值范圍內(nèi)的通信波特率,即意味著標(biāo)稱通信速率為100 kbps的CAN節(jié)點一般能夠與通信速率為90~110 kbps的CAN節(jié)點正常通信.在該網(wǎng)絡(luò)中,CAN總線使用速率為1 Mbps,在實際連接時,使用屏蔽雙絞線,且要求網(wǎng)絡(luò)中的分支線小于3 m,最大干線長度小于40 m.
圖2所示CAN收發(fā)器是驅(qū)動CAN控制器和物理總線間的接口,總線的差動發(fā)送能力和對CAN控制器的差動接收能力都由其提供,具有抗惡劣環(huán)境瞬間干擾、保護(hù)總線的能力,而且即使在某一節(jié)點掉電也不會影響總線.
圖2 ARM與CAN總線連接圖
CAN-bus信號采用差分傳輸方式,當(dāng)總線上有“0”信號時,CAN_L和CAN_H之間電壓差大于最小值的差分電壓,稱“顯性”;當(dāng)總線上有“1”信號時,CAN_H和CAN_L電壓被固定在平均電壓附近,電壓差近似為0,稱“隱形”[4].
CAN_H端的狀態(tài)只能是高電平或者懸浮狀態(tài),CAN_L端的狀態(tài)只能是低電平或者懸浮狀態(tài),這就保證不會出現(xiàn)如RS-485網(wǎng)絡(luò)中常有的現(xiàn)象:當(dāng)因系統(tǒng)錯誤而出現(xiàn)多節(jié)點同時向總線發(fā)送數(shù)據(jù)時,導(dǎo)致總線出現(xiàn)短路,從而損壞某節(jié)點.CAN節(jié)點在錯誤嚴(yán)重的情況下具有自動關(guān)閉輸出的功能,從而使總線上其他節(jié)點不受影響,以此確保在網(wǎng)絡(luò)中不會出現(xiàn)因個別節(jié)點出現(xiàn)問題而使總線“死鎖”的狀態(tài).
相對于復(fù)雜的CANopen協(xié)議,系統(tǒng)應(yīng)用層協(xié)議結(jié)構(gòu)簡單,報文分段清晰,用盡可能少的報文信息表達(dá)每個節(jié)點設(shè)備所有必需的通信信息,減少了工作量.
4.1 用戶通信
系統(tǒng)中用戶通信為一種高層通信協(xié)議,以下簡稱用戶層.
用戶層使用CAN總線的具有29位標(biāo)識符的擴(kuò)展幀格式,且只使用CAN總線中的數(shù)據(jù)幀類型(沒有使用遠(yuǎn)程幀);總線通信模型采用單主結(jié)構(gòu),即主控為主節(jié)點,其它節(jié)點為從節(jié)點;通信方法包括主從命令/響應(yīng)方式和從站事件觸發(fā)方式兩種;用戶層定義了用戶層數(shù)據(jù)幀,該數(shù)據(jù)幀數(shù)據(jù)部分的長度可達(dá)512字節(jié),完全符合該原子吸收分光光度計的通信需求,在進(jìn)行數(shù)據(jù)幀收發(fā)時需要拆封和封裝成CAN總線的擴(kuò)展數(shù)據(jù)幀格式.
4.2 設(shè)備節(jié)點編址
系統(tǒng)中每個總線節(jié)點均有一個ID編號,用于CAN總線網(wǎng)絡(luò)節(jié)點尋址.如圖1所示,主控ID編號為0,模塊1~模塊5的ID編號分別為1~5,編址ID使用4個二進(jìn)制位,ID編號6~14保留使用,ID編號15(即0xF)為廣播地址.
通信中每幀數(shù)據(jù)需要源節(jié)點ID和目的節(jié)點ID,以完成網(wǎng)絡(luò)數(shù)據(jù)交換的尋址實現(xiàn).源節(jié)點ID和目的節(jié)點ID需要使用1個字節(jié),使用29位標(biāo)識符的頭8位.
4.3 協(xié)議報文格式
這部分包括用戶協(xié)議報文格式和用戶定義CAN協(xié)議報文格式.用戶協(xié)議報文在發(fā)送前需要重新封裝為用戶定義CAN協(xié)議報文格式,CAN總線上收到的用戶定義CAN協(xié)議報文,需要解封并重新封裝為用戶協(xié)議報文.
(1) 用戶協(xié)議報文格式
用戶協(xié)議報文格式如表1所示.
表1 用戶協(xié)議報文格式
其中SrcID為發(fā)送數(shù)據(jù)幀設(shè)備的ID編號,DestID為接收數(shù)據(jù)幀設(shè)備的ID編號(注:SrcID地址不能是廣播地址0xF).
FuncID(功能碼)使用了8位,具體定義了系統(tǒng)中數(shù)據(jù)和命令交換或傳遞的種類,具體種類和細(xì)節(jié)涉及到整個系統(tǒng)的功能實現(xiàn),且這些功能碼沒有考慮到通用性,僅對本系統(tǒng)進(jìn)行優(yōu)化設(shè)計.
DataLen字段2個字節(jié),表示幀數(shù)據(jù)部分的數(shù)據(jù)長度.
Type(2位)和subType(3位)表示數(shù)據(jù)幀的類型,具體含義見表2.
(2) 用戶定義CAN協(xié)議報文格式
用戶定義CAN協(xié)議報文格式如表3所示.
其中,SegPolo和SegNum用于對用戶協(xié)議報文分段處理,SegPolo表示分段標(biāo)志,SegNum表示分段編號,其含義如表4所示.
SrcID和DestID源于用戶協(xié)議報文中的SrcID源地址和DestID目的地址.
FuncID(功能碼)源于用戶協(xié)議報文中的FuncID(功能碼).
Type和subType源于用戶協(xié)議報文中Type、subType字段,分別為2位、3位.
表2 數(shù)據(jù)幀類型字段說明
表3 用戶定義CAN協(xié)議報文格式
表4 SegPolo和SegNum說明
為方便系統(tǒng)數(shù)據(jù)傳輸和數(shù)據(jù)傳輸?shù)膶崟r要求,用戶協(xié)議采用靈活的通信模式,支持主從方式通信模式和事件觸發(fā)通信模式.主從通信模型是一種主站命令/從站應(yīng)答式的通信方式;事件觸發(fā)通信模式用于從站主動向主站傳送數(shù)據(jù)報文[5].
(1) 主從通信模式
命令/響應(yīng)通訊方式.由主站發(fā)命令幀給從站,從站執(zhí)行命令后給主站發(fā)送響應(yīng)幀.一般情形如圖3所示.
圖3 主從通信模式
在這種方式下,主站與一個從站進(jìn)行通訊.從站接收到命令并處理完請求后,返回一個響應(yīng)報文給主站.一個完整的通信過程包括主站的請求與從站的應(yīng)答.在這種通信方式下,從站節(jié)點在未接收到主站的請求時不會傳輸數(shù)據(jù).
這種通信方式有兩種例外情況:一種是主站
廣播命令幀(命令幀的目的地址為廣播地址),此時不需要從站發(fā)送響應(yīng)幀;另一種情況是,從站針對主站命令幀可發(fā)送廣播響應(yīng)幀(響應(yīng)幀的目的地址為廣播地址,通過此種方式可實現(xiàn)從站與從站之間的數(shù)據(jù)通信).
(2) 事件觸發(fā)通信模式
事件觸發(fā)通信模式用于從站向主站發(fā)送數(shù)據(jù),支持定時循環(huán)發(fā)送和狀態(tài)改變發(fā)送兩種傳送模式,如圖4所示.
圖4 事件觸發(fā)通信模式
該模式中,從站發(fā)送數(shù)據(jù)幀的目的地址為主站,有一種例外情況是目的地址也可以是廣播地址.
在該原子吸收分光光度計中,網(wǎng)絡(luò)中的5個從節(jié)點均具有這種通信能力,每個從站有一個事件觸發(fā)鏈路指向主站(廣播暫不支持),可隨時組態(tài)改動為循環(huán)定時、狀態(tài)改變、循環(huán)定時+狀態(tài)改變3種通信方式(定時時間到和狀態(tài)改變同時發(fā)生時,對應(yīng)數(shù)據(jù)需用一個數(shù)據(jù)幀發(fā)送給主站),還可隨時關(guān)閉或啟動.
圖5為協(xié)議的可靠性測試和驗證.CAN通信系統(tǒng)能實現(xiàn)單主通信,模塊接收到唯一的ID號CAN幀格式數(shù)據(jù),回復(fù)響應(yīng)幀數(shù)據(jù),且性能穩(wěn)定,可靠性好,沒有數(shù)據(jù)沖突,達(dá)到了預(yù)期效果.
圖5 測試結(jié)果圖
針對該原子吸收分光光度計,設(shè)計專門的CAN通信系統(tǒng),采用總線型的拓?fù)浣Y(jié)構(gòu),以分布式結(jié)構(gòu)為框架,同樣具有較強(qiáng)的開放性、穩(wěn)定性和擴(kuò)展性.本文研究的系統(tǒng)作為企業(yè)的一個開發(fā)項目開發(fā)的,現(xiàn)已投入市場使用,通訊指標(biāo)完全符合儀器性能的需求,同時分布式架構(gòu)相對于原來的PC板卡整體控制,在避免重大事故發(fā)生、實時故障診斷識別以及糾錯等方面起到了重要的作用.
[1] 王慶雙,蔡冬生.基于ARM的CAN通信系統(tǒng)的設(shè)計與實現(xiàn)[J].航空電子技術(shù),2011,42(1):9-10.
[2] 代訓(xùn)康,施玉霞.機(jī)械臂控制系統(tǒng)中CANopen協(xié)議的應(yīng)用與開發(fā)[J].制造業(yè)自動化,2010,32(12):39-40.
[3] 張振德.CAN總線星型網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)研究與設(shè)計[D].北京:北京化工大學(xué),2011:20-21.
[4] 劉維戈,金遠(yuǎn)平.基于CAN總線的通信系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機(jī)技術(shù)與發(fā)展,2007,17(12):208-209.
[5] 王毅峰,李令奇.基于CAN總線的分布式數(shù)據(jù)采集與控制系統(tǒng)[J].工業(yè)控制計算機(jī),2000,13(5):34-35.
Design and Implementation of CAN Bus-based Communication System
WEI Li-feng, LI Hong-liang, WANG Qing-hui, LIU Xiao-mei, FENG An-song
(Shenyang University of Chemical Technology, Shenyang 110142, China)
This paper presents a CAN bus communication system used in distributed control structure,using the bus topology and distributed control thought.Based on the data link layer network protocol of the CAN controller,the application layer protocol and transport layer protocol are designed,achieving bulk data transparent block transfer and automatic error retransmission,and improving the reliability of data communication.Systems have been used in trace detection instrument development.The result shows the communication system is stable,real-time,and highly efficient.
CAN bus; bus topology; application layer protocol
2013-09-15
魏立峰(1962-),男,遼寧沈陽人,教授,博士,主要從事智能測控技術(shù)與裝置、無線傳感器網(wǎng)絡(luò)的研究.
2095-2198(2015)01-0059-06
10.3969/j.issn.2095-2198.2015.01.013
TN919.3
A