Dissemination实验

一、实验目的

  1. 学习少量数据在传感网中可靠传递的方法
  2. 掌握 TinyOS 中 DisseminationValue、DisseminationUpdate 接口和组件的使用
  3. 理解 Dissemination 的机制

 

二、实验设备

  1. 装有 VMware Ubuntu 虚拟机的宿主 PC 机一台;
  2. 下载器一个;
  3. 物联网实验综合箱一套(两个以上节点)

 

三、实验要求

  1. 实现功能:网络中 root 节点和 node 节点通信并分发数据;
  2. 实验现象:node 节点接收网络 root 节点数据并分发数据。

 

四、实验原理

分发协议中的小数据分发是系统提供的一种服务,主要用于实现基于共享变量的网络一致性 (eventual consistency)。网络中的每一次节点都有该变量的一个备份(copy),这种小数据分发服务会通 知节点该变量值更改的时间,同时交换数据包以达到整个网络的一致性。在任意给定时刻,可能会存 在两个不同节点因为数据时间的不一致性而导致不同意交换数据包,但是随着时间的流逝,不同意交 换数据包的节点数会越来越少,以至于最终整个网络完全依赖于一个共享变量值。网络的高度一致性 能有效避免临时性的链接失效以及高丢包率等网络传输问题。

分发协议与泛洪协议(flooding protocol)不同,泛洪协议主要是离散性网络传输(节点与节点之间不 受某一变量值约束),它能够终止并且不再达成网络的一致性,小数据分发机制确保网络内部在有可 靠连接的情况下能够达到基于单个变量值的一致性。

分发协议会因为数据项(data item)大小的不同而不同。分发协议可分成两个部分:控制流部分 (control traffic)和数据流部分(data traffic)。其中数据流(data traffic)协议完全依赖于数据项的大小,而 控制流(control traffic)协议大致相同。例如,Deluge 协议是一种重编程协议,以二进制形式分发元数 据(metadata),当网络中的节点发现收到的 metadata 与自身的 metadata 不同时,他们就会意识到自 身原来的二进制信息已经失效了,需要一个新的二进制信息。而 Noverlty 协议在小数据分发一致性模 型上做了很周到的考虑:(an explicit consideration),该协议致力于让网络中的每一个节点都接纳分发 到网络中的变量值的最新版本。按照这种方式,节点可以通过告诉网络变量值被更新从而促进网络达 成一致。如果有好几个节点决定更新变量值,小数据分发协议就可以确保网络只需要一次更新便可以 确保达成一致。

网络的这种一致性并不意味着每一个节点都能够接收到变量值,这种一致性仅仅表示网络最终 会在哪个变量值最新这个问题上达成一致。如果有一个节点从网络中断开并且此后网络经过多次更 新才得到共享变量,则当该节点重新加入网络后,它所接收到的变量值只会是最后一个更新所得到的 变量值。

能够将小数据分发到整个网络中,这对于无线传感器网应用而言是重要的组成部分。它允许管理 员向网络中插入小段程序,命令以及配置字

 

五、实验步骤

1、完成硬件连接;

2、、打开虚拟机,进入到 VScode 显示 opt/tinyos-2.x/apps/cc2530_app/net-dissmission 目录下创建项目 目录,并新建应用程序文件,包括配置文件 Makefile,配线组件 TestDisseminationAppC.nc 和模块组 件 TestDisseminationC.nc

3、修改Makefile文件一个root节点和两个node分别如下: 

Root的address改为,group改为学号17,channel按要求计算得到0B:

 

 

 

Node1的address改为abcd:

 

 

 

 

 

Node2的address改为1234:

 

 

 

4、编译程序并烧录:

在终端输入make cc2530zn和make cc2530zn install:

 

 

 

5.通过利用串口通过root节点发送信息,观察节点现象:

 

 

 

 

 

  1. 串口输出和抓包

 

Node节点串口输出:

 

 

 

抓包:

 

 

 

 

 

 

 

 

 

 

 

六、思考、测试、回答

  1. Dissemination 协议是怎么回事?简要回答原理;

答:DisseminationValue接口使节点接受分发来的数据,DisseminationUpdate产生分发的数据。网络中的每一次节点都有该变量的一个备份(copy),这种小数据分发服务会通 知节点该变量值更改的时间,同时交换数据包以达到整个网络的一致性。在任意给定时刻,可能会存 在两个不同节点因为数据时间的不一致性而导致不同意交换数据包,但是随着时间的流逝,不同意交 换数据包的节点数会越来越少,以至于最终整个网络完全依赖于一个共享变量值。

 

  1. LED 什么情况下点亮和熄灭?

答:root发送一次数据led灯翻转,node接收一次数据led翻转。

 

  1. 尝试将自己的学号后四位的 16 进制值(例如 7233,则发送 0x48、0x21)传给 node,再串口传给 PC。

答:学号为7217,发送48 11

根据计算CRC码:F7 AF

 

 

 

实验结果:

 

 

 

 

 

 

 

  1. msg_head.tab0 的值改为其他值(比如 52),再修改其他地方,让整个协议能够正常运行?

答:

 

 

 

改动如下:

if(byte == 0x52 && dlen == 0){

tab = 0;

buf[0] = 0x52;

}

 

  1. 尝试:root 下发命令控制 node 节点的 LED 闪烁次数(比如下发数据 0x03,node 节点闪烁 3 次后 熄灭)

答:这个我们只需要将3中填班级的数据改为闪烁次数即可,在在代码中利用循环延长闪烁时间:

 

 

 

 

七、实验总结

通过这次实验我了解了少量数据在传感网中可靠传递的方法 ,也学习掌握了TinyOS 中 DisseminationValue、DisseminationUpdate 接口和组件的使用,整体实验不算很难,但是需要仔细去思考去理解才能做好思考题。同时代码间缺少注释这导致代码看懂有点困难,还是请教其他同学才进一步弄懂了代码。

 

posted @ 2022-12-06 20:04  安良  阅读(418)  评论(0编辑  收藏  举报