本站小编为你精心准备了上位机接口设计论文参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
1串口通信设计
1.1接口描述当传感器网络的Zigbee网关节点不断地将网络节点中监测到的温度、烟雾等信息发送给上位机时,上位机的通信模块必须及时响应接收数据。数据监测上位机通信接口采用VB6.0中MSComm控件,利用串行端口传输和接收数据,为应用程序提供串行通信功能,具体包括2种处理通讯方式,一种是事件驱动通讯,利用OnComm捕获并处理通讯时间;另一种是通过检查CommEvent的值,来查询事件和错误[5]。设计中采用第1种方式,在用户界面设置好相应的控制参数,如波特率为38400bps、无校验位、8数据位、1位停止位等。当传感器网络节点监测的的温度、烟雾等信息发送给上位机时,将触发监测程序中MSComm控件的OnComm事件,进而改变ComEvent的值,程序根据ComEvent的值执行相应的操作,如解析数据、发送数据、错误分析等,然后更新内存节点树中当前节点的实时数据、采集信息(如温度、烟雾等)存入数据库。
1.2实现方法MSComm控件可以设置以二进制或者以文本方式接收,若设置为二进制接受,控件会自动将其转变成十进制。在该系统中,数据帧的数据是十六进制的,设置以二进制方式进行接收,从接收缓存中获取到的是十进制的数据。
2数据结构与数据解析
2.1内存中节点多叉树的建立图2节点数据结构图通信监测模块接收数据后,为了便于以图形方式实时显示网络拓扑和节点监测信息,以及提高查询数据的运行速度,需要在内存中构建一个动态多叉树,用于存储节点最新的数据信息。节点数据结构图如图2所示。在内存中建立一个关于节点的动态多叉树,节点的唯一标识是它的自身ID,根据数据帧中包含的父子关系可构建出一棵多叉树。首先定义一个名为treeNode的类,它的每一个实例都代表着一个节点,里面包含节点的属性(例如ID、温度、烟雾等)和方法(例如获取类中节点数据的getData方法)。为了将节点间的父子关系表现出来,可在类treeNode中定义一个类型为treeNode的动态数组NodeChild(),用于存放子节点。如某节点ID为0000,子节点ID为0001,将子节点0001存放在节点0000的NodeChild()数组中,即可完成节点间的连接。当需要找某个节点时,从根节点开始查找,若根节点的孩子没有要找的节点,则查找根节点的孩子的孩子,直到遍历完所有节点。当某数据帧发送到上位机时,解析出来的原始数据分别放在相应的变量,假设原始的温度数据是3F4A,数据结构中温度变量名为Temperature,类型为String,则直接将3F4A转换为String类型存在Temperature中。按上述方法构建的动态多叉树能够适应网络拓扑动态变化的应用场景,相比于定长的数组,其更为节省内存,不足之处是查询算法较复杂。
2.2数据解析通信监测模块接收到Zigbee网关节点发送来的一组数据(数据帧)后,需要对收到的数据进行协议解析,然后根据解析数据建立当前动态多叉树。由于通信中难以避免数据帧出错、截断、丢失等情况,故数据解析部分根据数据帧的格式制定了一套协议,丢弃异常数据帧。数据帧的部分格式如下:FFXXXXXXXXFF01XXXX02XXXX2FF之间,开头2个字节为节点ID,紧跟的2个字节节点的父ID01代表温度类型,后面2个字节是温度数值02代表烟雾类型,后面2个字节是烟雾值,依次类推…。2个FF后的字节都是数据,其格式如下:数据类型(01,温度类型)+2个字节的数据(XXXX)。具体操作流程如图3所示。首先检验从串口进来的数据帧开头一个字节是否FF,若是,则开始解析。直到下一个FF,则节点ID部分解析结束,后面都是数据。继续读取下一个字节,若为01,则将后面紧跟的两个字节存进相应的温度变量,读取下一个字符;若该字节所表示的数据类型未定义则跳过该字节及后面紧跟的两个字节,继续读取下一个字符。该过程一直执行直到解析完整个数据帧。由于数据帧是不定长的,而且没有结束字符,所以每收到一个数据帧程序便立即从缓存中读取并解析,以避免多个帧合并为一个数据帧导致解析错误。当出现多个数据帧并合情况时,则丢弃后继的帧。在帧解析完毕后,可以对解析出来的监测数据信息进行处理,将数据信息一份存进内存中节点多叉树,一份存进数据库,实现实时更新数据和记录当前信息。以下是有关串口通信事件响应及数据解析的部分代码:
3数据库的构建与连接
3.1数据库关系数据库关系图如图4所示。由于每个节点都有大量历史数据,所以每一个节点都创建一个表;USERS表用于保存监测系统的用户信息;NodeTran用于保存数据帧转发路径;Nodelist用于保存节点列表;Limit用于保存监测系统的阈值管理设置值;Node_XXXX为节点XXXX的历史数据表。除了用户表,所有数据都采用varchar类型。
3.2存储过程的创建为了提高通信监测模块与数据库之间通信的效率,将一些常用且较为复杂的SQL语句存放在数据库中,使用时只需要调用存储过程,输入必要的参数即可完成相应的SQL语句操作,这样可以大大减少程序与数据库之间的通信量。
3.3使用ADO将VB6.0与SQL2005连接ADO是为Microsoft最新和最强大的数据访问范例OLEDB而设计的,拥有一个易于使用的应用程序层接口。通过使用ADO2.0对象模型中的Recordset和Connection对象实现两者连接和数据的存取。Connection对象包含关于某个数据提供程序的信息,如数据库用户、密码、数据库名等;Recordset对象包含某个查询返回的记录,可以创建一个Connection对象,在同一个连接上打开多个Recordset对象[8]。操作流程图如图5所示。
4结语
由于实时性数据需要快速、频繁访问的应用,应在内存中建立一棵多叉树存储最新数据,而对于访问速度要求不高、数据量比较大的应用,则用数据库管理。基于Zigbee进行了数据监测上位机通信接口设计。这种设计方法既能满足实时性要求,又能增强系统的稳定性,因而具有可行性。
作者:邹学玉吴君彦单位:长江大学电子信息学院