多線程技術在數據實時采集分析中的應用
為了保證測試效率和數據處理的正確性,pWriteCounter既用于控制內存映射文件寫入數據指針的移動,也用于判斷已接收的數據字節數,作為數據處理時讀內存映射文件指針的參考和是否開始對數據進行分析的條件。數據處理時,并不是內存映射文件中寫入數據后就馬上開始分析,而是根據pWriteCounter確定已接收的數據字節數,直到接收回來大于一個標準幀長度的數據后才開始對此幀數據的誤碼率分析,這樣既避免了多次分析一幀數據,又保證了數據分析的正確性,而且減少了數據分析線程獨占CPU的時間。從最終實際運行結果來看,此方法有效解決了數據實時采集過程中掉數據的問題。
本文引用地址:http://www.104case.com/article/86129.htm數據經分解寫入對應通道內存映射文件后,還需要實時地將每個通道接收回來的測試數據和標準數據進行對比分析,并以誤碼率形式進行顯示,測試人員根據實時變化的誤碼率即可監測數字接口設備是否工作正常。數據分析處理流程如圖5所示。在實際使用中,數字接口設備可能出現的故障現象較多,采集接收回來的數據量相當大且數據出錯情況各不相同,不能誤判或漏掉任何一種情況,通過反復測試得出以下對固定格式數據處理的方法:
①從每個通道的內存映射文件中逐個字節掃描幀頭0xAA,一旦檢測到幀頭0xAA,進入第②步。
②首先判斷此幀數據的幀尾位置是否為0x10,以及幀尾的前一個數據和對應的標準數據(標準數據幀尾的前一個數)是否相同,若同時滿足這兩個條件,說明此幀數據為標準幀(此幀數據長度和發送的標準幀幀長度相等),若不滿足進行第④步操作。
③判斷此幀為標準幀后,從此幀數據和標準數據的第二位開始到幀尾一一進行對比判斷(跳過第0個幀頭數據和第1個計數器數據),不相等則記錄出錯,每發現一處錯誤字節,錯誤字節數加1。進入第⑥步。
④從幀頭到幀長度數據范圍內查找是否出現0xAA,出現0xAA,首先用第②步操作判斷此0xAA是否為下一幀數據的幀頭,若是下一幀數據幀頭,記錄幀頭前一個字節為此幀幀尾位置,說明此幀數據有掉數據現象,否則為錯誤數據,調用非標準幀處理。
⑤從此幀數據和標準數據的第二位開始到確定的該幀長度范圍內數據進行一一對比判斷 (跳過第0個幀頭數據和第1個計數器數據),不相等則記錄出錯,并判斷為錯誤一個字節。
⑥檢查該幀中計數器數據與前后幀的計數器數據是否連續,如果連續則沒有幀出錯,否則有掉幀現象出現,需要根據前后計數器數據確定掉幀的長度,并轉化為對應錯誤字節數。
同時接上兩個被測設備驗證整個系統的性能,即使每個通道均選擇工作在最高波特率614.4 kbps和最高循環發送幀周期5ms下,仍能保證數據采集實時高速、數據質量穩定且誤碼率低。
結束語
實時測試與結果顯示如圖6所示。該技術已經成功應用于某數字接口設備的檢測與維修系統,取得了良好的效果。經大量測試驗證,此種多線程、內存映射文件和兩級緩沖的方法在高速實時數據采集和分析中效果很好。根據生產者和消費者的思想建立的讀寫信號量有效地實現了采集和分析線程間的同步,內存映射文件的大小在開始測試前申請為100M,當需要更長時間測試時還可以動態申請開辟新的內存空間,既保證了系統的實時性要求,又有效節約了系統內存資源。
評論