国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

多傳感器狀態(tài)監(jiān)測系統(tǒng)的多線程信息處理模型

2012-11-22 01:46徐建鋒薛平貞
關(guān)鍵詞:線程數(shù)據(jù)處理故障診斷

楊 維,趙 維,徐建鋒,薛平貞

(西北機電工程研究所,陜西 咸陽 712099)

隨著人們對安全保障的日益重視,多傳感器狀態(tài)監(jiān)測系統(tǒng)得到了越來越廣泛的應(yīng)用。通過對各類運行參數(shù)連續(xù)不斷的采集,可以獲得關(guān)鍵設(shè)備的運行狀態(tài),并實現(xiàn)自動報警和故障診斷[1-2]。狀態(tài)監(jiān)測系統(tǒng)的信息處理過程包括數(shù)據(jù)采集、顯示輸出和數(shù)據(jù)處理等多個任務(wù),非常適合采用多線程技術(shù)[3-4]。不過,當采樣頻率較高、傳感器數(shù)量較多時,如何合理的進行任務(wù)劃分和設(shè)計多線程模型對系統(tǒng)的穩(wěn)定性和執(zhí)行效率有著十分重要的影響[5]。本文提出了一種針對多傳感器狀態(tài)監(jiān)測系統(tǒng)的多線程信息處理模型,并基于VxWorks操作系統(tǒng)給出了該模型的具體實現(xiàn)。通過在某綜合控制管理狀態(tài)監(jiān)測系統(tǒng)中的實際應(yīng)用,驗證了該模型的有效性和穩(wěn)定性。

1 多傳感器狀態(tài)監(jiān)測系統(tǒng)

圖1給出了一個典型的多傳感器狀態(tài)監(jiān)測系統(tǒng)的基本架構(gòu)。其中,監(jiān)測網(wǎng)絡(luò)中存在幾十甚至上百個傳感器,用于監(jiān)測不同的測點;數(shù)據(jù)采集模塊通過監(jiān)測網(wǎng)絡(luò)可以接收各測點的運行參數(shù),在收到運行參數(shù)之后,還需要進行顯示輸出、數(shù)據(jù)處理和故障診斷,經(jīng)過處理的監(jiān)測數(shù)據(jù)和診斷結(jié)果還要保存到數(shù)據(jù)庫中。

考慮到以下因素,則該問題更加復(fù)雜:

1)在一些監(jiān)測診斷系統(tǒng)中,希望報警點前后一段時間內(nèi)的采樣點越多越好,而在無報警時段內(nèi)對采樣點的數(shù)據(jù)密度沒有過高的要求。

2)對于不同類型的運行參數(shù),需要采用不同的數(shù)據(jù)壓縮方法—緩變參數(shù)直接擴大采樣點時間間隔進行重采樣即可;非緩變參數(shù)則需要考慮參數(shù)變化的頻率。

2 多線程信息處理模型

針對上述多傳感器狀態(tài)監(jiān)測系統(tǒng),設(shè)計了一個多線程信息處理模型。在該模型中,將需要完成的任務(wù)劃分為主線程、數(shù)據(jù)采集線程、數(shù)據(jù)處理線程、故障診斷線程、顯示輸出線程和定時器,其信息處理流程如圖2所示。

2.1 數(shù)據(jù)采集線程

在硬件條件許可的前提下,可以適當加大采樣頻率。特別是對于非穩(wěn)態(tài)參數(shù)(如柴油機氣缸壓力參數(shù)),采樣頻率可能會大于50 MHz。為此,采用非阻塞異步通信方式接收來自多socket的監(jiān)測數(shù)據(jù),并將采集到監(jiān)測數(shù)據(jù)送入預(yù)處理緩沖區(qū)。預(yù)處理緩沖區(qū)按不同參數(shù)劃分為不同的單元,每個單元都有一個報警狀態(tài)標識記錄是否報警。如果某參數(shù)一直處于正常的閾值范圍內(nèi),則該標識置于低位0(表示正常);如果某參數(shù)超出正常的閾值范圍,即將該標識置為高位1(表示異常),同時記錄報警時間T_Alarm;如果處于報警狀態(tài)的參數(shù)重新回復(fù)到正常閾值范圍內(nèi),則將該標識置為低位0,同時記錄取消報警時間T_AlarmEnd。

當傳感器數(shù)量較多且采樣頻率較高時,將會大大增加存儲空間。為此,需要進一步考慮數(shù)據(jù)壓縮。

2.2 數(shù)據(jù)處理線程

