嵌入式CAN-Ethernet接入網(wǎng)關(guān)的設計與實(shí)現
摘要:針對煤礦安全監測監控系統中 CAN現場(chǎng)總線(xiàn)與以太網(wǎng)互聯(lián)的需求,采用 32位 RISC ARM處理器,設計了 CAN-Ethernet嵌入式接入網(wǎng)關(guān),運行在 Linux嵌入式實(shí)時(shí)操作系統上。詳細介紹了網(wǎng)關(guān)的硬件與軟件設計方案,實(shí)現了 CAN總線(xiàn)與以太網(wǎng)的無(wú)縫連接。經(jīng)現場(chǎng)應用驗證,該網(wǎng)關(guān)較好地完成了兩種網(wǎng)絡(luò )之間的協(xié)議轉換和數據通信。
本文引用地址:http://dyxdggzs.com/article/148702.htm1引言
現場(chǎng)總線(xiàn) CAN-bus最早由德國 Bosch公司提出,主要用于汽車(chē)內部單元與控制中心之間的數據通信[1],由于其在網(wǎng)絡(luò )開(kāi)放性、通訊可靠性、數據傳輸實(shí)時(shí)性、系統設計成本、系統擴展能力、糾錯能力等方面具有強大的優(yōu)勢,使得 CAN現場(chǎng)總線(xiàn)越來(lái)越受到人們的關(guān)注。而且基于開(kāi)放的現場(chǎng)總線(xiàn) CAN-bus技術(shù),構建煤礦行業(yè)的通訊網(wǎng)絡(luò ),或開(kāi)發(fā)特定功能的通訊設備,都已經(jīng)不會(huì )存在技術(shù)上的門(mén)檻。CAN-bus本身也是符合本質(zhì)安全要求的,所以當 CAN-bus應用于煤礦通訊系統時(shí),也立即獲得了廣大設備用戶(hù)的認可,成為煤礦行業(yè)中首選的設備通信網(wǎng)絡(luò ),通過(guò)由 CAN-bus構建的煤礦現場(chǎng)設備網(wǎng)絡(luò ),管理者和主控設備能即時(shí)了解、處理當前的礦井情況,發(fā)覺(jué)事故隱患,避免危機的發(fā)生。同時(shí),煤礦系統中工業(yè)以太網(wǎng)技術(shù)也日趨成熟。CAN-bus現場(chǎng)總線(xiàn)與以太網(wǎng)互連,既能保證工業(yè)現場(chǎng)數據的可靠實(shí)時(shí)傳輸,又能滿(mǎn)足數據信息的分析、記錄、管理以及遠程共享管理,推進(jìn)煤礦監測監控系統的標準化和開(kāi)放性,實(shí)現現代化煤礦的綜合自動(dòng)化。而 CAN-bus和以太網(wǎng)采用的是不同的通信標準,要實(shí)現它們之間的互聯(lián)就要通過(guò)總線(xiàn)標準轉換設備(即網(wǎng)關(guān))來(lái)實(shí)現。
本文設計開(kāi)發(fā) CAN-Ethernet網(wǎng)關(guān),實(shí)現了煤礦安全監控系統中的井下 CAN總線(xiàn)設備與以太網(wǎng)的互連互通,從而將現場(chǎng)總線(xiàn)設備接入到無(wú)處不在的 Internet網(wǎng)絡(luò ),實(shí)現數十公里以外,乃至整個(gè)地區的數據采集和管理滿(mǎn)足煤礦行業(yè)現場(chǎng)數據的現代化管理要求。2硬件設計
本網(wǎng)關(guān)的硬件部分主要由協(xié)議轉換模塊、CAN總線(xiàn)接口模塊和以太網(wǎng)接口模塊等部分組成。本網(wǎng)關(guān)系統還提供了 RS232接口模塊,用來(lái)在調試過(guò)程中與 PC機進(jìn)行通信,串口作為控制臺輸入調試命令,顯示調試結果。內置工業(yè)級電源系統,支持擴展電源輸出,用于為其他設備提供電源。系統硬件結構如圖 1所示。

