基于Zigbee的数据监测上位机通信接口设计

2014-06-27 05:48邹学玉吴君彦长江大学电子信息学院湖北荆州434023
长江大学学报(自科版) 2014年25期
关键词:控件字节上位

邹学玉,吴君彦 (长江大学电子信息学院,湖北 荆州 434023)

基于Zigbee的数据监测上位机通信接口设计

邹学玉,吴君彦 (长江大学电子信息学院,湖北 荆州 434023)

基于Visual Basic 6.0与SQLServer2005,根据MSComm控件的OnComm事件中的Comm Event值来实现Zigbee网关节点的数据收发送和解析等操作,利用ADO2.0对象模型与SQLServer2005连接来实现采集数据的存储。研究表明,采用在内存中构建动态多叉树数组存储所有节点最新数据的方法能够加快遍历所有节点当前数据信息的速度,同时通过多叉树和节点的数据库操作方法可以快速获取节点的历史记录信息。

通信接口;数据解析;动态多叉树

传统数据采集系统中,节点一般采用有线连接方式,扩展性和可移植性差,而且成本功耗都比较高。ZigBee作为一种低速率、低成本、低功耗、近距离的双向无线通信技术,可广泛应用与工业控制、智能家居、医疗监控等各种领域[1]。基于ZigBee技术的节点续航能力强、灵活性高,能够适应多变的现实环境。ZigBee技术可实现3种不同的传输速率,即20kbps、40kbps以及250kbps[2]。对于节点发送的数据帧比较小,如波特率为38400bps的应用场合,当节点将数据帧发送到上位机时,可以用ZigBee技术将数据传输到协调器,协调器再通过串口将数据传给上位机。将上位机串口的波特率设置为Zigbee协调器的波特率一致,即可接收到Zigbee网络采集的数据。

上位机监控终端软件可用VC++6.0与MySQL相结合的方式实现采集数据中心的管理系统[3],也可以用VB6.0。由于VB6.0是可视化编程开发平台,其拥有面向对象的程序设计思想,并且引入了“控件”的概念,使得大量已经编好的功能控件可以直接使用,无需调用Windows API函数,只需设置控件的相应属性值即可,大大缩短了开发的周期和难度[4]。另外,VB6.0对上位机配置要求低,编译后的程序体积比VB.NET小,而且执行效率高,对上位机硬件配置与操作系统要求不高,所以笔者采用VB6.0作为软件开发工具。SQLServer2005简单易操作,同为微软产品,能够很好地与VB6.0兼容,因此选择SQLServer2005作为数据库平台。

数据监测上位机具有串口通信、数据存储、网络拓扑动态显示、用户管理、阈值管理、监测数据曲线动态绘制等功能。下面,笔者利用MSComm控件和ADO2.0对象模型编写的串口通信程序、动态多叉树的数据结构与数据库的构建,以实现数据中心中的主要软件模块-通信监测模块的设计,主要包括串口通信、数据帧解析、数据库建立与连接。

1 串口通信设计

1.1 接口描述

当传感器网络的Zigbee网关节点不断地将网络节点中监测到的温度、烟雾等信息发送给上位机时,上位机的通信模块必须及时响应接收数据。数据监测上位机通信接口采用VB6.0中MSComm控件,利用串行端口传输和接收数据,为应用程序提供串行通信功能,具体包括2种处理通讯方式,一种是事件驱动通讯,利用OnComm捕获并处理通讯时间;另一种是通过检查CommEvent的值,来查询事件和错误[5]。设计中采用第1种方式,在用户界面设置好相应的控制参数,如波特率为38400bps、无校验位、8数据位、1位停止位等。

当传感器网络节点监测的的温度、烟雾等信息发送给上位机时,将触发监测程序中MSComm控件的OnComm事件,进而改变Com Event的值,程序根据Com Event的值执行相应的操作,如解析数据、发送数据、错误分析等,然后更新内存节点树中当前节点的实时数据、采集信息(如温度、烟雾等)存入数据库。

