1实验分析和设计
1.1用例分析
1.无线传感器节点进程用例分析
发送数据。
因为本实验是模拟实验,所以即使监听到两个事件,这些工作也是可以在一个方法中完成的,本实验在一个方法中产生了两个事件的信息。但是,即便两个事件是在一个方法中产生的,在发送数据时也是按照独立的方式进行的。
对于簇成员节点进程来说,如果有火情数据,则节点需要发送两次数据(火情和温度两个事件)给簇头节点进程。
如果一个节点进程被指定为当前的簇头节点,则该进程应该以多线程的方式收取其他成员节点进程的数据。如果是火情数据,则立即上报给汇聚节点进程,如果是温度数据,则在进行必要的数据处理工作后再上报。
无线传感器节点进程的用例图如图所示。
数据发送用例是无线传感器节点的重要工作,这里以数据发送用例为例,其用例描述如表所示。
名称 | 数据发送用例 |
标识 | |
描述 | 1.产生感知火情信息和温度信息,形成数据。 |
前提 | 定时器到时,采集外界事件(温度、火情) |
结果 | |
注意 | 由于无线传感器网络的特性,无须太在意地址问题(无线传感器网络路由算法的特性之一 |
2.汇聚节点汇聚进程用例分析
汇聚节点进程(B)承担着网关的作用,其主要工作包括以下几项:接收来自无线传感器节点进程(当前承担簇头角色的节点进程)的信息、进行合并后转发给数据服务器进程。 为了能够及时、并行地收取每一个簇头节点进程发来的信息,这些任务应该以多线程的机制进行工作。
汇聚节点进程的用例图如图所示。可见工作不是太多。
这里以接收信息用例为例进行讲解,其用例描述如表所示。
名称 | 接收信息用例 |
标识 | |
描述 | 1.接收来自簇头的环境信息。 |
3.进行错误数据的清洗(超过温度范围的数据需要清除)。 | |
前提 | 已经收到簇头进程发来的信息 |
结果 | 数据收集完毕后发给数据服务器 |
注意 | 1.簇头是会变化的,不能因为簇头变化就导致异常。 |
3.数据服务器进程用例分析
数据服务器进程(A)完成数据的收集和保存,并进行展示。该进程工作较少。力了能够及时地收取汇聚节点进程的数据,这里应采用多线程机制完成。数据服务器进程的用例图如图所示。
名称 | 接收信息用例 |
标识 | UC0301 |
描述 | 1.接收到来自汇聚节点的信息。 |
前提 | 已经收到汇聚节点进程发来的信息 |
结果 | 信息保存和处理完毕,进行展示或报警 |
注意 | 应借助于数据库技术完成保存、查询和统计的相关工作,需要读者自己学习如何使用数据库 |
1.2时序图
本实验的时序图如图所示。由于在实验中涉及的进程太多,这里仅以部分节点进程为代表、以发送温度数据为例进行描述。对于火情数据,相关节点进程无须进行等待、收集和处理的工作。
1.3部署图
在本实验中,多个进程可以部署在多台计算机上,也可以部署在同一台计算机上。这里假设实验是部署在多台计算机上的,这样,各个进程可以具有随意的端口号。如果因为实验条件所限,确实需要把所有的进程部署在同一台计算机上,因为各个进程所需的IP 地址相同,所以需要为这些进程设置不同的端口号,以防止冲突。
本实验的部署图如图所示。因为进程太多,这里只能以部分节点进程进行展示,并且这个部署图会因为簇头节点的轮转而进行变化。
1.4系统体系结构设计
针对本实验,系统总体上可以分为3部分,分别是数据服务器进程、汇聚节点进程和无线传感器节点进程,系统体系结构如图20-8所示。
其中,发送模块将从上层收到的数据发送给指定的接收者,接收模块从下层接收数据并提交给上层。
数据封装模块将用户数据封装成报文。数据解析模块将报文进行解析,得到用户需要的数据以及一些必要的控制信息。
1.数据服务器进程
数据服务器进程的功能较少,主要是进行数据的接收,并将数据保存到数据库中,这个工作由数据接收模块完成。
另外,数据分析是物联网数据的价值所在,所以在用户需要的时候,数据服务器进程应该提供数据汇总、统计和图表展示的功能。
2.汇聚节点进程
汇聚节点进程主要承担了网关的作用,负责收集来自簇头节点进程的相关数据,在清洗和合并(由数据处理模块完成)后发送给数据服务器进程。这些任务都可以归纳到数据接收控制模块中进行。
另外,为了让汇聚节点进程知道自己是否已经收集完毕温度数据,汇聚节点进程应该知道关于系统内分簇的信息以及各个簇所管理区域的信息。
3.无线传感器节点进程
无线传感器节点进程是系统工作的启动者,也是本实验的一个重点。
数据采集模块负责采集温度和感知火情等事件信息。其中火情信息需要借助数据库操作模块完成。
数据发送模块根据环境数据类型、节点角色的不同而具有不同的处理:对于簇成员节点进程,将感知到的环境数据直接发送给簇头节点进程即可;对于簇头节点进程,如果获得了火情数据就直接发送给汇聚节点进程,而产生的温度数据则需要暂存在本地,和其他节点的数据统一处理(清洗和融合,由数据处理模块完成)后再发送给汇聚节点进程。 数据发送模块的工作需要一个线程定期执行。
数据收集模块是针对簇头节点进程的,负责收集其他节点进程发来的环境数据。对于火情数据,需要立即发送给汇聚节点进程;对于温度数据,暂存本地即可。这个工作需要由一个专门的线程监听端口。
簇管理模块通过接收其他传感器节点进程发来的簇管理报文完成簇的管理,主要是簇头的轮换。该动作需要避免和数据收集过程的冲突,即不能在数据收集的过程中改变簇头的角色。例如,可以在某一次数据收集完毕之后再执行轮换。
区域管理模块负责维护本节点进程监视区域的信息。
1.5报文格式设计
本实验涉及多个角色进程之间的交互,为了规范各个角色进程之间的通信处理,特定义了报文类型字段,它包含的报文类型如表所示。针对这些报文类型以及后面定义的报文格式,读者可以根据自己的设计需要进行修改和完善。
类型号 | 类 型 | 应用场景 |
o | 簇头指定报文 | 当前簇头发送给簇内其他节点的报文,告知下一个簇头是哪一个节点 |
1 | 温度数据报文 | |
2 | 温度数据IP报文 | 汇聚节点发给数据服务器的温度数据报文,需要符合IP报文格式,有 |
20 | 火情数据报文 | 簇成员发给簇头节点、簇头节点发给汇聚节点的火情数据报文 |
4 | 火情数据IP报文 | 汇聚节点发给数据服务器的火情数据报文,需要符合IP报文格式,有 |
本实验是模拟实验,不必遵循IP的报文格式,知道原理即可。
1.簇头指定报文
簇头指定报文的格式如图20-9所示。该报文由簇头节点进程广播给本簇内所有其他节点进程。
发起者标识:本轮簇头的标识。
发起时间:是方便各个节点进程知道这是什么时间发起的,在实验中意义不大,但是现实情况中可以很好地避免报文的乱序。
下一轮簇头:本轮簇头进程指定的、下一个时间段内担任簇头的节点标识。
2.温度数据报文
温度数据报文的格式如图所示。
报文 | 簇标识 | 数据 | 监视区域标识 | 感知时间 | 温度 | 其他温度 |
1字节 1字节 1字节 4字节 2字节 1字节
报文类型:这里固定为1。
簇标识:本节点所属簇的标识。
数据个数:本次发送报文中含有多少个关于温度的数据。每一个温度数据包括3个信息,即区域标识、时间、温度。
监视区域标识:被监视的区域的标识。
感知时间:本次收集数据的时刻。
温度:本次测量的温度。
3.温度数据IP报文
温度数据IP报文的格式如图所示。该报文因为要在互联网上发送,所以应该遵守IP的报文规范。
报文类型:这里固定为2。
后方数据大小:方便程序进行数据的接收。
源IP地址和目的IP地址:源节点(汇聚节点进程)和目的节点(数据服务器进程)的IP地址(实验用,非编程用)。
源端口号和目的端口号:源和目的节点上的程序使用的端口号(实验用,非编程用)。 数据个数、监视区域标识、感知时间和温度的含义同上。
4.火情数据报文
火情数据报文的格式如图所示。因为只要有火情,就需要立即上报,所以不需要数据融合和汇集等操作。而且因为只要有数据就代表有火情,所以报文非常简单。
报文类型:这里固定为3。
报文 | 监视区域标识 | 感知时间 |
1字节 4字节 2字节
监视区域标识:被监视的区域的标识。
感知时间:本次收集数据的时刻。
5.火情数据IP报文
火情数据IP报文的格式如图所示。
报文 | 源IP地址 | 目的IP地址 | 源端囗号 | 目的端口号 | 监视区域标识 | 感知时间 |
1字节 4字节 4字节 2字节 2字节 4字节 2字节
报文类型:这里固定为4。
其他字段的含义同上。
1.6类图
1.无线传感器节点进程的相关类图
无线传感器节点进程(C0~C3、D0~D3、E0~E3)主要完成以下几个工作:
·簇管理,包括簇成员管理和簇头轮换管理。
·环境数据获取/生成,包括火情和温度数据。
环境数据发送。
·环境数据收集(针对簇头节点进程)。
为此可以产生对应的相关类,其类图如图所示。其中无线传感器节点进程类是本程序的主类,也充当了多个类的纽带,并提供了信息展示的方法。
这里假设每个簇成员知道本簇内其他簇成员的地址信息(包括IP地址和端口号),这些信息保存在簇管理类的簇成员列表中。
无线传感器节点进程的核心工作由两个线程类完成:一个是数据接收处理线程类(根据端口的监听情况,该线程随时被生成并执行);另一个是数据发送线程类(该线程将长期存在,定期执行)。
数据接收处理线程类负责接收以下报文和数据:
·簇头指定报文,获得簇头标识,调用簇管理类,设置当前最新簇头。
·簇头接收簇成员的温度和火情数据,将火情数据立即发送,将温度数据保存到本进程类的温度数据收集队列中。
数据发送线程类的主要工作是定期启动(10s执行一次),执行的第一步工作是调用环境数据产生类产生温度数据和获得火情数据。针对簇成员节点进程,把这些数据发送给簇头节点进程即可;针对簇头节点进程,如果有火情数据,则需要立即发送给汇聚节点进程,而温度数据则需要等待其他节点进程的温度数据都到达后才能进行统一处理(数据融合)并发送给汇聚节点进程。
2.汇聚节点进程的相关类图
·接收来自簇头节点进程的数据。
数据清洗和合并。
报文转换。
·发送给数据服务器。
这些工作都可以在一个方法中完成。由此,汇聚节点进程(B)的相关类图如图20-15 所示。其中汇聚节点进程类是本程序的主类,也充当了多个类的纽带,并提供了信息展示的方法。主要工作由数据接收处理线程类完成。
汇聚节点进程在接收某个时刻的温度数据时,第一个启动(由数据接收处理线程中“本时刻第一次启动线程?”判别)的数据接收处理线程负责等待其他节点进程发来的温度数据,在收齐/等待超时后,进行报文转换并最终转发给汇聚节点进程。针对火情数据(只发一份即可)需进行过滤。
3.数据服务器进程的相关类图
数据服务器进程(A)功能较为简单,其相关类主要完成以下工作:
接收来自汇聚节点进程(B)的报文,执行报警、保存功能。
·进行数据的汇总和统计分析。
数据服务器进程的相关类图如图所示。其中数据服务器进程类是本程序的主类,也充当了多个类的纽带,并提供了信息展示的方法。
2实验实现
2.1无线传感器节点进程处理流程
在本实验中,无线传感器节点进程是整个流程的发起方,主要工作体现在数据发送、 数据接收处理这两个过程中。下面先介绍数据接收处理过程。
1.数据接收处理流程
工作步骤如下: 数据接收处理流程要完成两个工作:轮换簇头、簇头收取簇成员的数据。
(1)收到报文,解析报文。
(2)如果是簇头指定报文,则调用簇管理类,设置新的簇头,转(5);否则转(3)。
(3)如果是火情信息,则立即转发给汇聚节点进程,转(5);否则转(4)。
(4)产生数据接收处理线程并启动,该线程对温度信息进行解析后,调用无线传感器节点进程类的添加温度数据方法,保存温度信息。
(5)调用界面展示函数进行展示。
该算法较为简单,这里不再给出活动图。
2.数据发送流程
数据发送线程在每分钟的0,10,20,…,50s启动一次(如果超过则消去零头)。数据发送流程算法步骤如下:
(1)获得时间。
(2)连接数据库,查看是否有属于自己监视区域内的、当前时刻的火情。如果有,则转向(3)。否则,如果时刻不是每分钟的0或30s,转向(18);否则转向(6)。
(3)生成火情报文。
(4)如果进程自身的角色是簇成员节点,则将火情报文发给簇头节点进程,否则(自身是簇头节点进程)发给汇聚节点进程。
(5)进行火情信息展示。
(6)针对自身监视的3个区域,每一个区域选择一个31~37的随机数(取整数)作为自身当前时刻感知的温度。
(7)形成温度数据。
(8)如果自身角色是簇成员节点,则形成报文发给簇头节点进程,转向(18);否则把温度数据存人温度数据收集队列备查,转向(9)。
(9)根据温度数据收集队列,检测当前时刻是否所有区域的温度信息都已经收集完毕。如果是,则转向(12);否则转向(10)。
(10)查看超时计时器是否超过2s。如果是,则转向(12);否则转向(11)。
(11)等待100ms后转向(9)。
(12)数据清洗,去除超出正常范围 (32∘C~36∘C)
的温度。
(13)数据融合,对相同监视区域的温度取平均值。
(14)形成温度数据报文。
(15)将温度数据报文发给汇聚节点进程。
(16)删除温度数据收集队列中的这批数据。
(17)如果进程自身作为簇头角色已经工作了超过10min,则将簇头角色交给下一个簇成员节点进程。
(18)调用界面展示函数进行展示。
对于这个流程需要注意,算法可能会发送两个报文给汇聚节点:火情数据和温度数据,其中第二个是必然存在的。这里发送的过程需要和20.3.2节的汇聚节点进程的接收过程相互配合,否则可能出现数据接收失败的情况。可以有以下两个配合方案:
无线传感器节点进程每次发送一个报文的时候都建立一个连接,这样汇聚节点进程处理方便。但是建立连接的过程会耗费一些网络资源和时间。
·汇聚节点进程每次接收时利用一个连接准备接收两个报文,但是如果第一个就是温度报文,可以不必接收第二个报文。
本实验中采用第一种方案。
无线传感器节点进程数据发送流程活动图
2.2汇聚节点进程处理流程
汇聚节点进程(B)主要有两个工作:一是接收数据,进行清洗和合并;二是发送数据给数据服务器进程。
这两个工作可以在一个方法内完成。针对3个簇,监听线程应该启动3个数据接收处理线程,其中一个数据接收处理线程负责收集其他两个线程收到的数据,完成最终的处理和发送。
汇聚节点进程接收数据的处理流程如下:
(1)收到簇头发来的数据报文。
(2)如果是火情数据报文,转向(13);否则转向(3)。
(3)获得当前时间。
(4)将数据保存到温度数据收集队列中。
(5)如果自己是本时刻启动的第一个线程,则转向(6);否则转向(14)。
(6)查看温度数据收集队列,检查是否每一个簇都已经发来了温度数据。如果是,则转向(9);否则转向(7)。
(7)查看是否超过2s。如果是,则转向(9);否则转向(8)。
(8)等待100ms,转向(6)。
(9)数据清洗。
(10)数据合并。
(11)形成温度数据报文。
(12)删除这批数据。
(13)发给数据服务器进程。
(14)调用界面展示函数进行展示。
汇聚节点进程数据接收处理流程的活动图见图20-18。
2.3数据服务器进程处理流程
数据服务器进程(A)主要有两个工作:一是接收数据报文并进行保存;二是进行数据的后期查询、分析、统计。第一个工作是此实验流程的关注点,第二个需要读者学会利用数据库进行统计,读者自行学习,这里不再赘述。
数据接收处理流程的步骤如下:
(1)收到来自汇聚节点进程的数据报文。
(2)调用数据封装类进行报文解析,获得数据。
(3)如果是火情报文,立即报警。
(4)根据报文类型,分别记录数据到不同的数据表中。
(5)调用界面展示函数进行展示。
样例:
资源: