朱洪涛, 李江明, 王志勇
(南昌大学机电工程学院,江西 南昌 330031)
随着微电子、计算机等技术的飞速发展,现代工业数据采集的信息量在不断扩大,单位信息数据可能会包含多个字节,一般将包含特定字节长度的数据流加上首尾判断标志以数据包方式传输[1]。蓝牙是一种短距离无线通信技术,成本低、功耗小、传输速率较高、抗干扰能力强、组网灵活[2],但传统蓝牙通信的协议复杂,不易操作。相比之下,串口是计算机上一种常用设备的通信协议,相当简单,为人们所熟知[3]。蓝牙串口模块正是两者结合的产物,它保留了蓝牙通信与串口通信的优点,数据的传输采用蓝牙技术,在上位机的程序开发过程中直接调用虚拟串口就能实现数据的无线通信[4]。但蓝牙发送数据包的频率和长度不确定,其数据包格式与标准串口通信之间存在细微差异,导致用传统串口编程时可能出现数据丢失[5]。
本文提出一种基于环形缓冲的数据处理算法,首先创建一个全局的缓冲数组、读指针和写指针,在数据的接收线程函数中实现该算法。利用缓冲区先将原始数据保存到该缓冲区内,此过程在数据采集中是不间断的,同时按照要求的数据格式去缓冲区中取出数据,由于此时所取数据是标准格式,所以不会出现接收到不完整的信息或者接收到错误信息的情况[6]。
一个典型的无线数据采集系统由上下位机组成,下位机包括传感器、信号调理电路、单片机,上位机则通常为计算机或手持终端。下位机部分主要负责数据采集,通过单片机采集各个传感器的有效测量数据,然后将采的集数据通过蓝牙串口模块转为无线数据发送。上位机则调用虚拟串口接收数据并对其进行处理及保存[7]。系统组成如图1所示。
图1 无线数据采集系统
蓝牙串口模块支持蓝牙串口协议[8],将复杂的蓝牙协议转换为简单易用的串口通信协议,使用户能够以串口的编程方式使用蓝牙。但是蓝牙发送数据包的频率和长度不确定,其数据包格式与标准的串口传输间存在差异,所以在应用传统的串口编程方式处理蓝牙数据时,无疑会产生错误的结果。本文将从产生两种方式数据包格式差异的原因、环形缓冲区的概念以及如何在数据接收线程中实现环形缓冲区三个方面来阐述该数据处理算法。
串口传输一次性发送完一个数据包或者多个数据包,即每次传输数据长度为包长度的整数倍[9]。故在传统的串口传输方式下,接收线程中的暂存数组长度为一个或多个完整包数据。
蓝牙技术特别设计了快速认证和跳频方案。在一次数据传输中,无线电收发器按一定的码序列不断地从一个信道跳到另一个信道。与其它工作在相同频段的系统相比,蓝牙跳频更快,数据包更短,每个数据包以不同的频率发送,而且数据包长度不定[10]。两种方式下的数据包格式差异如图2所示,为了说明方便,这里假设一个标准数据包长度为63 kB。
图2 两种方式下的数据包格式
图3 环形缓冲区示意图
从图1可以得出以下结论:就蓝牙传输的某一数据包而言,由于其无规律性,一般不会是固定长度,因此若直接取出该数据包进行处理无疑将得到错误的结果。但是从数据的整体接收过程看,蓝牙传输的数据是完整且有效的[11]。
综上对蓝牙数据的分析,可知蓝牙数据包是零散且非标准格式的,故实际应用中需要先将这些零碎的数据包进行整合,再按照标准格式读取[12]。为此本文提出一种数据预处理算法—环形缓冲区。在进入数据接收进程之前,首先创建一个全局的缓冲数组,一个写指针和一个读指针。其中读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入[13]。经过这种预处理算法,用户可以依照个人要求读取数据进行分析处理。该方法不仅有效地保存了蓝牙数据,而且节省系统资源,图3为该缓冲区的示意图:
在实际应用程序中实现环形缓冲区,一般在接收线程中进行,因为这样可以保证之后得到数据的正确性[14]。图4为该算法的具体实现过程。
图4 算法实现流程
本文使用安装蓝牙串口模块的轨道检测检仪来对一段已知参数的轨道进行测量,得到该段轨道的测量数据曲线,如图5所示。由于直接进行数据对比难以直观地体现出数据的连续性,故此处通过对比采用本文算法后采集得到的轨道参数曲线与原有的轨道参数曲线是否一致[15]。通过对比无线采集得到的轨道参数曲线与原有的轨道参数曲线,可以看出图中无线采集得到的曲线与原有参数的曲线高度吻合,无数据丢失现象。证明该数据处理算法在实际工作中是稳定有效的。
图5 无线采集的测量数据
蓝牙串口模块是目前广泛使用的一种通信模块,它同时具备蓝牙与串口的优点。但是由于蓝牙发送数据包的频率和每个数据包长度均不确定,致使其数据格式无规律,不规则,这在一定程度上加大了应用程序开发难度。本文在详细分析了蓝牙数据包格式后,提出了一种基于环形缓冲区的数据处理算法。在接收线程中实现环形缓冲区,先将蓝牙数据存入环形缓冲数组中,再对其进行相应操作。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。这样做不仅可以节省系统资源,而且有效数据不会丢失,所取得的数据准确无误。通过实际检测,表明本文提出的蓝牙数据处理方法稳定可靠,同时算法原理简单,易于编程实现。进一步讨论可知,该算法亦适用于其他不规则数据的处理,具有一定的通用性。
[1] 左 震,张羿猛,唐贵林,等.基于多字节流水线的POS信号IP包提取算法[J].测试技术学报,2009,23(4):337-342.
[2] 钱志鸿,杨 帆.蓝牙技术原理、开发与应用[M].北京:北京航空航天大学出版社,2006.
[3] 张海林,杨 勇.自动化系统中的串行通信协议的设计[J].计算机工程与应用,2003,31:159-160.
[4] 孟 凯,李 鑫.基于蓝牙串口模块的小型六足机器人系统设计[J].河南工程学院学报,2012,24(1):71-74.
[5] 钱志鸿,刘 丹.蓝牙技术数据传输综述[J].通信学报,2012,33(4):143-151.
[6] 孙海燕,侯朝桢.具有数据包丢失及多包传输的网络控制系统稳定性[J].控制与决策,2005,20(5):511-515.
[7] 卢伟国,童明俶.基于蓝牙的无线数据采集系统[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] 张文娜,黎 宁.基于蓝牙跳频原理的通信系统仿真[J].福建电脑,2010(8):125-126.
[11] 彭述清,施心凌,苗爱敏,等.嵌入式蓝牙协议的数据传输实现[J].通信技术,2009,42(9):32-34.
[12] 禹 荣.数据采集系统中缓冲区的设计方法[J].工业控制计算机,2006,19(5):73.
[13] 庄哲民,蔡清福.基于环形缓冲区的高速数据采集系统[J].数据采集与处理,1998,13(3):264-266.
[14] 菅志刚,金 旭.数据挖掘中数据预处理的研究与实现[J].计算机应用研究,2004(7):117-118.
[15] 梅海军,王 平,谢昊飞.基于EPA标准的蓝牙数据采集器[J].中国仪器仪表,2004(5):10-19.