基于GPRS的ZigBee协调器网关设计通信
4 上位机程序设计
整个上位机软件设计流程如图3所示,即编写一个TCP服务器程序。采用LabVIEW通信工具中TCPListen来侦听客户端的连接请求,建立连接后,利用TCP Read读取传输的数据,工作模式设置为standard,即等待直至读取所有“读取的字节”中指定的字节或“超时毫秒”用完,返回目前已读取的字节,如字节数少于请求的字节数,则返回部分字节并报告超时错误。由于数据帧通过下位机编程为固定长度是20 B的数据,心跳帧为4 B的数据,因此在配置TCP Read函数时,要将“读取的字节”设置为20,“超时毫秒”设置为0。这样既可以侦听到心跳帧,又不至于因心跳帧的4 B打乱数据帧的20 B而导致数据错误。程序控制部分可向下位机发送控制指令,实现对单个或多个节点数据采集周期以及开始结束的控制,以适应不同的工作场合。主要原理是利用TCP Wtite函数向已建立的连接发送指令,程序中两次利用TCP Write函数,第一次写入指令的长度,第二次写入指令的内容。
数据处理程序如图4所示。在数据处理的过程中,只需要处理数据帧,心跳帧是不用进行处理的,因此有必要对心跳帧进行剔除。由于下位机编程时以十六进制FE作为每个数据帧开始的字节,而心跳帧则为十六进制636F 6F6E,因此在服务器程序进行数据处理前可先检测数据的帧头,这样即可将数据帧和心跳帧分别开来。具体做法便是利用String Subset函数截取每帧数据的第一个字节,然后与十六进制FE比较,再运用Case Structure的方式组织,如果相等,则进行处理,不相等的情况则不采取任何动作,只需保持之前的数据即可。这样不仅可以避免错误接收结果,还可提高程序的运行效率。
数据处理部分首先利用String To Byte Array函数将接收的字符串保存为字节数组,然后利用Search1D Array函数搜索到第三个十六进制字节46,进一步增强数据读取的可靠性,使用Index Array函数将数组中相应的子节点地址、温度、相对湿度、电压值字节数据提取出来,并利用数值运算函数及相应的字符串处理函数将需要的参数以十进制字符串形式送到Chart控件中显示波形。不同节点的信息需要显示在不同的Chart控件中,此时的实现思路就是判断不同节点的地址,然后利用Case Structure进入不同的事件结构。在历史数据的存储方面主要是通过Write To Spreadsheet File子VI把数据写入电子表格,以此来实现历史数据的方便查看。
整个系统经过调试后运行正常,下位机与上位机连接良好,数据传输通畅,运行效果如图5所示。
5 结语
下位机设计的网关能够选择性透明发送有效数据和心跳帧字节,不仅提高了发送效率,而且保障了上位机接收数据的可靠性,在服务器与GPRS模块通信中断后,会立即重新申请连接直至再次连接成功。上位机程序设计的TCP服务器界面友好而简洁,能够分辨出有效数据和心跳帧,并可靠地解析出数据帧的信息,显示温度以及湿度的变化趋势,同时将历史数据写入电子表格,方便保存和查看。本系统可移植性强,应用范围广,可用与粮情监测以及温室环境的监测,具有较大的实际参考价值。
ZigBee GPRS LabVIEW TCP/IP协议 相关文章:
- 基于Zigbee技术家用无线网络的构架(12-14)
- 基于精简协议栈的ZigBee网络节点研究(07-17)
- ZigBee无线传感器网络的研究与实验(02-08)
- 解析ZigBee堆栈架构(03-26)
- 组建SMAC协议构架的ZigBee星形网络(06-11)
- ZigBee基本技术问答(12-07)