在工業環境中,各種現場設備的數據采集,其相互間的數據傳送、信息共享以及控制信號的收發基本上都采用電纜進行通信。盡管現場總線技術的成熟極大地減少了現場電纜的敷設數量,正逐漸代替傳統的DCS技術。但在某些工業現場中存在著大量移動設備,如空中起重機使之很難在空中布線,在加固混凝土的地板下面也無法敷設電纜,貨運通道也不便在地面布線。甚至在高溫高壓等特殊工業環境中,往往不能敷設連到計算機的電纜,現場設備間無法通過有線進行相互間的通信,這給傳統的有線連接方式提出了挑戰。 無線通信技術與現場總線技術有機集成,有效地解決了工業現場面臨的諸多難題。 EPA標準概述 EPA系統結構 EPA系統是一種分布式系統,有三種子網:基于以太網(IEEE802.3)、無線局域網(IEEE802.11)和藍牙(IEEE802.15)的子網: 1)一個或多個基于以太網的EPA子網,兼容IEEE802.3協議; 2)一個或多個基于無線局域網的EPA子網,兼容IEEE802.11a、IEEE802.11b、IEEE802.11g協議; 3)一個或多個基于藍牙技術的EPA子網,兼容IEEE802.15協議。 EPA系統中的網段也可以是不同類型的子網,即兩種或三種的結合。如基于以太網和無線局域網的兩種子網組成的混合網段。其EPA系統的網絡拓撲結構如圖1所示。 圖1EPA系統的網絡拓撲結構 基于無線局域網的EPA網絡控制系統 EPA標準制定工作組通過對適用于工業現場控制的無線局域網關鍵技術的研究,提出了支持無線局域網技術的實時分布式網絡控制系統體系結構。該體系結構結合工業現場環境的特點,考慮了基于無線局域網的EPA控制網絡的實時性、可變傳輸率下的通信性能、無線傳輸距離、無線通訊的抗干擾性和無線通訊的安全性等方面的問題,開發了基于EPA的無線分散控制站。EPA無線分散控制站由IO模塊控制卡、EPA無線通信卡兩部分組成。兩塊板卡通過IO模塊控制卡上的雙端口RAM交換數據,通過中斷觸發數據讀寫操作,達到通信效果。 基于Linux的EPA無線通信卡 EPA無線通信卡使用AT91RM9200控制器并通過USB接口加載符合802.11b協議的無線傳輸模塊,操作系統為Linux系統。 基于Linux的EPA無線通信卡的工作原理 EPA無線通信卡運行著EPA協議棧和功能塊(MAI、MAO、MDI、MDO)等。使用向IO模塊控制卡發中斷及響應IO模塊控制卡中斷的方式,通過IO模塊控制卡來配置、讀取和控制現場設備。EPA無線通信卡與IO模塊控制卡之間數據傳輸是直接通過讀寫IO模塊控制卡上的雙端口RAM實現的。EPA無線通信卡通過其上面的USB接口加載了符合802.11b協議的無線傳輸模塊,通過該模塊實現與EPA有線網絡相連,使其與相應的EPA工作站通信,其結構示意圖如圖2所示。 圖2基于Linux的EPA無線通信卡的結構示意圖 基于Linux的EPA無線通信卡的軟件設計 EPA無線分散控制站中無線通信卡軟件開發基于Linux操作系統。由于Linux系統基于802.11b協議的無線驅動已經很成熟了,而基于Linux操作系統的EPA協議棧軟件移植也比較容易。因此,選擇Linux系統會有效的提高EPA無線通信卡的開發周期。 基于Linux的EPA無線通信卡與有線的EPA通信卡在EPA協議棧和功能塊方面大致相同,僅需將應用程序向Linux系統上移植即可。但由于采用了Linux系統在與IO模塊控制卡通信的實現上就相對比較復雜了。與IO模塊控制卡通信的程序流程如圖3所示。 圖3與IO模塊控制卡通信的程序流程圖 軟件實現中關鍵性問題的解決 在Linux操作系統下對于中斷及其他系統資源的操作有特定的規范,如內核模式操作和用戶模式操作具有不同操作權限,內核空間與用戶空間也不能隨意互訪。導致如EPA協議棧無法直接對雙端口RAM進行讀寫,也無法直接向I/O模塊控制卡收發中斷,在Linux系統下,只有在內核模式下才可以做到。那么,怎么樣將數據寫入到雙端口RAM中,然后發送中斷信號通知對方及如何響應對方的中斷并從雙端口RAM中讀數是軟件實現中的關鍵性問題。 發中斷與注冊中斷處理程序的實現 由于發中斷與注冊中斷處理程序是對硬件直接操作,在Linux系統下用戶程序無法直接對其硬件進行操作。因此,必須編寫相應的內核模塊,在內核模塊中完成發中斷與注冊中斷處理程序的操作。在用戶程序中動態加載相應內核模塊來達到用戶程序發中斷與注冊中斷處理程序的效果。其注冊中斷處理程序的內核模塊關鍵性代碼如下: intinit_module(void) //中斷注冊模塊初始化 { … /*初始化設置*/ AT91_SYS->AIC_SMR[25]|=0X20; //設置中斷下跳沿觸發 if(request_irq(25,epa_interrupt,SA_INTERRUPT, "MAIN_IRQ",NULL)) //請求分配中斷號為25的快速中斷處理 //epa_interrupt為指向處理這個中斷的中斷處理程序的指針 {…/*進行出錯處理*/} else {printk("request_irqok!\n"); return0;} } voidcleanup_module(void) { …/*釋放資源*/ free_irq(25,NULL); //釋放中斷線25 } 在用戶程序中發中斷時,通過調用system(send_riq)來動態執行內核模塊程序來控制發送中斷的管腳的信號,從而實現在用戶程序發中斷的效果。其發中斷的內核模塊關鍵性代碼如下: AT91_SYS->;PIOC_PER|=AT91C_PIO_PC15; //設置PC15IO使能 AT91_SYS->;PIOC_OER|=AT91C_PIO_PC15; //設置PC15輸出使能 //發送一個方波中斷信號 AT91_SYS->;PIOC_CODR|=AT91C_PIO_PC15; for(i=1;iPIOC_SODR|=AT91C_PIO_PC15; 雙端口RAM驅動的實現 由于用戶程序不能直接對雙端口RAM進行讀寫,因此必須根據用戶程序的需要編寫雙端口RAM的驅動,以內核模塊的形式動態加載到系統中去。Linux系統將所有設備都看作是文件,對設備的讀寫相當于對文件的讀寫。雙端口RAM驅動模塊加載后,用戶程序就可以像讀寫文件一樣,間接的對雙端口RAM進行讀寫了。其雙端口RAM驅動模塊的主要實現過程如下: staticintwrite_dpram(structfile*file,constchar*buf,u32count,loff_t*f_pos) {…… /*寫初始化*/ copy_from_user(wMessage,buf,count); …… /*進行數據處理*/ for(i=0;i 以上為DPRAM設備驅動的打開、讀寫、關閉函數的實現,然后通過以下標記化結構將其驅動的功能映射到前面的具體實現函數上: staticstructfile_operationstest_fops={ read:read_dpram, write:write_dpram, open:open_dpram, release:release_dpram }; 另外,在驅動程序初始化時必須通過register_chrdev()注冊。在加載該驅動前要使用system("mknod/dev/設備名c主設備號次設備號")創建設備文件并為該設備分配設備號。 測試系統 本項目所搭建的測試系統包括EPA無線通信卡和IO模塊控制卡兩套EPA無線設備、一臺PC機及一個燈箱,如圖4所示。燈箱中的溫度傳感器與AI模塊相連,將溫度值傳遞給AI模塊,并通過設備A發送到以太網上。設備B接收到此溫度值后,將其與額定溫度值相比較,如果低于額定溫度值,則通過AO模塊輸出4mA~20mA電流,控制燈箱內的可控硅模塊,進而驅動燈箱內的燈泡,開始加熱;如果高于額定溫度值,則中斷AO模塊的輸出電流,切斷燈泡的電流輸入,使燈箱內的溫度下降,從而達到保持燈箱內溫度恒定的目的。 實驗證明,EPA無線通信卡與IO模塊控制卡之間數據傳輸穩定,這個系統運行效果良好,達到了預期目標,能夠滿足工業現場設備的通信要求。 圖4測試系統示意圖 結語 EPA系統是一種分布式系統,將分布在現場的若干個設備連接起來一起運作,共同完成工業生產過程和操作中的測量和控制。目前,無線局域網技術在工業控制中的應用已成為當今工業控制領域中的研究熱點。但將無線技術應用于工業現場設備間的通信,并形成完整的分布式網絡控制系統還是空白,也沒相關的行業標準、國家標準和國際標準,專利也很少。因此,研究開發基于無線局域網的EPA通訊體系和工業現場控制設備原理樣機及相關軟件,形成基于EPA的分布式無線網絡控制系統,具有很強的原創性。 |