1. 引言
无线传感器网络(WSN, Wireless Sensor Network)是许多传感器通过无线方式形成的一个多跳自组织网络。WSN在国际上引起了很高的关注度,成为众多学者研究的热点话题。WSN广泛应用于军事、智能交通、环境监控、医疗卫生等多个领域[1] [2] 。其目的是协作地感知、采集和处理网络覆盖区域中被感知对象的信息,并发送给观察者。传感器、感知对象和观察者构成了无线传感器网络的三个要素。数据收集是传感器节点的主要功能。
无线抄表系统是无线传感器网络的具体应用。传统的抄表大部分依赖于手工,这种抄表方式既费时又费力,抄表结果的准确性和及时性也得不到保证。这已经不适应社会的发展需求了。这样也对抄表提出了更高的要求,为此提出了新的抄表方案——无线抄表[3] 。小区抄表基本有两种数据传输方式,有线数据传输和无线数据传输。无线抄表成为主流的抄表方式,数据收集协议是无线传感器网络中用于收集传感器节点数据的协议。
无线传感器网络最重要的功能就是完成传感器节点的数据收集,即把网络中所有节点的数据通过一定的方式收集到基站,然后进行下一步的数据分析。本文所关注的就是数据收集协议。因为传感器节点处理能力和存储能力比较弱,使用电池供电等特点,所以能量的使用效率是数据收集协议比较关注的方面,即节点能量剩余情况。目前企业实际应用的WM2RP [4] [5] 协议是链状拓扑结构的数据收集协议。该协议设计简单,实用价值高,目前全国的很多居民区都在使用WM2RP协议作为水表、电表、燃气表的数据收集协议。
对数据收集协议的仿真工具有很多,常见的有NS2、OPNET、MATLAB和UPPAAL [4] 等。本文针对WM2RP协议分别使用MATLAB和UPPAAL对表节点每轮抄写过程中能量剩余情况进行仿真。MATLAB是通过编程以图表的形式显示节点剩余能量,UPPAAL是通过建模以表节点间交互的形式来显示剩余能量。
2. 相关工作分析
2.1. 无线传感器网络及数据收集协议
2.1.1. 无线传感器网络
无线传感器网络和其他的网络有着很大的不同。文献[4] 指出,传感器网络和Adhoc网络相比,有如下特点:a) 传感器网络的节点数量比Adhoc网络的节点数量要大几个数量级。b) 传感器节点分布很密集。c) 传感器节点容易发生故障。d) 传感器节点主要使用广播的交流技术,而Adhoc网络是点对点的交流方式。e) 传感器节点的电量、计算能力和存储性能都是有限的。f) 传感器节点不需要有全局的ID号。
2.1.2. WSN路由协议
到目前为止,WSN的路由协议仍缺乏一个完整和清晰的分类。从具体应用的角度出发,根据不同应用对传感器网络各种特性的敏感程度不同,将路由协议分为四种类型,分别是:能量感知路由协议、基于查询的路由协议、地理位置路由协议和可靠的路由协议。
2.1.3. 数据收集协议
数据收集协议是WSN路由协议的一种。PEADG协议是典型的数据收集协议。PEADG协议[6] -[8] 通过计算最小生成树的个数,采用多棵树的拓扑结构,考虑了能耗消耗问题,解决了越靠近基站的节点能量越先消耗完毕的问题,延长了网络的生存时间。但是PEADG协议不支持单独抄写某一个表节点数据,实际部署没有得到证实,本身有很大的局限性。
2.2. 协议仿真
协议仿真是指在计算机上建立一个虚拟的网络平台来实现真实网络环境的模拟。技术人员在这个平台上不仅能对网络设备、网络协议等进行设计研究,还能对网络的性能进行分析和评价[9] 。几种常用的网络仿真软件有MATLAB [10] 、UPPAAL、NS-2 [11] 、GlomoSim [12] 、OPNET [13] 等,它们为通信协议的研究提供了与真实网络相同的环境,还可以方便和直观的分析协议。
MATLAB由是一个很强大的工具体。MALAB具有很多功能,其中仿真功能是其非常重要的一个方面。MATLAB提供了方便用户使用的一些函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。MATLAB有着强大的功能和广泛的应用领域。模型检查器UPPAAL验证MCF路由协议,形式化证明了协议具有的一些活性,如:协议可以找到能耗最小的路径。
3. WM2RP协议
3.1. 协议的使用场景
WSN可以作为抄表系统的底层通信网络,这样的抄表系统可以完成的功能有:实时或周期性收集表数据,收集类型可以分为单表数据收集、部分表数据收集和所有表数据收集;远程控制,管理公司可以远程控制用户家中的表,如远程关闭欠费用户家中的表、远程诊断和排除表的故障等。因此WSN在抄表系统中的应用提高了抄表效率、准确性和实时性,节约了人力资源成本,减小了劳动强度 [8] 。
WM2RP协议对PEGASIS协议进行了改进,把小区节点组织成链状,每条链最长为35个节点,一个小区中会有多条链,每条链单独管理,这样可以弥补传感器节点资源不足的缺点。每个节点代表一个燃气表,燃气表中具有监测用户使用燃气情况的传感器。
图1中有四类节点Server,Concentrator,Repeater,Meter四类节点,Server服务器部署在厂家,并由厂家维护,它与Concentrator的通信不属于WSN,因此Server与Concentrator的通信不在本文研究范围内,不再赘述。Concentrator是收集小区内各个用户的数据,并将数据通过GPS发送给Server,并且每个小区只有一个Concentrator,它的能量供应是持续的,通信范围会覆盖整个小区。Meter是用户使用监控燃气使用的燃气表,能量有限,通信范围有限,并且障碍物对它的影响也很大,因此它优先被部署在靠近窗户的地方。因此在设计协议的时候,Meter优先跟上下楼的Meter通信。由于Meter的通信范围有限,当Concentrator的位置与Meter的距离超过Meter通信范围时,就需要部署Repeater来中转。Repeater与Meter相同,只是在网络中的职责不同,它不检测用户的燃气使用情况,只承担路由的责任。Repeater的部署位置不固定,需要与小区住户沟通。
Server通过GPS发送命令给Concentrator,Concentrator收到命令后将命令转发给传感器节点,传感器节点根据协议链将数据逐级传送,在协议链中最后的叶子节点将响应命令的数据向上逐级发送,最后发送到Concentrator,Concentrator通过GPS发送到Server。具体的收集过程下面会详细介绍。
3.2. WM2RP协议数据收集过程
在数据收集的时候,工程师在Server选择要收集数据的路径,通过GPS将命令发送到基站V,命令中的路由信息为V|A|B|C|D|E|F|G|H|I|J,信息帧中关于路由和数据相关字段见表1。表中字段DATA用来填充Server需要的数据。在抄表系统中,会分为多个小区,每个小区具有唯一的标识,小区标识就是小区的ID。动态路由是在WSN存储当前节点MAC地址。外置路由级数和表路由级数表示在这个路径当中具有多少个中继器和表节点。N级路由表表示所有节点包括中继器和表节点的地址。
基站首先向A发送命令,由于在无线网络中发送信息是广播的,其他节点也会收到命令。其他节点在收到命令后会检查命令信息中的动态路由并根据路由表中自己的序号判断是否是发送给自己的命令,不是就抛弃命令。A收到命令后,重新设置动态路由,接着选择自己的下级节点B。当命令传到J时,节点J检查自己在路由表中是最后一级,因此就会将数据向上级转发。这是正常的数据收集过程,该协议还考虑了异常的情况,以确保把正常的节点的数据都收集上来。

