當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于Linux的現(xiàn)場(chǎng)總線無(wú)線通信卡的實(shí)現(xiàn)

1.引言

  使用無(wú)線連接設(shè)備的便利已經(jīng)導(dǎo)致了在消費(fèi)電子(商業(yè))領(lǐng)域中無(wú)線技術(shù)被空前成功的應(yīng)用。在此基礎(chǔ)上基于無(wú)線技術(shù)的應(yīng)用開始出現(xiàn)在各個(gè)領(lǐng)域。在工業(yè)或工廠底層環(huán)境中,使用無(wú)線技術(shù)的優(yōu)勢(shì)更是多方面的。

  第一,在工業(yè)環(huán)境中往往需要大量的布線,采用無(wú)線技術(shù)不僅會(huì)使安裝和維護(hù)的成本有效減少,而且會(huì)使設(shè)備的調(diào)整規(guī)劃和重新配置更加的容易。

  第二,無(wú)線技術(shù)的引入對(duì)于解決在有化學(xué)腐蝕、震動(dòng)和移動(dòng)部件等惡劣環(huán)境中對(duì)各種線纜的潛在損傷等問(wèn)題顯得更加有效。

  第三,考慮到工廠設(shè)備中適應(yīng)性和靈活性,固定系統(tǒng)可以通過(guò)無(wú)線技術(shù)和現(xiàn)有的移動(dòng)子系統(tǒng)或移動(dòng)機(jī)器人連接通信。

  第四,對(duì)在工廠設(shè)備進(jìn)行臨時(shí)訪問(wèn)任務(wù)(如診斷或程序設(shè)計(jì)等)使用無(wú)線技術(shù)會(huì)更加簡(jiǎn)化(如使用無(wú)線手持設(shè)備)。

  在解決工業(yè)環(huán)境及過(guò)程控制環(huán)境下的許多移動(dòng)對(duì)象,如移動(dòng)機(jī)器人與自治運(yùn)輸設(shè)備之間的協(xié)調(diào);旋轉(zhuǎn)對(duì)象,如機(jī)械臂;危險(xiǎn)環(huán)境對(duì)象的監(jiān)測(cè)與控制問(wèn)題,如分布式控制等工業(yè)環(huán)境無(wú)線技術(shù)發(fā)揮極大的作用。將無(wú)線技術(shù)應(yīng)用到現(xiàn)場(chǎng)總線中來(lái)解決傳統(tǒng)現(xiàn)場(chǎng)總線存在的問(wèn)題,正受到學(xué)術(shù)界和工業(yè)界的極大關(guān)注。

