引言
CAN總線是一種開放式,、數(shù)字化,、多點通信的控制系統(tǒng)局域網(wǎng)絡,是當今自動化領域中最具有應用前景的技術之一,。由于CAN總線具有通信速率高,、開放性好、報文短,、糾錯能力強以及控制簡單、擴展能力強,、系統(tǒng)成本低等特點,,越來越受到人們的關注。以太網(wǎng)具有快速,、靈活,、方便、可靠的特長,,如果把現(xiàn)場總線與以太網(wǎng)互聯(lián)的話,,可實現(xiàn)過程控制中從設備層到管理層的一體化,使得企業(yè)可以廣泛地應用如互聯(lián)網(wǎng),、無線通信,、智能設備和決策支持系統(tǒng)等新技術,以達到提高效率和降低成本的目的,。
硬件設計
硬件選擇
要實現(xiàn)現(xiàn)場總線設備接入Internet,,關鍵就是要實現(xiàn)TCP/IP 協(xié)議、以及傳輸信息介質的選擇,。筆者用SX52微控制器作為處理器,,以太網(wǎng)驅動芯片RTL8019AS經(jīng)耦合隔離濾波器HR61101G和RJ45接口接入以太網(wǎng),配有RS232和CAN總線兩個擴展接口,,可以將具有RS232接口的設備或采用CAN總線協(xié)議通信的設備連到以太網(wǎng)上,。RS232接口采用MAX232CPE芯片,CAN總線控制器采用Philips公司的SJA1000芯片,,CAN收發(fā)器采用PCA82C250芯片,。硬件結構框圖見圖1。
圖1 硬件結構框圖
工作原理為:當以太網(wǎng)中發(fā)送數(shù)據(jù)和請求,,通過RJ45送到RTL8019AS,,RTL8019AS 負責將處理后的以太網(wǎng)幀送入SX52的TCP/IP協(xié)議棧,由協(xié)議棧對數(shù)據(jù)報進行解析,,得到原始的請求和控制信息,。請求和控制信息再經(jīng)過SJA1000進行CAN協(xié)議格式的數(shù)據(jù)封裝,然后和現(xiàn)場的CAN總線設備進行通信,。請求和控制的回復信息到局域網(wǎng)的過程與上面正好相反,。
硬件電路圖
在CAN到Ethernet網(wǎng)關的硬件設計中,,在確保通信功能順利實現(xiàn)的同時,充分利用了SX52芯片I/O口靈活配置的特點,,最大程度地節(jié)約了微控制器SX52的硬件資源,。其電路簡圖見圖2。
圖2 電路簡圖
SX52有5個I/O口共40個引腳,,在設計中利用SX52的C口的RC0~RC7連接RTL8019AS的數(shù)據(jù)口SD0~SD7,,SX52的B口兼顧選址和讀寫控制功能,在開發(fā)中用它與RTL8019AS 的地址及讀寫控制引腳連接,。RTL8019AS 基地址選擇引腳IOS0~ IOS3接地,,此時I/O基地址為300H,即001100000000,,所以地址線SA9,、SA8接+ 5V。又因為寄存器地址偏移量為00H~1FH 共32個,,對應地址從300H到31FH,,所以只需將地址線SA0~SA4接SX52 的RB0~RB4,其余地址線接地即可,。芯片IORB,、IOWB引腳為讀寫信號線,接SX52的RB6,、RB5讀寫控制引腳,。RTL8019AS 可以兼容8位和16位操作。圖2中IOCS16是16位I/O的選擇腳,,當RTL8019AS上電復位的時候,,如果這個腳為低電平,選擇8位模式,,為高電平選擇16位模式,。由于SX52是8位的數(shù)據(jù)總線,因此要用8位總線模式,,所以將這個腳接地,。RTL8019AS有3種工作方式,筆者采用第一種工作方式,,此時JP 引腳接高電平,。AUI引腳決定使用AUI還是BNC接口。高電平時使用AUI 接口,,低電平時使用BNC接口,,支持8線雙絞線或同軸電纜。設計中采用雙絞線為通信介質,,將該引腳接地,。RTL8019AS 使用引腳TPIN+ ,、TPIN- 、TPOUT+和TPOUT-連接耦合隔離濾波器HR61101G,,通過RJ45插頭實現(xiàn)與以太網(wǎng)的連接,。SJA1000是獨立的CAN 通信控制器,支持CAN2.0B協(xié)議,。它的AD0~AD7為地址數(shù)據(jù)復用線,,與SX52的D口RD0~RD7相連。當遠程用戶通過Web服務器查詢現(xiàn)場的CAN總線數(shù)據(jù)時,,SJA1000將現(xiàn)場控制單元的CAN 總線數(shù)據(jù)解析,,發(fā)送到SX52,再傳到Internet,。PCA82C250對總線提供發(fā)送能力并對CAN控制器提供接收能力,它支持1Mbps的速度,。為保證SX52與SJA1000協(xié)同工作,,在硬件設計中將兩個芯片共用一個硬件復位線,以確保SX52與SJA1000硬件同步復位,。MAX232CPE完成232電平與TTL電平轉換,。用于提供一個本地接口,為調試和維護提供方便,。TXD接SX52的RA2腳,,RXD接SX52的RA3腳,RS—RXD和RS—TXD是RS232電平,,為標準串口電平,。數(shù)據(jù)可以從串口輸入到單片機SX52,SX52再把數(shù)據(jù)送到RTL8019AS,。
網(wǎng)關的軟件設計
整個互聯(lián)系統(tǒng)的軟件設計可以分為3個部分:CAN總線設備接口通信程序,、網(wǎng)關協(xié)議轉換程序和基于以太網(wǎng)的TCP/IP協(xié)議的程序實現(xiàn)。
網(wǎng)關協(xié)議轉換程序
網(wǎng)關協(xié)議轉換程序的整體設計思路為:當以太網(wǎng)應用層有數(shù)據(jù)要發(fā)送到CAN節(jié)點時,,首先,,數(shù)據(jù)發(fā)送到網(wǎng)關,由以太網(wǎng)控制器協(xié)議轉換模塊從UDP數(shù)據(jù)報文中解析出完整的CAN 協(xié)議數(shù)據(jù)包,,存放在數(shù)據(jù)緩沖區(qū)A,,再調用CAN 控制器協(xié)議模塊將它發(fā)送到CAN 總線上。反過來,,當CAN 設備有數(shù)據(jù)要發(fā)送到用戶層時,,首先數(shù)據(jù)發(fā)送到網(wǎng)關,由CAN控制器協(xié)議模塊將完整的CAN 協(xié)議數(shù)據(jù)包存放在數(shù)據(jù)緩沖區(qū)B,,再調用以太網(wǎng)控制器協(xié)議轉換模塊將完整的CAN協(xié)議數(shù)據(jù)包作為應用層數(shù)據(jù)封裝發(fā)送到以太網(wǎng)應用層,。
CAN 控制器協(xié)議模塊
CAN 控制器協(xié)議轉換模塊程序主要由SJA1000的寄存器讀,、寫程序,初始化程序和發(fā)送,、接收程序5 個子程序組成,。之所以要編寫單獨的SJA1000寄存器讀、寫子程序,,這是由SX52 芯片只有I/O端口的特點所決定的,。
(1) 讀SJA1000 寄存器子程序CANRead()其過程為:Re引腳設為輸出;CS片選清零,;Rd引腳設為輸出,;輸出地址;置位ALE,;延時20 ns ,;ALE位清零;Rd 引腳設為輸入,;/Read 位清零,;讀入數(shù)據(jù);延時20ns ,;/Read 位置位,;CS片選置位;返回,。
(2) 寫SJA1000寄存器子程序CANWrite()其過程為:Re引腳設為輸出,;CS片選清零;置位ALE,;Rd 引腳設為輸出,;輸出地址;ALE位清零,;/wr位清零,;輸出數(shù)據(jù);延時20ns,;CS片選置位,; 返回。
(3) SJA1000初始化子程序CANInit()選用CAN2.0A協(xié)議構建CAN總線控制網(wǎng)絡,,對SJA1000的初始化主要完成控制寄存器CR,、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR,、總線定時寄存器BTR0,,1和輸出控制寄存器OCR的設置。
(4) 發(fā)送接收子程序txdsub(),,rxdsub()發(fā)送子程序負責節(jié)點報文的發(fā)送,,由CAN控制器SJA1000獨立完成,。主控制器SX52只需將數(shù)據(jù)緩沖區(qū)A中已按CAN2.0A協(xié)議格式組合成的一幀報文送入SJA1000 發(fā)送緩沖區(qū)中,然后將命令寄存器里的發(fā)送請求標志置位,,即可發(fā)送報文,。
接收子程序負責節(jié)點報文的接收。SJA1000自動接收發(fā)往該節(jié)點的數(shù)據(jù)并將收到的數(shù)據(jù)放到它的接收緩沖器中,。SJA1000 的報文接收主要有兩種方式:中斷接收方式和查詢接收方式,。該系統(tǒng)采用查詢接收方式??梢园l(fā)送給主控制器SX52的接收信息由狀態(tài)寄存器的接收緩沖器狀態(tài)標志RBS和接收中斷標志RI 標出,。SX52將會把這一幀數(shù)據(jù)包存入數(shù)據(jù)緩沖區(qū)B中,然后釋放接收緩沖器,,再通知總調度程序,,由總調度程序調用以太網(wǎng)控制器協(xié)議轉換模塊轉發(fā)。
以太網(wǎng)控制器協(xié)議轉換模塊
以太網(wǎng)控制器協(xié)議轉換模塊主要負責從UDP數(shù)據(jù)包中解析出完整CAN協(xié)議報文,,存入數(shù)據(jù)緩沖區(qū)A,。同時,將數(shù)據(jù)緩沖區(qū)B中的完整CAN協(xié)議報文封裝成UDP數(shù)據(jù)報后發(fā)送到以太網(wǎng)上,。采用UDP協(xié)議是考慮到CAN 協(xié)議數(shù)據(jù)報為短幀形式(每個數(shù)據(jù)幀最多為8個字節(jié)),,因為TCP協(xié)議要進行3次握手建立連接,,這對網(wǎng)絡來說無疑是一種資源的浪費,。而UDP是無連接的傳輸,這樣可以提高網(wǎng)絡傳輸效率,,同時,,也減輕網(wǎng)關的處理任務。當然,,UDP是不可靠的傳輸協(xié)議,。為了提高通信的可靠性,在應用層建立回傳校驗機制,,通過實驗
測試表明這種方式是行之有效的,。以太網(wǎng)控制器協(xié)議轉換模塊主要由若干個ARP、UDP協(xié)議的API函數(shù)組成,。
TCP/IP應用層程序設計
基于以太網(wǎng)的高層通信協(xié)議一般采用TCP/IP協(xié)議,。這里采用流行的SOCKET套接字編程,傳輸層協(xié)議選擇UDP(用戶數(shù)據(jù)報協(xié)議),,通過VisualC++編寫應用層程序,。WinSock提供了對UDP的支持,通過UDP協(xié)議可以向指定IP 地址的網(wǎng)關發(fā)送CAN 協(xié)議數(shù)據(jù),,同時也可以從它接收CAN協(xié)議數(shù)據(jù),,發(fā)送和接收方處于相同的地位沒有主次之分,。利用CAsyncSocket類操縱無連接的數(shù)據(jù)發(fā)送較簡單,首先生成一個本地套接口,,然后利用int CAsyncSocket : : SendTo ( constvoid 3 1pBuf ,, int nBufLen , UINT nHostPort ,, LPCTSTR1pszHostAddress = NULL ,,int nFlags = 0) 發(fā)送數(shù)據(jù),intCAsyncSocket : : ReceiveFrom ( void 3 1pBuf ,, int nBufLen ,,CString & rSocketAddess ,UINT & rSocketPort ,, intnFlags = 0) 接收數(shù)據(jù),。利用UDP 協(xié)議發(fā)送和接收都可以是雙向的,即管理主機和SX52網(wǎng)關都可以發(fā)送和接收數(shù)據(jù),。在程序設計中,,創(chuàng)建了一個CAsyncSocket 派生類CCanSocket ,該派生類CCanSocket 有若干成員函數(shù),,通過這些類成員函數(shù),,可以很方便地實現(xiàn)CAN總線到Internet 的通信。
結 論
隨著Internet技術的日益成熟測控系統(tǒng)網(wǎng)絡和以太網(wǎng)將漸漸融合,。CAN總線到Internet的互聯(lián)網(wǎng)關的設計研究是一項具有重要意義的工作,,它有非常廣闊的應用前景。