1.2 实现方法

MSComm控件可以设置以二进制或者以文本方式接收,若设置为二进制接受,控件会自动将其转变成十进制。在该系统中,数据帧的数据是十六进制的,设置以二进制方式进行接收,从接收缓存中获取到的是十进制的数据(见图1)。

对MSComm控件进行如下设置[6]:

图1 MSComm控件接收数据程序流图

在上述程序中,只要Zigbee网关节点有字符送到接收缓冲区,则将触发上位机接收事件。当串口接收到一个数据帧,MSComm控件会自动触发OnComm事件,使Comm Event的值变为com Ev Receive,表示接收到Rthreshold个字符。当Comm Event的值变为comEvSend,即表示在发送缓冲区中有比SThreshold数少的字符。根据Comm Event值的变化,便可以编写代码执行相应的操作。此外,当CommEvent的值变为comEvReceive时,执行hex Receive函数,该函数将调用数据解析函数,完成数据解析操作。

2 数据结构与数据解析

2.1 内存中节点多叉树的建立

通信监测模块接收数据后,为了便于以图形方式实时显示网络拓扑和节点监测信息,以及提高查询数据的运行速度,需要在内存中构建一个动态多叉树,用于存储节点最新的数据信息。节点数据结构图如图2所示。

在内存中建立一个关于节点的动态多叉树,节点的唯一标识是它的自身ID,根据数据帧中包含的父子关系可构建出一棵多叉树。首先定义一个名为treeNode的类,它的每一个实例都代表着一个节点,里面包含节点的属性(例如ID、温度、烟雾等)和方法(例如获取类中节点数据的get Data方法)。为了将节点间的父子关系表现出来,可在类treeNode中定义一个类型为treeNode的动态数组NodeChild(),用于存放子节点。如某节点ID为0000,子节点ID为0001,将子节点0001存放在节点0000的NodeChild()数组中,即可完成节点间的连接。当需要找某个节点时,从根节点开始查找,若根节点的孩子没有要找的节点,则查找根节点的孩子的孩子,直到遍历完所有节点。当某数据帧发送到上位机时,解析出来的原始数据分别放在相应的变量,假设原始的温度数据是3F4A,数据结构中温度变量名为Temperature,类型为String,则直接将3F4A转换为String类型存在Temperature中。

按上述方法构建的动态多叉树能够适应网络拓扑动态变化的应用场景,相比于定长的数组,其更为节省内存,不足之处是查询算法较复杂。

2.2 数据解析

通信监测模块接收到Zigbee网关节点发送来的一组数据(数据帧)后,需要对收到的数据进行协议解析,然后根据解析数据建立当前动态多叉树。由于通信中难以避免数据帧出错、截断、丢失等情况,故数据解析部分根据数据帧的格式制定了一套协议,丢弃异常数据帧。数据帧的部分格式如下:

图2 节点数据结构图

2个FF后的字节都是数据,其格式如下:数据类型(01,温度类型)+2个字节的数据(XX XX)。具体操作流程如图3所示。首先检验从串口进来的数据帧开头一个字节是否FF,若是,则开始解析。直到下一个FF,则节点ID部分解析结束,后面都是数据。继续读取下一个字节,若为01,则将后面紧跟的两个字节存进相应的温度变量,读取下一个字符;若该字节所表示的数据类型未定义则跳过该字节及后面紧跟的两个字节,继续读取下一个字符。该过程一直执行直到解析完整个数据帧。

由于数据帧是不定长的,而且没有结束字符,所以每收到一个数据帧程序便立即从缓存中读取并解析,以避免多个帧合并为一个数据帧导致解析错误。当出现多个数据帧并合情况时,则丢弃后继的帧。在帧解析完毕后,可以对解析出来的监测数据信息进行处理,将数据信息一份存进内存中节点多叉树,一份存进数据库,实现实时更新数据和记录当前信息。

以下是有关串口通信事件响应及数据解析的部分代码:

