1引言
現(xiàn)場總線的多樣性,為總線設(shè)備用戶提供了更多產(chǎn)品選擇的同時,也為總線用戶帶了總線設(shè)備間兼容性問題。工廠在擴建,改建等過程中很可能會選用與原先現(xiàn)場設(shè)備總線標準不同的產(chǎn)品,這些設(shè)備由于使用不同的現(xiàn)場總線,彼此間不能實現(xiàn)數(shù)據(jù)共享,于是就降低了設(shè)備間功能互補的優(yōu)點。因此針對多種總線共存的客觀事實,探討如何解決不同現(xiàn)場總線系統(tǒng)的互聯(lián)有著重要的現(xiàn)實意義。本文主要研究profibus-dp與can兩種總線的協(xié)議轉(zhuǎn)換的原理,并設(shè)計出了一種網(wǎng)關(guān)實現(xiàn)了這兩種總線的互聯(lián)。
2方案設(shè)計
對于兩個異構(gòu)的現(xiàn)場總線,其數(shù)據(jù)鏈路層和應(yīng)用層協(xié)議是截然不同的,要實現(xiàn)它們的互聯(lián),需要采用網(wǎng)關(guān)進行協(xié)議轉(zhuǎn)換。協(xié)議轉(zhuǎn)換在網(wǎng)關(guān)內(nèi)是按分層逐次進行的。網(wǎng)關(guān)將現(xiàn)場總線設(shè)備1發(fā)送來的數(shù)據(jù)在不同的協(xié)議層次進行解包,最終得到報文中的用戶數(shù)據(jù)。然后再按照現(xiàn)場總線協(xié)議2逐層打包,然后發(fā)送到現(xiàn)場總線2中的設(shè)備。
網(wǎng)關(guān)(gateway)是用于實現(xiàn)數(shù)據(jù)鏈路層以上層的網(wǎng)絡(luò)互聯(lián)設(shè)備,它相當于一個協(xié)議轉(zhuǎn)換器,可以是雙向的,也可以是單向的,用來連接不同協(xié)議的網(wǎng)絡(luò)。它不像網(wǎng)橋一樣要求數(shù)據(jù)鏈路層和應(yīng)用層的協(xié)議完全一致。
通常見到的現(xiàn)場總線網(wǎng)關(guān)是單cpu結(jié)構(gòu)的,在這種結(jié)構(gòu)里,cpu要完成兩種總線信息的傳輸與控制,同時還要完成兩種總線協(xié)議的轉(zhuǎn)換工作,該方案cpu負擔較重,控制復(fù)雜,軟件采用多重嵌套。這里提出了一種基于雙cpu結(jié)構(gòu)的網(wǎng)關(guān)設(shè)計方法,系統(tǒng)中的兩個cpu對兩種總線協(xié)議的數(shù)據(jù)各自進行處理與控制,并將需要傳遞的信息放在雙口ram內(nèi),實現(xiàn)信息共享與傳遞,這種方案容易控制,軟件簡單,同時減輕了cpu的負擔,增強了可靠性。
3系統(tǒng)的硬件設(shè)計
系統(tǒng)的硬件根據(jù)功能可分為三大部分,一是can總線接口電路,完成can總線的數(shù)據(jù)收發(fā)與控制;二是profibus-dp總線接口電路,完成profibus總線數(shù)據(jù)的收發(fā)與控制;三是雙口ram接口電路,用來完成兩種總線數(shù)據(jù)的交換。
3.1can總線接口硬件結(jié)構(gòu)
can總線接口的整體硬件結(jié)構(gòu)如圖1。電路主要由四部分所構(gòu)成,微控制器89c52(1),獨立can通信控制器sja1000,can總線收發(fā)器82c250和高速光電耦合器6n137。
89c52(1)負責sja1000的初始化,通過控制sja1000實現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務(wù),同時還負責與profibus總線接口側(cè)的的數(shù)據(jù)交換,選擇89c52(1)作為cpu的主要是因為它不僅與can控制芯片sja1000兼容,而且內(nèi)部集成8kflashram,可以滿足系統(tǒng)的存儲要求,不需要再外擴程序存儲器。
sja1000為can總線控制器。它是一種獨立can控制器,是philips公司的ca82c200can控制器的替代產(chǎn)品,它在軟件和引腳上都保持了與pca82c200的兼容。它具有basiccan和pelican兩種工作方式,其中basiccan是與pca82c200兼容的方式;pelican是擴展特性方式,支持具有很多新特性的can2.0b協(xié)議。sja1000的主要新功能有:標準結(jié)構(gòu)和擴展結(jié)構(gòu)報文的接收和發(fā)送;64字節(jié)的接收fifo;標準和擴展幀格式都具有單/雙接收濾波器含接收屏蔽和接收碼寄存器;可進行讀/寫訪問的錯誤計數(shù)器;可編程的錯誤報警限制;最近一次的錯誤代碼寄存器;每一個can總線錯誤都可以產(chǎn)生錯誤中斷;具有丟失仲裁定位功能的丟失仲裁中斷;單發(fā)方式當發(fā)生錯誤或丟失仲裁時不重發(fā);只聽方式監(jiān)聽can總線無應(yīng)答無錯誤標志;支持熱插拔無干擾軟件驅(qū)動位速率檢測;硬件禁止clkout輸出。
sja1000的ad0-ad7連接到89c52(1)的p0口,cs連接到89c52(1)的p2.7,p2.7為0的cpu片外存貯器地址可選中sja1000,cpu通過這些地址可對sja1000執(zhí)行相應(yīng)的讀寫操作sja1000的rd,wr,ale分別與89c52的對應(yīng)引腳相連。
為了增強can總線節(jié)點的抗干擾能力,sja1000的tx0和rx0并不是直接與82c250的txd和rxd相連,而是通過高速光耦6n137后與82c250相連,這樣就很好的實現(xiàn)了總線上各can節(jié)點間的電氣隔離,其中光耦部分電路所采用的兩個電源vcc和vdd完全隔離。另外82c250與can總線的接口部分也采用了一定的安全和抗干擾措施。82c250的canh和canl引腳各自通過一個5ω的電阻與can總線相連電阻可起到一定的限流作用,保護82c250免受過流的沖擊。canh和canl與地之間并聯(lián)了2個30p的小電容,可以起到濾除總線上的高頻干擾和一定的防電磁輻射的能力,另外在兩根can總線接入端與地之間分別反接了一個保護二極管,當can總線有較高的負電壓時通過二極管的短路可起到一定的過壓保護作用,82c250的rs腳上接有一個斜率電阻。
3.2profibus-dp總線接口電路
profibus-dp總線接口的硬件電路也由四部分所構(gòu)成,微控制器89c52(2),profibus-dp通信控制器協(xié)議芯片spc3,光耦hcpl7101和6n137,rs485總線驅(qū)動電路。圖2為profibus-dp通信控制器到rs485總線驅(qū)動器的硬件電路圖。
89c52(2)主要負責控制spc3,實現(xiàn)profibus-dp總線數(shù)據(jù)的轉(zhuǎn)換與共享。
spc3已集成了profibus-dp物理層的數(shù)據(jù)收發(fā)功能,可獨立處理profibusdp協(xié)議,另外spc3內(nèi)部還集成有1.5k的雙口ram,作為spc3與用戶程序之間的接口,并且at89c52(2)可對spc3內(nèi)部ram訪問。
盡管spc3已經(jīng)集成了物理層的數(shù)據(jù)傳輸功能,但它不具備rs-485的驅(qū)動接口,因此添加了rs-485的驅(qū)動電路。
另外為了避免總線上的信號對電路的影響,在spc3與rs485總線驅(qū)動電路之間采用光電隔離。txd、rxd信號的隔離器件選用hewlettpackard公司的12m高速光耦hcpl710,rts信號的隔離器件選用了6n137。
3.3雙口ram的接口電路
兩種總線數(shù)據(jù)的共享與傳遞是通過雙口ram實現(xiàn)的,系統(tǒng)里選用了器件idt7130。它是高速的1k雙口靜態(tài)ram。該器件提供兩個獨立的端口,分別有獨立的控制、地址和i/o引腳,并允許獨立的異步讀寫訪問內(nèi)存的任何地址,自動的電源管理特性由ce控制,允許芯片上的每一個端口電路進入一個非常低的電源模式。idt7130的片內(nèi)總線仲裁電路具有busy和int兩種總線仲裁方式?;谒捎玫膯纹瑱C型號,在系統(tǒng)里采用了中斷仲裁方案,這種方式的工作原理是一個內(nèi)存地址(郵箱或者信息中心)被指派給每個端口。左端口的中斷標志被宣稱當右端口寫到內(nèi)存地址3feh時,左端口通過訪問3fe內(nèi)存地址清除中斷。相似的,當左端口寫內(nèi)存地址3ffh時右端口標志被宣稱,為了清除這個中斷標志,右端口必須訪問內(nèi)存地址3ffh,系統(tǒng)里3fe和3ff兩個單元的內(nèi)容賦予新的內(nèi)涵,即定義兩個碼0ffh和00h。其中0ffh代表發(fā)送命令要求對方傳送數(shù)據(jù),而00h代表發(fā)送的是對方所要求的數(shù)據(jù)。系統(tǒng)里兩個cpu與雙口ram的連接如圖3。雙口ram的剩余的存儲單元被分為四大部分,其中0000h-00ffh這256個單元用來存儲can總線上傳來的數(shù)據(jù)或地址,并且相鄰的兩個單元用于存儲一個can子站的數(shù)據(jù)信息;0100h-01f9h這250個單元用來存儲profibus總線上傳來的數(shù)據(jù)或地址,相鄰的兩個單元用于存儲一個profibus子站的信息,另外03fch單元用于存放can總線設(shè)備所要讀的profibus站點的id號,03fdh單元用于存放profibus總線設(shè)備所要讀的can站點的id號。
由圖可知雙口ram在負責can總線通信的微處理器的映射地址為0x7c00h-0x7fffh,在負責profibus總線通信的微處理器的映射地址為0x2c00h-0x2fffh。
4系統(tǒng)軟件設(shè)計
網(wǎng)關(guān)的軟件可分為兩大部分,一部分用于負責can總線的數(shù)據(jù)通信,另一部分用于負責profibus總線的數(shù)據(jù)通信。
每側(cè)的程序根據(jù)功能又可以分為三個子模塊:協(xié)議芯片初始化程序,接受數(shù)據(jù)接受子程序,數(shù)據(jù)發(fā)送子程序。其中數(shù)據(jù)接受子程序考外部中斷觸發(fā)執(zhí)行。下面以網(wǎng)關(guān)的can總線接口側(cè)程序為例,列出程序流程圖,profibus側(cè)的接口程序與之相似,就不再贅述。
can總線側(cè)的初始化與發(fā)送程序流程如圖4:
因為sja1000的初始化只有在復(fù)位模式下才可以進行,因此程序首先將sja1000的中斷屏蔽,使它進入復(fù)位模式,然后對它進行初始化。初始化內(nèi)容主要包括工作方式的設(shè)置、接受濾波方式的設(shè)置、接受屏蔽寄存器和接受代碼寄存器的設(shè)置、波特率參數(shù)設(shè)置和中斷允許寄存器的設(shè)置等。sja1000完成初始化設(shè)置后,再讓它返回到工作狀態(tài),進行正常的通信任務(wù)。
在接受子程序里,系統(tǒng)以查詢的方式接受can子站傳送過來的數(shù)據(jù),網(wǎng)關(guān)通過接受緩沖區(qū)數(shù)據(jù)區(qū)的第一個字節(jié)的內(nèi)容判斷接受的是真正的數(shù)據(jù),還是發(fā)給profibus-dp站點的發(fā)送數(shù)據(jù)請求。如果數(shù)據(jù)區(qū)第一個字節(jié)是00h,則傳送的是數(shù)據(jù)信息,于是根據(jù)id查表求得該站所對應(yīng)的存儲單元,并將數(shù)據(jù)區(qū)的第二、三字節(jié)的內(nèi)容存在該單元內(nèi),同時把id放在7ffch中,告訴對方發(fā)送數(shù)據(jù)的站點號;如果該字節(jié)內(nèi)容是ffh,則說明是發(fā)送數(shù)據(jù)請求,數(shù)據(jù)區(qū)第二個字節(jié)存放的是被要求發(fā)送數(shù)據(jù)的站點號,將他放入7ffch內(nèi)即可。
can總線接口發(fā)送數(shù)據(jù)子程序流程圖如圖5:
上面的發(fā)送程序是由雙口ram的中斷信號觸發(fā)的,收到中斷信號后,首先讀取7ffeh單元的內(nèi)容,將中斷信號消除,然后根據(jù)該單元的內(nèi)容,判斷雙口ram內(nèi)存放的是數(shù)據(jù),還是被要求發(fā)送數(shù)據(jù)的can子站的id號。如果7ffeh內(nèi)容為00h,則說明所要發(fā)送到can子站的為正常的數(shù)據(jù),于是將發(fā)送緩沖區(qū)的第一個字節(jié)設(shè)置為00h,告訴can子站發(fā)送的為數(shù)據(jù),然后讀取7ffdh單元內(nèi)容,查表求得數(shù)據(jù)在雙口ram中的地址,并從該地址取兩個字節(jié)存到sja1000輸出緩沖區(qū)數(shù)據(jù)區(qū)的第二、三個字節(jié),同時把7ffdh作為發(fā)送的id號。如果7ffdh是ffh,則說明profibus-dp發(fā)送過來得是被要求發(fā)送數(shù)據(jù)的can子站的站點號,于是只要把它放到sja1000發(fā)送緩沖區(qū)數(shù)據(jù)區(qū)的第二個字節(jié),并把第一個字節(jié)設(shè)為ffh,以通知can站點,發(fā)送的數(shù)據(jù)為id號。以上工作完成后,最后通過寫命令字發(fā)送數(shù)據(jù)。
5結(jié)束語
實踐證明,雙cpu結(jié)構(gòu)的雙向網(wǎng)關(guān)可以很好地完成can總線到profibus-dp總線協(xié)議轉(zhuǎn)換的任務(wù),并且解決了單cpu結(jié)構(gòu)網(wǎng)關(guān)中存在的數(shù)據(jù)傳輸速率低,數(shù)據(jù)傳輸可靠性差等問題,滿足了can總線與profibus-dp總線協(xié)議轉(zhuǎn)換的要求。它將can總線設(shè)備與profibus總線設(shè)備的連接起來,使兩種現(xiàn)場總線設(shè)備可以高效的通信,最終達到數(shù)據(jù)共享與功能互補的目的。并且工作人員在使用過程中不必關(guān)心兩種總線物理層和數(shù)據(jù)鏈路層的全部內(nèi)容,給總線產(chǎn)品的研究開發(fā)帶來極大方便。另外這種雙cpu結(jié)構(gòu)的設(shè)計方案對其他現(xiàn)場總線之間的網(wǎng)關(guān)設(shè)計具有借鑒意義,是一種值得推廣的方法。