南昌航空大学实验报告
二O 一六 年 五 月 10 日
课程名称: 无线传感器网络 实验名称:Z‐Stack 协议栈工作原理实验 班级: 姓名:
指导教师评定: 签名:
一、实验目的
1. 分析CC2530 BasicRF工程的文件组织和源代码,为学习Z-Stack协议了解Z-Stack协议栈工程文件的组织结构;
2. 了解基于Z-Stack协议栈的SappWsn应用程序框架的工作机制; 3. 认识协议栈中将节点按照“功能端点”区分的思想。
二、实验内容
在SappWsn应用程序框架下,编写程序,使得节点具有一个测试功能端点,该端点每隔3秒钟向协调器发送一个“Z-Stack for SunplusAPP”的字符串。
三、实验原理
1. Z-Stack for SunplusAPP简介
Z-Stack for SunplusAPP(以下简称Z-Stack APP)是基于TI提供的ZStack中的SampleAPP,修改了其应用层代码而得到一个完整的基于Zigbee 2007协议栈的Zigbee节点开发框架。 a) 端点
在Z-Stack APP中,任意一个节点的代码,都以功能为基本单位来设计其代码,而每一个功能都对应于一个端点。例如,对于一个温度传感器节点,“温度”即为其功能,在框架中只需要为“温度”这个功能添加代码即可。对于Zigbee协议来说,该功能即是一个端点。节点之间通信时,目标地址中也包含了端点的信息,表示数据包最终由某个特定的功能接收到。 b) Z-Stack APP应用程序框架文件结构
Z-Stack APP下的应用程序框架,主要包括四个文件:SAPP_FrameWork.c、 SAPP_FrameWork.h、SAPP_Device.c和SAPP_Device.h。 其中,SAPP_FrameWork定义并实现了标准协议的全部内容,它是应用程序框架的主要组成部分。它为任意节点提供了两个最基本的任务:controlEpProcess和functionEpProcess,分别对应于节点的控制端点和其它所有的普通功能端点。SAPP_Framework相关文件通常不需要做任何修改。 SAPP_Device为单个节点定义并实现了常见传感器(或执行器)节点的功能,这些传感器(或执行器)可以通过SAPP_Device.h文件中的宏定义来选择或禁止。同时,可以同时选择多种传感器(或执行器)。通常,在实现一个具体的系统时,只需要修改SAPP_Device相关文件,或为其增加功能代码即可。
2. Z-Stack APP工作流程简介
在Z-Stack APP编程框架下,Zigbee网络中的协调器、路由和终端节点,都被统一看待。任何一个节点所具有的功能,都在SAPP_Device中定义。下面展示了简化了的SAPP_Device.c文件:
其中,funcList是一个数组,其每一个单元代表了该节点具备的一种功能,同时也对应了一个端点。funcList数组中的单元是一个ep_info_t类型的结构体,该结构体的定义如下:
其各个成员的作用如表 2.1所示。
表1 ep_info_t结构体成员说明
表 2 afMSGCommandFormat_t 结构体定义
表 3 res_available回调函数中的资源类型
表 4 FUNCINFO结构体定义
也就是说,当我们需要为节点增加功能时,只需要在funcList数组中添加该功能对应的信息,并编写相应的处理函数即可。 同时,Z-Stack APP框架还为应用程序提供了若干个函数,为应用程序提供发送数据、创建定时器等功能,它们的定义如下:
【函数原型】uint8 SendData(uint8 srcEP, const void *buf, uint16 addr, uint8 dstEP, uint8 Len);
【函数说明】发送数据包到指定节点的指定端点
【函数参数】srcEP - 源端点,通常可以通过ep_info_t结构体中的ep成员来获取到
buf - 待发送的数据的首地址 addr - 目标节点的网络地址 dstEP - 目标节点的端点
Len - 待发送数据的长度(单位:字节)
【函数原型】void CreateUserTimer(struct ep_info_t *ep, uint8 seconds); 【函数说明】为端点创建一个用户定时器,该定时器时间到了之后,系统会以