3 数据库的构建与连接

3.1 数据库关系

数据库关系图如图4所示。由于每个节点都有大量历史数据,所以每一个节点都创建一个表;USERS表用于保存监测系统的用户信息;Node Tran用于保存数据帧转发路径;Nodelist用于保存节点列表;Limit用于保存监测系统的阈值管理设置值;Node_XXXX为节点XXXX的历史数据表。除了用户表,所有数据都采用varchar类型。

图3 数据解析程序流程图

3.2 存储过程的创建

为了提高通信监测模块与数据库之间通信的效率,将一些常用且较为复杂的SQL语句存放在数据库中,使用时只需要调用存储过程,输入必要的参数即可完成相应的SQL语句操作,这样可以大大减少程序与数据库之间的通信量。

图4 数据库关系图

图5 VB与SQLSERVER连接程序流程图

创建的存储过程如下:

1)Create Table,其作用为创建节点表,传入参数为节点ID,参数类型为varchar。执行后创建一个名为“Node_ XXXX”的节点表(XXXX为节点的ID)。

2)N_tran,其作用为存储节点转发路径,传入参数为节点ID、转发路径,参数类型皆为varchar。执行后将转发路径存储在表Node Tran中。

3)SaveData,其作用为保存节点数据,传入参数为节点的数据,如温度、烟雾的数值,参数类型为varchar。执行后将节点的数据存储在表Node_XXXX中(XXXX为节点的ID)。

3.3 使用ADO 将VB6.0与SQL2005连接

ADO是为Microsoft最新和最强大的数据访问范例OLE DB而设计的,拥有一个易于使用的应用程序层接口。通过使用ADO 2.0对象模型中的Recordset和Connection对象实现两者连接和数据的存取。Connection对象包含关于某个数据提供程序的信息,如数据库用户、密码、数据库名等;Recordset对象包含某个查询返回的记录,可以创建一个Connection对象,在同一个连接上打开多个Recordset对象[8]。操作流程图如图5所示。

4 结语

由于实时性数据需要快速、频繁访问的应用,应在内存中建立一棵多叉树存储最新数据,而对于访问速度要求不高、数据量比较大的应用,则用数据库管理。基于Zigbee进行了数据监测上位机通信接口设计。这种设计方法既能满足实时性要求,又能增强系统的稳定性,因而具有可行性。

[1]雷纯,何小阳,苏生辉.基于ZigBee的多点温度采集系统设计与实现[J].自动化技术与应用,2011,29(6):43-46.

[2]殷明,汪立伟.基于ZigBee技术的通用无线通信模块设计[J].交通与计算机,2006,24(5):110-112.

[3]高峰,俞立,王涌,等.无线传感网络作物水分状况监测系统的上位机软件开发[J].农业工程学报,2010,26(5):175-181.

[4]黄天强.基于VB6.0的RS232串口通信研究与实现[J].科技信息,2010(31):67-68.

[5]高春艳,刘彬彬,王斌.Visual Basic开发技术大全[M].北京:人民邮电出版社,2007.

[6]高春艳,刘彬彬.Visual Basic控件参考大全[M].北京:人民邮电出版社,2006.

[编辑]李启栋

TN924.1

A

1673-1409(2014)25-0036-05

2014-05-01

中国石油天然气集团公司科技创新基金项目(2011D-5006-0605);湖北省教育厅重点项目(D20091204);湖北省国家级

大学生创新训练计划项目(201310489005)。

邹学玉(1965-),男,博士,教授,现主要从事信号检测与处理、无线传感器网络方面的教学与研究工作。

猜你喜欢
控件字节上位
No.8 字节跳动将推出独立出口电商APP
基于.net的用户定义验证控件的应用分析
No.10 “字节跳动手机”要来了?
关于.net控件数组的探讨
特斯拉 风云之老阿姨上位
简谈MC7字节码
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
以新思路促推现代农业上位
基于嵌入式MINIGUI控件子类化技术的深入研究与应用