<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 基于Linux的EPA無(wú)線(xiàn)通信卡的實(shí)現

基于Linux的EPA無(wú)線(xiàn)通信卡的實(shí)現

作者: 時(shí)間:2007-12-05 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:闡述了卡的過(guò)程,成功地解決了IO模塊控制卡與其之間的通信問(wèn)題,從而為無(wú)線(xiàn)局域網(wǎng)的網(wǎng)絡(luò )控制系統研發(fā)提供了可靠保證。同時(shí)進(jìn)行了簡(jiǎn)單測試,實(shí)驗證明測試系統運行效果良好,達到了預期目標。
關(guān)鍵詞:通信卡;無(wú)線(xiàn)局域網(wǎng);驅動(dòng)

引言

在工業(yè)環(huán)境中,各種現場(chǎng)設備的數據采集,其相互間的數據傳送、信息共享以及控制信號的收發(fā)基本上都采用電纜進(jìn)行通信。盡管現場(chǎng)總線(xiàn)技術(shù)的成熟極大地減少了現場(chǎng)電纜的敷設數量,正逐漸代替傳統的DCS技術(shù)。但在某些工業(yè)現場(chǎng)中存在著(zhù)大量移動(dòng)設備,如空中起重機使之很難在空中布線(xiàn),在加固混凝土的地板下面也無(wú)法敷設電纜,貨運通道也不便在地面布線(xiàn)。甚至在高溫高壓等特殊工業(yè)環(huán)境中,往往不能敷設連到計算機的電纜,現場(chǎng)設備間無(wú)法通過(guò)有線(xiàn)進(jìn)行相互間的通信,這給傳統的有線(xiàn)連接方式提出了挑戰。

技術(shù)與現場(chǎng)總線(xiàn)技術(shù)有機集成,有效地解決了工業(yè)現場(chǎng)面臨的諸多難題。

EPA標準概述

EPA系統結構
EPA系統是一種分布式系統,有三種子網(wǎng):以太網(wǎng)(IEEE802.3)、無(wú)線(xiàn)局域網(wǎng)(IEEE802.11)和藍牙(IEEE802.15)的子網(wǎng):

1)一個(gè)或多個(gè)基于以太網(wǎng)的EPA子網(wǎng),兼容IEEE802.3協(xié)議;
2)一個(gè)或多個(gè)基于無(wú)線(xiàn)局域網(wǎng)的EPA子網(wǎng),兼容IEEE802.11a、IEEE802.11b、IEEE802.11g協(xié)議;
3)一個(gè)或多個(gè)基于藍牙技術(shù)的EPA子網(wǎng),兼容IEEE802.15協(xié)議。

EPA系統中的網(wǎng)段也可以是不同類(lèi)型的子網(wǎng),即兩種或三種的結合。如基于以太網(wǎng)和無(wú)線(xiàn)局域網(wǎng)的兩種子網(wǎng)組成的混合網(wǎng)段。其EPA系統的網(wǎng)絡(luò )拓撲結構如圖1所示。


圖1 EPA系統的網(wǎng)絡(luò )拓撲結構

基于無(wú)線(xiàn)局域網(wǎng)的EPA網(wǎng)絡(luò )控制系統
EPA標準制定工作組通過(guò)對適用于工業(yè)現場(chǎng)控制的無(wú)線(xiàn)局域網(wǎng)關(guān)鍵技術(shù)的研究,提出了支持無(wú)線(xiàn)局域網(wǎng)技術(shù)的實(shí)時(shí)分布式網(wǎng)絡(luò )控制系統體系結構。該體系結構結合工業(yè)現場(chǎng)環(huán)境的特點(diǎn),考慮了基于無(wú)線(xiàn)局域網(wǎng)的EPA控制網(wǎng)絡(luò )的實(shí)時(shí)性、可變傳輸率下的通信性能、無(wú)線(xiàn)傳輸距離、無(wú)線(xiàn)通訊的抗干擾性和無(wú)線(xiàn)通訊的安全性等方面的問(wèn)題,開(kāi)發(fā)了基于EPA的無(wú)線(xiàn)分散控制站。EPA無(wú)線(xiàn)分散控制站由IO模塊控制卡、EPA卡兩部分組成。兩塊板卡通過(guò)IO模塊控制卡上的雙端口RAM交換數據,通過(guò)中斷觸發(fā)數據讀寫(xiě)操作,達到通信效果。

基于的EPA無(wú)線(xiàn)通信卡

EPA無(wú)線(xiàn)通信卡使用AT91RM9200控制器并通過(guò)USB接口加載符合802.11b協(xié)議的無(wú)線(xiàn)傳輸模塊,操作系統為L(cháng)inux系統。