Figure 1. The architecture of automatic meters reading
图1. 无线抄表系统体系结构

Table 1. The fields of WM2RP protocol
表1. WM2RP协议字段
在异常的情况下,基站节点向A发送命令,如果在3秒内没有收到A的ack,就会再次向A发送命令,如果基站节点接收ack依然失败,三次后就会基站就会设置节点A在路由表的标识设置为AAAA,代表此节点失效,并接着就会向B节点发送命令。在极端情况下,基站向B节点发送命令失败,并且向
C节点发送命令依然失败,这时候基站就会自组帧向Server或者上级节点发送。
每个节点包括基站在内成功发送命令后,等待time,等待时间模型为:time = 节点的级数 * 10 + 20秒。节点的级数是逆向的,例如有N个节点的路径,基站的级数是N,剩下的节点依次是N-1,N-2,...,1,0。在time内没有收到数据,节点就会自组帧向上级发送数据,收到数据后,节点填充自己的数据后发送应答。
3.3. 小结
WM2RP协议应用在燃气抄表系统中,简单易操作,并且具有很好的可靠性,在抄表系统中发挥了重要的作用。WM2RP协议也有很多不足,WM2RP协议没有形式化模型,只是工程师根据经验的实现,在出现问题的时候需要反复测试。因此需要对协议建立形式化模型,并通过模型检查的方法证明协议的设计正确性。
4. WM2RP协议仿真
4.1. 仿真准备
为了方便观察和比较,本次仿真选取了12个表节点的抄写过程(11个中间节点和一个叶子节点),节点的能量初始值为1焦耳(J)。基站发送数据收集命令后,通过中间节点的数据转发使得网络中的所有节点数据可以收集到基站。
无线通信的能耗计算公式为[5] :
(1)
(2)
说明:公式(1)和公式(2)是分别对表节点发送数据和接收数据时消耗的能量进行计算的公式。其中,ETX是表节点发送数据时的能耗,ERX是表节点接收数据时的能耗,Eelec是表节点处理单个比特数据时的能耗,k是需要处理的比特数,Eamp是表节点传输单个比特时无线功率放大器的能耗,d是两个可直接通讯节点间容许的最大距离。
4.2. WM2RP协议的MATLAB仿真
MATLAB的图形可以对12个节点的每个节点在每轮抄写后剩余能量进行显示。
主要函数有:
1) InitWSN():对小区中的节点进行初始化,包括对所有的节点进行编号,赋予能量初值,对节点的位置给予X、Y坐标等。
2) TransmitData():数据收集命令从基站到叶子节点的转发过程。
3) DataGathering(BS):叶子节点(N级路由表中最后的节点)收到基站的数据收集命令后,重新组建回传数据在帧,并把自己的数据加在帧中,按照N级路由表的逆序,将数据发送给基站。
从图2中可以很清晰的看出,节点1即与基站相离最近的表节点是能量消耗最快的节点。最终因为节点1能量消耗完毕而导致无线传感器网络中抄表过程结束,将不能再进行抄写表节点数据的功能。
MATLAB的曲线图可以清晰明了的展示出每个节点的能量消耗随着数据收集轮数的增加而逐渐增加的情况,最终因某个节点的能量消耗殆尽(路由表中位于最前面的表编号)导致整个网络的数据收集无法继续。
4.3. WM2RP协议的UPPAAL仿真
4.3.1. WM2RP协议的UPPAAL模型
WM2RP协议的UPPAAL模型建立在其时间自动机的基础上,根据转换关系得到。UPPAAL模型分为基站节点、中间节点和叶子节点和全局声明(全局变量和全局函数)。下面详细介绍WM2RP协议的中间节点的UPPAAL模型 [4] 。
中间节点的UPPAAL模型通过管道(chan)与相邻节点(包括基站节点和叶子节点)同步。中间节点的位置集包含基站节点和叶子节点的位置集,因此在这一节将会详细介绍各个位置,在其他节将不再介绍。图3是中间节点UPPAAL模型。下面首先介绍各个位置:
1) 等待接收命令位置S0:这是节点的初始位置,在Uppaal中,初始位置是双圆。在此位置可以停留任意时间,send[n]?被触发就会跳转到位置S2。
2) 向父节点发送收到命令确认位置S2:位置S2是一个紧急位置,在此位置没有延迟,中间节点立即向父节点pNode[n]发送收到命令信号的ACK,然后跳转到位置S3。
3) 向子节点发送命令位置S3:中间节点在S3位置延迟SCT时间,然后检查当前节点的子节点nNode[n]是否有效,节点有效就会向子节点发送命令,并跳转到位置S4。如果子节点无效就跳转到位置S8。

