摘要:介绍了一种可进行远程监测和控制的数据采集系统。多个测控节点组成ZigBee无线传输网络,利用GPRS模块连接因特网扩展传输范围,与基于LabVIEW的上位机程序进行TCP/IP协议通信,从而实现远程监控。下位机设计了数据帧和采集控制指令;协调器网关可对数据进行选择性接收和处理,并实现断线后自动连接;上位机完成对采集数据的解析、显示以及保存,并能发送控制指令。
关键词:ZigBee;GPRS;LabVIEW;TCP/IP协议
0 引言
ZigBee协议是一种基于IEEE 802.15.4标准的低功耗个域网协议,其主要特点是低复杂度、自组织、低功耗、低数据速率以及低成本,普遍应用于自动控制和测量领域,可以嵌入各种设备,是一种数据传输可靠性高的近距离无线组网通信技术。而GPRS模块则是通过手机终端连接因特网来实现数据的双向传输,它的协议规程体现了无线和网络相结合的特征。因此可以通过GPRS技术来拓展ZigBee测量控制网络的作用范围。目前GPRS的数据传输主要是基于TCP和UDP两种通信协议,其中TCP是面向连接的协议,提供IP环境下的数据可靠传输,适用于可靠性要求比较高的数据通信系统,而UDP不需要建立连接即可开始传输数据,通信效率较高,但可靠度不高,适用于一次只传输少量数据的场合LabVIEW作为一种图形化编程语言开发环境,为学术界、工业界和研究实验室所广泛接受,运用内嵌的TCP/IP网络通信协议组通信,可以直接调用TCP模块完成流程图编写,而无需过多考虑网络底层实现,使用该软件可方便完成上位机测量和控制程序的编制。
1 网络组建整体方案
系统网络组成如图1所示,首先由SHT11数字温湿度传感器和CC2530芯片的ADC通道组成传感器数据输入通道,输入的信息经CC2530芯片采集处理后打包无线发送到协调器节点,然后协调器节点利用串口2将数据发送给STC12C5A32S单片机,单片机将收到的数据进一步处理后,通过另一串口把有效数据传送至华为GTM-900C模块,最后GPRS模块利用Internet把最终数据发送至上位机,并同时监听上位机指令,一旦接收到指令将转发给协调器直至各采集控制节点,从而实现数据的双向传输。
2 下位机数据分析
协调器网关需要把测控节点无线传输过来的数据透明发送至上位机,有效的数据帧通过下位机编程为固定长度是20 B的数据,有些字节可变,有些字节是固定的。比如一个数据帧用十六进制表示为:FE 0F 46 87C6 E9 02 00 09 00 1A 21 00 00 48 9E 00 00 00 07。其中FE为每帧开始的字节;0F,02 00,09 00是固定的字节,表示数据包和有效数据位,46 87为接收标志;最后一个字节07是前面19个字节的异或运算值,C6 E9为传感器节点16位地址号,随着数据来自不同节点变化;1A为节点温度的整数部分,换算为十进制值为26 ℃,可变;21为节点10倍片上电压值,换算至十进制值为33 V,可变;0000为父节点地址;48为节点相对湿度值,转换至十进制值为72%,可变;9E为节点温度的小数部分,换算为十进制值的算法是(9×16+15)/256=0.62℃,可变;00 00 00为预留下来的3 B,用于其他传感器节点数据的传送。
协调器网关同时也接收上位机的命令数据并通过ZigBee网络发送至具体节点。命令数据为3 B,前2个字节为目标地址,第3个字节为采集控制命令。如设置80为停止采集指令,40为开始采集命令,01,02,03为采集周期选择命令。协调器地址是固定的十六进制数0x0000,其他传感器节点地址与之不同,因此当发送的前两个字节为0000时,可以此做为向全体传感器节点广播命令的判据。如果前两个字节是具体的单个节点地址,则只有相应节点接收到控制命令。
3 ZigBee协调器GPRS网关软件设计
ZigBee协调器GPRS网关软件设计流程如图2所示。其中等待GPRS注册成功是查看AT+CGREG?指令是否返回1或5,返回则表示GPRS模块上网注册成功;APN设置为CMNET;PPP拨号用AT%ETCPIP=\”\”,\”\””指令;域名解析指令AT%DNSR=”xxxx.3322.org”将返回与此域名绑定的IP;再用连接服务器指令AT%IPOPEN=“TCP”,xxx.xxx.xxx,1234连接上位机IP及监听端口。
数据传输程序的设计是重点,数据传输包括将采集到的数据透明上传至TCP服务器以及上位机指令的检测和通信是否掉线的检测。串口2接收到FEOF帧头后再执行AT指令将有效测量数据透明上传,收到心跳帧636F 6F6E后也透明上传,收到其他字符则不处理。当串口1接收缓存中有%IPCLOSE字符串时表示通信断开,此时则在下位机程序中重新执行连接服务器程序直至再次连接成功,保证数据通信可靠。
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服务器界面友好而简洁,能够分辨出有效数据和心跳帧,并可靠地解析出数据帧的信息,显示温度以及湿度的变化趋势,同时将历史数据写入电子表格,方便保存和查看。本系统可移植性强,应用范围广,可用与粮情监测以及温室环境的监测,具有较大的实际参考价值。