《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > CAN總線與以太網(wǎng)互連系統(tǒng)設(shè)計(jì)

CAN總線與以太網(wǎng)互連系統(tǒng)設(shè)計(jì)

2008-08-06
作者:袁學(xué)文, 黃天戍, 龐 輝, 肖

  摘? 要: 介紹了一種基于單片機(jī)SX52的CAN與以太" title="以太">以太網(wǎng)互連方案,闡述了以太網(wǎng)和CAN總線網(wǎng)絡(luò)協(xié)議轉(zhuǎn)換的軟硬件設(shè)計(jì),實(shí)現(xiàn)了以太網(wǎng)與現(xiàn)有CAN總線網(wǎng)的直接連接。保證管理監(jiān)控層(以太網(wǎng))與生產(chǎn)測控層(CAN總線網(wǎng))之間的連接,使得上下層數(shù)據(jù)能方便地通信。

  關(guān)鍵詞: 現(xiàn)場總線? CAN總線? 以太網(wǎng)

?

  在大型企業(yè)自動(dòng)化系統(tǒng)中,上層企業(yè)管理層" title="管理層">管理層和生產(chǎn)監(jiān)控層一般都采用以太網(wǎng)和PC機(jī),而下層車間現(xiàn)場則采用現(xiàn)場總線和單片機(jī)測控設(shè)備。上下兩層的溝通,通常采用工業(yè)控制機(jī)加以太網(wǎng)卡,再加上PC機(jī)插槽上的接口卡或并行打印口的EPP接口卡實(shí)現(xiàn)。這種連接方式成本高,開發(fā)周期長。針對這種情況,筆者設(shè)計(jì)一種單獨(dú)的CAN以太網(wǎng)網(wǎng)關(guān)互連系統(tǒng),成功地實(shí)現(xiàn)以太網(wǎng)與現(xiàn)有CAN總線網(wǎng)的直接數(shù)據(jù)互聯(lián)。

1 系統(tǒng)結(jié)構(gòu)

  系統(tǒng)總體結(jié)構(gòu)分為三部分:現(xiàn)場測控網(wǎng)絡(luò)(CAN網(wǎng)絡(luò))、嵌入式透明SX52網(wǎng)關(guān)、以太網(wǎng)信息管理終端(如監(jiān)控平臺(tái)和網(wǎng)絡(luò)數(shù)據(jù)庫等),如圖1所示。

?

  CAN總線是一個(gè)設(shè)備互連總線型控制網(wǎng)絡(luò)。在CAN總線上可以掛接多達(dá)110個(gè)設(shè)備節(jié)點(diǎn),各設(shè)備間可以自主相互通信,實(shí)現(xiàn)復(fù)雜網(wǎng)絡(luò)控制系統(tǒng)。但設(shè)備信息層無法直接到達(dá)信息管理層,要想設(shè)備信息進(jìn)入信息管理層需通過數(shù)據(jù)網(wǎng)關(guān)。嵌入式透明SX52網(wǎng)關(guān)就是為此而設(shè)計(jì)的。

????透明式網(wǎng)關(guān)在以太網(wǎng)應(yīng)用層構(gòu)建和解析完整的CAN協(xié)議數(shù)據(jù)包。CAN協(xié)議數(shù)據(jù)包作為TCP/IP" title="TCP/IP">TCP/IP網(wǎng)絡(luò)應(yīng)用層的數(shù)據(jù)進(jìn)行傳輸,它對通信數(shù)據(jù)的具體實(shí)際意義不做任何解釋。透明式網(wǎng)關(guān)由通信處理器、CAN總線控制器和以太網(wǎng)控制器" title="以太網(wǎng)控制器">以太網(wǎng)控制器三部分組成。其中SX52單片機(jī)為核心處理器,它實(shí)現(xiàn)了CAN控制網(wǎng)絡(luò)與以太網(wǎng)之間的協(xié)議轉(zhuǎn)換。以太網(wǎng)信息管理層的控制指令發(fā)送到嵌入式透明SX52網(wǎng)關(guān),將TCP/IP協(xié)議包數(shù)據(jù)轉(zhuǎn)換為CAN協(xié)議形式發(fā)送至CAN控制網(wǎng)絡(luò)中的指定設(shè)備節(jié)點(diǎn),完成信息管理層對現(xiàn)場設(shè)備層的控制。同樣地,當(dāng)CAN網(wǎng)絡(luò)上的設(shè)備數(shù)據(jù)(如定時(shí)采樣數(shù)據(jù)或報(bào)警信息)要傳輸?shù)叫畔⒐芾韺訒r(shí),可將數(shù)據(jù)發(fā)送到嵌入式透明SX52網(wǎng)關(guān),再通過網(wǎng)關(guān)協(xié)議轉(zhuǎn)換程序?qū)AN協(xié)議數(shù)據(jù)封裝成TCP/IP協(xié)議的以太網(wǎng)數(shù)據(jù)幀發(fā)送至以太網(wǎng)上的監(jiān)控計(jì)算機(jī)。

  以太網(wǎng)信息管理終端是一個(gè)根據(jù)用戶的具體要求而設(shè)計(jì)的用戶層應(yīng)用軟件。它可以是一個(gè)WIN32監(jiān)控程序或網(wǎng)絡(luò)數(shù)據(jù)庫(記錄CAN節(jié)點(diǎn)設(shè)備數(shù)據(jù))軟件等;甚至可能是CAN節(jié)點(diǎn)設(shè)備的服務(wù)器軟件,為設(shè)備提供較復(fù)雜的數(shù)據(jù)處理工作。

