朱洪濤, 李江明, 王志勇
(南昌大學機電工程學院,江西 南昌 330031)
隨著微電子、計算機等技術的飛速發(fā)展,現(xiàn)代工業(yè)數據采集的信息量在不斷擴大,單位信息數據可能會包含多個字節(jié),一般將包含特定字節(jié)長度的數據流加上首尾判斷標志以數據包方式傳輸[1]。藍牙是一種短距離無線通信技術,成本低、功耗小、傳輸速率較高、抗干擾能力強、組網靈活[2],但傳統(tǒng)藍牙通信的協(xié)議復雜,不易操作。相比之下,串口是計算機上一種常用設備的通信協(xié)議,相當簡單,為人們所熟知[3]。藍牙串口模塊正是兩者結合的產物,它保留了藍牙通信與串口通信的優(yōu)點,數據的傳輸采用藍牙技術,在上位機的程序開發(fā)過程中直接調用虛擬串口就能實現(xiàn)數據的無線通信[4]。但藍牙發(fā)送數據包的頻率和長度不確定,其數據包格式與標準串口通信之間存在細微差異,導致用傳統(tǒng)串口編程時可能出現(xiàn)數據丟失[5]。
本文提出一種基于環(huán)形緩沖的數據處理算法,首先創(chuàng)建一個全局的緩沖數組、讀指針和寫指針,在數據的接收線程函數中實現(xiàn)該算法。利用緩沖區(qū)先將原始數據保存到該緩沖區(qū)內,此過程在數據采集中是不間斷的,同時按照要求的數據格式去緩沖區(qū)中取出數據,由于此時所取數據是標準格式,所以不會出現(xiàn)接收到不完整的信息或者接收到錯誤信息的情況[6]。
一個典型的無線數據采集系統(tǒng)由上下位機組成,下位機包括傳感器、信號調理電路、單片機,上位機則通常為計算機或手持終端。下位機部分主要負責數據采集,通過單片機采集各個傳感器的有效測量數據,然后將采的集數據通過藍牙串口模塊轉為無線數據發(fā)送。上位機則調用虛擬串口接收數據并對其進行處理及保存[7]。系統(tǒng)組成如圖1所示。
圖1 無線數據采集系統(tǒng)
藍牙串口模塊支持藍牙串口協(xié)議[8],將復雜的藍牙協(xié)議轉換為簡單易用的串口通信協(xié)議,使用戶能夠以串口的編程方式使用藍牙。但是藍牙發(fā)送數據包的頻率和長度不確定,其數據包格式與標準的串口傳輸間存在差異,所以在應用傳統(tǒng)的串口編程方式處理藍牙數據時,無疑會產生錯誤的結果。本文將從產生兩種方式數據包格式差異的原因、環(huán)形緩沖區(qū)的概念以及如何在數據接收線程中實現(xiàn)環(huán)形緩沖區(qū)三個方面來闡述該數據處理算法。
串口傳輸一次性發(fā)送完一個數據包或者多個數據包,即每次傳輸數據長度為包長度的整數倍[9]。故在傳統(tǒng)的串口傳輸方式下,接收線程中的暫存數組長度為一個或多個完整包數據。
藍牙技術特別設計了快速認證和跳頻方案。在一次數據傳輸中,無線電收發(fā)器按一定的碼序列不斷地從一個信道跳到另一個信道。與其它工作在相同頻段的系統(tǒng)相比,藍牙跳頻更快,數據包更短,每個數據包以不同的頻率發(fā)送,而且數據包長度不定[10]。兩種方式下的數據包格式差異如圖2所示,為了說明方便,這里假設一個標準數據包長度為63 kB。
圖2 兩種方式下的數據包格式
圖3 環(huán)形緩沖區(qū)示意圖
從圖1可以得出以下結論:就藍牙傳輸的某一數據包而言,由于其無規(guī)律性,一般不會是固定長度,因此若直接取出該數據包進行處理無疑將得到錯誤的結果。但是從數據的整體接收過程看,藍牙傳輸的數據是完整且有效的[11]。
綜上對藍牙數據的分析,可知藍牙數據包是零散且非標準格式的,故實際應用中需要先將這些零碎的數據包進行整合,再按照標準格式讀取[12]。為此本文提出一種數據預處理算法—環(huán)形緩沖區(qū)。在進入數據接收進程之前,首先創(chuàng)建一個全局的緩沖數組,一個寫指針和一個讀指針。其中讀指針指向環(huán)形緩沖區(qū)中可讀的數據,寫指針指向環(huán)形緩沖區(qū)中可寫的緩沖區(qū)。通過移動讀指針和寫指針就可以實現(xiàn)緩沖區(qū)的數據讀取和寫入[13]。經過這種預處理算法,用戶可以依照個人要求讀取數據進行分析處理。該方法不僅有效地保存了藍牙數據,而且節(jié)省系統(tǒng)資源,圖3為該緩沖區(qū)的示意圖:
在實際應用程序中實現(xiàn)環(huán)形緩沖區(qū),一般在接收線程中進行,因為這樣可以保證之后得到數據的正確性[14]。圖4為該算法的具體實現(xiàn)過程。
圖4 算法實現(xiàn)流程
本文使用安裝藍牙串口模塊的軌道檢測檢儀來對一段已知參數的軌道進行測量,得到該段軌道的測量數據曲線,如圖5所示。由于直接進行數據對比難以直觀地體現(xiàn)出數據的連續(xù)性,故此處通過對比采用本文算法后采集得到的軌道參數曲線與原有的軌道參數曲線是否一致[15]。通過對比無線采集得到的軌道參數曲線與原有的軌道參數曲線,可以看出圖中無線采集得到的曲線與原有參數的曲線高度吻合,無數據丟失現(xiàn)象。證明該數據處理算法在實際工作中是穩(wěn)定有效的。
圖5 無線采集的測量數據
藍牙串口模塊是目前廣泛使用的一種通信模塊,它同時具備藍牙與串口的優(yōu)點。但是由于藍牙發(fā)送數據包的頻率和每個數據包長度均不確定,致使其數據格式無規(guī)律,不規(guī)則,這在一定程度上加大了應用程序開發(fā)難度。本文在詳細分析了藍牙數據包格式后,提出了一種基于環(huán)形緩沖區(qū)的數據處理算法。在接收線程中實現(xiàn)環(huán)形緩沖區(qū),先將藍牙數據存入環(huán)形緩沖數組中,再對其進行相應操作。通過移動讀指針和寫指針就可以實現(xiàn)緩沖區(qū)的數據讀取和寫入。這樣做不僅可以節(jié)省系統(tǒng)資源,而且有效數據不會丟失,所取得的數據準確無誤。通過實際檢測,表明本文提出的藍牙數據處理方法穩(wěn)定可靠,同時算法原理簡單,易于編程實現(xiàn)。進一步討論可知,該算法亦適用于其他不規(guī)則數據的處理,具有一定的通用性。
[1] 左 震,張羿猛,唐貴林,等.基于多字節(jié)流水線的POS信號IP包提取算法[J].測試技術學報,2009,23(4):337-342.
[2] 錢志鴻,楊 帆.藍牙技術原理、開發(fā)與應用[M].北京:北京航空航天大學出版社,2006.
[3] 張海林,楊 勇.自動化系統(tǒng)中的串行通信協(xié)議的設計[J].計算機工程與應用,2003,31:159-160.
[4] 孟 凱,李 鑫.基于藍牙串口模塊的小型六足機器人系統(tǒng)設計[J].河南工程學院學報,2012,24(1):71-74.
[5] 錢志鴻,劉 丹.藍牙技術數據傳輸綜述[J].通信學報,2012,33(4):143-151.
[6] 孫海燕,侯朝楨.具有數據包丟失及多包傳輸的網絡控制系統(tǒng)穩(wěn)定性[J].控制與決策,2005,20(5):511-515.
[7] 盧偉國,童明俶.基于藍牙的無線數據采集系統(tǒng)[J].電測及儀表,2002,39(9):26-29.
[8] Bluetooth Special Interest Group.Bluetooth Specification Vol.3 Part A:Logical Link Control and Adaptation Protocol Specification[S].2009.
[9] 劉書智.Visual C++串口通信與工程應用實踐[M].北京:中國鐵道出版社,2011.
[10] 張文娜,黎 寧.基于藍牙跳頻原理的通信系統(tǒng)仿真[J].福建電腦,2010(8):125-126.
[11] 彭述清,施心凌,苗愛敏,等.嵌入式藍牙協(xié)議的數據傳輸實現(xiàn)[J].通信技術,2009,42(9):32-34.
[12] 禹 榮.數據采集系統(tǒng)中緩沖區(qū)的設計方法[J].工業(yè)控制計算機,2006,19(5):73.
[13] 莊哲民,蔡清福.基于環(huán)形緩沖區(qū)的高速數據采集系統(tǒng)[J].數據采集與處理,1998,13(3):264-266.
[14] 菅志剛,金 旭.數據挖掘中數據預處理的研究與實現(xiàn)[J].計算機應用研究,2004(7):117-118.
[15] 梅海軍,王 平,謝昊飛.基于EPA標準的藍牙數據采集器[J].中國儀器儀表,2004(5):10-19.