Figure 2. The MATLAB simulation results of WM2RP protocol
图2. WM2RP协议的MATLAB仿真结果

Figure 3. The UPPAAL model of intermediate nodes
图3. 中间节点的UPPAAL模型
4) 等待子节点发送收到命令确认位置S4:中间节点等待接收子节点发送的ACK,并且在位置S4等待WRT时间。在WRT时间内,中间节点收到ACK后,跳转到位置S5;如果没有收到ACK,中间节点跳转到位置S3。在从位置S4跳转到S3位置时根据超时次数是否更新子节点nNode[n]。如果超时次数为3次,则对nNode[n]加1,即链中当前节点的下一个节点,否则就单纯增加超时次数。
5) 等待接收数据位置S5:中间节点在位置S5等待WTime(n)时间。在WTime(n)时间内,中间节点收到消息就跳转到位置S7,没有收到数据就跳转到位置S8。
6) 向子节点nDNode[n]发送ACK位置 S7:节点nDNode[n]是给节点n发送数据的源节点。位置S7是一个紧急位置,在此位置没有延迟,中间节点会立即发送ack,并跳转到位置S8。
7) 发送数据位置S8:中间节点首先检查父节点是否在通信的范围内,在满足的情况下,向父节点发送数据,并跳转到位置S9。如果父节点无效中间节点就会跳转到位置S12。
8) 等待接收父节点发送收到数据的确认位置S9:中间节点在位置S9等待WRT时间,如果在WRT时间内,中间节点收到ACK就进入位置S12,没有收到ACK,就跳转到位置S8,增加超时次数。如果超时次数为3,表明当前节点异常,就会更新自己的父节点,更新方式为设置自己的父节点为父节点的父节点。
9) 节点n的收集数据结束位置S12:节点n跳转到位置S12时,表明在整个数据收集过程中,节点n完成自己担负的任务。
4.3.2. WM2RP协议数据收集过程
在中间节点的能耗模型的位置S1,S2,S3,S4,S5,S7,S8,S9,S10,S11,S12检查能量是否足以支持交互行为,这些检查放在SX13G(n)和SXYG(n)函数中,如果不支持就会跳转到位置S13,交互行为消耗的能量在SXYU(n)函数中,其中X={1, 2, 3, 4, 5, 7, 8, 9}。
在能耗模型的基础上,使用UPPAAL的模拟功能,即模拟节点间交互的行为,完成一次数据收集,然后就可以观察到一次数据收集消耗能量最多的那个节点,并获得消耗的能量值MAX_SING_COST,然后使用初始能量ENERGY_INIT就可以获得数据收集轮数N=ENERGY_INIT/MAX_SING_COST。UPPAAL数据收集模拟过程见图4,这是12个节点的协议链。

