国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于多線程的環境監控系統下位機的設計

發布時間:2015-11-12 11:13    發布者:designapp
關鍵詞: 多線程 , ARM9 , S3C2410
為提高環境監控系統的穩定性,節約系統資源,提出了一種由下位機、傳輸網絡和上位機組成的環境監控系統的設計方案,詳細介紹了該系統中下位機的硬件及軟件設計。該下位機硬件以ARM9處理器S3C2410為核心,軟件采用多線程應用程序同時處理多個任務,并采用信號量和互斥量實現線程間的同步。實際應用表明,該系統運行穩定,提高了系統效率。
 0引言
隨著國民經濟及工業技術的發展,環境保護越來越受到重視。現在市場上已經出現了多種環境監控系統,但性能不穩定。現場監控終端大多采用工控機或單片機,前者抗干擾性能好,但成本較高;后者處理能力低,人機界面不友好,不利于現場人員的監控管理。針對上述問題,筆者設計了一種基于多線程的環境監控系統。該系統采用多線程技術有效地實現了監控過程中數據的采集與存儲、實時數據顯示、下位機(監控終端)與上位機(監控中心)的通信、實時報警等功能。本文重點介紹該系統下位機的設計。
 1系統總體結構
基于多線程的環境監控系統由現場監控終端(下位機)、傳輸網絡、監控中心(上位機)3個部分組成,其結構如圖1所示。
#FormatImgID_0#

圖1基于多線程的環境監控系統結構
下位機是一個基于A RM9的嵌入式系統,用于定時采集、處理、存儲被監測的特征數據。經過下位機處理后的數據,按照相關協議,經GPRS模塊發送給上位機。上位機由一臺PC機擔任,負責接收多個下位機發送的數據,并對這些數據進行分析、處理和顯示。環保部門可通過上位機監控其轄區內的污染排放狀況。上位機基于VB. NET開發。
 2下位機硬件設計
下位機的硬件核心部分由S3C2410、NandFLASH和SDRAM組成,如圖2所示。S3C2410是三星公司生產的一款基于ARM920T內核的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組成。下位機通過以太網控制器CS8900A擴展了一個網口,數據既可以通過無線傳輸,也可以通過有線傳輸;通過I/ O接口擴展了8個DI口(數字量輸入)、4個AI口(模擬量輸入)、4個DO口(數字量輸出),下位機通過這些接口與被監控設備通信。
#FormatImgID_1#

圖2下位機硬件組成
 3下位機的需求與結構設計
下位機定時采集、處理現場數據,并存儲在數據庫中,把實時數據發送給上位機,并響應上位機發送的控制命令。因此,下位機需要同時處理多個任務,這些任務并發執行。若使用單線程來完成這些任務,則需要使用多個定時器來觸發,而過多的定時器會導致系統不穩定。Window s是搶先式多任務的操作系統,啟動了一個應用程序就等于啟動了一個進程。一個進程通常擁有一個線程,在系統資源管理中,每一個線程被分配一定的時間片。采用多線程的設計方法可以使程序擁有多個線程,這樣程序就能同時處理更多的任務。因此,若使用多個進程來協作完成,能避免上述缺點且系統比較穩定,但系統對進程的頻繁調度會占用過多資源,程序的可讀性也不好。
筆者采用一種并行的、多線程方案能夠很好地處理多個任務,并充分節約系統資源。該方案中,下位機有5個線程:GU I線程、復位線程、數據采集與存儲線程、網絡通信線程、決策線程。其中GU I線程為主線程,負責界面處理、系統數據的初始化以及創建子線程等任務;復位線程、數據采集與存儲線程、網絡通信線程是后臺的工作線程,通過優先級調度、線程同步等機制保證能可靠執行現場數據采集、存儲、發送、顯示等任務。復位線程在啟動后循環地對看門狗操作,不作為任務處理線程。任務線程之間的關系如圖3所示。
#FormatImgID_2#

