??? 摘??要: 為了通過以太網(wǎng)遠程監(jiān)控基于CAN總線的工業(yè)控制系統(tǒng),設計了一個CAN-以太網(wǎng)協(xié)議轉換器。TCP/IP傳輸層的協(xié)議選擇UDP協(xié)議,用單片機實現(xiàn)CAN與UDP協(xié)議之間的轉換。
??? 關鍵詞: CAN; UDP; 協(xié)議轉換; 單片機
?
隨著計算機技術、現(xiàn)場總線技術及信息技術的發(fā)展,CAN(Controller Area Network)總線在工業(yè)控制中的應用越來越普遍。CAN總線能實現(xiàn)現(xiàn)場各類儀表相互間的通信,但其遠程通信能力較弱。而以太網(wǎng)作為當今的主流網(wǎng)絡,具有很強的遠程通信能力。為了融合這兩類網(wǎng)絡的技術優(yōu)勢,實現(xiàn)CAN總線網(wǎng)絡與以太網(wǎng)的數(shù)據(jù)互聯(lián),必須設計CAN-以太網(wǎng)協(xié)議轉換器。
本文提出一種設計CAN-以太網(wǎng)協(xié)議轉換器的方法,用16位PIC單片機設計一種CAN總線協(xié)議與TCP/IP協(xié)議的轉換網(wǎng)關。由于所針對的傳輸層協(xié)議是UDP(User Datagram Protocol),因此,實際上設計的是CAN總線協(xié)議與UDP協(xié)議的轉換網(wǎng)關。
1 CAN-以太網(wǎng)協(xié)議轉換器的系統(tǒng)結構
系統(tǒng)主要由CAN通信模塊、以太網(wǎng)通信模塊和協(xié)議轉換模塊三部分構成,通過一個16位的PIC單片機相連。CAN通信模塊主要用于采集現(xiàn)場儀表的數(shù)據(jù)和與協(xié)議轉換模塊之間的數(shù)據(jù)傳遞;以太網(wǎng)通信模塊主要負責協(xié)議轉換模塊與以太網(wǎng)之間的數(shù)據(jù)傳輸;協(xié)議轉換模塊是將CAN協(xié)議數(shù)據(jù)包與UDP協(xié)議數(shù)據(jù)包進行轉換。
當現(xiàn)場儀表有數(shù)據(jù)要傳送到以太網(wǎng)上的工控機時,CAN通信模塊會采集CAN節(jié)點的數(shù)據(jù),放入數(shù)據(jù)緩沖區(qū);協(xié)議的轉換由PIC單片機完成,它將數(shù)據(jù)緩沖區(qū)CAN協(xié)議數(shù)據(jù)包轉換成UDP協(xié)議數(shù)據(jù)包,最后由以太網(wǎng)通信模塊發(fā)送給以太網(wǎng)。當控制命令或數(shù)據(jù)要從以太網(wǎng)傳送給現(xiàn)場儀表時,以太網(wǎng)通信模塊將接收以太網(wǎng)上的數(shù)據(jù)包,并放入數(shù)據(jù)緩沖區(qū);然后協(xié)議轉換模塊把從以太網(wǎng)上接收到的UDP協(xié)議數(shù)據(jù)包轉換成CAN協(xié)議數(shù)據(jù)包;最后通過CAN通信模塊,將數(shù)據(jù)包發(fā)送給相應的現(xiàn)場儀表,從而實現(xiàn)對現(xiàn)場儀表的遠程控制。
2 硬件設計
CAN-以太網(wǎng)協(xié)議轉換器的硬件主要由兩部分組成:CAN通信模塊接口電路和以太網(wǎng)通信接口電路。協(xié)議轉換主要通過單片機進行編程實現(xiàn)。
2.1 CAN通信模塊接口電路設計
CAN通信接口電路主要由主控芯片PIC24FJ64GA008、CAN總線控制器SJA1000、CAN總線收發(fā)器82C250和高速光耦6N137組成,其接口電路如圖1所示。PIC24FJ64GA008單片機初始化CAN總線控制器SJA1000,并通過讀寫SJA1000的數(shù)據(jù)緩沖區(qū)實現(xiàn)CAN幀信息的接收和發(fā)送。CAN總線控制器SJA1000實現(xiàn)CAN總線數(shù)據(jù)鏈路層協(xié)議??偩€收發(fā)器82C250將CAN協(xié)議控制器與物理通信線路連接在一起。高速光耦6N137用于隔離,起到保護SJA1000型CAN總線控制器的作用。接口電路主要用到了單片機的并行主控端口模塊,它能夠很方便地實現(xiàn)與并行外設的連接。通過對并行端口控制寄存器(PMCON)和并行端口模式寄存器(PMMODE)進行適當?shù)呐渲?,使并行主控端口模塊的8位地址線與數(shù)據(jù)線復用,并提供鎖存信號PMALL、片選信號、讀信號
、寫信號PMWR[1]。連接時將SJA1000的AD7~AD0腳與單片機的PMD[7..0]相連,用于傳送地址和數(shù)據(jù)。單片機通過引腳PMALL、
、
控制SJA1000的ALE、
引腳,實現(xiàn)對SJA1000的讀寫控制。若片選信號
與SJA1000的片選引腳
相連,使SJA1000的基地址為0X8000,則SJA1000內(nèi)部的32個寄存器的地址為:0X8000~0X801F。單片機的引腳
與SJA1000的引腳INT相連,由于SJA1000的
引腳是集電極開路輸出,因此需要加上拉電阻,這樣單片機就可以通過中斷方式讀寫SJA1000中的數(shù)據(jù)緩沖區(qū)[2]。
?
2.2 以太網(wǎng)接口電路設計
以太網(wǎng)接口電路用到的主要芯片有單片機PIC24FJ64GA008、以太網(wǎng)控制器RTL8019AS、鎖存器74LS373、存儲器93LC46、隔離濾波器20F001N。RTL8019AS是臺灣Realtek公司生產(chǎn)的以太網(wǎng)控制器,符合Ethernet II和IEEE802.3標準,收發(fā)速率可同時達到10Mb/s,內(nèi)部有16K BRAM。接收數(shù)據(jù)和發(fā)送數(shù)據(jù)需通過DMA(Direct Memory Access)讀寫RTL8019AS的內(nèi)部RAM來實現(xiàn),單片機讀寫RAM時使用的是遠程DMA,RTL8019AS讀寫RAM時使用的是本地DMA。其接口電路如圖2所示[3],圖中,RTL8019AS的數(shù)據(jù)線SD[7..0]與單片機的PMD[7..0]相連,地址線SA9、SA8與PMCS1相連,低五位地址SA4~SA0與74LS373的Q[4..0]相連。93LC46是三線SPI串行接口EEPROM,主要保存RTL8019AS的配置信息,其00H~03H地址空間用于存儲RTL8019AS的配置寄存器CONFIG1~4的初始化值;04H~11H地址空間存儲網(wǎng)絡節(jié)點的地址;12H~7FH地址空間存儲即插即用的配置信息。若00H單元的值為0X00,RTL8019AS在復位后會自動讀取93LC46,這樣配置寄存器CONFIG1的值為00H,低四位IOS3~0的值為0,而當IOS[3..0]=0時,RTL8019AS的I/O端口的基地址為300H。因為RTL8019AS的地址為20位,所以其I/O口的地址空間為00300H~0031FH。據(jù)此,在接線時將SA19~SA10直接接地,SA9~SA8與PMCS1相連,SA7~SA5接地,當PMCS1=1時就可以選中芯片RTL8019AS。PMCS1是單片機的ADDR14,因此,RTL8019AS的內(nèi)部地址空間00300H~0031FH的外部映射地址是4000H~401FH。RTL8019AS的IOCS16B引腳通過27k?贅的電阻下拉接地,將數(shù)據(jù)總線定義為8位[2,4]。
?
RTL8019AS內(nèi)置了10BASE-T收發(fā)器,可以通過雙絞線進行以太網(wǎng)通信。TPIN±為接收線,TPOUT±為發(fā)送線,經(jīng)隔離濾波器20F001N后分別與RJ-45的RX±、TX±相連接。
??? LED0和LED1各接一個發(fā)光二極管以反映通信狀態(tài),LED0被點亮表示通信沖突,LED1被點亮表示收到了網(wǎng)上的數(shù)據(jù)包。
3 軟件設計
??? 軟件主要分為三部分:CAN通信程序、以太網(wǎng)通信程序和CAN-UDP協(xié)議轉換程序。軟件設計的整體思路為:當現(xiàn)場儀表有數(shù)據(jù)要發(fā)送到以太網(wǎng)時,首先由CAN通信程序采集現(xiàn)場儀表的CAN協(xié)議數(shù)據(jù)包,并存放在緩沖區(qū)Buffer1中,然后調(diào)用CAN-UDP協(xié)議轉換程序將CAN協(xié)議數(shù)據(jù)包封裝成UDP數(shù)據(jù)包,最后由以太網(wǎng)通信程序發(fā)送到以太網(wǎng)的應用層。反之,當以太網(wǎng)上的數(shù)據(jù)要發(fā)送給某個CAN節(jié)點時,以太網(wǎng)通信程序首先將以太網(wǎng)傳輸層的UDP數(shù)據(jù)包放入緩沖區(qū)Buffer2,然后調(diào)用協(xié)議轉換程序將UDP數(shù)據(jù)包轉換成CAN協(xié)議數(shù)據(jù)包,最后調(diào)用CAN通信程序將緩沖區(qū)Buffer2中的數(shù)據(jù)發(fā)送到CAN總線上的指定節(jié)點。
3.1 CAN通信程序
??? CAN通信網(wǎng)絡是根據(jù)CAN協(xié)議2.0A構建的,SJA1000工作在BasicCAN模式。CAN通信程序主要由以下幾部分構成:SJA1000初始化程序Config_SJA1000( )、讀寫SJA1000內(nèi)部寄存器程序Read_SJA1000( )和Write_SJA1000( )、CAN發(fā)送程序BCAN_DATA_SEND( )、CAN接收程序BCAN_DATA_RECEIVE( )。
??? Config_SJA1000( )程序主要完成波特率的設置、CAN節(jié)點地址的設定、驗收屏蔽寄存器AMR的設置、中斷寄存器IR的設置以及命令寄存器CMR的設置。為了確保CAN通信正常,CAN總線所有節(jié)點的波特率必須相同。當發(fā)送CAN協(xié)議數(shù)據(jù)包給CAN節(jié)點時,執(zhí)行BCAN_DATA_SEND( )函數(shù),該函數(shù)通過調(diào)用Write_SJA1000( )子程序,將待發(fā)送的數(shù)據(jù)寫入CAN的數(shù)據(jù)發(fā)送寄存器,從而實現(xiàn)發(fā)送。當SJA1000接收到CAN節(jié)點的數(shù)據(jù)時,通過單片機的外部中斷INT2向單片機申請中斷,單片機在INT2的中斷服務程序中會調(diào)用CAN接收程序,由CAN接收程序調(diào)用Read_SJA1000( ),將SJA1000數(shù)據(jù)接收緩沖區(qū)中的數(shù)據(jù)讀到單片機的數(shù)據(jù)緩沖區(qū)Buffer1中。
3.2 CAN-UDP協(xié)議轉換程序
??? CAN-UDP協(xié)議轉換程序主要負責將數(shù)據(jù)緩沖區(qū)Buffer1中的CAN協(xié)議數(shù)據(jù)包封裝成UDP數(shù)據(jù)包;同時也會從以太網(wǎng)的傳輸層上接收UDP數(shù)據(jù)包,然后封裝成CAN協(xié)議數(shù)據(jù)包,存入數(shù)據(jù)緩沖區(qū)Buffer2。UDP協(xié)議的幀格式如圖3所示。
?
源端口號(2B):發(fā)送進程的端口,即假定在沒有其他信息的情況下,返回信息應該向什么地方發(fā)送。
??? 目標端口號(2B):UDP數(shù)據(jù)包的接收端號。
數(shù)據(jù)報長度(2B):包括報頭和數(shù)據(jù)報在內(nèi)的總字節(jié)數(shù)。
校驗值(2B):對IP頭、UDP頭和數(shù)據(jù)中信息包頭的數(shù)位取反之和再取反。源端口號、目標端口號、數(shù)據(jù)報長度和校驗值構成UDP報頭。
UDP數(shù)據(jù):是實際的傳輸信息,數(shù)據(jù)的最大長度可達到65 527 字節(jié)。在傳輸過程中數(shù)據(jù)字節(jié)設為8B,且第一個數(shù)據(jù)字節(jié)為CAN節(jié)點的地址。CAN數(shù)據(jù)包幀格式如圖4所示。
?
地址(1B):8位標識符,表示發(fā)送數(shù)據(jù)或接收數(shù)據(jù)的節(jié)點地址。字節(jié)數(shù)(1B):數(shù)據(jù)報和校驗和的字節(jié)數(shù)之和,固定值設為8。數(shù)據(jù)報(8B):前7個字節(jié)為傳送的實際信息,第8個字節(jié)為校驗和。
將UDP協(xié)議數(shù)據(jù)包轉換成CAN協(xié)議數(shù)據(jù)包時,單片機將UDP數(shù)據(jù)包的報頭去掉,將第1個數(shù)據(jù)字節(jié)作為CAN協(xié)議包的第1個字節(jié),UDP的第3個數(shù)據(jù)字節(jié)~第10個數(shù)據(jù)字節(jié)作為CAN協(xié)議包的第3字節(jié)~第10字節(jié),UDP的第2個數(shù)據(jù)字節(jié)作為CAN協(xié)議包的第2個字節(jié),固定值設為8,最后將轉換好的數(shù)據(jù)包發(fā)送出去。將CAN協(xié)議數(shù)據(jù)包轉換成UDP協(xié)議數(shù)據(jù)包時,單片機要給UDP協(xié)議數(shù)據(jù)包加上報頭。數(shù)據(jù)報的轉換過程與上述過程類似,不再贅述。
3.3 以太網(wǎng)通信程序
以太網(wǎng)通信程序主要由RTL8019AS的初始化程序、數(shù)據(jù)接收函數(shù)和數(shù)據(jù)發(fā)送函數(shù)組成。系統(tǒng)上電后,先執(zhí)行RTL8019AS的初始化程序,該子程序主要是對RTL8019AS中第0頁和第1頁的相關寄存器進行設置;然后程序對RTL8019AS數(shù)據(jù)發(fā)送寄存器、接收寄存器進行檢測,當數(shù)據(jù)緩沖區(qū)Buffer1有數(shù)據(jù)向以太網(wǎng)發(fā)送時,單片機通過遠程DMA通道將數(shù)據(jù)送到RTL8019AS的RAM中,然后發(fā)出傳送命令;之后RTL8019AS啟動本地DMA,將數(shù)據(jù)發(fā)送到以太網(wǎng)上。 反之,當以太網(wǎng)上有數(shù)據(jù)要傳給CAN節(jié)點時,先啟動本地DMA,將網(wǎng)上的數(shù)據(jù)讀到RTL8019AS的RAM中,然后單片機通過遠程DMA通道將RAM中的數(shù)據(jù)讀到緩沖區(qū)Buffer2。
本文設計了一款價格低廉、性能可靠的CAN—以太網(wǎng)協(xié)議轉換器,為部分工業(yè)控制系統(tǒng)的遠程監(jiān)控設計提供了一種新的選擇方案。
參考文獻
[1]?Microchip Technology Inc.PIC24FJ128GA系列數(shù)據(jù)手冊.2006.
[2]?Philips Semiconductors. SJA1000 datasheet.2000.
[3]?曹宇,魏豐,胡士毅.用51單片機控制RTL8019AS實現(xiàn)以太網(wǎng)通訊[J]. 電子技術應用,2003,29(1):21-23.
[4]?REALTEK. Realtek RTL8019AS datasheet.2005.