基于Linux的EPA無(wú)線(xiàn)通信卡的工作原理
EPA無(wú)線(xiàn)通信卡運行著(zhù)EPA協(xié)議棧和功能塊(MAI、MAO、MDI、MDO)等。使用向IO模塊控制卡發(fā)中斷及響應IO模塊控制卡中斷的方式,通過(guò)IO模塊控制卡來(lái)配置、讀取和控制現場(chǎng)設備。EPA無(wú)線(xiàn)通信卡與IO模塊控制卡之間數據傳輸是直接通過(guò)讀寫(xiě)IO模塊控制卡上的雙端口RAM的。EPA無(wú)線(xiàn)通信卡通過(guò)其上面的USB接口加載了符合802.11b協(xié)議的無(wú)線(xiàn)傳輸模塊,通過(guò)該模塊實(shí)現與EPA有線(xiàn)網(wǎng)絡(luò )相連,使其與相應的EPA工作站通信,其結構示意圖如圖2所示。


圖2 基于Linux的EPA無(wú)線(xiàn)通信卡的結構示意圖

基于Linux的EPA無(wú)線(xiàn)通信卡的軟件設計
EPA無(wú)線(xiàn)分散控制站中無(wú)線(xiàn)通信卡軟件開(kāi)發(fā)基于Linux操作系統。由于Linux系統基于802.11b協(xié)議的無(wú)線(xiàn)驅動(dòng)已經(jīng)很成熟了,而基于Linux操作系統的EPA協(xié)議棧軟件移植也比較容易。因此,選擇Linux系統會(huì )有效的提高EPA無(wú)線(xiàn)通信卡的開(kāi)發(fā)周期。

基于Linux的EPA無(wú)線(xiàn)通信卡與有線(xiàn)的EPA通信卡在EPA協(xié)議棧和功能塊方面大致相同,僅需將應用程序向Linux系統上移植即可。但由于采用了Linux系統在與IO模塊控制卡通信的實(shí)現上就相對比較復雜了。與IO模塊控制卡通信的程序流程如圖3所示。


圖3 與IO模塊控制卡通信的程序流程圖

軟件實(shí)現中關(guān)鍵性問(wèn)題的解決
在Linux操作系統下對于中斷及其他系統資源的操作有特定的規范,如內核模式操作和用戶(hù)模式操作具有不同操作權限,內核空間與用戶(hù)空間也不能隨意互訪(fǎng)。導致如EPA協(xié)議棧無(wú)法直接對雙端口RAM進(jìn)行讀寫(xiě),也無(wú)法直接向I/O模塊控制卡收發(fā)中斷,在Linux系統下,只有在內核模式下才可以做到。那么,怎么樣將數據寫(xiě)入到雙端口RAM中,然后發(fā)送中斷信號通知對方及如何響應對方的中斷并從雙端口RAM中讀數是軟件實(shí)現中的關(guān)鍵性問(wèn)題。

發(fā)中斷與注冊中斷處理程序的實(shí)現
由于發(fā)中斷與注冊中斷處理程序是對硬件直接操作,在Linux系統下用戶(hù)程序無(wú)法直接對其硬件進(jìn)行操作。因此,必須編寫(xiě)相應的內核模塊,在內核模塊中完成發(fā)中斷與注冊中斷處理程序的操作。在用戶(hù)程序中動(dòng)態(tài)加載相應內核模塊來(lái)達到用戶(hù)程序發(fā)中斷與注冊中斷處理程序的效果。其注冊中斷處理程序的內核模塊關(guān)鍵性代碼如下:

intinit_module(void) //中斷注冊模塊初始化
{
… /*初始化設置*/
AT91_SYS->AIC_SMR[25]|=0X20;
//設置中斷下跳沿觸發(fā)
if(request_irq(25,epa_interrupt,SA_INTERRUPT,
"MAIN_IRQ",NULL))
//請求分配中斷號為25的快速中斷處理
//epa_interrupt為指向處理這個(gè)中斷的中斷處理程序的指針
{…/*進(jìn)行出錯處理*/}
else
{printk("1>request_irqok!");
return0;}
}
voidcleanup_module(void)
{
…/*釋放資源*/
free_irq(25,NULL); //釋放中斷線(xiàn)25
}

在用戶(hù)程序中發(fā)中斷時(shí),通過(guò)調用system(send_riq)來(lái)動(dòng)態(tài)執行內核模塊程序來(lái)控制發(fā)送中斷的管腳的信號,從而實(shí)現在用戶(hù)程序發(fā)中斷的效果。其發(fā)中斷的內核模塊關(guān)鍵性代碼如下:

AT91_SYS->PIOC_PER|=AT91C_PIO_PC15;
//設置PC15IO使能
AT91_SYS->PIOC_OER|=AT91C_PIO_PC15;
//設置PC15輸出使能
//發(fā)送一個(gè)方波中斷信號
AT91_SYS->PIOC_CODR|=AT91C_PIO_PC15;
for(i=1;i1000;i++);
//延時(shí),內核中不能調用sleep()函數
AT91_SYS->PIOC_SODR|=AT91C_PIO_PC15;