2 硬件設(shè)計(jì)

  系統(tǒng)硬件分為兩大部分:CAN總線網(wǎng)絡(luò)設(shè)備接口設(shè)計(jì)和嵌入式透明SX52網(wǎng)關(guān)設(shè)計(jì)。

2.1 CAN總線網(wǎng)絡(luò)設(shè)備接口設(shè)計(jì)

  CAN總線網(wǎng)絡(luò)設(shè)備接口設(shè)計(jì)較網(wǎng)關(guān)設(shè)計(jì)簡單。它是在完成設(shè)備功能的基礎(chǔ)上加入一個(gè)CAN通信控制器接口芯片,實(shí)現(xiàn)與CAN總線網(wǎng)絡(luò)的連接??紤]到開發(fā)成本和靈活性,筆者在設(shè)計(jì)中選用PHILIPHS公司的獨(dú)立CAN通信控制器SJA1000芯片和CAN總線收發(fā)器82C250芯片。其結(jié)構(gòu)如圖2所示。

?

2.2 嵌入式透明SX52網(wǎng)關(guān)設(shè)計(jì)

  嵌入式透明網(wǎng)關(guān)設(shè)計(jì)是整個(gè)系統(tǒng)設(shè)計(jì)的核心。其結(jié)構(gòu)如圖3所示。它由CAN控制器協(xié)議轉(zhuǎn)換模塊和以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊兩部分組成。網(wǎng)關(guān)硬件中SX52微處理器起核心作用。它是由美國Ubicom公司研制的高速可配置通信控制器,其處理速度相當(dāng)高。在外接100MHz時(shí)鐘時(shí),指令執(zhí)行速度可達(dá)100 MIPS。它可實(shí)現(xiàn)TCP/IP協(xié)議棧中的ARP、IP、UDP、TCP、HTTP、SMTP、ICMP等網(wǎng)絡(luò)協(xié)議。

