《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > CAN總線—PROFIBUS-DP總線網(wǎng)關(guān)的實(shí)現(xiàn)方法
CAN總線—PROFIBUS-DP總線網(wǎng)關(guān)的實(shí)現(xiàn)方法
摘要: 在80年代中期,,為了滿足不同自動(dòng)化領(lǐng)域的應(yīng)用需求,,出現(xiàn)了擁有不同技術(shù)特點(diǎn)的現(xiàn)場(chǎng)總線。每一種現(xiàn)場(chǎng)總線都有自己的應(yīng)用領(lǐng)域,,并且都力圖拓展其應(yīng)用領(lǐng)域,,以擴(kuò)張其技術(shù)壟斷范圍。但每種現(xiàn)場(chǎng)總線都以一個(gè)或幾個(gè)大型跨國(guó)公司為背景,,公司的利益與總線的發(fā)展息息相關(guān),。這些公司競(jìng)爭(zhēng)的結(jié)果是多種總線協(xié)調(diào)共存。據(jù)不完全統(tǒng)計(jì),目前國(guó)際上有200多種現(xiàn)場(chǎng)總線,而其中占據(jù)市場(chǎng)主流的現(xiàn)場(chǎng)總線有十幾種[1]?,F(xiàn)場(chǎng)總線的多樣性,,為總線設(shè)備用戶提供了更多產(chǎn)品選擇的同時(shí),也為總線用戶帶了總線設(shè)備間兼容性問題,。工廠在擴(kuò)建,,改建等過程中很可能會(huì)選用與原
關(guān)鍵詞: CAN
Abstract:
Key words :

1  引言

在80年代中期,為了滿足不同自動(dòng)化領(lǐng)域的應(yīng)用需求,,出現(xiàn)了擁有不同技術(shù)特點(diǎn)的現(xiàn)場(chǎng)總線,。每一種現(xiàn)場(chǎng)總線都有自己的應(yīng)用領(lǐng)域,,并且都力圖拓展其應(yīng)用領(lǐng)域,以擴(kuò)張其技術(shù)壟斷范圍,。但每種現(xiàn)場(chǎng)總線都以一個(gè)或幾個(gè)大型跨國(guó)公司為背景,,公司的利益與總線的發(fā)展息息相關(guān)。這些公司競(jìng)爭(zhēng)的結(jié)果是多種總線協(xié)調(diào)共存,。據(jù)不完全統(tǒng)計(jì),目前國(guó)際上有200多種現(xiàn)場(chǎng)總線,而其中占據(jù)市場(chǎng)主流的現(xiàn)場(chǎng)總線有十幾種[1]?,F(xiàn)場(chǎng)總線的多樣性,為總線設(shè)備用戶提供了更多產(chǎn)品選擇的同時(shí),,也為總線用戶帶了總線設(shè)備間兼容性問題,。工廠在擴(kuò)建,改建等過程中很可能會(huì)選用與原先現(xiàn)場(chǎng)設(shè)備總線標(biāo)準(zhǔn)不同的產(chǎn)品,,這些設(shè)備由于使用不同的現(xiàn)場(chǎng)總線,,彼此間不能實(shí)現(xiàn)數(shù)據(jù)共享,于是就降低了設(shè)備間功能互補(bǔ)的優(yōu)點(diǎn),。因此針對(duì)多種總線共存的客觀事實(shí),,探討如何解決不同現(xiàn)場(chǎng)總線系統(tǒng)的互聯(lián)有著重要的現(xiàn)實(shí)意義。本文主要研究PROFIBUS-DP[2]與CAN[3]兩種總線的協(xié)議轉(zhuǎn)換的原理,,并設(shè)計(jì)出了一種網(wǎng)關(guān)實(shí)現(xiàn)了這兩種總線的互聯(lián)。