Figure 4. The data gathering process of WM2RP protocol
图4. WM2RP协议数据收集过程
5. 两种仿真工具比较
在对WM2RP协议进行MATLAB仿真时,是通过MATLAB编码,调用MATLAB的二维线画图函数plot(),将各个节点在特定轮数据收集后能量剩余情况显示出来。在这里,MATLAB不用建模,只需编码,进行函数间的调用。通过图表,节点剩余能量变化情况及趋势都可以清晰的获得。
在对WM2RP协议进行UPPAAL仿真时,需要先建出模型,然后单步运行程序,可以看到每个节点之间的交互情况,并且可以输出在这一轮节点的能量剩余情况。UPPAAL中有时间次序,即可以看到每一步的变化。
MATLAB可以仿真多次数据收集过程,并且显示每轮数据收集后节点剩余能量。而UPPAAL只能仿真无线传感器网络中各个节点进行一轮数据收集的过程,并显示此轮数据收集后节点剩余能量;MATLAB可以通过图表的形式即调用MATLAB库函数来清晰的展示节点剩余能量,而UPPAAL只能屏幕输出此轮各个节点剩余能量,没有直观的图表可供使用;MATLAB没有时序的概念,而UPPAAL注重时间次序,使用UPPAAL自带的功能就可以看到每个节点之间数据和信息的交互情况;MATLAB仿真是通过MATLAB编程实现的,只要编写好代码,运行即可。而UPPAAL仿真是需要建立模型的。
6. 结语
本文使用MATLAB [14] 和UPPAAL工具对WM2RP协议进行仿真,通过仿真过程和仿真结果,把MATLAB仿真和UPPAAL仿真进行比较,进而发现两者的优势和劣势。MATLAB擅长于仿真能量的消耗和数据收集轮数的表示,通常以曲线图的形式进行显示;而UPPAAL倾向于对有时间戳的协议进行仿真,并可以通过时序图形象的展示出通信过程。通过侧重不同实现的功能和实现的效果来选择使用MATLAB仿真还是UPPAAL仿真。
进一步的研究工作有:对WM2RP协议的其他方面进行仿真,比如抄表效率等,从其他方面挖掘MATLAB仿真和UPPAAL仿真的区别,并总结出哪些仿真内容只有MATLAB能够完成,UPPAAL不能完成;哪些功能是MATLAB不能仿真而UPPAAL能够仿真的。