圖3任務線程之間的關系
4多線程技術在系統中的應用
4. 1線程的創建
Linux環境下,使用pthread_cr eate()函數創建一個新線程,默認情況下主線程會等待被創建的子線程執行結束,得到子線程的返回結果然后再繼續往后執行。實時監控程序的子線程都是循環執行的,不需要運行結束后歸并到主線程中,需設置其屬性為PT HREAD _ CREATE _DETACHED.根據子線程的重要性進行優先級設置,確保重要線程優先執行。子線程的優先級從高到低依次為復位線程、數據采集與存儲線程、決策線程、網絡通信線程。
線程的創建、設置偽代碼如下:
void * thr ead_wat chdog(void * arg); / /復位線程函數
void * thr ead_collect ion(void * arg); / /數據采集與存儲線程函數
void * thr ead_communi cat ion(void * arg); / /網絡通信線程函數
void * thr ead_decis e(void * arg); / /決策線程函數
int dat a[ 12] ; / /數據緩沖區,用于存放線程間共享的數據函數
main()
{
/ /初始化工作
……
pthread_t wat chd og; / /線程號
pthread_t collect ion;
pthread_t commun ication;
pthread_t deci se;
pthread_at t r_init(); / /初始化線程屬性
pthread_at t r_setdetach st at e(); / /不對線程進行重新歸并
pthread_at t r_set s ched param(); / /設置線程的優先級
sem_init(); / /對相關信號量進行初始化
pth read_creat e(); / /創建新線程
/ /啟動GUI程序
……
}
4. 2線程的同步機制
同步機制是否合理是多線程應用程序運行是否穩定的關鍵。在程序設計時,需考慮到可能引起數據毀壞的多線程數據訪問沖突以及如何使用同步技術避免這種沖突。Linux操作系統實現同步機制的方法有信號量(semaphore)和互斥量(mutex),這兩種方法相似,但各有側重。信號量側重于一個線程被另一個線程激活,常有先后執行的關系。而互斥量則保護某一共享內存任一時刻只有一個線程訪問。網絡通信線程和數據采集與存儲線程之間的同步通過信號量來實現。
為了防止系統資源泄漏,保持各個線程的同步,主線程需要初始化數據采集驅動代碼,為數據采集做好準備;申請相應的內存空間,用于存放采集到的實時數據;定義好各個信號量和互斥量。
4. 3線程的實現方法
數據采集與存儲線程是獲取數據的起始線程,由GU I線程創建,網絡通信線程和決策線程是由數據采集與存儲線程激活。下位機開始運行后,數據采集與存儲線程啟動,每隔5 s運行1次,讀DI、AI接口的狀態,并把這些狀態和此刻的時間存入SQ Lite數據庫中。數據采集與存儲線程每運行一次,對信號量sem_decise和sem_ com進行一次post操作,分別激活決策線程和網絡通信線程。數據采集與存儲線程的同步流程如圖4所示。
#FormatImgID_3#

