<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è) > 嵌入式系統 > 設計應用 > 基于多線(xiàn)程的環(huán)境監控系統下位機的設計

基于多線(xiàn)程的環(huán)境監控系統下位機的設計

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

  為提高環(huán)境監控系統的穩定性,節約系統資源,提出了一種由下位機、傳輸網(wǎng)絡(luò )和上位機組成的環(huán)境監控系統的設計方案,詳細介紹了該系統中下位機的硬件及軟件設計。該下位機硬件以處理器為核心,軟件采用應用程序同時(shí)處理多個(gè)任務(wù),并采用信號量和互斥量實(shí)現線(xiàn)程間的同步。實(shí)際應用表明,該系統運行穩定,提高了系統效率。

本文引用地址:http://dyxdggzs.com/article/264049.htm

 0引言

  隨著(zhù)國民經(jīng)濟及工業(yè)技術(shù)的發(fā)展,環(huán)境保護越來(lái)越受到重視?,F在市場(chǎng)上已經(jīng)出現了多種環(huán)境監控系統,但性能不穩定?,F場(chǎng)監控終端大多采用工控機或單片機,前者抗干擾性能好,但成本較高;后者處理能力低,人機界面不友好,不利于現場(chǎng)人員的監控管理。針對上述問(wèn)題,筆者設計了一種基于的環(huán)境監控系統。該系統采用技術(shù)有效地實(shí)現了監控過(guò)程中數據的采集與存儲、實(shí)時(shí)數據顯示、下位機(監控終端)與上位機(監控中心)的通信、實(shí)時(shí)報警等功能。本文重點(diǎn)介紹該系統下位機的設計。

 1系統總體結構

  基于多線(xiàn)程的環(huán)境監控系統由現場(chǎng)監控終端(下位機)、傳輸網(wǎng)絡(luò )、監控中心(上位機)3個(gè)部分組成,其結構如圖1所示。


#FormatImgID_0#


  圖1基于多線(xiàn)程的環(huán)境監控系統結構

  下位機是一個(gè)基于A(yíng) RM9的嵌入式系統,用于定時(shí)采集、處理、存儲被監測的特征數據。經(jīng)過(guò)下位機處理后的數據,按照相關(guān)協(xié)議,經(jīng)GPRS模塊發(fā)送給上位機。上位機由一臺PC機擔任,負責接收多個(gè)下位機發(fā)送的數據,并對這些數據進(jìn)行分析、處理和顯示。環(huán)保部門(mén)可通過(guò)上位機監控其轄區內的污染排放狀況。上位機基于VB. NET開(kāi)發(fā)。

 2下位機硬件設計

  下位機的硬件核心部分由、NandFLASH和SDRAM組成,如圖2所示。是三星公司生產(chǎn)的一款基于20T內核的32位RISC嵌入式微處理器,帶有獨立的16 KB指令Cache和16 KB數據Cache、LCD控制器、RAM控制器、N and FLASH控制器、并行I/ O口、8路10位ADC,其運行頻率可達203 MHz.8位64 MB的Nand FLASH選用的芯片為K9F1208, 64 MB的SDRAM由2片HY57V561620組成。下位機通過(guò)以太網(wǎng)控制器CS8900A擴展了一個(gè)網(wǎng)口,數據既可以通過(guò)無(wú)線(xiàn)傳輸,也可以通過(guò)有線(xiàn)傳輸;通過(guò)I/ O接口擴展了8個(gè)DI口(數字量輸入)、4個(gè)AI口(模擬量輸入)、4個(gè)DO口(數字量輸出),下位機通過(guò)這些接口與被監控設備通信。