雙端口RAM驅動(dòng)的實(shí)現
由于用戶(hù)程序不能直接對雙端口RAM進(jìn)行讀寫(xiě),因此必須根據用戶(hù)程序的需要編寫(xiě)雙端口RAM的驅動(dòng),以?xún)群四K的形式動(dòng)態(tài)加載到系統中去。Linux系統將所有設備都看作是文件,對設備的讀寫(xiě)相當于對文件的讀寫(xiě)。雙端口RAM驅動(dòng)模塊加載后,用戶(hù)程序就可以像讀寫(xiě)文件一樣,間接的對雙端口RAM進(jìn)行讀寫(xiě)了。其雙端口RAM驅動(dòng)模塊的主要實(shí)現過(guò)程如下:

staticintwrite_dpram(structfile*file,constchar*buf,u32count,loff_t*f_pos)
{…… /*寫(xiě)初始化*/
copy_from_user(wMessage,buf,count);
…… /*進(jìn)行數據處理*/
for(i=0;icount;i++)
{writeb(wMessage[i],base+wadd);
wadd++;}…… /*向IO模塊控制卡發(fā)中斷信號*/
}
staticintread_dpram(structfile*file,char*buf,u32count,loff_t*f_pos)
{…… /*讀函數則調用相應的readb()和copy_to_user()函數,與寫(xiě)函數同理*/}
staticintopen_dpram(structinode*inode,structfile*file)
{…… /*初始化*/
if(!request_mem_region(AT91_DPRAM,
BUF_LEN3sizeof(u8),DEVICE_NAME))
{…… /*未申請到該內存空間時(shí)進(jìn)行相應處理*/}
//申請使用內存空間
base=ioremap(AT91_DPRAM,BUF_LEN3sizeof(u8));
//為設備內存區域分配虛擬地址
…… /*設置DPRAM讀寫(xiě)時(shí)序*/
}
staticintrelease_dpram(structinode3inode,structfile3file)
{……/*釋放相應資iounmap()和release_mem_region();}

以上為DPRAM設備驅動(dòng)的打開(kāi)、讀寫(xiě)、關(guān)閉函數的實(shí)現,然后通過(guò)以下標記化結構將其驅動(dòng)的功能映射到前面的具體實(shí)現函數上:

staticstructfile_operationstest_fops={
read:read_dpram,
write:write_dpram,
open:open_dpram,
release:release_dpram
};

另外,在驅動(dòng)程序初始化時(shí)必須通過(guò)register_chrdev()注冊。在加載該驅動(dòng)前要使用system("mknod/dev/設備名c主設備號次設備號")創(chuàng )建設備文件并為該設備分配設備號。

測試系統

本項目所搭建的測試系統包括EPA無(wú)線(xiàn)通信卡和IO模塊控制卡兩套EPA無(wú)線(xiàn)設備、一臺PC機及一個(gè)燈箱,如圖4所示。燈箱中的溫度傳感器與AI模塊相連,將溫度值傳遞給AI模塊,并通過(guò)設備A發(fā)送到以太網(wǎng)上。設備B接收到此溫度值后,將其與額定溫度值相比較,如果低于額定溫度值,則通過(guò)AO模塊輸出4mA~20mA電流,控制燈箱內的可控硅模塊,進(jìn)而驅動(dòng)燈箱內的燈泡,開(kāi)始加熱;如果高于額定溫度值,則中斷AO模塊的輸出電流,切斷燈泡的電流輸入,使燈箱內的溫度下降,從而達到保持燈箱內溫度恒定的目的。

實(shí)驗證明,EPA無(wú)線(xiàn)通信卡與IO模塊控制卡之間數據傳輸穩定,這個(gè)系統運行效果良好,達到了預期目標,能夠滿(mǎn)足工業(yè)現場(chǎng)設備的通信要求。


圖4 測試系統示意圖

結語(yǔ)

EPA系統是一種分布式系統,將分布在現場(chǎng)的若干個(gè)設備連接起來(lái)一起運作,共同完成工業(yè)生產(chǎn)過(guò)程和操作中的測量和控制。目前,無(wú)線(xiàn)局域網(wǎng)技術(shù)在工業(yè)控制中的應用已成為當今工業(yè)控制領(lǐng)域中的研究熱點(diǎn)。但將無(wú)線(xiàn)技術(shù)應用于工業(yè)現場(chǎng)設備間的通信,并形成完整的分布式網(wǎng)絡(luò )控制系統還是空白,也沒(méi)相關(guān)的行業(yè)標準、國家標準和國際標準,專(zhuān)利也很少。因此,研究開(kāi)發(fā)基于無(wú)線(xiàn)局域網(wǎng)的EPA通訊體系和工業(yè)現場(chǎng)控制設備原理樣機及相關(guān)軟件,形成基于EPA的分布式無(wú)線(xiàn)網(wǎng)絡(luò )控制系統,具有很強的原創(chuàng )性。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>