?

  CAN控制器協(xié)議轉(zhuǎn)換模塊硬件電路原理如圖3左框圖。它由三部分組成:微控制器SX52、獨(dú)立CAN通信控制器SJA1000、CAN總線收發(fā)器82C250。其中SX52為唯一的CPU核心,負(fù)責(zé)SJA1000的初始化,通過讀寫SJA1000內(nèi)部寄存器實(shí)現(xiàn)數(shù)據(jù)的接收、發(fā)送和錯(cuò)誤處理等。PCA82C250則提供對總線的差動(dòng)發(fā)送能力和對CAN控制器的差動(dòng)接收能力。

  以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊主要由微控制器SX52、以太網(wǎng)通信控制器RTL8019AS和隔離濾波器FB2002組成。RTL8019AS是臺(tái)灣Realtek公司制造的一種高集成度的全雙工10Mbps以太網(wǎng)控制芯片,實(shí)現(xiàn)了基于Ethernet協(xié)議的MAC層的全部功能,內(nèi)置16KB的SRAM、雙DMA通道和FIFO完成數(shù)據(jù)包的接收和發(fā)送功能。在網(wǎng)關(guān)設(shè)計(jì)中,使用跳線模式(JP置為高)硬配置RTL8019AS為8位模式。使用RTL8019的低5位地址線A0~A4以及低8位數(shù)據(jù)線D0~D7。SX52的B口的B0~B4腳作為地址線連接RTL8019AS的低5位地址線,B5~B7作為控制線分別連接讀寫時(shí)序控制腳IORB、IOWB、IOCHRDY;C口作為數(shù)據(jù)線連接RTL8019AS的低8位數(shù)據(jù)線;A口保留,用作日后擴(kuò)展。圖3中AT24C64為8KB EEPROM,主要用來保存嵌入式透明SX-52網(wǎng)關(guān)的配置信息,如網(wǎng)關(guān)IP地址、MAC地址和SJA1000的ID網(wǎng)絡(luò)標(biāo)示符、網(wǎng)絡(luò)掩碼AMR和總線定時(shí)(BTR0、BTR1)等。這樣,可以靈活方便地修改網(wǎng)關(guān)參數(shù),適應(yīng)不同環(huán)境,同時(shí)也考慮到以后的擴(kuò)展。

  RTL8019AS除與SX52連接外,還將其網(wǎng)絡(luò)收發(fā)器的4根引腳TPOUT+、TPOUT-、TPIN+、TPIN-通過外接的隔離濾波器FB2002與以太網(wǎng)相連。采用隔離濾波器FB2002是為了提高網(wǎng)絡(luò)通信的抗干擾能力。

3 軟件設(shè)計(jì)

  整個(gè)互聯(lián)系統(tǒng)的軟件設(shè)計(jì)可以分為三部分:CAN總線設(shè)備接口通信程序、透明網(wǎng)關(guān)協(xié)議轉(zhuǎn)換程序和以太網(wǎng)層應(yīng)用程序設(shè)計(jì)。其中,CAN總線設(shè)備接口通信程序和透明網(wǎng)關(guān)協(xié)議轉(zhuǎn)換程序的CAN控制器協(xié)議模塊在結(jié)構(gòu)上有較大的相似性,但有可能因采用微控制器不同而導(dǎo)致實(shí)現(xiàn)的程序語言相異。因而,在此不作論述,而主要討論后兩個(gè)方面的程序設(shè)計(jì)。

3.1 透明網(wǎng)關(guān)協(xié)議轉(zhuǎn)換程序

  透明網(wǎng)關(guān)協(xié)議轉(zhuǎn)換程序的整體設(shè)計(jì)思路為:當(dāng)以太網(wǎng)應(yīng)用層有數(shù)據(jù)要發(fā)送到CAN節(jié)點(diǎn)時(shí),首先,數(shù)據(jù)發(fā)送到透明網(wǎng)關(guān)由以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊從傳輸層數(shù)據(jù)報(bào)文中解析出完整的CAN協(xié)議數(shù)據(jù)包,存放在數(shù)據(jù)緩沖區(qū)A,再通知總調(diào)度模塊,由它調(diào)用CAN控制器協(xié)議模塊將CAN協(xié)議數(shù)據(jù)包發(fā)送到CAN總線上。反過來,當(dāng)CAN設(shè)備有數(shù)據(jù)要發(fā)送到用戶層時(shí),首先,數(shù)據(jù)發(fā)送到透明網(wǎng)關(guān)由CAN控制器協(xié)議模塊將完整的CAN協(xié)議數(shù)據(jù)包存放在數(shù)據(jù)緩沖區(qū)B,再通知總調(diào)度模塊,由它調(diào)用以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊將完整的CAN協(xié)議數(shù)據(jù)包作為應(yīng)用層數(shù)據(jù)封裝起來,再發(fā)送到以太網(wǎng)的應(yīng)用層。其程序結(jié)構(gòu)如圖4所示。

?

3.1.1 CAN控制器協(xié)議模塊