#FormatImgID_1#


  圖2下位機硬件組成

 3下位機的需求與結構設計

  下位機定時(shí)采集、處理現場(chǎng)數據,并存儲在數據庫中,把實(shí)時(shí)數據發(fā)送給上位機,并響應上位機發(fā)送的控制命令。因此,下位機需要同時(shí)處理多個(gè)任務(wù),這些任務(wù)并發(fā)執行。若使用單線(xiàn)程來(lái)完成這些任務(wù),則需要使用多個(gè)定時(shí)器來(lái)觸發(fā),而過(guò)多的定時(shí)器會(huì )導致系統不穩定。Window s是搶先式多任務(wù)的操作系統,啟動(dòng)了一個(gè)應用程序就等于啟動(dòng)了一個(gè)進(jìn)程。一個(gè)進(jìn)程通常擁有一個(gè)線(xiàn)程,在系統資源管理中,每一個(gè)線(xiàn)程被分配一定的時(shí)間片。采用多線(xiàn)程的設計方法可以使程序擁有多個(gè)線(xiàn)程,這樣程序就能同時(shí)處理更多的任務(wù)。因此,若使用多個(gè)進(jìn)程來(lái)協(xié)作完成,能避免上述缺點(diǎn)且系統比較穩定,但系統對進(jìn)程的頻繁調度會(huì )占用過(guò)多資源,程序的可讀性也不好。

  筆者采用一種并行的、多線(xiàn)程方案能夠很好地處理多個(gè)任務(wù),并充分節約系統資源。該方案中,下位機有5個(gè)線(xiàn)程:GU I線(xiàn)程、復位線(xiàn)程、數據采集與存儲線(xiàn)程、網(wǎng)絡(luò )通信線(xiàn)程、決策線(xiàn)程。其中GU I線(xiàn)程為主線(xiàn)程,負責界面處理、系統數據的初始化以及創(chuàng )建子線(xiàn)程等任務(wù);復位線(xiàn)程、數據采集與存儲線(xiàn)程、網(wǎng)絡(luò )通信線(xiàn)程是后臺的工作線(xiàn)程,通過(guò)優(yōu)先級調度、線(xiàn)程同步等機制保證能可靠執行現場(chǎng)數據采集、存儲、發(fā)送、顯示等任務(wù)。復位線(xiàn)程在啟動(dòng)后循環(huán)地對看門(mén)狗操作,不作為任務(wù)處理線(xiàn)程。任務(wù)線(xiàn)程之間的關(guān)系如圖3所示。


#FormatImgID_2#


  圖3任務(wù)線(xiàn)程之間的關(guān)系

  4多線(xiàn)程技術(shù)在系統中的應用

  4. 1線(xiàn)程的創(chuàng )建

  Linux環(huán)境下,使用pthread_cr eate()函數創(chuàng )建一個(gè)新線(xiàn)程,默認情況下主線(xiàn)程會(huì )等待被創(chuàng )建的子線(xiàn)程執行結束,得到子線(xiàn)程的返回結果然后再繼續往后執行。實(shí)時(shí)監控程序的子線(xiàn)程都是循環(huán)執行的,不需要運行結束后歸并到主線(xiàn)程中,需設置其屬性為PT HREAD _ CREATE _DETACHED.根據子線(xiàn)程的重要性進(jìn)行優(yōu)先級設置,確保重要線(xiàn)程優(yōu)先執行。子線(xiàn)程的優(yōu)先級從高到低依次為復位線(xiàn)程、數據采集與存儲線(xiàn)程、決策線(xiàn)程、網(wǎng)絡(luò )通信線(xiàn)程。

  線(xiàn)程的創(chuàng )建、設置偽代碼如下:

  void * thr ead_wat chdog(void * arg); / /復位線(xiàn)程函數

  void * thr ead_collect ion(void * arg); / /數據采集與存儲線(xiàn)程函數

  void * thr ead_communi cat ion(void * arg); / /網(wǎng)絡(luò )通信線(xiàn)程函數

  void * thr ead_decis e(void * arg); / /決策線(xiàn)程函數

  int dat a[ 12] ; / /數據緩沖區,用于存放線(xiàn)程間共享的數據函數

  main()

  {

  / /初始化工作

  ……

  pthread_t wat chd og; / /線(xiàn)程號

  pthread_t collect ion;

  pthread_t commun ication;

  pthread_t deci se;

  pthread_at t r_init(); / /初始化線(xiàn)程屬性

  pthread_at t r_setdetach st at e(); / /不對線(xiàn)程進(jìn)行重新歸并

  pthread_at t r_set s ched param(); / /設置線(xiàn)程的優(yōu)先級

  sem_init(); / /對相關(guān)信號量進(jìn)行初始化

  pth read_creat e(); / /創(chuàng )建新線(xiàn)程

  / /啟動(dòng)GUI程序

  ……

  }

  4. 2線(xiàn)程的同步機制

  同步機制是否合理是多線(xiàn)程應用程序運行是否穩定的關(guān)鍵。在程序設計時(shí),需考慮到可能引起數據毀壞的多線(xiàn)程數據訪(fǎng)問(wèn)沖突以及如何使用同步技術(shù)避免這種沖突。Linux操作系統實(shí)現同步機制的方法有信號量(semaphore)和互斥量(mutex),這兩種方法相似,但各有側重。信號量側重于一個(gè)線(xiàn)程被另一個(gè)線(xiàn)程激活,常有先后執行的關(guān)系。而互斥量則保護某一共享內存任一時(shí)刻只有一個(gè)線(xiàn)程訪(fǎng)問(wèn)。網(wǎng)絡(luò )通信線(xiàn)程和數據采集與存儲線(xiàn)程之間的同步通過(guò)信號量來(lái)實(shí)現。

  為了防止系統資源泄漏,保持各個(gè)線(xiàn)程的同步,主線(xiàn)程需要初始化數據采集驅動(dòng)代碼,為數據采集做好準備;申請相應的內存空間,用于存放采集到的實(shí)時(shí)數據;定義好各個(gè)信號量和互斥量。

  4. 3線(xiàn)程的實(shí)現方法

  數據采集與存儲線(xiàn)程是獲取數據的起始線(xiàn)程,由GU I線(xiàn)程創(chuàng )建,網(wǎng)絡(luò )通信線(xiàn)程和決策線(xiàn)程是由數據采集與存儲線(xiàn)程激活。下位機開(kāi)始運行后,數據采集與存儲線(xiàn)程啟動(dòng),每隔5 s運行1次,讀DI、AI接口的狀態(tài),并把這些狀態(tài)和此刻的時(shí)間存入SQ Lite數據庫中。數據采集與存儲線(xiàn)程每運行一次,對信號量sem_decise和sem_ com進(jìn)行一次post操作,分別激活決策線(xiàn)程和網(wǎng)絡(luò )通信線(xiàn)程。數據采集與存儲線(xiàn)程的同步流程如圖4所示。