數(shù)據(jù)處理線程負責進一步處理預(yù)處理緩沖區(qū)中的數(shù)據(jù)。一旦預(yù)處理緩沖區(qū)中某個參數(shù)單元的緩沖區(qū)長度大于臨界值,即將緩沖區(qū)內(nèi)的數(shù)據(jù)送入交換區(qū),然后向數(shù)據(jù)處理線程發(fā)送請求處理通知。數(shù)據(jù)處理線程收到該通知后,按順序處理交換區(qū)中的數(shù)據(jù):

1) 判斷當前參數(shù)單元是否為報警狀態(tài),如果為非報警狀態(tài),則按參數(shù)類型進行數(shù)據(jù)壓縮后存儲到數(shù)據(jù)庫中。

2) 如果處于報警狀態(tài),則將報警窗口(T_Alarm-TL

3) 無論是否壓縮,轉(zhuǎn)存至數(shù)據(jù)庫之后,就要清空當前參數(shù)單元的交換區(qū)。

2.3 故障診斷線程

通過滑動診斷窗口,故障診斷線程實時對處于滑窗內(nèi)的數(shù)據(jù)進行基于模式識別的故障匹配。當故障匹配的結(jié)果有邏輯沖突時,還需要進行基于決策融合的沖突消解,給出最終的診斷結(jié)果。

2.4 顯示輸出線程

顯示輸出線程負責在監(jiān)控界面上以動態(tài)曲線、數(shù)字儀表等方式顯示最近時刻的運行參數(shù)和故障診斷的結(jié)果。

2.5 定時器

定時器根據(jù)需要按固定時間間隔向各線程發(fā)送通知。譬如融合診斷線程和顯示輸出線程并不是一直處于工作狀態(tài),而是收到由定時器給出的通知信號量后才工作,待完成當前周期的任務(wù)后再自動“休眠”。

3 基于VxWorks的實現(xiàn)

基于VxWorks 5.5,實現(xiàn)了上述多線程信息處理模型。VxWorks 5.5是一個搶占式多任務(wù)實時操作系統(tǒng),它只有一個進程,這個單一進程可以包括多個任務(wù),并且這些多任務(wù)之間可以共享內(nèi)存和其它資源。

3.1 任務(wù)創(chuàng)建

在VxWorks環(huán)境下,提供了一個taskSpawn函數(shù)用以創(chuàng)建任務(wù)并執(zhí)行該任務(wù)的入口函數(shù)。可以在其usrAppInit函數(shù)中執(zhí)行數(shù)據(jù)采集任務(wù)、數(shù)據(jù)處理任務(wù)、故障診斷任務(wù)、顯示輸出任務(wù)和定時器任務(wù)。程序代碼如下:

int t_DataCollecting = taskSpawn(“DataCollecting”, 100, 0, 8192, (FUNCPTR)DataCollect_Func, 0, 1, 2, 3, 4 ,5, 6, 7, 8, 9); //創(chuàng)建數(shù)據(jù)采集任務(wù)

int t_DataProcessing = taskSpawn(“DataProcessing”, 100, 0, 8192, (FUNCPTR) DataProcessing_Func, 0, 1, 2, 3, 4 ,5, 6, 7, 8, 9); //創(chuàng)建數(shù)據(jù)處理任務(wù)

int t_FaultDiagns = taskSpawn(“FaultDiagns”, 100, 0, 8192, (FUNCPTR) FaultDiagns_Func, 0, 1, 2, 3, 4 ,5, 6, 7, 8, 9); //創(chuàng)建故障診斷任務(wù)

int t_Output = taskSpawn(“Output”, 100, 0, 8192, (FUNCPTR) Output_Func, 0, 1, 2, 3, 4 ,5, 6, 7, 8, 9); //創(chuàng)建顯示輸出任務(wù)

int t_Timer = taskSpawn(“Timer”, 100, 0, 8192, (FUNCPTR) Timer_Func, 0, 1, 2, 3, 4 ,5, 6, 7, 8, 9); //創(chuàng)建定時器任務(wù)

3.2 任務(wù)間的協(xié)調(diào)與通信

1) 基于臨界區(qū)的數(shù)據(jù)保護

基于VxWorks下STL(標準模板庫)中的vector類,定義了用于緩存接收數(shù)據(jù)的預(yù)處理緩沖區(qū)。其代碼如下:

vectorRecvDatas; //定義預(yù)處理緩沖區(qū)