CAN控制器協(xié)議轉(zhuǎn)換模塊程序主要由SJA1000的寄存器讀程序CANRead()、寫程序CANWrite()、初始化程序CANInit()、發(fā)送程序txdsub()、接收程序rxdsub()程序組成。之所以要編寫單獨(dú)的SJA1000的寄存器讀、寫子程序" title="子程序">子程序,這是由SX52芯片只有I/O端口決定的。

  選用CAN2.0A協(xié)議構(gòu)建CAN總線控制網(wǎng)絡(luò),對SJA1000的初始化主要完成控制寄存器CR、驗(yàn)收代碼寄存器ACR、驗(yàn)收屏蔽寄存器AMR、總線定時(shí)寄存器BTR0,1和輸出控制寄存器OCR的設(shè)置。初始化完成后,由總調(diào)度模塊監(jiān)控SJA1000控制器。當(dāng)CAN總線上有數(shù)據(jù)到達(dá)時(shí),它調(diào)用接收子程序rxdsub(),把這一幀數(shù)據(jù)包存入數(shù)據(jù)緩沖區(qū)B中,然后釋放接收緩沖器。同樣,當(dāng)有按CAN2.0A協(xié)議格式組合成的一幀數(shù)據(jù)報(bào)文在數(shù)據(jù)緩沖區(qū)A中要發(fā)送到CAN總線上去時(shí),總調(diào)度模塊將調(diào)CAN發(fā)送子程序txdsub()發(fā)送。

3.1.2 以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊

  以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊主要負(fù)責(zé)從UDP數(shù)據(jù)包中解析出完整CAN協(xié)議報(bào)文,存入數(shù)據(jù)緩沖區(qū)A。同時(shí),可能將數(shù)據(jù)緩沖區(qū)B中的完整CAN協(xié)議報(bào)文封裝成UDP數(shù)據(jù)報(bào),然后將其發(fā)送到以太網(wǎng)上。

  在通信傳輸層采用UDP協(xié)議是考慮到CAN協(xié)議數(shù)據(jù)報(bào)為短幀形式(每個(gè)數(shù)據(jù)幀最多為8字節(jié))。如果采用TCP傳輸協(xié)議,要傳輸8字節(jié)CAN協(xié)議數(shù)據(jù),要先通過3次握手建立連接,再傳輸數(shù)據(jù),之后還要通過握手釋放連接。這樣傳輸效率對有限的網(wǎng)絡(luò)資源來說無疑是一種浪費(fèi)。而UDP是無連接的傳輸,可以提高網(wǎng)絡(luò)傳輸效率,同時(shí),也減輕網(wǎng)關(guān)的處理任務(wù)。當(dāng)然,UDP傳輸協(xié)議是不可靠的,對于控制網(wǎng)絡(luò)來說,是不允許的。為了提高通信的可靠性,采用了回傳校驗(yàn)機(jī)制。通過實(shí)驗(yàn)測試表明這種方式是行之有效的。

  以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊主要由以太網(wǎng)卡驅(qū)動(dòng)、ARP、UDP協(xié)議的若干個(gè)API函數(shù)組成,如NICInit()、NICDMAInit()、NICInitTxFrame()、NICSendTxFrame()、NICReadAgain()、ARPCheckIfIs()、ARPSendResponse()、ARPSendStPacket()、ICMPProcPktIn()、UDPAppInit()、IPGenCheckSum()、、UDPAppProcPktIn()、UDPStartPktOut()和UDPEndPktOut()等。所使用的變量有:remoteIP[3:0]、myIP[3:0]、UDPRxSrcPortMSB、UDPRxSrcPortLSB、UDPRxDataLenMSB、UDPRxDataLenLSB、UDPTxSrcPortMSB,UDPTxSrcPortLSB、UDPTxDestPortMSB、UDPTxDestPortLSB、DPTxDataLenMSB, UDPTxDataLenLSB等。

  系統(tǒng)首次執(zhí)行或復(fù)位時(shí),以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊將首先調(diào)用NICInit()和UDPAppInit()等進(jìn)行NIC、ARP、IP、UDP和應(yīng)用程序的初始化。初始化完成后,即進(jìn)入主循環(huán)。在主循環(huán)中,SX52將反復(fù)檢測RTL8019AS是否接收以太網(wǎng)幀。當(dāng)有數(shù)據(jù)被接收時(shí),SX52調(diào)用NICDMAInit()和NICReadAgain()讀入以太網(wǎng)幀首部,再調(diào)用ARPCheckIfIs()判斷接收幀是否為ARP數(shù)據(jù)。若是ARP,則轉(zhuǎn)入ARPSendResponse()和ARPSendStPacket()子程序進(jìn)行ARP處理并發(fā)送響應(yīng)ARP數(shù)據(jù)報(bào);若不是ARP,則判斷是否為IP數(shù)據(jù)報(bào)。若非IP數(shù)據(jù)報(bào)則清除該以太網(wǎng)幀;當(dāng)所接收幀包含IP數(shù)據(jù)報(bào)時(shí),則需進(jìn)一步判斷是ICMP數(shù)據(jù)報(bào)還是UDP數(shù)據(jù)報(bào)文。若是ICMP數(shù)據(jù)報(bào)則執(zhí)行ICMPProcPktIn()子程序處理ICMP數(shù)據(jù)報(bào)并重發(fā)IP數(shù)據(jù)報(bào);若數(shù)據(jù)為UDP數(shù)據(jù)報(bào)文,則調(diào)用UDPProcPktIn()子程序。該程序?qū)⒆x入U(xiǎn)DP數(shù)據(jù)報(bào)文首部的數(shù)據(jù)并進(jìn)行相應(yīng)處理,還原出完整的CAN協(xié)議數(shù)據(jù)報(bào)文存入數(shù)據(jù)緩沖區(qū)B中,再通知總調(diào)度程序,由總調(diào)度程序調(diào)用CAN總線控制子程序?qū)AN協(xié)議數(shù)據(jù)報(bào)文發(fā)往CAN總線。

  反過來,當(dāng)總調(diào)度程序通知以太網(wǎng)控制器協(xié)議轉(zhuǎn)換模塊將數(shù)據(jù)緩沖區(qū)B中準(zhǔn)備好的CAN協(xié)議數(shù)據(jù)發(fā)送到以太網(wǎng)上時(shí),它將調(diào)用NICInitTxFrame()、UDPStartPktOut()、IPGenCheckSum()、IPStartPktOut()、NICSendTxFrame()、UDPEndPktOut()等子函數(shù)進(jìn)行發(fā)送處理,從而實(shí)現(xiàn)CAN總線到以太網(wǎng)的數(shù)據(jù)傳輸。