圖1硬件結構圖
2.1協(xié)議轉換模塊
協(xié)議轉換模塊是嵌入式網(wǎng)關(guān)的核心,由嵌入式微處理器及大容量的存儲系統組成。微處理器采用 S3C2410A,S3C2410A是三星公司推出的基于 ARM920T內核的 16/32位 RISC嵌入式微處理器。配置了兩片 HY57V561620并聯(lián)構成的 32位 64MB SDRAM存儲系統,存放系統運行時(shí)的用戶(hù)數據、堆棧等信息。FLASH選用一片 64M的 K9F1208U0B,它是一款 NAND flash存儲器,用來(lái)存放用戶(hù)應用程序、嵌入式操作系統及現場(chǎng)總線(xiàn)傳輸來(lái)的數據
2.2 CAN總線(xiàn)接口模塊
CAN總線(xiàn)接口模塊實(shí)現網(wǎng)關(guān)與 CAN總線(xiàn)設備的互聯(lián)。網(wǎng)關(guān)的 CAN總線(xiàn)接口采用的是兩片SJA1000CAN總線(xiàn)控制器和兩片 TJA1050高速 CAN收發(fā)器。此外,在煤礦井下環(huán)境中,為提高系統的抗干擾能力,電路中要采用光電隔離技術(shù)將嵌入式網(wǎng)關(guān)內部電路與現場(chǎng)總線(xiàn)進(jìn)行電氣隔離,保護網(wǎng)關(guān)的正常準確工作,因此在 CAN控制器與收發(fā)器之間使用光耦 6N137進(jìn)行隔離,在光耦前后需要采用 2個(gè)相互隔離的 DC5V電源,本系統選用 B0505S-1W DC-DC變換器,實(shí)現系統與外界的真正隔離,抑制干擾的串入。SJA1000與微處理器的接口是以外部存儲器的方式,數據線(xiàn)與地址線(xiàn)共用,基地址由 SJA1000的片選信號 CS決定,本設計中其地址定義在 BANK5中,因此使用此基地址加上 SJA1000內部寄存器地址的偏移量就可以訪(fǎng)問(wèn) SJA1000內部 RAM空間;SJA1000的模式輸入引腳(MODE)接正 5V電源,使其在 intel模式下工作;將 SJA1000的中斷輸出 INT引腳分別接 S3C2410A的 INT16和 17,使得數據接收采用了中斷方式。
2.3以太網(wǎng)接口模塊
自適應以太網(wǎng)接口模塊提供了網(wǎng)關(guān)接入以太網(wǎng)的接口。以太網(wǎng)控制器采用DM9000,它具有高度的集成性,具有獨特的 Packetpage結構可自動(dòng)適應網(wǎng)絡(luò )通信量模式的改變和現有系統資源,使網(wǎng)關(guān)以 10Mb/s或 100Mb/s的速率接入以太網(wǎng)網(wǎng)絡(luò )。DM9000與 CPU按照16位方式連接,以太網(wǎng)控制芯片復位后默認工作方式為 I/O連接。
3軟件設計
本網(wǎng)關(guān)的設計采用了基于消息隊列的多線(xiàn)程以及多進(jìn)程的方式,實(shí)現了CAN總線(xiàn)數據收發(fā)和以太網(wǎng)通信的同步;以太網(wǎng)通信程序采用流行的 socket套接字編程,傳輸層協(xié)議選擇UDP(用戶(hù)數據報協(xié)議)。要實(shí)現進(jìn)程間通信,可以通過(guò)管道、信號量、消息隊列及共享內存區等多種方式,在不同的系統中使用時(shí)各有優(yōu)點(diǎn),文獻[2]中提出,經(jīng)測試,對于小消息(100字節左右),在除了darwin6.6以外的所有系統中,system Ⅴ消息隊列性能最好。而網(wǎng)關(guān)中每次收發(fā)的數據也在 100個(gè)字節以?xún)?。所以本設計中使用system Ⅴ消息隊列在進(jìn)程間傳送數據。
在軟件設計上可將其分為兩大部分:CAN總線(xiàn)設備通信程序進(jìn)程(主程序)和協(xié)議轉換及以太網(wǎng)通信程序進(jìn)程(server)。
3.1 CAN總線(xiàn)設備通信程序
主程序中,初始化包括模式寄存器MOD、命令寄存器CMR、狀態(tài)寄存器SR、總線(xiàn)定時(shí)寄
存器BTR0,BTR1、驗收代碼寄存器ACR、驗收屏蔽寄存器 AMR和輸出控制寄存器 OCR等的設置。下面將創(chuàng )建 3個(gè)線(xiàn)程,CAN數據接收線(xiàn)程(CAN.receive)、CAN數據發(fā)送線(xiàn)程(CAN.send)和調用 server進(jìn)程的線(xiàn)程。這就保證了兩個(gè) CAN口能分別同時(shí)接收和發(fā)送數據,網(wǎng)關(guān)同時(shí)也能與上位機軟件通信。
CAN.receive線(xiàn)程 : for(;;) {if CAN0口有數據
break;} read(ca,rcvbuf,0);//從底層現場(chǎng)總線(xiàn)網(wǎng)絡(luò )中接受各種智能設備采集的實(shí)時(shí)數據或報警信息,將其存入緩沖區,然后將 rcvbuf中數據放入 msg0.buffer
msgsend(msgid,msg0,sizeof(struct msgtype0),0);//將數據發(fā)送到消息隊列 0中。這里發(fā)送到消息隊列上的數據包括 CAN報文的 ID識別碼,RTR幀等信息,即不解析收到的CAN數據包內容,直接將其發(fā)送到消息隊列 0
CAN.send線(xiàn)程: msgrecv(msgid,msg1,sizeof(struct msgtype1),2,0);//從消息隊列1中讀取數據 添加本地 CAN地址,寫(xiě)入發(fā)送緩沖區sendbuf; write(ca,sendbuf,1);//將從緩沖區中讀取的數據通過(guò) CAN1口發(fā)送到目的CAN節點(diǎn)當然,也可以只用一個(gè) CAN口實(shí)現CAN數據收發(fā),但這時(shí)要注意防止 CAN口的收發(fā)沖突,
這就要加入互斥鎖[3]。 CAN總線(xiàn)設備通信程序主要流程如圖 2所示。

