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