3.2 以太網(wǎng)層應(yīng)用程序設(shè)計(jì)

  以太網(wǎng)上的通信協(xié)議一般采用TCP/IP協(xié)議。本文采用流行的SOCKET套接字編程,傳輸層協(xié)議選擇UDP(用戶數(shù)據(jù)報(bào)協(xié)議),通過Visual C++編寫用戶層程序。

  WinSock提供了對UDP的支持,通過UDP協(xié)議可以向指定IP地址的透明網(wǎng)關(guān)發(fā)送CAN協(xié)議數(shù)據(jù),同時(shí)也可以通過它接收CAN協(xié)議數(shù)據(jù)。發(fā)送和接收方處于相同的地位沒有主次之分。利用CAsyncSocket類操縱無連接的數(shù)據(jù)發(fā)送較簡單。首先生成一個(gè)本地套接口(需要指明SOCK_DGRAM標(biāo)記);然后利用 int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen,UINT nHostPort, LPCTSTR lpszHostAddress = NULL,int nFlags = 0)發(fā)送數(shù)據(jù),int CAsyncSocket::ReceiveFrom(void* lpBuf,int nBufLen,CString& rSocketAddress,UINT& rSocketPort,int nFlags = 0 )接收數(shù)據(jù)。利用UDP協(xié)議可以使管理主機(jī)和SX52網(wǎng)關(guān)實(shí)現(xiàn)雙向的數(shù)據(jù)通信。同時(shí),這種傳輸方式也易于使數(shù)據(jù)SX52網(wǎng)關(guān)透明化。

  本文介紹了一種低成本、高可靠性、快捷的CAN總線與以太網(wǎng)互連方案。該互連方案保證管理監(jiān)控層與生產(chǎn)測控層之間的連接,方便了上下層信息交流,滿足工廠、變電站等工業(yè)場合的應(yīng)用要求。

?

參考文獻(xiàn)

1 Ubicom SX52 Manual. 2000

2 Realtek RTL8019AS Manual. 2001

3 SJA1000 data sheet. Philips semiconductor.1999

4 Radia Perlman著,高傳善譯.網(wǎng)絡(luò)互連:網(wǎng)橋、路由器、交換機(jī)和互連協(xié)議.北京:機(jī)械工業(yè)出版社,2001

5 Douglas.E.Comer著,林 瑤譯.用TCP/IP進(jìn)行網(wǎng)際互連第一卷:原理、協(xié)議和體系結(jié)構(gòu)(第三版).北京:電子工業(yè)出版社,1998

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。