為提高環(huán)境監(jiān)控系統(tǒng)的穩(wěn)定性,節(jié)約系統(tǒng)資源,提出了一種由下位機、傳輸網(wǎng)絡和上位機組成的環(huán)境監(jiān)控系統(tǒng)的設計方案,詳細介紹了該系統(tǒng)中下位機的硬件及軟件設計。該下位機硬件以ARM9處理器S3C2410為核心,軟件采用多線程應用程序同時處理多個任務,并采用信號量和互斥量實現(xiàn)線程間的同步。實際應用表明,該系統(tǒng)運行穩(wěn)定,提高了系統(tǒng)效率。
0引言
隨著國民經(jīng)濟及工業(yè)技術的發(fā)展,環(huán)境保護越來越受到重視?,F(xiàn)在市場上已經(jīng)出現(xiàn)了多種環(huán)境監(jiān)控系統(tǒng),但性能不穩(wěn)定?,F(xiàn)場監(jiān)控終端大多采用工控機或單片機,前者抗干擾性能好,但成本較高;后者處理能力低,人機界面不友好,不利于現(xiàn)場人員的監(jiān)控管理。針對上述問題,筆者設計了一種基于多線程的環(huán)境監(jiān)控系統(tǒng)。該系統(tǒng)采用多線程技術有效地實現(xiàn)了監(jiān)控過程中數(shù)據(jù)的采集與存儲、實時數(shù)據(jù)顯示、下位機(監(jiān)控終端)與上位機(監(jiān)控中心)的通信、實時報警等功能。本文重點介紹該系統(tǒng)下位機的設計。
1系統(tǒng)總體結構
基于多線程的環(huán)境監(jiān)控系統(tǒng)由現(xiàn)場監(jiān)控終端(下位機)、傳輸網(wǎng)絡、監(jiān)控中心(上位機)3個部分組成,其結構如圖1所示。
圖1基于多線程的環(huán)境監(jiān)控系統(tǒng)結構
下位機是一個基于A RM9的嵌入式系統(tǒng),用于定時采集、處理、存儲被監(jiān)測的特征數(shù)據(jù)。經(jīng)過下位機處理后的數(shù)據(jù),按照相關協(xié)議,經(jīng)GPRS模塊發(fā)送給上位機。上位機由一臺PC機擔任,負責接收多個下位機發(fā)送的數(shù)據(jù),并對這些數(shù)據(jù)進行分析、處理和顯示。環(huán)保部門可通過上位機監(jiān)控其轄區(qū)內(nèi)的污染排放狀況。上位機基于VB. NET開發(fā)。
2下位機硬件設計
下位機的硬件核心部分由S3C2410、NandFLASH和SDRAM組成,如圖2所示。S3C2410是三星公司生產(chǎn)的一款基于ARM920T內(nèi)核的32位RISC嵌入式微處理器,帶有獨立的16 KB指令Cache和16 KB數(shù)據(jù)Cache、LCD控制器、RAM控制器、N and FLASH控制器、并行I/ O口、8路10位ADC,其運行頻率可達203 MHz.8位64 MB的Nand FLASH選用的芯片為K9F1208, 64 MB的SDRAM由2片HY57V561620組成。下位機通過以太網(wǎng)控制器CS8900A擴展了一個網(wǎng)口,數(shù)據(jù)既可以通過無線傳輸,也可以通過有線傳輸;通過I/ O接口擴展了8個DI口(數(shù)字量輸入)、4個AI口(模擬量輸入)、4個DO口(數(shù)字量輸出),下位機通過這些接口與被監(jiān)控設備通信。
圖2下位機硬件組成
3下位機的需求與結構設計
下位機定時采集、處理現(xiàn)場數(shù)據(jù),并存儲在數(shù)據(jù)庫中,把實時數(shù)據(jù)發(fā)送給上位機,并響應上位機發(fā)送的控制命令。因此,下位機需要同時處理多個任務,這些任務并發(fā)執(zhí)行。若使用單線程來完成這些任務,則需要使用多個定時器來觸發(fā),而過多的定時器會導致系統(tǒng)不穩(wěn)定。Window s是搶先式多任務的操作系統(tǒng),啟動了一個應用程序就等于啟動了一個進程。一個進程通常擁有一個線程,在系統(tǒng)資源管理中,每一個線程被分配一定的時間片。采用多線程的設計方法可以使程序擁有多個線程,這樣程序就能同時處理更多的任務。因此,若使用多個進程來協(xié)作完成,能避免上述缺點且系統(tǒng)比較穩(wěn)定,但系統(tǒng)對進程的頻繁調(diào)度會占用過多資源,程序的可讀性也不好。
筆者采用一種并行的、多線程方案能夠很好地處理多個任務,并充分節(jié)約系統(tǒng)資源。該方案中,下位機有5個線程:GU I線程、復位線程、數(shù)據(jù)采集與存儲線程、網(wǎng)絡通信線程、決策線程。其中GU I線程為主線程,負責界面處理、系統(tǒng)數(shù)據(jù)的初始化以及創(chuàng)建子線程等任務;復位線程、數(shù)據(jù)采集與存儲線程、網(wǎng)絡通信線程是后臺的工作線程,通過優(yōu)先級調(diào)度、線程同步等機制保證能可靠執(zhí)行現(xiàn)場數(shù)據(jù)采集、存儲、發(fā)送、顯示等任務。復位線程在啟動后循環(huán)地對看門狗操作,不作為任務處理線程。任務線程之間的關系如圖3所示。
圖3任務線程之間的關系
4多線程技術在系統(tǒng)中的應用
4. 1線程的創(chuàng)建
Linux環(huán)境下,使用pthread_cr eate()函數(shù)創(chuàng)建一個新線程,默認情況下主線程會等待被創(chuàng)建的子線程執(zhí)行結束,得到子線程的返回結果然后再繼續(xù)往后執(zhí)行。實時監(jiān)控程序的子線程都是循環(huán)執(zhí)行的,不需要運行結束后歸并到主線程中,需設置其屬性為PT HREAD _ CREATE _DETACHED.根據(jù)子線程的重要性進行優(yōu)先級設置,確保重要線程優(yōu)先執(zhí)行。子線程的優(yōu)先級從高到低依次為復位線程、數(shù)據(jù)采集與存儲線程、決策線程、網(wǎng)絡通信線程。
線程的創(chuàng)建、設置偽代碼如下:
void * thr ead_wat chdog(void * arg); / /復位線程函數(shù)
void * thr ead_collect ion(void * arg); / /數(shù)據(jù)采集與存儲線程函數(shù)
void * thr ead_communi cat ion(void * arg); / /網(wǎng)絡通信線程函數(shù)
void * thr ead_decis e(void * arg); / /決策線程函數(shù)
int dat a[ 12] ; / /數(shù)據(jù)緩沖區(qū),用于存放線程間共享的數(shù)據(jù)函數(shù)
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(); / /設置線程的優(yōu)先級
sem_init(); / /對相關信號量進行初始化
pth read_creat e(); / /創(chuàng)建新線程
/ /啟動GUI程序
……
}
-
監(jiān)控系統(tǒng)
+關注
關注
21文章
4078瀏覽量
182617 -
上位機
+關注
關注
27文章
967瀏覽量
55800 -
下位機
+關注
關注
0文章
96瀏覽量
19176
發(fā)布評論請先 登錄
地鐵傳輸網(wǎng)擴容改造解決方案
基于通信電源的監(jiān)控系統(tǒng)組網(wǎng)方案
基于無線傳感器網(wǎng)絡的溫室環(huán)境監(jiān)控系統(tǒng)設計
下位機與遠程監(jiān)控主機怎么實現(xiàn)網(wǎng)絡通信?
基于Modbus協(xié)議的程控電源的上位機監(jiān)控系統(tǒng)設計方案

評論