2  方案設(shè)計(jì)

       對(duì)于兩個(gè)異構(gòu)的現(xiàn)場(chǎng)總線,,其數(shù)據(jù)鏈路層和應(yīng)用層協(xié)議是截然不同的,,要實(shí)現(xiàn)它們的互聯(lián),需要采用網(wǎng)關(guān)進(jìn)行協(xié)議轉(zhuǎn)換,。協(xié)議轉(zhuǎn)換在網(wǎng)關(guān)內(nèi)是按分層逐次進(jìn)行的,。網(wǎng)關(guān)將現(xiàn)場(chǎng)總線設(shè)備1發(fā)送來(lái)的數(shù)據(jù)在不同的協(xié)議層次進(jìn)行解包,最終得到報(bào)文中的用戶數(shù)據(jù),。然后再按照現(xiàn)場(chǎng)總線協(xié)議2逐層打包,,然后發(fā)送到現(xiàn)場(chǎng)總線2中的設(shè)備。

       網(wǎng)關(guān)(gateway)是用于實(shí)現(xiàn)數(shù)據(jù)鏈路層以上層的網(wǎng)絡(luò)互聯(lián)設(shè)備,,它相當(dāng)于一個(gè)協(xié)議轉(zhuǎn)換器,,可以是雙向的,也可以是單向的,,用來(lái)連接不同協(xié)議的網(wǎng)絡(luò),。它不像網(wǎng)橋一樣要求數(shù)據(jù)鏈路層和應(yīng)用層的協(xié)議完全一致。

       通常見到的現(xiàn)場(chǎng)總線網(wǎng)關(guān)是單CPU結(jié)構(gòu)的,,在這種結(jié)構(gòu)里,,CPU要完成兩種總線信息的傳輸與控制,同時(shí)還要完成兩種總線協(xié)議的轉(zhuǎn)換工作,,該方案CPU負(fù)擔(dān)較重,,控制復(fù)雜,,軟件采用多重嵌套。這里提出了一種基于雙CPU結(jié)構(gòu)的網(wǎng)關(guān)設(shè)計(jì)方法,,系統(tǒng)中的兩個(gè)CPU對(duì)兩種總線協(xié)議的數(shù)據(jù)各自進(jìn)行處理與控制,,并將需要傳遞的信息放在雙口RAM內(nèi),實(shí)現(xiàn)信息共享與傳遞,,這種方案容易控制,,軟件簡(jiǎn)單,同時(shí)減輕了CPU的負(fù)擔(dān),,增強(qiáng)了可靠性,。

 3  系統(tǒng)的硬件設(shè)計(jì)

       系統(tǒng)的硬件根據(jù)功能可分為三大部分,一是CAN總線接口電路,,完成CAN總線的數(shù)據(jù)收發(fā)與控制;二是PROFIBUS-DP總線接口電路,,完成PROFIBUS總線數(shù)據(jù)的收發(fā)與控制;三是雙口RAM接口電路,用來(lái)完成兩種總線數(shù)據(jù)的交換,。

 3.1  CAN總線接口硬件結(jié)構(gòu)

       CAN總線接口的整體硬件結(jié)構(gòu)如圖1,。電路主要由四部分所構(gòu)成,微控制器89C52(1),,獨(dú)立CAN通信控制器SJA1000,,CAN總線收發(fā)器82C250和高速光電耦合器6N137。

    CAN總線接口的整體硬件結(jié)構(gòu)

        89C52(1)負(fù)責(zé)SJA1000 的初始化,,通過控制SJA1000 實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務(wù),,同時(shí)還負(fù)責(zé)與PROFIBUS總線接口側(cè)的的數(shù)據(jù)交換,選擇89C52(1)作為CPU的主要是因?yàn)樗粌H與CAN控制芯片SJA1000兼容,,而且內(nèi)部集成8k flash RAM,,可以滿足系統(tǒng)的存儲(chǔ)要求,不需要再外擴(kuò)程序存儲(chǔ)器,。

       SJA1000為CAN總線控制器,。它是一種獨(dú)立CAN 控制器,是PHILIPS公司的CA82C200 CAN控制器的替代產(chǎn)品,,它在軟件和引腳上都保持了與PCA82C200的兼容,。它具有BasicCAN和PeliCAN兩種工作方式,其中 BasicCAN是與PCA82C200兼容的方式;PeliCAN是擴(kuò)展特性方式,支持具有很多新特性的CAN 2.0B協(xié)議,。SJA1000的主要新功能有:標(biāo)準(zhǔn)結(jié)構(gòu)和擴(kuò)展結(jié)構(gòu)報(bào)文的接收和發(fā)送;64 字節(jié)的接收FIFO;標(biāo)準(zhǔn)和擴(kuò)展幀格式都具有單/雙接收濾波器含接收屏蔽和接收碼寄存器;可進(jìn)行讀/寫訪問的錯(cuò)誤計(jì)數(shù)器;可編程的錯(cuò)誤報(bào)警限制;最近一次的錯(cuò)誤代碼寄存器;每一個(gè)CAN 總線錯(cuò)誤都可以產(chǎn)生錯(cuò)誤中斷;具有丟失仲裁定位功能的丟失仲裁中斷;單發(fā)方式當(dāng)發(fā)生錯(cuò)誤或丟失仲裁時(shí)不重發(fā);只聽方式監(jiān)聽CAN 總線無(wú)應(yīng)答無(wú)錯(cuò)誤標(biāo)志;支持熱插拔無(wú)干擾軟件驅(qū)動(dòng)位速率檢測(cè);硬件禁止CLKOUT輸出,。

       SJA1000的AD0-AD7連接到89C52(1)的P0口,CS 連接到89C52(1)的P2.7,, P2.7為0的CPU片外存貯器地址可選中SJA1000,,CPU通過這些地址可對(duì)SJA1000執(zhí)行相應(yīng)的讀寫操作SJA1000的RD,WR,,ALE 分別與89C52的對(duì)應(yīng)引腳相連,。

       為了增強(qiáng)CAN總線節(jié)點(diǎn)的抗干擾能力,,SJA1000的TX0和RX0并不是直接與82C250的TXD和RXD相連,而是通過高速光耦6N137后與82C250相連,,這樣就很好的實(shí)現(xiàn)了總線上各CAN節(jié)點(diǎn)間的電氣隔離,,其中光耦部分電路所采用的兩個(gè)電源VCC和VDD完全隔離。另外82C 250與 CAN總線的接口部分也采用了一定的安全和抗干擾措施,。82C250的CANH和CANL引腳各自通過一個(gè)5Ω的電阻與CAN總線相連電阻可起到一定的限流作用,,保護(hù)82C250免受過流的沖擊。CANH和CANL與地之間并聯(lián)了2個(gè)30P的小電容,,可以起到濾除總線上的高頻干擾和一定的防電磁輻射的能力,,另外在兩根CAN總線接入端與地之間分別反接了一個(gè)保護(hù)二極管,當(dāng)CAN總線有較高的負(fù)電壓時(shí)通過二極管的短路可起到一定的過壓保護(hù)作用,, 82C250的Rs腳上接有一個(gè)斜率電阻,。

