引言
本文设计了一套合理的串口集线器的解决方案,解决了PC机串口资源不足,以及ZigBee通信无法验证的问题。对于本系统的通信方式,需要解决一个关键问题:一台PC机的串口数是有限的,如果让PC机与几十个节点进行通信,一个串口对应一个MCU根本不现实。同时,正常情况下,RS232的传输距离为30 m,而物联网一般都覆盖几百米甚至几公里,故一般的RS232串口传输无法达到系统需求。同时需要考虑系统实时性的要求,对建立较为完善的实时系统具有重要的意义。[15]
1 测试系统设计的基本思路
辅助测试系统是一套由有线测试底座、无线传感器节点以及PC机组成的系统。该系统可以组成完整的无线传感网,并且通过有线数据对无线传感网进行系统可靠性验证。系统硬件主要包括:测试底座、集线设备(SCIHUB)、路由设备(0号节点)以及服务器PC接收终端,如图1所示。
图1 测试系统结构图
从图中可以看出服务器(PC)接收所有节点从串口发送过来的数据,接收成功后PC将数据存放到数据库。同时,如果服务器可以提供外部因特网访问,则可以通过网页进行上层应用的扩充显示,供用户操作。
被测节点和测试底座通过两排单排针连接,节点中包含射频模块,通过该射频模块上传数据到路由节点;同时该节点通过接口电路将数据复制一份发给测试底座,底座通过硬件电路将电平转换后通过有线传输上传到PC机。最后,PC服务器端根据路由节点上传的无线数据和节点通过串口上传的数据进行校对,从而对被测的无线传感网进行可靠性的评估。
2 测试系统的硬件设计
2.1 有线通信硬件——SCIHUB集线器设计
本系统设计的HUB集线将所有节点的RS232信号都集连到一根总线上,使得所有节点可以与PC机进行一对一的通信,结构图如图2所示。
图2 集线器主要结构图
为了稳定信号,使信号能够传输得更远,本集线器将主机端第二路的R2IN作为发送端,第一路的T1OUT作为接收端,而从机端将第二路的R1IN作为发送端,第二路的T2OUT作为接收端。将MAX3232的T2IN和R2OUT、R1OUT和T1IN导通,使得输入与输出都为RS232电平,中间导通的为TTL电平,如图2所示。
集线器采用5 V供电,这样衰减后的RS232电平经过MAX3232时,电平再一次被提升到标准的RS232电平,故每经过一个SCIHUB集线器,即可以相应增加30 m的传输距离。理论上只要接上这种集线器就可以无限地级联下去,并且每个集线器可以保证30 m的有效传输距离。同时,该集线器可以将多个串口接在一个计算机接口上使用,不需要反复插拔每一个串口。为了降低成本,集线器使用USB方口作为串行连接口,其中两路接电源和地,另外两路分别接串口的发送信号线和接收信号线。对于每一个集线设备,都有1个PC机通信接口(主口)、10个节点通信接口(从口)。
本系统采用了3个集线设备,一共有33个口,减去1个PC机的口还有两对级联口,故最多可以承受28个节点挂载。这样完全可以满足物联网项目中多节点的要求,如果还需要节点,可以继续级联串口集线器。从图2可以看出,该HUB将设备的串行数据都发送到一个总线上,由主口主动收发数据,当主口发送数据时,所有节点都能接收到该数据,但是只有当节点在数据中检测到相应的节点号的信息,并且与自身节点号相匹配的时候,节点才对该数据进行接收。同时,在节点向PC机发送数据时,考虑到节点向总线发送数据,其他节点也会接收到的情况,在每一个节点上添加了一个二极管,这样只将节点的RS232电平的正向截取发送到接收总线上,这样其他节点就接收不到数据,保证了数据的完整性。为了避免数据的冲撞,该系统采用了轮询的方式进行检测,即每次对一个节点发送检测命令。
2.2 无线通信硬件——ZigBee节点
该测试系统通过软件方式把节点分为路由节点和一般节点,其中路由节点设定为0号节点,等同于一个收集无线数据的路由器。该节点将所有节点的无线数据收集起来并且发送出去,并且该节点具备串口收发功能,能有效地与PC机之间进行串行通信。一般节点就是普通的传感网节点,负责A/D数据采集以及无线数据收发,并通过接收不同的命令,执行不同的动作。
PC机是系统的主控机器,为实现异步通信,在PC机里设置了通用异步接收器和发送器,PC机中的串口电平为TTL电平,而本系统的串行口的电平为RS232电平。因此,PC机发送出去的数据要经USB转串口将TTL电平转换器转化为RS232电平。同时,ZigBee节点作为从机,采用RS232电平进行接收。节点接收到RS232电平后通过MAX3232转化为芯片内部可以识别的TTL电平。
本系统的被测节点为ZigBee节点,针对ZigBee的串口,通过对程序改进,将ZigBee发送的无线数据同时发送一份给串口,之后在PHY层和MAC层进行组帧并发送给串口HUB。最终由HUB将数据发送给PC机。PC机通过解析数据,获得相应的数据帧,并且通过PC机C#软件进行数据接收处理。
每个被测传感节点包括测试底座和可插拔的被测节点(包含无线通信模块)两部分。测试底座内部包含传感器模块、串口发送模块和调试模块,如图3所示。
图3 集线器主要结构图
图中被测节点为ZigBee核心板,主要集成了MC9S08GB60和MC13192芯片[8]。该芯片由测试底座对其进行供电,同时该底座通过一个贴片的MAX3232将MC13211输出的TTL电平转化为RS232电平。底座还包括了A/D传感器模块以及调试模块。
3 测试系统设计的基本思路
3.1 系统实时性分析与测试软件编程方式的选择
在整个系统设计中首先需要考虑系统通信方式。节点与服务器之间的通信方式有节点主动上传、PC主动查询与节点被动操作、节点主动操作并等待PC查询三种方式[9],详细介绍略——编者注。
测试系统分别采用这三种方式进行试验,比较试验结果后发现,采用第三种方式实时性高,数据获取准确。选择好了通信方式后,就可以来进行软件设计软件程序。系统软件主要分为节点应用程序和PC方接收程序。节点应用程序采用飞思卡尔公司提供的CodeWarrior 6.2编译环境进行开发。PC方使用C#语言编写了一个基于串口通信的可视化界面。
3.2 测试系统的节点程序设计
节点主要功能有接收串口数据、响应命令、无线方式返回数据、有线方式返回数据。在设计过程中的关键在于串口数据接收及处理,这也是开发底端程序的难点之一。在节点应用程序中,需要考虑到只要串口总线上有数据,所有节点都会收到数据,每个节点在接收到其他数据帧的时候,需要及时地对数据进行检测,检测该数据是否为自己的数据,是自己的数据则处理,如果不是自己的数据,则进行抛弃,该中断服务例程流程图如图4所示。测试系统判断字符间的时间间隔是否超过规定的长度,从而区分出两帧数据。当MCU发现两个字符之间的间隔超过一定的时间的时候(一般设定在10~20 ms左右),则判定两个字符串属于两帧数据。在实际应用中,PC方采用轮询的方式,所以相邻数据之间必定有一定间隔。
图4 串口接收流程图
在本系统中,引入了简单的物理层协议。物理层通过操作底层硬件为应用层提供服务接口。采用在串口底端创建物理层的方式,可以提高串口的利用率和可复用性。本文采用了射频片上系统(SoC)MC13211设计了一个较通用的的ZigBee射频模块,分析和实现了该测试系统的监控节点的功能。初始化完成以后,对数据进行封装和发送。下面以一条数据的接收和发送的完整过程来描述对数据的封装以及发送。如图5所示,图中设定MCU均是以字节数组的形式来保存待发送或接收数据帧的。
图5 数据协议的封装
从图中可以看出数据的具体流向。在原始数据的基础上,添加了链路层协议,该协议的主要目的是保护原始数据不丢失,该层协议添加了回避字符。物理层协议主要为了在串行总线上对具体节点进行识别,并且添加双帧头对数据的开头进行同步。该协议帧头包括数据帧头、协议长度、串口号和帧尾。增加了这样的协议之后,保证了数据的完整性,并且方便了PC方数据的接收。
3.3 测试系统的PC机方程序设计
PC方的程序主要流程如下:当PC机开始启动检测时,PC机首先向串口发送每一个节点的测试存活信息,该帧主要用来判断该节点是否工作正常,如果节点工作正常,则返回一条响应指令,否则不返回任何数据。这样做的目的是为了让后面的测试工作只针对当前存活的节点,而减少了对不存在的节点的检测。在检测到存活的节点后延迟一段时间进行数据检测,数据的检测采用轮询的方式对每一个节点发送测试命令,同时等待该节点作出反应,返回数据帧。此时如果收到数据则置一个标志位通知查询节点的进程可以继续查询下一个节点,如果发送测试命令没有返回,则代表该帧发送失败,继续发送该帧。为了提高系统的效率,我们认定一个节点如果在20 ms内没有做出相应,该条命令则废除,继续查询下一个节点。
数据从串口发过来后,PC方通过编写好的C#程序以串口中断的方式执行中断服务例程,该的主要功能是检测出该帧数据中的节点的详细信息,同时将数据存入SQL[10]。
同节点应用程序类似,PC方应用程序也面临着串口数据接收效率低的问题,采用的解决方法类似于节点应用程序,数据帧中包含该帧长度的信息,用于检测该帧是否完整。所不同的是,由于PC机需要对所有节点的数据进行处理,所以PC机对数据的解析越快越好。本系统在PC方采用FIFO队列的形式,接收进程一旦解析出该数据为完整的一帧则将该数据放入队列中,由另外的进程对其进行解析,采用了生产者消费者模型。在使用的时候需要采用互斥信号量对队列进行互斥访问。
上述的节点程序和PC方接收程序进行交互,PC机通过侦听程序可以完整地将节点的测试数据存储到SQL数据库中供上层应用。
4 测试实例及结果分析
本系统针对水质检测系统所使用的节点,将水质检测的无线节点作为被测对象。其中水质监测[11]系统主要由应用服务器、管理终端PC、嵌入式终端节点和管理者4部分组成,具体部署场景如图6所示。其中本监测系统主要取节点和管理终端PC,舍去了不必要的网络层,在数据上传互联网之前进行辅助测试。
图6 现场实景图
对该系统数据可靠性测试需要一个C#制作的侦听程序相配合。该程序采用中断方式来处理串口发送过来的数据。该程序通过逐一发送测试命令对节点进行测试。同时该程序对接收回来的无线数据和有线数据进行数据比对。通过此方式进行数据校对。
具体部署如下:27个传感节点和一个路由节点,分散摆放,其中每个传感节点每隔一段时间对底端的A/D的值进行采集,并等待上位机查询。当上位机通过串口发送测试命令时,节点做出回应,返回一条无线数据和一条有线数据。
有线数据即通过上述物理层协议进行封装,通过串口发送给上位机,再通过上位机软件进行解析;无线数据通过无线发送给路由节点,路由节点通过封装物理层协议发送给PC机。并且该系统确保串口收发的数据是稳定的,因为串口通过线传输,数据基本不会丢失。而PC方软件将所有接收到的数据放入SQL数据库中,以方便进行数据的统计和分析,同时,该软件还针对几个节点进行采样性分析。实验测试数据略——编者注。
该系统能够准确测试传感网络通信的可靠性,并且很好地反映无线传感网的通信质量。
结语
本文提出新型串口级联HUB总线通信与星型WSN网络对比的实践方案,能够有效地检测WSN无线通信的丢包率,能够最大程度地节省硬件成本。本系统采用的通信方式,减少了数据序列识别的附加数据,一定程度上也避免了无效数据的产生,提供系统的稳定性。
本文所设计的无线传输检测系统,在与中科大合作的水质检测系统中的辅助测试系统进行了测试和验证。在测试过程中,系统运行稳定,测试结果符合实际情况,完全达到可靠性检测系统的要求。