- 相關推薦
CAN總線與以太網互連系統設計
摘要:介紹了一種基于單片機SX52的CAN與以太網互連方案,闡述了以太網和CAN總線網絡協議轉換的軟硬件設計,實現了以太網與現有CAN總線網的直接連接。保證管理監控層(以太網)與生產測控層(CAN總線網)之間的連接,使得上下層數據能方便地通信。關鍵詞:現場總線CAN總線以太網
在大型企業自動化系統中,上層企業管理層和生產監控層一般都采用以太網和PC機,而下層車間現場則采用現場總線和單片機測控設備。上下兩層的溝通,通常采用工業控制機加以太網卡,再加上PC機插槽上的接口卡或并行打印口的EPP接口卡實現。這種連接方式成本高,開發周期長。針對這種情況,筆者設計一種單獨的CAN以太網網關互連系統,成功地實現以太網與現有CAN總線網的直接數據互聯。
。毕到y結構
系統總體結構分為三部分:現場測控網絡(CAN網絡)、嵌入式透明SX52網關、以太網信息管理終端(如監控平臺和網絡數據庫等),如圖1所示。
。茫粒慰偩是一個設備互連總線型控制網絡。在CAN總線上可以掛接多達110個設備節點,各設備間可以自主相互通信,實現復雜網絡控制系統。但設備信息層無法直接到達信息管理層,要想設備信息進入信息管理層需通過數據網關。嵌入式透明SX52網關就是為此而設計的。
透明式網關在以太網應用層構建和解析完整的CAN協議數據包。CAN協議數據包作為TCP/IP網絡應用層的數據進行傳輸,它對通信數據的具體實際意義不做任何解釋。透明式網關由通信處理器、CAN總線控制器和以太網控制器三部分組成。其中SX52單片機為核心處理器,它實現了CAN控制網絡與以太網之間的協議轉換。以太網信息管理層的控制指令發送到嵌入式透明SX52網關,將TCP/IP協議包數據轉換為CAN協議形式發送至CAN控制網絡中的指定設備節點,完成信息管理層對現場設備層的控制。同樣地,當CAN網絡上的設備數據(如定時采樣數據或報警信息)要傳輸到信息管理層時,可將數據發送到嵌入式透明SX52網關,再通過網關協議轉換程序將CAN協議數據封裝成TCP/IP協議的以太網數據幀發送至以太網上的監控計算機。
以太網信息管理終端是一個根據用戶的具體要求而設計的用戶層應用軟件。它可以是一個WIN32監控程序或網絡數據庫(記錄CAN節點設備數據)軟件等;甚至可能是CAN節點設備的服務器軟件,為設備提供較復雜的數據處理工作。
2硬件設計
系統硬件分為兩大部分:CAN總線網絡設備接口設計和嵌入式透明SX52網關設計。
。玻保茫粒慰偩網絡設備接口設計
。茫粒慰偩網絡設備接口設計較網關設計簡單。它是在完成設備功能的基礎上加入一個CAN通信控制器接口芯片,實現與CAN總線網絡的連接。考慮到開發成本和靈活性,筆者在設計中選用PHILIPHS公司的獨立CAN通信控制器SJA1000芯片和CAN總線收發器82C250芯片。其結構如圖2所示。
。玻睬度胧酵该鳎樱兀担簿W關設計
嵌入式透明網關設計是整個系統設計的核心。其結構如圖3所示。它由CAN控制器協議轉換模塊和以太網控制器協議轉換模塊兩部分組成。網關硬件中SX52微處理器起核心作用。它是由美國Ubicom公司研制的高速可配置通信控制器,其處理速度相當高。在外接100MHz時鐘時,指令執行速度可達100MIPS。它可實現TCP/IP協議棧中的ARP、IP、UDP、TCP、HTTP、SMTP、ICMP等網絡協議。
。茫粒慰刂破鲄f議轉換模塊硬件電路原理如圖3左框圖。它由三部分組成:微控制器SX52、獨立CAN通信控制器SJA1000、CAN總線收發器82C250。其中SX52為唯一的CPU核心,負責SJA1000的初始化,通過讀寫SJA1000內部寄存器實現數據的接收、發送和錯誤處理等。PCA82C250則提供對總線的差動發送能力和對CAN控制器的差動接收能力。
以太網控制器協議轉換模塊主要由微控制器SX52、以太網通信控制器RTL8019AS和隔離濾波器FB2002組成。RTL8019AS是臺灣Realtek公司制造的一種高集成度的全雙工10Mbps以太網控制芯片,實現了基于Ethernet協議的MAC層的全部功能,內置16KB的SRAM、雙DMA通道和FIFO完成數據包的接收和發送功能。在網關設計中,使用跳線模式(JP置為高)硬配置RTL8019AS為8位模式。使用RTL8019的低5位地址線A0~A4以及低8位數據線D0~D7。SX52的B口的B0~B4腳作為地址線連接RTL8019AS的低5位地址線,B5~B7作為控制線分別連接讀寫時序控制腳IORB、IOWB、IOCHRDY;C口作為數據線連接RTL8019AS的低8位數據線;A口保留,用作日后擴展。圖3中
。粒裕玻矗茫叮礊椋福耍拢牛牛校遥希,主要用來保存嵌入式透明SX-52網關的配置信息,如網關IP地址、MAC地址和SJA1000的ID網絡標示符、網絡掩碼AMR和總線定時(BTR0、BTR1)等。這樣,可以靈活方便地修改網關參數,適應不同環境,同時也考慮到以后的擴展。
RTL8019AS除與SX52連接外,還將其網絡收發器的4根引腳TPOUT+、TPOUT-、TPIN+、TPIN-通過外接的隔離濾波器FB2002與以太網相連。采用隔離濾波器FB2002是為了提高網絡通信的抗干擾能力。
。耻浖O計
整個互聯系統的軟件設計可以分為三部分:CAN總線設備接口通信程序、透明網關協議轉換程序和以太網層應用程序設計。其中,CAN總線設備接口通信程序和透明網關協議轉換程序的CAN控制器協議模塊在結構上有較大的相似性,但有可能因采用微控制器不同而導致實現的程序語言相異。因而,在此不作論述,而主要討論后兩個方面的程序設計。
。常蓖该骶W關協議轉換程序
透明網關協議轉換程序的整體設計思路為:當以太網應用層有數據要發送到CAN節點時,首先,數據發送到透明網關由以太網控制器協議轉換模塊從傳輸層數據報文中解析出完整的CAN協議數據包,存放在數據緩沖區A?再通知總調度模塊,由它調用CAN控制器協議模塊將CAN協議數據包發送到CAN總線上。反過來,當CAN設備有數據要發送到用戶層時,首先,數據發送到透明網關由CAN控制器協議模塊將完整的CAN協議數據包存放在數據緩沖區B?再通知總調度模塊,由它調用以太網控制器協議轉換模塊將完整的CAN協議數據包作為應用層數據封裝起來,再發送到以太網的應用層。其程序結構如圖4所示。
。常保保茫粒慰刂破鲄f議模塊
。茫粒慰刂破鲄f議轉換模塊程序主要由SJA1000的寄存器讀程序CANRead()、寫程序CANWrite()、初始化程序CANInit()、發送程序txdsub()、接收程序rxdsub()程序組成。之所以要編寫單獨的SJA1000的寄存器讀、寫子程序,這是由SX52芯片只有I/O端口決定的。
選用CAN2.0A協議構建CAN總線控制網絡,對SJA1000的初始化主要完成控制寄存器CR、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR、總線定時寄存器BTR0,1和輸出控制寄存器OCR的設置。初始化完成后,由總調度模塊監控SJA1000控制器。當CAN總線上有數據到達時,它調用接收子程序rxdsub(),把這一幀數據包存入數據緩沖區B中,然后釋放接收緩沖器。同樣,當有按CAN2.0A協議格式組合成的一幀數據報文在數據緩沖區A中要發送到CAN總線上去時,總調度模塊將調CAN發送子程序txdsub()發送。
。常保惨蕴W控制器協議轉換模塊
以太網控制器協議轉換模塊主要負責從UDP數據包中解析出完整CAN協議報文,存入數據緩沖區A。同時,可能將數據緩沖區B中的完整CAN協議報文封裝成UDP數據報,然后將其發送到以太網上。
在通信傳輸層采用UDP協議是考慮到CAN協議數據報為短幀形式(每個數據幀最多為8字節)。如果采用TCP傳輸協議,要傳輸8字節CAN協議數據,要先通過3次握手建立連接,再傳輸數據,之后還要通過握手釋放連接。這樣傳輸效率對有限的網絡資源來說無疑是一種浪費。而UDP是無連接的傳輸,可以提高網絡傳輸效率,同時,也減輕網關的處理任務。當然,UDP傳輸協議是不可靠的,對于控制網絡來說,是不允許的。為了提高通信的可靠性,采用了回傳校驗機制。通過實驗測試表明這種方式是行之有效的。
以太網控制器協議轉換模塊主要由以太網卡驅動、ARP、UDP協議的若干個API函數組成,如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等。
系統首次執行或復位時,以太網控制器協議轉換模塊將首先調用NICInit()和UDPAppInit()等進行NIC、ARP、IP、UDP和應用程序的初始化。初始化完成后,即進入主循環。在主循環中,SX52將反復檢測RTL8019AS是否接收以太網幀。當有數據被接收時,SX52調用NICDMAInit()和NICReadAgain()讀入以太網幀首部?再調用ARPCheckIfIs()判斷接收幀是否為ARP數據。若是ARP,則轉入ARPSendResponse()和ARPSendStPacket()子程序進行ARP處理并發送響應ARP數據報;若不是ARP,則判斷是否為IP數據報。若非IP數據報則清除該以太網幀;當所接收幀包含IP數據報時,則需進一步判斷是ICMP數據報還是UDP數據報文。若是ICMP數據報則執行ICMPProcPktIn()子程序處理ICMP數據報并重發IP數據報;若數據為UDP數
據報文,則調用UDPProcPktIn()子程序。該程序將讀入UDP數據報文首部的數據并進行相應處理,還原出完整的CAN協議數據報文存入數據緩沖區B中,再通知總調度程序,由總調度程序調用CAN總線控制子程序將CAN協議數據報文發往CAN總線。
反過來,當總調度程序通知以太網控制器協議轉換模塊將數據緩沖區B中準備好的CAN協議數據發送到以太網上時,它將調用NICInitTxFrame()、UDPStartPktOut()、IPGenCheckSum()、IPStartPktOut()、NICSendTxFrame()、UDPEndPktOut()等子函數進行發送處理,從而實現CAN總線到以太網的數據傳輸。
3.2以太網層應用程序設計
以太網上的通信協議一般采用TCP/IP協議。本文采用流行的SOCKET套接字編程,傳輸層協議選擇UDP(用戶數據報協議),通過VisualC++編寫用戶層程序。
WinSock提供了對UDP的支持,通過UDP協議可以向指定IP地址的透明網關發送CAN協議數據,同時也可以通過它接收CAN協議數據。發送和接收方處于相同的地位沒有主次之分。利用CAsyncSocket類操縱無連接的數據發送較簡單。首先生成一個本地套接口(需要指明SOCK_DGRAM標記);然后利用intCAsyncSocket??SendTo?constvoid?lpBuf?intnBufLen?UINTnHostPort?LPCTSTRlpszHostAddress=NULL?intnFlags=0?發送數據,intCAsyncSocket??ReceiveFrom?void?lpBuf?intnBufLen?CString&rSocketAddress?UINT&rSocketPort?intnFlags=0?接收數據。利用UDP協議可以使管理主機和SX52網關實現雙向的數據通信。同時,這種傳輸方式也易于使數據SX52網關透明化。
本文介紹了一種低成本、高可靠性、快捷的CAN總線與以太網互連方案。該互連方案保證管理監控層與生產測控層之間的連接,方便了上下層信息交流,滿足工廠、變電站等工業場合的應用要求。
【CAN總線與以太網互連系統設計】相關文章:
基于PCI總線的CAN卡的設計與實現08-06
基于USB的CAN總線適配器設計08-06
基于CAN總線的多ECU通信平臺設計08-06
CAN總線的嵌入式Web服務器設計08-06