3.2  PROFIBUS-DP總線接口電路

       PROFIBUS-DP總線接口的硬件電路也由四部分所構(gòu)成,微控制器89C52(2),,PROFIBUS-DP通信控制器協(xié)議芯片SPC3,,光耦 HCPL7101和6N137,RS485總線驅(qū)動(dòng)電路,。圖2為PROFIBUS-DP通信控制器到RS485總線驅(qū)動(dòng)器的硬件電路圖,。

       89C52(2)主要負(fù)責(zé)控制SPC3,實(shí)現(xiàn)PROFIBUS-DP總線數(shù)據(jù)的轉(zhuǎn)換與共享,。

       SPC3已集成了PROFIBUS-DP物理層的數(shù)據(jù)收發(fā)功能,,可獨(dú)立處理PROFIBUS DP協(xié)議,另外SPC3內(nèi)部還集成有1.5k的雙口RAM,,作為SPC3與用戶程序之間的接口,并且AT89C52(2)可對(duì)SPC3內(nèi)部RAM訪問,。

       盡管SPC3已經(jīng)集成了物理層的數(shù)據(jù)傳輸功能,,但它不具備RS-485的驅(qū)動(dòng)接口,因此添加了RS-485的驅(qū)動(dòng)電路,。
  
    為PROFIBUS

      另外為了避免總線上的信號(hào)對(duì)電路的影響,,在SPC3與RS485總線驅(qū)動(dòng)電路之間采用光電隔離。TxD,、RxD信號(hào)的隔離器件選用Hewlett Packard公司的12M高速光耦HCPL710,,RTS信號(hào)的隔離器件選用了6N137。