由于多任務(wù)之間可以共享內(nèi)存,因此各任務(wù)均可以讀寫上面定義的RecvDatas。為了避免同時搶占共享資源,可以利用VxWorks提供的taskLock函數(shù)和taskUnlock函數(shù)實現(xiàn)數(shù)據(jù)保護。這兩個函數(shù)一定是成對出現(xiàn)的,通過taskLock函數(shù)實現(xiàn)鎖定,通過taskUnlock函數(shù)進行解鎖,而在這兩個函數(shù)之間的代碼相當于臨界區(qū)操作,避免產(chǎn)生沖突。其偽代碼如下:

taskLock?();???//鎖定

/******安全的數(shù)據(jù)操作********/

taskUnlock?();?//解鎖

2) 基于二進制信號量的通知機制

數(shù)據(jù)處理任務(wù)、顯示輸出任務(wù)和故障診斷任務(wù)并非一直處于工作狀態(tài),而是收到通知后才執(zhí)行相關(guān)任務(wù),完成任務(wù)后又可以暫時處于“休眠”狀態(tài),直到收到下一個通知為止,如此周而復(fù)始?;赩xWorks提供的二進制信號量,可以實現(xiàn)上述通知機制。例如,關(guān)于定時通知顯示輸出任務(wù)刷屏,可以在usrAppInit函數(shù)中,可以先通過semBCreate創(chuàng)建一個名為sem_NotifyOutput的二進制信號量(用于定時通知顯示)。在顯示輸出任務(wù)中的Output_Func函數(shù)中,其偽代碼如下:

void Output()

{

for(;;)

{

semTake(sem_NotifyOutput);//占據(jù)通知顯示信號量

refresh();//刷屏操作

}

}

而在定時器事件中,其偽代碼描述如下:

output_Count++;//計數(shù)加1

if (output_Count % output_Interval == 0)

//若計數(shù)被顯示時間間隔整除,則

{

semGive(sem_NotifyOutput);//釋放通知顯示信號量

}

上述代碼中,Output函數(shù)的主體就是一個無條件的for循環(huán),在其中首先通過semTake函數(shù)試圖占據(jù)sem_NotifyOutput,若成功占據(jù)則執(zhí)行refresh函數(shù)進行刷屏,否則一直等待。而在定時器事件中,output_Count一直遞增,一旦output_Count被顯示時間間隔output_Interval整除,則調(diào)用semGive函數(shù)釋放sem_NotifyOutput。

3.3 非阻塞式異步數(shù)據(jù)接收

創(chuàng)建單一的數(shù)據(jù)采集線程,以非阻塞異步方式接收來自所有客戶端的數(shù)據(jù)。在VxWorks中,提供了select函數(shù)實現(xiàn)非阻塞式異步數(shù)據(jù)接收。select函數(shù)可以監(jiān)視文件描述符集合中某個文件描述符是否發(fā)生變化,當然也可以用于監(jiān)視該文件描述符是否可讀,一旦檢測到有數(shù)據(jù)可讀后才調(diào)用相關(guān)的recv函數(shù)接收數(shù)據(jù)。

為了記錄所有客戶端socket,定義了一個基于STL的socket向量。其代碼如下:

vectorclient_Sockets;//定義客戶端socket向量

而在數(shù)據(jù)采集任務(wù)的DataCollect_Func函數(shù)中,其偽代碼如下:

void DataCollect_Func()