#FormatImgID_3#


  圖4數據采集與存儲線(xiàn)程的同步流程

  數據采集與存儲線(xiàn)程作為系統的數據源頭,它激活了其它2個(gè)子線(xiàn)程,與之相對應,被激活的子線(xiàn)程隨著(zhù)它的結束而結束。線(xiàn)程在未接受到信號量激活時(shí)處于阻塞狀態(tài),不占用系統資源。前臺處理用戶(hù)界面的GUI線(xiàn)程與后臺的工作線(xiàn)程之間是獨立的。GU I線(xiàn)程提供友好的人機界面,它把被監控對象的信息實(shí)時(shí)顯示在圖形界面上,供現場(chǎng)工作人員查詢(xún)和設置。

  監控程序的每個(gè)線(xiàn)程都需要對存放被監控對象實(shí)時(shí)狀態(tài)的數據緩沖區進(jìn)行訪(fǎng)問(wèn)。由于Linux操作系統允許多個(gè)線(xiàn)程同時(shí)對某一數據緩沖區進(jìn)行讀操作,但在同一時(shí)刻對該數據緩沖區只能有一個(gè)寫(xiě)操作。GUI線(xiàn)程需要定時(shí)刷屏,更新被監控對象的實(shí)時(shí)狀態(tài),因而需要定時(shí)對緩沖區進(jìn)行讀操作,而數據采集與存儲線(xiàn)程定時(shí)地對該緩沖區進(jìn)行寫(xiě)操作,它們之間沒(méi)有觸發(fā)關(guān)系,是相互獨立運行的。因此,需要對緩沖區設置一個(gè)互斥量,確保任一時(shí)刻這兩個(gè)線(xiàn)程只有一個(gè)能對其進(jìn)行訪(fǎng)問(wèn)。

  數據采集與存儲線(xiàn)程對緩沖區進(jìn)行寫(xiě)操作之前,先對互斥量進(jìn)行加鎖操作,把實(shí)時(shí)狀態(tài)寫(xiě)入數據緩沖區后,再進(jìn)行解鎖。這樣避免了因與GU I線(xiàn)程爭奪資源而造成系統不穩定的現象。上鎖與解鎖操作代碼如下:

  void * thr ead_collect ion(void * arg)

  {

  ……

  pthread_mu tex_lock(dat a_mu tex); / /上鎖操作

  read(fd, dat a, s izeof(dat a)); / /寫(xiě)實(shí)時(shí)狀態(tài)到data緩沖區

  pthread_mu tex_unl ock(dat a_m ut ex); / /解鎖操作

  / /激活網(wǎng)絡(luò )通信線(xiàn)程、決策線(xiàn)程,并寫(xiě)數據到數據庫

  ……

  }

  同樣,GUI線(xiàn)程中也需要對緩沖區進(jìn)行相應的上鎖、解鎖操作。

  網(wǎng)絡(luò )通信線(xiàn)程和決策線(xiàn)程由GUI線(xiàn)程創(chuàng )建,由數據采集與存儲線(xiàn)程激活,都是每5 s運行1次。

  由于GPRS模塊通過(guò)串口與下位機相連,并采用透明傳輸模式,即有數據即傳輸,因此,網(wǎng)絡(luò )通信線(xiàn)程只需要定時(shí)對串口寫(xiě)操作就可以完成數據傳輸任務(wù)。網(wǎng)絡(luò )通信線(xiàn)程先打開(kāi)串口,設置串口的波特率、數據位、校驗位等屬性,然后等待數據采集與存儲線(xiàn)程的信號量將其激活,第一次被激活后,進(jìn)入了一個(gè)w hile循環(huán),執行一次串口寫(xiě)操作,再等待下一次被激活。網(wǎng)絡(luò )通信線(xiàn)程被激活的條件是數據采集與存儲線(xiàn)程對信號進(jìn)行了一次加1操作,即sem_ post(sem_2)。網(wǎng)絡(luò )通信線(xiàn)程的關(guān)鍵代碼如下:

  fd= open(“/ dev/ t t ySC4”, O_RDWR);

  set_sp eed(fd, 9 600); / /設置波特率

  set_parit y(fd, 8, 1, %n); / /設置數據位、奇偶校驗位

  sem_w ait(s em_2); / /等待信號量激活

  w h ile(1){

  w rit e(fd, buf , sizeof(buf)); / /對串口寫(xiě)操作,發(fā)送數據

  sem_w ait(sem_2); / /等待下一次信號量激活

  }

  pth read_exit(“thread exit n”); / /線(xiàn)程退出

  決策線(xiàn)程的任務(wù)是對當前被監控對象的狀態(tài)進(jìn)行判斷,如果有異常發(fā)生,則產(chǎn)生一個(gè)報警信號,并執行相關(guān)動(dòng)作來(lái)應對這些異常。其代碼結構與網(wǎng)絡(luò )通信線(xiàn)程相似。

  5結語(yǔ)

  基于多線(xiàn)程的環(huán)境監控系統采用多線(xiàn)程技術(shù)完成下位機的多個(gè)任務(wù),相對于單任務(wù)應用程序,多線(xiàn)程應用程序能夠減少定時(shí)器的使用,節約系統資源,從而提高系統效率。而且,多線(xiàn)程應用程序更能體現模塊化設計思想,程序易于維護和修改。該系統已經(jīng)成功應用于多個(gè)項目之中,性能穩定可靠。

  參考文獻:

  [1]. GPRS datasheet http://www.dzsc.com/datasheet/GPRS+_1594650.html. [2]. PC datasheet http://www.dzsc.com/datasheet/PC+_2043275.html.

  [3]. 20T datasheet http://www.dzsc.com/datasheet/ARM920T+_139814.html.

  [4]. RISC datasheet http://www.dzsc.com/datasheet/RISC+_1189725.html. [5]. HY57V561620 datasheet http://www.dzsc.com/datasheet/HY57V561620+_390336.html.

  [6]. CS8900A datasheet http://www.dzsc.com/datasheet/CS8900A+_593567.html.

  [7]. arg datasheet http://www.dzsc.com/datasheet/arg_2147916.html.

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

linux相關(guān)文章:linux教程




關(guān)鍵詞: 多線(xiàn)程 ARM9 S3C2410

評論


相關(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>