3.3  雙口RAM的接口電路

       兩種總線數(shù)據(jù)的共享與傳遞是通過雙口RAM實(shí)現(xiàn)的,,系統(tǒng)里選用了器件IDT7130,。它是高速的1K雙口靜態(tài)RAM。該器件提供兩個(gè)獨(dú)立的端口,,分別有獨(dú)立的控制,、地址和I/O引腳,,并允許獨(dú)立的異步讀寫訪問內(nèi)存的任何地址,自動(dòng)的電源管理特性由CE控制,,允許芯片上的每一個(gè)端口電路進(jìn)入一個(gè)非常低的電源模式,。IDT7130的片內(nèi)總線仲裁電路具有BUSY和INT兩種總線仲裁方式?;谒捎玫膯纹瑱C(jī)型號(hào),,在系統(tǒng)里采用了中斷仲裁方案,這種方式的工作原理是一個(gè)內(nèi)存地址(郵箱或者信息中心)被指派給每個(gè)端口,。左端口的中斷標(biāo)志被宣稱當(dāng)右端口寫到內(nèi)存地址3FEH時(shí),,左端口通過訪問3FE內(nèi)存地址清除中斷。相似的,,當(dāng)左端口寫內(nèi)存地址3FFH時(shí)右端口標(biāo)志被宣稱,,為了清除這個(gè)中斷標(biāo)志,右端口必須訪問內(nèi)存地址3FFH,,系統(tǒng)里3FE和3FF兩個(gè)單元的內(nèi)容賦予新的內(nèi)涵,,即定義兩個(gè)碼0FFH和00H。其中0FFH代表發(fā)送命令要求對(duì)方傳送數(shù)據(jù),,而00H代表發(fā)送的是對(duì)方所要求的數(shù)據(jù),。系統(tǒng)里兩個(gè)CPU與雙口RAM的連接如圖3。雙口RAM的剩余的存儲(chǔ)單元被分為四大部分,,其中0000H-00FFH這256個(gè)單元用來(lái)存儲(chǔ)CAN總線上傳來(lái)的數(shù)據(jù)或地址,,并且相鄰的兩個(gè)單元用于存儲(chǔ)一個(gè)CAN子站的數(shù)據(jù)信息;0100H-01F9H這250個(gè)單元用來(lái)存儲(chǔ)PROFIBUS總線上傳來(lái)的數(shù)據(jù)或地址,相鄰的兩個(gè)單元用于存儲(chǔ)一個(gè)PROFIBUS子站的信息,,另外03FCH單元用于存放CAN總線設(shè)備所要讀的PROFIBUS站點(diǎn)的ID號(hào),,03FDH單元用于存放PROFIBUS總線設(shè)備所要讀的CAN站點(diǎn)的ID號(hào)。

     系統(tǒng)里兩個(gè)CPU與雙口RAM的連接
 
     由圖可知雙口RAM在負(fù)責(zé)CAN總線通信的微處理器的映射地址為0x7C00H-0x7FFFH,,在負(fù)責(zé)PROFIBUS總線通信的微處理器的映射地址為0x2C00H-0x2FFFH,。