2.現(xiàn)場(chǎng)總線的無(wú)線接入方法

  為了使無(wú)線技術(shù)能夠無(wú)縫而更廣泛地應(yīng)用于工業(yè)現(xiàn)場(chǎng),使現(xiàn)場(chǎng)設(shè)備無(wú)線接入到現(xiàn)存的現(xiàn)場(chǎng)總線,國(guó)內(nèi)外相關(guān)領(lǐng)域的技術(shù)人員進(jìn)行了一定的嘗試。按在不同層上實(shí)現(xiàn)接入可以將接入方案分為三大類:用戶層接入、數(shù)據(jù)鏈路層接入和物理層接入。

 ?。?)用戶層接入:在用戶層設(shè)一個(gè)OPC服務(wù)器,通過(guò)OPC服務(wù)器進(jìn)行有線網(wǎng)段與無(wú)線網(wǎng)段之間的數(shù)據(jù)交換。該方案其優(yōu)點(diǎn)是簡(jiǎn)單易實(shí)現(xiàn),雙方可保持原有結(jié)構(gòu)不動(dòng),兩側(cè)的“連接”可隨時(shí)通過(guò)軟件的控制建立或分離。缺點(diǎn)是中間環(huán)節(jié)太多,實(shí)時(shí)性得不到保證。

  (2)物理層的接入:在某些站點(diǎn)的有線連接“下”面加裝Modem。無(wú)線站點(diǎn)的信號(hào)經(jīng)過(guò)此無(wú)線收發(fā)裝置將幀格式轉(zhuǎn)換后,聯(lián)入有線網(wǎng)段接口,因此遠(yuǎn)端的無(wú)線站點(diǎn)被“視為”同質(zhì)站點(diǎn)。這樣,所有的有線、無(wú)線站點(diǎn)均采用原有現(xiàn)場(chǎng)總線協(xié)議,只是在最底層的某些物理連接上,無(wú)線連接代替了有線的連接。其缺點(diǎn)是此方法僅實(shí)現(xiàn)了點(diǎn)對(duì)點(diǎn)的連接,無(wú)線站點(diǎn)不具有“漫游接入”的能力。

 ?。?)數(shù)據(jù)鏈路層的接入:此方法源自WLAN和以太網(wǎng)的聯(lián)接方式,即在PHY層和DDL層之上加一個(gè)無(wú)線網(wǎng)關(guān)。該無(wú)線網(wǎng)關(guān)實(shí)現(xiàn)了無(wú)線網(wǎng)段數(shù)據(jù)與有線網(wǎng)段之間的數(shù)據(jù)格式轉(zhuǎn)換和轉(zhuǎn)發(fā)。原有的現(xiàn)場(chǎng)總線保持不動(dòng),加裝一個(gè)無(wú)線網(wǎng)段的AP接入點(diǎn)。當(dāng)兩網(wǎng)段間有數(shù)據(jù)交換時(shí),才會(huì)通過(guò)AP點(diǎn)經(jīng)過(guò)協(xié)議轉(zhuǎn)換把數(shù)據(jù)轉(zhuǎn)發(fā)到另一端。

  數(shù)據(jù)鏈路層的接入是現(xiàn)階段最被關(guān)注的方法。其具體實(shí)現(xiàn)方法較多,但大多處于理論研究階段或需要對(duì)原有的現(xiàn)場(chǎng)總線進(jìn)行改造,而工業(yè)廠家又不想使現(xiàn)正運(yùn)行的現(xiàn)場(chǎng)總線暫停工作。這使得現(xiàn)階段的一些其無(wú)線接入技術(shù)在現(xiàn)場(chǎng)總線中應(yīng)用變得困難。為了使無(wú)線現(xiàn)場(chǎng)設(shè)備能夠應(yīng)用于工業(yè)現(xiàn)場(chǎng),又不改動(dòng)現(xiàn)有的現(xiàn)場(chǎng)總線系統(tǒng),目前較成熟的技術(shù)就是使用無(wú)線分散控制站來(lái)與原有的現(xiàn)場(chǎng)總線連接,實(shí)現(xiàn)現(xiàn)場(chǎng)設(shè)備的無(wú)線接入。無(wú)線分散控制站一般由IO模塊控制卡、無(wú)線通信卡兩部分組成。兩塊板卡通過(guò)IO模塊控制卡上的雙端口RAM交換數(shù)據(jù),通過(guò)中斷觸發(fā)數(shù)據(jù)讀寫操作,從而達(dá)到通信效果。其關(guān)鍵技術(shù)就是如何實(shí)現(xiàn)無(wú)線通信卡的軟件設(shè)計(jì)。

3.基于Linux的無(wú)線通信卡

  在無(wú)線分散控制站中無(wú)線通信卡使用AT91RM9200控制器并通過(guò)USB接口加載符合802.11b協(xié)議的無(wú)線傳輸模塊,其操作系統(tǒng)為L(zhǎng)inux系統(tǒng)。