{

int i;

struct fd_set fds;//定義可讀文件描述符集合

struct timeval timeout={2, 0};//定義select的超時時間為2s

for(;;)

{

FD_ZERO(&fds);//每次循環(huán)都要清空集合

for(i = 0; i < client_Sockets.size(); i++)

{

FD_SET(client_Sockets[i], &fds);

}//將client_Sockets中所有項添加到fds中

switch(select(FD_SETSIZE, &fds, NULL, NULL, &timeout))

{

case -1:

{

exit(-1);break;

}

case 0: break;

default:

{

for(i = 0; i < client_Sockets.size(); i++)

{

if (FD_ISSET(client_Sockets[i],&fds))//若可讀

{

recv(client_Sockets[i], ….);//接收數(shù)據(jù)

}

}

}

}

}

4 實際應(yīng)用

在某綜合控制管理狀態(tài)監(jiān)測系統(tǒng)中,傳感器總數(shù)為N個,這些傳感器的采樣頻率分別為10 Hz、50 Hz和50 MHz不等。監(jiān)測網(wǎng)絡(luò)采用工業(yè)以太網(wǎng)和CAN總線,但并非所有傳感器都直接接入監(jiān)測網(wǎng)絡(luò),鄰近測點的傳感器可能通過共同的下位機(如單片機)接入監(jiān)測網(wǎng)絡(luò)。系統(tǒng)運行的硬件環(huán)境為:P4 1.4G、1G RAM、500G HD。

通過跟蹤日志可知,在實際的使用過程中,CPU的平均使用率為45%,峰值使用率低于75%,且未發(fā)現(xiàn)死鎖、錯/漏報警等情況。表明系統(tǒng)任務(wù)劃分合理,運行穩(wěn)定。

5 結(jié) 論

對于多傳感器狀態(tài)監(jiān)測系統(tǒng)而言,合理的進行任務(wù)劃分和設(shè)計多線程信息處理模型非常重要,對系統(tǒng)的執(zhí)行效率和穩(wěn)定性影響很大。本文提出的多傳感器狀態(tài)監(jiān)測系統(tǒng)的多線程信息處理模型包括數(shù)據(jù)采集線程、數(shù)據(jù)處理線程、故障診斷線程、顯示輸出線程和定時器等,具有一定通用性。在VxWorks下給出了該模型的具體實現(xiàn)。通過實際應(yīng)用,表明該模型及其具體實現(xiàn)執(zhí)行效率較高,且穩(wěn)定性較好。

參考文獻(References)

[1] 伍星,毛劍琳,遲毅林. 設(shè)備狀態(tài)監(jiān)測與診斷系統(tǒng)的概念模型[J]. 計算機工程, 2009, 35(12): 229-232.

WU Xing,MAO Jian-lin,CHI Yi-lin. Conceptual model for equipment condition monitoring and diagnosis system[J]. Computer Engineering,2009,35(12):229-232.(in Chinese)

[2] 毛宏宇,王豐貴,王文良,等. 基于數(shù)據(jù)流截獲技術(shù)的儀器狀態(tài)監(jiān)測方案[J]. 計算機工程, 2010, 36(2): 241-243.

MAO Hong-yu,WANG Feng-gui,WANG Wen-liang, et al. Instruments status monitoring sc-heme based on data stream interception[J]. Computer Engineering, 2010,36(2):241-243.(in Chinese)

[3] 陳佐,楊秋偉,萬新,等. 一種多線程負載均衡分析方法研究[J]. 計算機應(yīng)用研究, 2011, 28(5): 1752-1755.

CHENG Zuo,YANG Qiu-wei,WAN Xin, et al. Research on analyzing load equilibrium of mult-i-threads[J]. Aplication Research of Computers, 2011, 28(5): 1752-1755.(in Chinese)

[4] 姚崇華,姜新紅,程凌宇,等. 多線程應(yīng)用中的定時器管理算法[J]. 計算機工程, 2010, 36(2): 75-77.

YAO Chong-hua, JANG Xin-hong,CHENG Ling-yu, et al. Timer management algorithm in multi-threads application[J]. Computer Engineering, 2010, 36(2): 75-77. (in Chinese)

[5] 戴大蒙. 基于非阻塞式Winsock 的多線程網(wǎng)絡(luò)通信機制[J]. 計算機工程, 2006, 32(6): 137-139.

DAI Da-meng. Multi-threads communication Mechanism based on non-blocking I/O Wins-Ock[J]. Computer Engineering, 2006, 32(6): 137-139. (in Chinese)

猜你喜歡
線程數(shù)據(jù)處理故障診斷
實時操作系統(tǒng)mbedOS 互斥量調(diào)度機制剖析
認知診斷缺失數(shù)據(jù)處理方法的比較:零替換、多重插補與極大似然估計法*
基于包絡(luò)解調(diào)原理的低轉(zhuǎn)速滾動軸承故障診斷
基于低頻功率數(shù)據(jù)處理的負荷分解方法
無人機測繪數(shù)據(jù)處理關(guān)鍵技術(shù)及運用
基于國產(chǎn)化環(huán)境的線程池模型研究與實現(xiàn)
數(shù)控機床電氣系統(tǒng)的故障診斷與維修
基于MATLAB語言的物理實驗數(shù)據(jù)處理探討
基于量子萬有引力搜索的SVM自駕故障診斷
江淮同悅純電動汽車無倒檔故障診斷與排除
吉首市| 巢湖市| 庆元县| 阆中市| 新兴县| 荥阳市| 衡南县| 保定市| 洛川县| 郯城县| 寿宁县| 藁城市| 大悟县| 来安县| 阿坝县| 巩留县| 临沂市| 乐业县| 延长县| 称多县| 和政县| 深圳市| 瑞丽市| 荃湾区| 道真| 温泉县| 东乌| 澄江县| 稻城县| 黄冈市| 营口市| 中卫市| 信宜市| 德清县| 邢台市| 沈丘县| 呼伦贝尔市| 山西省| 万安县| 望谟县| 永胜县|