3.2協(xié)議轉換及以太網(wǎng)通信程序
我們知道,CAN協(xié)議為了提高實(shí)時(shí)性采用了短幀結構,而以太網(wǎng)幀相對要長(cháng)得多;CAN協(xié)議采用載波偵聽(tīng)多路存取/消息優(yōu)越仲裁(CSMA/AMP)機制解決沖突,而以太網(wǎng)幀采用CSMA/CD機制。這兩點(diǎn)構成了 CAN與以太網(wǎng)之間的主要差異,也使得 CAN-Ethernet網(wǎng)關(guān)的轉換協(xié)議復雜度提高,但由于本系統中采用了 Server/Client的通信服務(wù)模式,網(wǎng)關(guān)即作為服務(wù)端,相對于文獻[4]省去了網(wǎng)關(guān)與服務(wù)器通信這一過(guò)程,所以轉換協(xié)議也相對較簡(jiǎn)單。
在本系統中,由于網(wǎng)關(guān)實(shí)現的是 CAN總線(xiàn)報文和 UDP報文的數據轉發(fā),任務(wù)相對簡(jiǎn)單,因此傳輸層協(xié)議選擇較為簡(jiǎn)潔的 UDP協(xié)議,建立無(wú)連接的服務(wù)端。服務(wù)端首先確立端口號,通過(guò)調用 Socket建立套接字,然后使用 bind綁定本地地址,通過(guò)調用 sendto()和 recvfrom()就可以向以太網(wǎng)發(fā)送和接收數據。 定義 Socket地址常用的是 sockaddr_in結構,該結構如下所示: struct sockaddr_in {
在本系統中,Socket地址定義為gatewayAddr,端口號設置為8888。不同的計算機存放多字節值的順序不同,有的計算機在起始地址存放低字節,有的則起始存放高字節,為了程序的可移植性,需要將主機字節順序轉換成網(wǎng)絡(luò )字節順序。調用htons()將端口號 8888轉換成網(wǎng)絡(luò )字節順序,然后賦值給 gatewayAddr.sin_port。gatewayAddr.sin_addr. s_addr定義了主機的 IP地址,在本系統中并不關(guān)心主機的 IP地址,故將主機的 IP設置為INADDR_ANY,即可以偵聽(tīng)局域網(wǎng)內的任一主機的報文。
協(xié)議轉換與以太網(wǎng)通信程序流程如圖 3所示。

if有udp報文到達{ recvfrom(gatewayfd,rcvbuf1,sizeof(rcvbuf1),0,(structsockaddr *)cliaddr, clilen);//接收以太網(wǎng)報文
將rcvbuf1內數據放入消息隊列msg1.buffer;}
else if 消息隊列 0有 CAN報文 //通過(guò)判斷 CAN報文標志位來(lái)實(shí)現
{ msgrcv(msgid,msg0,sizeof(struct msgtype0),1,0);//接受消息隊列 0中數據
置位 CAN報文標志位;
將消息隊列值讀入rcvbuf0;
sendto(gatewayfd,rcvbuf0,sizeof(struct rcvbuf0),(struct sockaddr *)cliaddr,clilen); }//將 UDP報文發(fā)送到以太網(wǎng)
else return;
4應用
該網(wǎng)關(guān)應用于基于 CAN總線(xiàn)的監測監控系統和測控設備接入以太網(wǎng)的場(chǎng)合,已經(jīng)在江蘇徐州大屯煤電公司姚橋煤礦得到了應用,目前設備運行良好。應用本網(wǎng)關(guān)可以解決現場(chǎng)總線(xiàn)設備接入以太網(wǎng)的問(wèn)題,真正實(shí)現了大范圍的數據采集和管理,滿(mǎn)足了煤礦企業(yè)的現代化管理要求。CAN-Ethernet網(wǎng)關(guān)在井下監測監控系統中的位置如圖 4所示。

5結束語(yǔ)
本文的創(chuàng )新點(diǎn):本文設計的 CAN-Ethernet網(wǎng)關(guān),采用ARM 處理器,軟件上采用消息隊列機制實(shí)現不同進(jìn)程間通信,實(shí)現了基于CAN總線(xiàn)的煤礦井下監控系統與礦井綜合業(yè)務(wù)數字網(wǎng)的互聯(lián),為煤礦企業(yè)信息化建設奠定了基礎。本設計實(shí)現的 CAN-Ethernet通信程序,無(wú)須另外添加轉換接口設備,在原有硬件基礎上僅通過(guò)軟件修改即可實(shí)現 CAN與以太網(wǎng)的互聯(lián)。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論