3.1基于Linux的無(wú)線通信卡的工作原理

  無(wú)線通信卡運(yùn)行著現(xiàn)場(chǎng)總線協(xié)議棧和功能塊(MAI,MAO,MDI,MDO)等。根據(jù)所接入的現(xiàn)場(chǎng)總線的不同選用相應(yīng)的協(xié)議棧。使用向IO模塊控制卡發(fā)中斷及響應(yīng)IO模塊控制卡中斷的方式,通過(guò)IO模塊控制卡來(lái)配置、讀取和控制現(xiàn)場(chǎng)設(shè)備。無(wú)線通信卡與IO模塊控制卡之間數(shù)據(jù)傳輸是直接通過(guò)讀寫IO模塊控制卡上的雙端口RAM實(shí)現(xiàn)的。另一方面,無(wú)線通信卡通過(guò)其上面的USB接口加載了符合802.11b協(xié)議的無(wú)線傳輸模塊,能夠通過(guò)該模塊實(shí)現(xiàn)與有線網(wǎng)絡(luò)相連,使其與相應(yīng)的現(xiàn)場(chǎng)總線工作站通信,其結(jié)構(gòu)示意圖如圖3-1所示:

圖3-1無(wú)線通信卡的結(jié)構(gòu)示意圖[!--empirenews.page--]

3.2基于Linux的無(wú)線通信卡的軟件設(shè)計(jì)

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

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

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

3.3軟件實(shí)現(xiàn)中關(guān)鍵性問(wèn)題的解決

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