4  系統(tǒng)軟件設(shè)計(jì)

      網(wǎng)關(guān)的軟件可分為兩大部分,一部分用于負(fù)責(zé)CAN總線的數(shù)據(jù)通信,,另一部分用于負(fù)責(zé)PROFIBUS總線的數(shù)據(jù)通信,。

      每側(cè)的程序根據(jù)功能又可以分為三個(gè)子模塊:協(xié)議芯片初始化程序,接受數(shù)據(jù)接受子程序,,數(shù)據(jù)發(fā)送子程序,。其中數(shù)據(jù)接受子程序考外部中斷觸發(fā)執(zhí)行。下面以網(wǎng)關(guān)的CAN總線接口側(cè)程序?yàn)槔?,列出程序流程圖,,PROFIBUS側(cè)的接口程序與之相似,就不再贅述。

      CAN總線側(cè)的初始化與發(fā)送程序流程如圖4:

    CAN總線側(cè)的初始化與發(fā)送程序流程

       因?yàn)镾JA1000的初始化只有在復(fù)位模式下才可以進(jìn)行,,因此程序首先將SJA1000的中斷屏蔽,,使它進(jìn)入復(fù)位模式,然后對(duì)它進(jìn)行初始化,。初始化內(nèi)容主要包括工作方式的設(shè)置,、接受濾波方式的設(shè)置、接受屏蔽寄存器和接受代碼寄存器的設(shè)置,、波特率參數(shù)設(shè)置和中斷允許寄存器的設(shè)置等,。 SJA1000完成初始化設(shè)置后,再讓它返回到工作狀態(tài),,進(jìn)行正常的通信任務(wù),。

       在接受子程序里,系統(tǒng)以查詢的方式接受CAN子站傳送過來(lái)的數(shù)據(jù),,網(wǎng)關(guān)通過接受緩沖區(qū)數(shù)據(jù)區(qū)的第一個(gè)字節(jié)的內(nèi)容判斷接受的是真正的數(shù)據(jù),,還是發(fā)給 PROFIBUS-DP站點(diǎn)的發(fā)送數(shù)據(jù)請(qǐng)求。如果數(shù)據(jù)區(qū)第一個(gè)字節(jié)是00H,,則傳送的是數(shù)據(jù)信息,,于是根據(jù)ID查表求得該站所對(duì)應(yīng)的存儲(chǔ)單元,并將數(shù)據(jù)區(qū)的第二,、三字節(jié)的內(nèi)容存在該單元內(nèi),,同時(shí)把ID放在7FFCH中,告訴對(duì)方發(fā)送數(shù)據(jù)的站點(diǎn)號(hào);如果該字節(jié)內(nèi)容是FFH,,則說明是發(fā)送數(shù)據(jù)請(qǐng)求,,數(shù)據(jù)區(qū)第二個(gè)字節(jié)存放的是被要求發(fā)送數(shù)據(jù)的站點(diǎn)號(hào),將他放入7FFCH內(nèi)即可,。

    CAN總線接口發(fā)送數(shù)據(jù)子程序流程圖如圖5:

    CAN總線接口發(fā)送數(shù)據(jù)子程序流程圖

       上面的發(fā)送程序是由雙口RAM的中斷信號(hào)觸發(fā)的,,收到中斷信號(hào)后,首先讀取7FFEH單元的內(nèi)容,,將中斷信號(hào)消除,,然后根據(jù)該單元的內(nèi)容,判斷雙口RAM內(nèi)存放的是數(shù)據(jù),,還是被要求發(fā)送數(shù)據(jù)的CAN子站的ID號(hào)。如果7FFEH內(nèi)容為00H,則說明所要發(fā)送到CAN子站的為正常的數(shù)據(jù),,于是將發(fā)送緩沖區(qū)的第一個(gè)字節(jié)設(shè)置為00H,,告訴CAN子站發(fā)送的為數(shù)據(jù),然后讀取7FFDH單元內(nèi)容,,查表求得數(shù)據(jù)在雙口RAM中的地址,,并從該地址取兩個(gè)字節(jié)存到SJA1000輸出緩沖區(qū)數(shù)據(jù)區(qū)的第二、三個(gè)字節(jié),同時(shí)把7FFDH作為發(fā)送的ID號(hào),。如果7FFDH是FFH,則說明PROFIBUS- DP發(fā)送過來(lái)得是被要求發(fā)送數(shù)據(jù)的CAN子站的站點(diǎn)號(hào),,于是只要把它放到SJA1000發(fā)送緩沖區(qū)數(shù)據(jù)區(qū)的第二個(gè)字節(jié),并把第一個(gè)字節(jié)設(shè)為FFH,,以通知 CAN站點(diǎn),,發(fā)送的數(shù)據(jù)為ID號(hào)。以上工作完成后,,最后通過寫命令字發(fā)送數(shù)據(jù),。

5  結(jié)束語(yǔ)

       實(shí)踐證明,雙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è)備的連接起來(lái),,使兩種現(xiàn)場(chǎng)總線設(shè)備可以高效的通信,最終達(dá)到數(shù)據(jù)共享與功能互補(bǔ)的目的,。并且工作人員在使用過程中不必關(guān)心兩種總線物理層和數(shù)據(jù)鏈路層的全部?jī)?nèi)容,,給總線產(chǎn)品的研究開發(fā)帶來(lái)極大方便。另外這種雙CPU結(jié)構(gòu)的設(shè)計(jì)方案對(duì)其他現(xiàn)場(chǎng)總線之間的網(wǎng)關(guān)設(shè)計(jì)具有借鑒意義,,是一種值得推廣的方法,。

參考文獻(xiàn)

    [1] 鄔寬明. 現(xiàn)場(chǎng)總線應(yīng)用選編. 北京:北京航空航天大學(xué)出版社,2004
    [2] 鄒益仁. 現(xiàn)場(chǎng)總線控制系統(tǒng)的設(shè)計(jì)和開發(fā). 北京:國(guó)防工業(yè)出版社,2003
    [3] 饒運(yùn)濤. 現(xiàn)場(chǎng)總線CAN原理與應(yīng)用技術(shù). 北京:北京航空航天大學(xué)出版社,2003
    [4] SIEMENS. SPC3 and DPS2 User Description Version2.0,2002
    [5] PNO.Draft GSD Specification for PROFIBUS-DP GSD Revision2,1998

 

 

  [6] PHILIPS.Semiconductor PCA82C250 CAN controlerinter-face,1997
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。