圖4數據采集與存儲線程的同步流程
數據采集與存儲線程作為系統的數據源頭,它激活了其它2個子線程,與之相對應,被激活的子線程隨著它的結束而結束。線程在未接受到信號量激活時處于阻塞狀態,不占用系統資源。前臺處理用戶界面的GUI線程與后臺的工作線程之間是獨立的。GU I線程提供友好的人機界面,它把被監控對象的信息實時顯示在圖形界面上,供現場工作人員查詢和設置。
監控程序的每個線程都需要對存放被監控對象實時狀態的數據緩沖區進行訪問。由于Linux操作系統允許多個線程同時對某一數據緩沖區進行讀操作,但在同一時刻對該數據緩沖區只能有一個寫操作。GUI線程需要定時刷屏,更新被監控對象的實時狀態,因而需要定時對緩沖區進行讀操作,而數據采集與存儲線程定時地對該緩沖區進行寫操作,它們之間沒有觸發關系,是相互獨立運行的。因此,需要對緩沖區設置一個互斥量,確保任一時刻這兩個線程只有一個能對其進行訪問。
數據采集與存儲線程對緩沖區進行寫操作之前,先對互斥量進行加鎖操作,把實時狀態寫入數據緩沖區后,再進行解鎖。這樣避免了因與GU I線程爭奪資源而造成系統不穩定的現象。上鎖與解鎖操作代碼如下:
void * thr ead_collect ion(void * arg)
{
……
pthread_mu tex_lock(dat a_mu tex); / /上鎖操作
read(fd, dat a, s izeof(dat a)); / /寫實時狀態到data緩沖區
pthread_mu tex_unl ock(dat a_m ut ex); / /解鎖操作
/ /激活網絡通信線程、決策線程,并寫數據到數據庫
……
}
同樣,GUI線程中也需要對緩沖區進行相應的上鎖、解鎖操作。
網絡通信線程和決策線程由GUI線程創建,由數據采集與存儲線程激活,都是每5 s運行1次。
由于GPRS模塊通過串口與下位機相連,并采用透明傳輸模式,即有數據即傳輸,因此,網絡通信線程只需要定時對串口寫操作就可以完成數據傳輸任務。網絡通信線程先打開串口,設置串口的波特率、數據位、校驗位等屬性,然后等待數據采集與存儲線程的信號量將其激活,第一次被激活后,進入了一個w hile循環,執行一次串口寫操作,再等待下一次被激活。網絡通信線程被激活的條件是數據采集與存儲線程對信號進行了一次加1操作,即sem_ post(sem_2)。網絡通信線程的關鍵代碼如下:
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)); / /對串口寫操作,發送數據
sem_w ait(sem_2); / /等待下一次信號量激活
}
pth read_exit(“thread exit \ n”); / /線程退出
決策線程的任務是對當前被監控對象的狀態進行判斷,如果有異常發生,則產生一個報警信號,并執行相關動作來應對這些異常。其代碼結構與網絡通信線程相似。
5結語
基于多線程的環境監控系統采用多線程技術完成下位機的多個任務,相對于單任務應用程序,多線程應用程序能夠減少定時器的使用,節約系統資源,從而提高系統效率。而且,多線程應用程序更能體現模塊化設計思想,程序易于維護和修改。該系統已經成功應用于多個項目之中,性能穩定可靠。
參考文獻:
[1]. GPRS datasheet http://www.dzsc.com/datasheet/GPRS+_1594650.html. [2]. PC datasheet http://www.dzsc.com/datasheet/PC+_2043275.html.
[3]. ARM920T 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.
本文地址:http://www.qingdxww.cn/thread-156224-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Chiptorials ——如何將CryptoAuthLib庫用于Microchip安全身份驗證IC
  • Chiptorials ——使用ATECC608 TrustFLEX實現基本非對稱身份驗證
  • Chiptorials——如何使用ATECC608 TrustFLEX實現公鑰輪換
  • 無線充電基礎知識及應用培訓教程
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎最新永久免费网址 | 久久996 | 黄大色大片免费久久 | 亚洲欧美在线观看一区二区 | 欧美日韩精品在线播放 | 在线日韩麻豆一区 | 精品久久香蕉国产线看观看亚洲 | 午夜小视频在线观看 | 国产成人亚洲精品乱码在线观看 | 国内不卡一二三四区 | 成人性色大片 | 三级视频网站在线观看 | 不卡在线观看 | 成人亚洲欧美日韩中文字幕 | 欧美成人午夜视频在线观看 | 精品69久久久久久99 | 四虎国产永久在线观看 | 欧美色婷婷| 成年女人免费毛片视频永久 | 国产成人一区二区三区免费观看 | 91亚洲免费 | 日本久久精品视频 | 欧美在线成人午夜网站 | 一卡2卡三卡4卡在线不卡 | 成年网站免费视频黄 | 国产成人经典三级在线观看 | 99久久老司机免费精品免费 | 欧美成人在线观看 | 日本系列 1页 亚洲系列 | 国内精品久久久久 | 国产成人91青青草原精品 | 亚洲精品国精品久久99热 | 国产成人精品微拍视频 | 国产精品亚洲专区在线观看 | 天美麻豆蜜桃91制片厂 | 精品视频www | 国产精品久久国产三级国不卡顿 | 日韩欧美国产中文字幕 | 色丁香在线观看 | 免费在线观看毛片 | 国产porn在线 |