3.3.1發(fā)中斷與注冊(cè)中斷處理程序的實(shí)現(xiàn)

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

  int init_module(void) //中斷注冊(cè)模塊初始化

 ?。?…… /* 初始化設(shè)置 */

  AT91_SYS->AIC_SMR[25]|=0X20; //設(shè)置中斷下跳沿觸發(fā)

  if (request_irq(n, interrupt_program, INTERRUPT," IRQ1",NULL))

  // 請(qǐng)求分配中斷號(hào)為n的快速中斷處理

  // interrupt_program為指向處理這個(gè)中斷的中斷處理程序的指針

  { ……/*沒(méi)有申請(qǐng)成功 根據(jù)返回值進(jìn)行出錯(cuò)處理 * / }

  else

 ?。?printk("<1> 注冊(cè)中斷成功 ! n");

  return 0;}

  init_waitqueue_head(&my_queue);

 ?。?/p>

  void cleanup_module(void)

 ?。?…… /* 釋放資源 */

  free_irq(n,NULL); //釋放中斷線n

 ?。?/p>

  在用戶程序中發(fā)中斷時(shí),通過(guò)調(diào)用system(send_riq)來(lái)動(dòng)態(tài)執(zhí)行內(nèi)核模塊程序來(lái)控制發(fā)送中斷的管腳的信號(hào),從而實(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ā)送一個(gè)方波中斷信號(hào)

  AT91_SYS->PIOC_CODR |= AT91C_PIO_PC15;

  for(i=1;i

  AT91_SYS->PIOC_SODR |= AT91C_PIO_PC15;

3.3.2雙端口RAM驅(qū)動(dòng)的實(shí)現(xiàn)

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

  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ā)中斷信號(hào)*/

 ?。?/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))

 ?。?…… /*未申請(qǐng)到該內(nèi)存空間時(shí)進(jìn)行相應(yīng)處理*/} //申請(qǐng)使用內(nèi)存空間

  base =ioremap(AT91_DPRAM,BUF_LEN*sizeof(u8));//為設(shè)備內(nèi)存區(qū)域分配虛擬地址

  …… /* 設(shè)置DPRAM讀寫時(shí)序*/

 ?。?/p>

  static int release_dpram(struct inode *inode,struct file *file )

 ?。?…… /* 釋放相應(yīng)資iounmap( )和release_mem_region();}

  以上為DPRAM設(shè)備驅(qū)動(dòng)的打開、讀寫、關(guān)閉函數(shù)的實(shí)現(xiàn),然后通過(guò)以下標(biāo)記化結(jié)構(gòu)將其驅(qū)動(dòng)的功能映射到前面的具體實(shí)現(xiàn)函數(shù)上:

  static struct file_operations test_fops = {

  read:read_dpram,

  write:write_dpram,

  open: open_dpram,

  release:release_dpram

 ?。?[!--empirenews.page--]

  另外,在驅(qū)動(dòng)程序初始化時(shí)必須通過(guò)register_chrdev( )注冊(cè)。在加載該驅(qū)動(dòng)前要使用system("mknod /dev/設(shè)備名 c 主設(shè)備號(hào) 次設(shè)備號(hào)")創(chuàng)建設(shè)備文件并為該設(shè)備分配設(shè)備號(hào)。該雙端口RAM驅(qū)動(dòng)是通用的,無(wú)論什么功能的板卡上面有雙端口RAM并且是基于Linux的系統(tǒng)的都可以使用該驅(qū)動(dòng)。

4. 測(cè)試

  為了測(cè)試該無(wú)線通信卡的性能,該測(cè)試選用了符合EPA(Ethernet for Plant Automation)標(biāo)準(zhǔn)的現(xiàn)場(chǎng)總線系統(tǒng)進(jìn)行無(wú)線擴(kuò)展。EPA是我國(guó)第一個(gè)擁有自主知識(shí)產(chǎn)權(quán)的現(xiàn)場(chǎng)總線標(biāo)準(zhǔn)。所搭建的測(cè)試系統(tǒng)基本和有線EPA演示系統(tǒng)一致。包括一個(gè)EPA無(wú)線現(xiàn)場(chǎng)設(shè)備B(包括EPA無(wú)線通信卡和IO模塊控制卡)和一個(gè)EPA無(wú)線接入網(wǎng)橋、一臺(tái)PC機(jī)及一個(gè)燈箱,如圖4-1所示。燈箱中的溫度傳感器與AI模塊相連,將溫度值傳遞給AI模塊,并通過(guò)設(shè)備A發(fā)送到以太網(wǎng)上。設(shè)備B接收到此溫度值后,將其與額定溫度值相比較,如果低于額定溫度值,則通過(guò)AO模塊輸出電流來(lái)控制燈箱內(nèi)燈泡加熱;如果高于額定溫度值,則中斷AO模塊的輸出電流,切斷燈泡的電流輸入,使燈箱內(nèi)的溫度下降,從而達(dá)到保持燈箱內(nèi)溫度恒定的目的。

圖4-1測(cè)試系統(tǒng)示意圖

  實(shí)驗(yàn)證明,無(wú)線通信卡與IO模塊控制卡之間數(shù)據(jù)傳輸穩(wěn)定,這個(gè)系統(tǒng)運(yùn)行效果良好,達(dá)到了預(yù)期目標(biāo),能夠滿足工業(yè)現(xiàn)場(chǎng)設(shè)備的通信要求。同時(shí),并沒(méi)有改變和影響原來(lái)的有線現(xiàn)場(chǎng)總線的正常工作。

5.小結(jié)

  通過(guò)使用無(wú)線分散控制站和無(wú)線網(wǎng)橋?qū)崿F(xiàn)現(xiàn)場(chǎng)總線的無(wú)線接入,目前是比較穩(wěn)定、便捷的無(wú)限擴(kuò)展方法。本文提出的無(wú)線分散控制站中無(wú)線通信卡的軟硬件實(shí)現(xiàn)方法是一個(gè)通用的快捷開發(fā)方案。無(wú)線技術(shù)給工業(yè)帶來(lái)很多益處如減少設(shè)備配置和安裝時(shí)間。市場(chǎng)也提供了較成熟的無(wú)線技術(shù)如IEEE 802.11標(biāo)準(zhǔn), IEEE 802.15.4 標(biāo)準(zhǔn)和藍(lán)牙技術(shù)。但在工業(yè)現(xiàn)場(chǎng)無(wú)線技術(shù)仍不能被廣泛使用。原因之一是無(wú)線信道的實(shí)時(shí)性和出錯(cuò)率達(dá)不到要求。隨著合適的協(xié)議機(jī)制和傳輸調(diào)度的設(shè)計(jì),并細(xì)致結(jié)合這些方案,無(wú)線技術(shù)必將會(huì)在工業(yè)現(xiàn)場(chǎng)總線中得到廣泛使用。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