近20年來(lái)工業(yè)測控系統發(fā)展的趨勢是:分散控制和集中管理、標準化和開(kāi)放性。工業(yè)測控系統從傳統的集中測量控制系統轉向網(wǎng)絡(luò )化的集散控制系統。隨著(zhù)現場(chǎng)總線(xiàn)技術(shù)高速發(fā)展和標準化程度不斷提高,以現場(chǎng)總線(xiàn)技術(shù)為基礎的開(kāi)放型集散測控系統—現場(chǎng)總線(xiàn)測控系統得到了廣泛的應用。同時(shí),以太網(wǎng)的應用也迅速向工業(yè)測控系統滲透,在工業(yè)自動(dòng)化應用中異軍突起。 這種趨勢的出現與計算機技術(shù)、信息技術(shù)、網(wǎng)絡(luò )通信技術(shù)的高速發(fā)展相關(guān),F代工業(yè)系統信息交換的需求也已經(jīng)從管理層內部迅速覆蓋到控制、現場(chǎng)設備等各個(gè)層次,連接上層網(wǎng)絡(luò )和現場(chǎng)總線(xiàn)的通信設備成為工廠(chǎng)自動(dòng)化系統中的關(guān)鍵設備之一。CAN-Ethernet通信模塊,是一種直接連接以太網(wǎng)和CAN現場(chǎng)總線(xiàn)的設備,有效解決了控制系統中現場(chǎng)總線(xiàn)和上層信息管理層的互聯(lián)問(wèn)題,使自動(dòng)化系統中的信息交換可以深入到現場(chǎng)設備一級。 1 CAN 總線(xiàn)和以太網(wǎng)的連接 現有的CAN 總線(xiàn)到以太網(wǎng)的通信實(shí)現方案中,采用較多的是使用一臺連接以太網(wǎng)的計算機,在計算機中安裝一塊內置式CAN通信板卡;或者通過(guò)計算機并行和串行接口外接CAN 的通信模塊。這種方法有一定局限性,例如,使用計算機體積大,成本高;計算機故障后的重啟速度慢,這可能?chē)乐赜绊懴到y的工作。采用基于ARM微處理器的單板機系統建立CAN-Ethernet 通信模塊,可以很好地解決上述問(wèn)題,降低系統的成本,提高其性能。CAN-Ethernet通信模塊連接以太網(wǎng)和CAN 總線(xiàn)的結構如圖1 所示。在以太網(wǎng)和CAN 總線(xiàn)之間,可以?huà)旖右粋(gè)通信模塊連接兩種網(wǎng)絡(luò ),也可以使用多個(gè)通信模塊形成多個(gè)通路。對于第二種情況,以太網(wǎng)上的計算機可以通過(guò)指定IP地址和上層協(xié)議的端口選擇通路。 圖1 通過(guò)通信模塊連接以太網(wǎng)和CAN 總線(xiàn) 2 通信模塊的硬件設計 信模塊的硬件核心采用高性能的ARM處理器S3C44B0x。它是一種精簡(jiǎn)指令處理器,可以在32位指令字的ARM模式下和16位指令字的Thumb模式下工作,設計者可以根據需要在性能和代碼大小之間進(jìn)行折衷;片內有8KB的高速靜態(tài)RAM,既可以作為高速緩存,也可以作為片內存儲器使用;片內外設包括異步和同步串行接口、I2C接口、LCD控制器及接口、實(shí)時(shí)時(shí)鐘等。ARM處理器還具有低能耗和高性?xún)r(jià)比,非常適用于構建性能較高的嵌入式系統。 通信模塊使用2片39VF040芯片,位擴展后組成512K/16bit共1MB的Flash ROM作為程序和配置數據的存儲空間,使用1片62LV25616芯片組成256K/16bit 共512B的靜態(tài)隨機存儲器。CAN總線(xiàn)通信控制芯片選用了Philips公司的SJA1000T,它是一種獨立的CAN 總線(xiàn)通信控制器,僅需要CPU給出必要的指令,控制器就可以自動(dòng)完成鏈路層以下的收發(fā)工作,并通知CPU總線(xiàn)的工作狀態(tài)。以太網(wǎng)通信控制芯片采用了臺灣Realtek公司的RTL8019as,它是一種ISA 接口的10Mb/s以太網(wǎng)卡芯片,內部包含了以太網(wǎng)媒體訪(fǎng)問(wèn)控制和物理層驅動(dòng),并帶有16KB的片上緩沖RAM。 2. 1 處理器和5 V 系統數據線(xiàn)的連接 系統中的處理器S3C44B0x 和存儲器芯片都使用3.3 V 的IO電壓,CAN總線(xiàn)接口、以太網(wǎng)接口則使用5V的工作電壓。 S3C44B0x 的數據、地址和控制信號線(xiàn)可以直接驅動(dòng)這些外圍電路芯片(參考S3C44B0x、SJA1000、RTL8019AS 數據手冊) ,但是外圍電路芯片輸出的高電平可能損壞處理器和直接掛接在處理器數據線(xiàn)上的其他芯片。因此,數據線(xiàn)上應該使用總線(xiàn)轉換器進(jìn)行3.3/5V電平轉換。系統選用了兼容3.3 V和5V的信號電平的雙向總線(xiàn)收發(fā)器LCX245芯片。LCX245 的控制信號包括方向控制端DIR(0 :B →A ,1 :A →B) 和使能控制端OE(0 :接通,1 :隔斷) ,這些控制信號將使用GAL芯片產(chǎn)生。圖2 為系統的硬件連接示意圖。 圖2 系統的硬件連接示意圖 GAL 芯片選用GAL16V8D-15LP ,它的傳播延遲時(shí)間為15ns ,反饋延遲時(shí)間為7ns ,適于較高速度的工作。除了產(chǎn)生總線(xiàn)收發(fā)器芯片的控制信號外,同一片GAL 還用來(lái)產(chǎn)生SJA1000 需要的控制信號。根據處理器S3C44B0x 的輸出信號, 包括為SJA1000分配的地址組選通信號nGCS3和RTL8019分配的地址組選通信號nGCS4、讀寫(xiě)信號線(xiàn)nOE和nWE,可以產(chǎn)生總線(xiàn)收發(fā)器LCX245所需要的DIR和OE信號,各信號如圖3 所示。 圖3 LCX245 控制信號的產(chǎn)生 nGCSx 是處理器的地址組選通信號,S3C44B0x 將外部地址空間從地址0 開(kāi)始,每32M劃分為一個(gè)組(Bank ) ,外部尋址時(shí)地址線(xiàn)A0 ~ A24 輸出組內地址,該地址所在的組的組選通信號同時(shí)有效。圖中虛線(xiàn)代表寫(xiě)操作時(shí)的DIR 信號,實(shí)線(xiàn)為讀操作的信號。從圖中可以得到使用ABEL 語(yǔ)言描寫(xiě)的的信號生成邏輯式為: OE = (nOE &nWE) # (nGCS3 &nGCS4 &nGCS5) ; DIR = nOE # (nGCS3 &nGCS4 &nGCS5) ; 但是為了使系統更加穩定地工作,應保證OE 信號有效時(shí)DIR 信號不發(fā)生變化,也就是說(shuō)進(jìn)行讀操作時(shí)圖中OE 低電平脈沖的前沿應晚于DIR ,后沿應早于DIR ,這樣將出現反饋邏輯,可以使用類(lèi)似于同步時(shí)序電路的設計方法設計。圖4 是OE 信號和DIR 信號的次態(tài)卡諾圖,次態(tài)符合上述要求,并且在輸入一定的狀態(tài)下,OE 信號和DIR 信號總是每次改變一個(gè),逐次進(jìn)入最后的穩態(tài)狀態(tài)(粗體字表示) 。圖中“×”表示不會(huì )出現的輸入狀態(tài)。 圖4 OE 和DIR 次態(tài) 卡諾圖 根據卡諾圖重新寫(xiě)出的次態(tài)邏輯產(chǎn)生式,消除單獨輸入(包括OE 和DIR 的當前狀態(tài)) 變化可能引起的競爭- 冒險現象后為: OEn = (nOE &nWE) # (nOE & ! DIR) # (nWE &DIR) # (nGCS3 &nGCS4 &nGCS5) ; /// DIRn = ( ! OE &DIR) # (nOE &DIR) # (nOE &OE) # (nGCS3 & nGCS4 &nGCS5) ; 編譯GAL 邏輯時(shí)應嚴格按照邏輯式生成與或邏輯。 2. 2 CAN 總線(xiàn)通信控制芯片SJA1000 的讀寫(xiě) CAN總線(xiàn)通信控制芯片SJA1000 沒(méi)有提供單獨的地址線(xiàn),而使用可以與Intel 和Motorola系列微控制器兼容的分時(shí)復用地址/ 數據線(xiàn)。在一個(gè)讀寫(xiě)周期內,微控制器首先輸出操作地址并使地址鎖存信號ALE 有效,SJA1000 在A(yíng)LE 信號的下降沿將操作地址鎖在片內;之后微處理器發(fā)出讀寫(xiě)信號進(jìn)行數據傳輸。但S3C44B0x 的數據線(xiàn)和地址線(xiàn)是分離的,對SJA1000 的讀寫(xiě)操作需要模擬微控制器,先在數據線(xiàn)上寫(xiě)一個(gè)操作地址,并模擬產(chǎn)生一個(gè)ALE 信號鎖存這個(gè)地址,之后進(jìn)行正常的讀寫(xiě)操作。系統使用地址線(xiàn)ADDR0 區分地址傳輸和數據傳輸:寫(xiě)奇地址時(shí),不選通SJA1000 芯片,但給出一個(gè)有效的模擬ALE 信號;讀寫(xiě)偶地址時(shí),選通SJA1000 讀寫(xiě)數據。另外,系統同時(shí)有兩路CAN 總線(xiàn)接口,讀寫(xiě)操作根據地址線(xiàn)ADDR1 區分兩個(gè)SJA1000 芯片,兩個(gè)片選信號和ALE 信號都要通過(guò)GAL 芯片產(chǎn)生,各信號如圖5所示。 圖5 SJA1000 控制信號的產(chǎn)生 圖中虛線(xiàn)是向SJA1000 傳輸和鎖存地址的過(guò)程,實(shí)線(xiàn)是讀寫(xiě)操作的過(guò)程。用ABEL 語(yǔ)言書(shū)寫(xiě)的各信號產(chǎn)生邏輯式為: CAN-CS = nGCS4 # ADDR0 ; ALE = ! nWE &ADDR0 & ! nGCS4 ; 對SJA1000 的操作地址如下:地址鎖存向0x08000001端口寫(xiě)地址;數據讀寫(xiě)通過(guò)地址0x08000000。 3 通信模塊的軟件設計 通信模塊和CAN 總線(xiàn)上的設備節點(diǎn)之間直接通過(guò)SJA1000收發(fā)CAN 總線(xiàn)報文進(jìn)行通信,報文中的數據格式可以是基于CAN 總線(xiàn)的上層標準協(xié)議,也可以由用戶(hù)定義。為了方便與以太網(wǎng)上計算機的通信,CAN-Ethernet 通信模塊在以太網(wǎng)一端使用UDP協(xié)議,這樣,計算機上的軟件可以使用操作系統提供的網(wǎng)絡(luò )訪(fǎng)問(wèn)服務(wù)。 每一個(gè)CAN-Ethernet 通信模塊需要設定局域網(wǎng)內一個(gè)惟一的IP地址,通過(guò)固定的UDP端口和計算機通信。模塊和計算機之間既可以使用對單點(diǎn)IP的通信,也可以在UDP端口發(fā)送廣播報文。在以太網(wǎng)一端,通信模塊接收到UDP 報文后,將其中的信息組織成CAN 總線(xiàn)報文發(fā)往CAN 總線(xiàn);在CAN 總線(xiàn)一端,通信模塊接收報文標識能夠通過(guò)本節點(diǎn)接收碼和接收掩碼設置的CAN 總線(xiàn)報文,并封裝為UDP 報文,轉發(fā)到以太網(wǎng)上。各節點(diǎn)IP 地址、UDP工作端口和CAN報文接收掩碼等設置在系統初始化時(shí)進(jìn)行。 3. 1 通信控制芯片的初始化和收發(fā)操作 對SJA1000T的基本操作如下: ①初始化:硬件復位,進(jìn)入復位方式; 設置為BasicCAN 模式,CDR = 0x08 ;設置波特率控制字BTR0 ,BTR1 ;設置接收碼和接收掩碼ACR、AMR;完成設定,進(jìn)入工作模式,CR = 0x1E。 ②發(fā)送:將CAN 總線(xiàn)報文寫(xiě)入SJA1000T 發(fā)送緩沖區TX2IDR1~2 , TXDR1~8 ;寫(xiě)發(fā)送命令,CMR = 0x01。 ③接收:從RXIDR1~2、RXDR1~8 讀出CAN 一幀CAN 總線(xiàn)報文;將SJA1000T 的接收緩沖區窗口滑動(dòng)到下一幀,CMR =0x04。 RTL8019AS內部有頁(yè)地址為0x40~0x79 的256個(gè)緩沖頁(yè),每頁(yè)256B。這些緩沖頁(yè)的一部分作為接收緩沖區,起始頁(yè)地址和結束頁(yè)地址通過(guò)PSTART、PSTOP 寄存器配置,剩余可以作為發(fā)送緩沖區使用。硬件把接收緩沖區作為環(huán)形緩沖區使用,CURR寄存器和BNRY寄存器分別指明緩沖區中未使用部分的起始和結束頁(yè)地址。硬件接收到數據后會(huì )自動(dòng)修改CURR 的值,而B(niǎo)NRY需要讀出一幀數據后由軟件修改;對RTL8019AS的基本操作如下: ①初始化:硬件復位操作,進(jìn)入停止方式;寫(xiě)入物理地址到PR0~PR5 ,寫(xiě)入0x00 到多點(diǎn)接收地址寄存器MAR;設置內部發(fā)送緩沖區器起止頁(yè)地址到PSTART、PSTOP;寫(xiě)入當前頁(yè)地址到CURR和頁(yè)地址界寄存器BNRY中;進(jìn)入正常工作方式,CR =0x02。 ②發(fā)送:將以太網(wǎng)報文載入在RTL8019AS中設置的發(fā)送緩沖區中;寫(xiě)發(fā)送起始頁(yè)地址到TPSR ,寫(xiě)發(fā)送內容長(cháng)度到TBCR0~1 ;寫(xiě)發(fā)送命令,CMR = 0x1A。 ③接收:從在RTL8019AS中設置的接收緩存頁(yè)中讀出一幀以太網(wǎng)報文;根據報文長(cháng)度改變頁(yè)地址界限BNRY的值。 3. 2 UDP 和CAN 報文的轉換 CAN - Ethernet 通信模塊收到CAN 總線(xiàn)報文時(shí),將整個(gè)報文封裝在一幀UDP 報文中;接收到目的端口與自己的工作端口相符的UDP 報文時(shí),取出其中的數據段作為一幀CAN 總線(xiàn)報文。以太網(wǎng)報文到CAN 總線(xiàn)報文的具體轉換過(guò)程如下: ①如果接收到的以太網(wǎng)報文包含IP 報文,分解出IP 報文,否則拋棄這幀報文; ②如果IP 報文的目的地址匹配,并且包含一幀UDP 報文,分解出UDP 報文,否則拋棄; ③如果UDP 報文的目的端口匹配,分解出其中的CAN 總線(xiàn)報文,否則拋棄。 CAN 總線(xiàn)報文到UDP 報文的轉換過(guò)程是: ①接收到的CAN 總線(xiàn)報文裝入UDP 報文的數據段,計算校驗和,完成UDP報文封裝; ②加上IP 報文頭部,計算校驗和,完成IP報文封裝; ③加上以太網(wǎng)報文的頭部,報文尾部的校驗和不需要軟件完成,RTL8019AS在發(fā)送時(shí)會(huì )自動(dòng)添加。 為了減少在轉換過(guò)程中的數據拷貝,定義了如下數據結構。從CAN總線(xiàn)上收到的報文直接放在Frame結構體的can[ ]成員中,并記錄長(cháng)度,封裝為UDP報文的過(guò)程就是填充Frame結構體中其他成員的過(guò)程;從以太網(wǎng)上收到的報文逐字節放入Frame結構體中,CAN 報文就包含在can[ ]成員中。 struct EthHead { unsigned char DstPhyAddr[6 ] ; / / 以太網(wǎng)目的地址 unsigned char SrcPhyAddr[6 ] ; / / 以太網(wǎng)源地址 unsigned short Prt ; / / 協(xié)議標識 } ; struct IPHead { unsigned char VerLen ; / / 版本號和頭長(cháng)度 unsigned char ServType ; / / 服務(wù)類(lèi)型 unsigned short Len ; / / 長(cháng)度 unsigned short ID; / / 報文ID unsigned short FlagAndFrag ; / / 標記和分段 unsigned char TTL ; unsigned char Prt ; / / 協(xié)議標識 unsigned short HdChksum; / / 頭校驗和 unsigned char srcIP[4 ] ; / / 源IP 地址 unsigned char dstIP[4 ] ; / / 目的IP 地址 } ; struct UDPHead { unsigned short srcPort ; / / 源端口號 unsigned short srcPort ; / / 目的端口號 unsigned short Len ; / / 長(cháng)度 unsigned short Chksum; / / 校驗和 } ; struct Frame { struct EthHead ethhd ; struct IPHead iphd ; struct UDPHead udphd ; unsigned char can [ 10 ] ; / / 放置CAN 報文 short canlen ; / / 記錄收到的CAN 報文長(cháng)度 } ; 3. 3 通信程序的實(shí)現 處理器對SJA1000T和RTL8019AS 的操作都使用了中斷方式,通信模塊的軟件程序可以分成SJA1000T 中斷服務(wù)程序、RTL8019AS中斷服務(wù)程序和主程序3 個(gè)部分,是典型的前、后臺處理結構。在中斷服務(wù)程序中,將收到的CAN 總線(xiàn)報文和以太網(wǎng)報文讀入內存中的緩沖區,并累加緩沖區內還未處理的報文計數。在主程序循環(huán)中,輪流處理兩個(gè)緩沖區中的報文,并減小報文計數值。圖6 是SJA1000T的中斷服務(wù)流程、RTL8019AS中斷服務(wù)流程、主程序的流程。由于SJA1000T內部的接收緩沖區只有64B ,所以在程序中定義了容納32個(gè)Frame結構體數組can- rbuf [ ]并組成環(huán)形緩沖區。同時(shí)也定義了相同大小的數組eth- rbuf [ ]組成以太網(wǎng)接收的環(huán)形緩沖區。 圖6 通信模塊軟件流程圖 在調試過(guò)程中發(fā)現,如果轉發(fā)過(guò)程被特定的中斷程序打斷,可能發(fā)生報文計數錯誤;如果向RTL8019AS寫(xiě)入待發(fā)送報文的過(guò)程被以太網(wǎng)接收中斷打斷,就無(wú)法恢復寫(xiě)入過(guò)程了。因此在轉發(fā)過(guò)程中應屏蔽相應的中斷。 4 結束語(yǔ) 采用上述方法實(shí)現的CAN-Ethernet 通信模塊,解決了以太網(wǎng)和現場(chǎng)總線(xiàn)CAN 總線(xiàn)之間互聯(lián)問(wèn)題,可以根據應用的需求,進(jìn)行靈活的配置和改進(jìn),提高系統的性能和可靠性。實(shí)際證明,在局域網(wǎng)環(huán)境下模塊工作可靠,在以太網(wǎng)負載適中時(shí),只有很小的通信延遲。它為CAN-Ethernet 的互聯(lián)提供了低成本、高性能及靈活的解決方案。 |