1.引言
使用無線連接設(shè)備的便利已經(jīng)導(dǎo)致了在消費(fèi)電子(商業(yè))領(lǐng)域中無線技術(shù)被空前成功的應(yīng)用。在此基礎(chǔ)上基于無線技術(shù)的應(yīng)用開始出現(xiàn)在各個領(lǐng)域,。在工業(yè)或工廠底層環(huán)境中,,使用無線技術(shù)的優(yōu)勢更是多方面的。
第一,,在工業(yè)環(huán)境中往往需要大量的布線,,采用無線技術(shù)不僅會使安裝和維護(hù)的成本有效減少,而且會使設(shè)備的調(diào)整規(guī)劃和重新配置更加的容易,。
第二,,無線技術(shù)的引入對于解決在有化學(xué)腐蝕、震動和移動部件等惡劣環(huán)境中對各種線纜的潛在損傷等問題顯得更加有效,。
第三,,考慮到工廠設(shè)備中適應(yīng)性和靈活性,固定系統(tǒng)可以通過無線技術(shù)和現(xiàn)有的移動子系統(tǒng)或移動機(jī)器人連接通信,。
第四,,對在工廠設(shè)備進(jìn)行臨時訪問任務(wù)(如診斷或程序設(shè)計(jì)等)使用無線技術(shù)會更加簡化(如使用無線手持設(shè)備)。
在解決工業(yè)環(huán)境及過程控制環(huán)境下的許多移動對象,,如移動機(jī)器人與自治運(yùn)輸設(shè)備之間的協(xié)調(diào);旋轉(zhuǎn)對象,,如機(jī)械臂;危險(xiǎn)環(huán)境對象的監(jiān)測與控制問題,如分布式控制等工業(yè)環(huán)境無線技術(shù)發(fā)揮極大的作用,。將無線技術(shù)應(yīng)用到現(xiàn)場總線中來解決傳統(tǒng)現(xiàn)場總線存在的問題,,正受到學(xué)術(shù)界和工業(yè)界的極大關(guān)注。
2.現(xiàn)場總線的無線接入方法
為了使無線技術(shù)能夠無縫而更廣泛地應(yīng)用于工業(yè)現(xiàn)場,,使現(xiàn)場設(shè)備無線接入到現(xiàn)存的現(xiàn)場總線,,國內(nèi)外相關(guān)領(lǐng)域的技術(shù)人員進(jìn)行了一定的嘗試。按在不同層上實(shí)現(xiàn)接入可以將接入方案分為三大類:用戶層接入,、數(shù)據(jù)鏈路層接入和物理層接入,。
(1)用戶層接入:在用戶層設(shè)一個OPC服務(wù)器,通過OPC服務(wù)器進(jìn)行有線網(wǎng)段與無線網(wǎng)段之間的數(shù)據(jù)交換,。該方案其優(yōu)點(diǎn)是簡單易實(shí)現(xiàn),雙方可保持原有結(jié)構(gòu)不動,兩側(cè)的“連接”可隨時通過軟件的控制建立或分離,。缺點(diǎn)是中間環(huán)節(jié)太多,實(shí)時性得不到保證。
(2)物理層的接入:在某些站點(diǎn)的有線連接“下”面加裝Modem,。無線站點(diǎn)的信號經(jīng)過此無線收發(fā)裝置將幀格式轉(zhuǎn)換后,聯(lián)入有線網(wǎng)段接口,因此遠(yuǎn)端的無線站點(diǎn)被“視為”同質(zhì)站點(diǎn),。這樣,所有的有線、無線站點(diǎn)均采用原有現(xiàn)場總線協(xié)議,只是在最底層的某些物理連接上,無線連接代替了有線的連接,。其缺點(diǎn)是此方法僅實(shí)現(xiàn)了點(diǎn)對點(diǎn)的連接,無線站點(diǎn)不具有“漫游接入”的能力,。
(3)數(shù)據(jù)鏈路層的接入:此方法源自WLAN和以太網(wǎng)的聯(lián)接方式,即在PHY層和DDL層之上加一個無線網(wǎng)關(guān),。該無線網(wǎng)關(guān)實(shí)現(xiàn)了無線網(wǎng)段數(shù)據(jù)與有線網(wǎng)段之間的數(shù)據(jù)格式轉(zhuǎn)換和轉(zhuǎn)發(fā),。原有的現(xiàn)場總線保持不動,加裝一個無線網(wǎng)段的AP接入點(diǎn)。當(dāng)兩網(wǎng)段間有數(shù)據(jù)交換時,才會通過AP點(diǎn)經(jīng)過協(xié)議轉(zhuǎn)換把數(shù)據(jù)轉(zhuǎn)發(fā)到另一端,。
數(shù)據(jù)鏈路層的接入是現(xiàn)階段最被關(guān)注的方法,。其具體實(shí)現(xiàn)方法較多,但大多處于理論研究階段或需要對原有的現(xiàn)場總線進(jìn)行改造,,而工業(yè)廠家又不想使現(xiàn)正運(yùn)行的現(xiàn)場總線暫停工作,。這使得現(xiàn)階段的一些其無線接入技術(shù)在現(xiàn)場總線中應(yīng)用變得困難。為了使無線現(xiàn)場設(shè)備能夠應(yīng)用于工業(yè)現(xiàn)場,,又不改動現(xiàn)有的現(xiàn)場總線系統(tǒng),,目前較成熟的技術(shù)就是使用無線分散控制站來與原有的現(xiàn)場總線連接,實(shí)現(xiàn)現(xiàn)場設(shè)備的無線接入,。無線分散控制站一般由IO模塊控制卡,、無線通信卡兩部分組成。兩塊板卡通過IO模塊控制卡上的雙端口RAM交換數(shù)據(jù),,通過中斷觸發(fā)數(shù)據(jù)讀寫操作,,從而達(dá)到通信效果。其關(guān)鍵技術(shù)就是如何實(shí)現(xiàn)無線通信卡的軟件設(shè)計(jì),。
3.基于Linux的無線通信卡
在無線分散控制站中無線通信卡使用AT91RM9200控制器并通過USB接口加載符合802.11b協(xié)議的無線傳輸模塊,,其操作系統(tǒng)為Linux系統(tǒng)。
3.1基于Linux的無線通信卡的工作原理
無線通信卡運(yùn)行著現(xiàn)場總線協(xié)議棧和功能塊(MAI,,MAO,,MDI,MDO)等,。根據(jù)所接入的現(xiàn)場總線的不同選用相應(yīng)的協(xié)議棧,。使用向IO模塊控制卡發(fā)中斷及響應(yīng)IO模塊控制卡中斷的方式,通過IO模塊控制卡來配置,、讀取和控制現(xiàn)場設(shè)備,。無線通信卡與IO模塊控制卡之間數(shù)據(jù)傳輸是直接通過讀寫IO模塊控制卡上的雙端口RAM實(shí)現(xiàn)的。另一方面,,無線通信卡通過其上面的USB接口加載了符合802.11b協(xié)議的無線傳輸模塊,,能夠通過該模塊實(shí)現(xiàn)與有線網(wǎng)絡(luò)相連,使其與相應(yīng)的現(xiàn)場總線工作站通信,其結(jié)構(gòu)示意圖如圖3-1所示:
圖3-1無線通信卡的結(jié)構(gòu)示意圖
3.2基于Linux的無線通信卡的軟件設(shè)計(jì)
無線分散控制站中無線通信卡軟件開發(fā)基于Linux操作系統(tǒng),。由于Linux系統(tǒng)基于802.11b協(xié)議的無線驅(qū)動已經(jīng)很成熟了,,而基于Linux操作系統(tǒng)的協(xié)議棧軟件移植也比較容易。因此,,選擇Linux系統(tǒng)會有效的提高無線通信卡的開發(fā)周期。
基于Linux的無線通信卡與有線的通信卡在協(xié)議棧和功能塊方面大致相同,,僅需將應(yīng)用程序向Linux系統(tǒng)上移植即可,。但由于采用了Linux系統(tǒng)在與IO模塊控制卡通信的實(shí)現(xiàn)上就相對比較復(fù)雜了。與IO模塊控制卡通信的程序流程圖如下圖3-2所示:
圖3-2 與IO模塊控制卡通信的程序流程圖
3.3軟件實(shí)現(xiàn)中關(guān)鍵性問題的解決
在Linux操作系統(tǒng)下對于中斷及其它系統(tǒng)資源的操作有特定的規(guī)范,,如內(nèi)核模式操作和用戶模式操作具有不同操作權(quán)限,,內(nèi)核空間與用戶空間也不能隨意互訪。導(dǎo)致如協(xié)議棧無法直接對雙端口RAM進(jìn)行讀寫,,也無法直接向I/O模塊控制卡收發(fā)中斷,,在Linux系統(tǒng)下,只有在內(nèi)核模式下才可以做到,。那么,,怎么樣將數(shù)據(jù)寫入到雙端口RAM中,然后發(fā)送中斷信號通知對方及如何響應(yīng)對方的中斷并從雙端口RAM中讀數(shù)是軟件實(shí)現(xiàn)中的關(guān)鍵性問題,。
3.3.1發(fā)中斷與注冊中斷處理程序的實(shí)現(xiàn)
由于發(fā)中斷與注冊中斷處理程序是對硬件直接操作,,在Linux系統(tǒng)下用戶程序無法直接對其硬件進(jìn)行操作。因此,,必須編寫相應(yīng)的內(nèi)核模塊,,在內(nèi)核模塊中完成發(fā)中斷與注冊中斷處理程序的操作。在用戶程序中動態(tài)加載相應(yīng)內(nèi)核模塊來達(dá)到用戶程序發(fā)中斷與注冊中斷處理程序的效果,。其注冊中斷處理程序的內(nèi)核模塊關(guān)鍵性代碼如下:
int init_module(void) //中斷注冊模塊初始化
?。?…… /* 初始化設(shè)置 */
AT91_SYS->AIC_SMR[25]|=0X20; //設(shè)置中斷下跳沿觸發(fā)
if (request_irq(n, interrupt_program, INTERRUPT," IRQ1",NULL))
// 請求分配中斷號為n的快速中斷處理
// interrupt_program為指向處理這個中斷的中斷處理程序的指針
{ ……/*沒有申請成功 根據(jù)返回值進(jìn)行出錯處理 * / }
else
?。?printk("<1> 注冊中斷成功 ! \n");
return 0;}
init_waitqueue_head(&my_queue);
?。?/p>
void cleanup_module(void)
{ …… /* 釋放資源 */
free_irq(n,NULL); //釋放中斷線n
?。?/p>
在用戶程序中發(fā)中斷時,,通過調(diào)用system(send_riq)來動態(tài)執(zhí)行內(nèi)核模塊程序來控制發(fā)送中斷的管腳的信號,從而實(shí)現(xiàn)在用戶程序發(fā)中斷的效果,。其發(fā)中斷的內(nèi)核模塊關(guān)鍵性代碼如下:
AT91_SYS->PIOC_PER |= AT91C_PIO_PC15;//設(shè)置PC15IO使能
AT91_SYS->PIOC_OER |= AT91C_PIO_PC15;//設(shè)置PC15輸出使能
//發(fā)送一個方波中斷信號
AT91_SYS->PIOC_CODR |= AT91C_PIO_PC15;
for(i=1;i
AT91_SYS->PIOC_SODR |= AT91C_PIO_PC15;
3.3.2雙端口RAM驅(qū)動的實(shí)現(xiàn)
由于用戶程序不能直接對雙端口RAM進(jìn)行讀寫,,因此必須根據(jù)用戶程序的需要編寫雙端口RAM的驅(qū)動,以內(nèi)核模塊的形式動態(tài)加載到系統(tǒng)中去,。Linux系統(tǒng)將所有設(shè)備都看做是文件,對設(shè)備的讀寫相當(dāng)于對文件的讀寫,。雙端口RAM驅(qū)動模塊加載后,用戶程序就可以像讀寫文件一樣,間接的對雙端口RAM進(jìn)行讀寫了,。其雙端口RAM驅(qū)動模塊的主要實(shí)現(xiàn)過程如下:
static int write_dpram(struct file *file, const char *buf, u32 count, loff_t *f_pos)
?。?…… /* 寫初始化 */
copy_from_user(wMessage,buf,count);
…… /* 進(jìn)行數(shù)據(jù)處理 */
for (i=0;i
{ writeb(wMessage[i], base+wadd);
wadd++; }
…… /*向IO模塊控制卡發(fā)中斷信號*/
?。?/p>
static int read_dpram(struct file *file,char *buf,u32 count,loff_t *f_pos)
?。?…… /*讀函數(shù)則調(diào)用相應(yīng)的readb( )和copy_to_user( )函數(shù),與寫函數(shù)同理*/}
static int open_dpram(struct inode *inode,struct file *file )
?。?…… /*初始化*/
if (!request_mem_region(AT91_DPRAM,BUF_LEN*sizeof(u8),DEVICE_NAME))
?。?…… /*未申請到該內(nèi)存空間時進(jìn)行相應(yīng)處理*/} //申請使用內(nèi)存空間
base =ioremap(AT91_DPRAM,BUF_LEN*sizeof(u8));//為設(shè)備內(nèi)存區(qū)域分配虛擬地址
…… /* 設(shè)置DPRAM讀寫時序*/
}
static int release_dpram(struct inode *inode,struct file *file )
?。?…… /* 釋放相應(yīng)資iounmap( )和release_mem_region();}
以上為DPRAM設(shè)備驅(qū)動的打開,、讀寫、關(guān)閉函數(shù)的實(shí)現(xiàn),,然后通過以下標(biāo)記化結(jié)構(gòu)將其驅(qū)動的功能映射到前面的具體實(shí)現(xiàn)函數(shù)上:
static struct file_operations test_fops = {
read:read_dpram,
write:write_dpram,
open: open_dpram,
release:release_dpram
?。?
另外,在驅(qū)動程序初始化時必須通過register_chrdev( )注冊,。在加載該驅(qū)動前要使用system("mknod /dev/設(shè)備名 c 主設(shè)備號 次設(shè)備號")創(chuàng)建設(shè)備文件并為該設(shè)備分配設(shè)備號,。該雙端口RAM驅(qū)動是通用的,無論什么功能的板卡上面有雙端口RAM并且是基于Linux的系統(tǒng)的都可以使用該驅(qū)動,。
4. 測試
為了測試該無線通信卡的性能,,該測試選用了符合EPA(Ethernet for Plant Automation)標(biāo)準(zhǔn)的現(xiàn)場總線系統(tǒng)進(jìn)行無線擴(kuò)展。EPA是我國第一個擁有自主知識產(chǎn)權(quán)的現(xiàn)場總線標(biāo)準(zhǔn),。所搭建的測試系統(tǒng)基本和有線EPA演示系統(tǒng)一致,。包括一個EPA無線現(xiàn)場設(shè)備B(包括EPA無線通信卡和IO模塊控制卡)和一個EPA無線接入網(wǎng)橋、一臺PC機(jī)及一個燈箱,,如圖4-1所示,。燈箱中的溫度傳感器與AI模塊相連,將溫度值傳遞給AI模塊,,并通過設(shè)備A發(fā)送到以太網(wǎng)上,。設(shè)備B接收到此溫度值后,將其與額定溫度值相比較,,如果低于額定溫度值,,則通過AO模塊輸出電流來控制燈箱內(nèi)燈泡加熱;如果高于額定溫度值,則中斷AO模塊的輸出電流,,切斷燈泡的電流輸入,,使燈箱內(nèi)的溫度下降,從而達(dá)到保持燈箱內(nèi)溫度恒定的目的,。
圖4-1測試系統(tǒng)示意圖
實(shí)驗(yàn)證明,,無線通信卡與IO模塊控制卡之間數(shù)據(jù)傳輸穩(wěn)定,,這個系統(tǒng)運(yùn)行效果良好,達(dá)到了預(yù)期目標(biāo),,能夠滿足工業(yè)現(xiàn)場設(shè)備的通信要求,。同時,并沒有改變和影響原來的有線現(xiàn)場總線的正常工作,。
5.小結(jié)
通過使用無線分散控制站和無線網(wǎng)橋?qū)崿F(xiàn)現(xiàn)場總線的無線接入,,目前是比較穩(wěn)定、便捷的無限擴(kuò)展方法,。本文提出的無線分散控制站中無線通信卡的軟硬件實(shí)現(xiàn)方法是一個通用的快捷開發(fā)方案,。無線技術(shù)給工業(yè)帶來很多益處如減少設(shè)備配置和安裝時間。市場也提供了較成熟的無線技術(shù)如IEEE 802.11標(biāo)準(zhǔn), IEEE 802.15.4 標(biāo)準(zhǔn)和藍(lán)牙技術(shù),。但在工業(yè)現(xiàn)場無線技術(shù)仍不能被廣泛使用。原因之一是無線信道的實(shí)時性和出錯率達(dá)不到要求,。隨著合適的協(xié)議機(jī)制和傳輸調(diào)度的設(shè)計(jì),,并細(xì)致結(jié)合這些方案,無線技術(shù)必將會在工業(yè)現(xiàn)場總線中得到廣泛使用,。