人人范文网 范文大全

zigbee入网退网机制分析

发布时间:2020-03-03 07:23:03 来源:范文大全 收藏本文 下载本文 手机版

Zstack入网退网代码分析

网络初始化和路由:

网络初始化:

协调器(Coordinator)首先在某个频段发起一个网络,网络频段的定义放在DEFAULT_CHANLIST配置文件里。如果ZDAPP_CONFIG_PANID定义的PAN ID是0xFFFF(代表所有的PAN ID),则协调器根据它的IEEE地址随机确定一个PAN ID。否则,根据ZDAPP_CONFIG_PANID的定义建立PAN ID。当节点为Router或者End Device时,设备将会试图加入DEFAULT_ CHANLIST所指定的工作频段。如果ZDAPP_CONFIG_PANID没有设为0xFFFF,则Router或者End Device会加入ZDAPP_CONFIG_PANID所定义的PAN ID。 设备上电之后会自动的形成或加入网络,如果想设备上电之后不马上加入网络或者在加入网络之前先处理其他事件,可以通过定义HOLD_AUTO_START来实现。 通过调用ZDOInitDevice(int startdelay)来手动定义多久时间(startdelay)之后开始加入网络。

设备如果成功的加入网络,会将网络信息存储在非易失性存储器(NV Flash)里,掉电后仍然保存,这样当再次上电后,设备会自动读取网络信息,这样设备对网络就有一定的记忆功能。

如果需要使用NV Flash的设置,可以通过定义NV_RESTORE宏和关闭SW_BYPASS_NV来使用。

有关网络参数的设置大多保存在协议栈Tools文件夹的f8wConfig.cfg里。 路由:

Z-Stack采用无线自组网按需平面距离矢量路由协议AODV,建立一个Hoc网络,支持移动节点,链接失败和数据丢失,能够自组织和自修复。当一个Router接受到一个信息包之后,NMK层将会进行以下的工作:首先确认目的地,如果目的地就是这个Router的邻居,信息包将会直接传输给目的设备;否则,Router将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目中所存储的下一个hop地址;如果找不到有效的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的路由信息。

ZigBee End Device不会执行任何路由函数,它只是简单的将信息传送给前面的可以执行路由功能的父设备。因此,如果End Device想发送信息给另外一个End Device,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。 初始化流程图:

ZStack代码中的设备初始化流程图如下:

其中根据宏的设置可以达到扩展panID的效果,并且所有设备类型都集中处理。

退网: 协调器和路由器上层使用ZDP_MgmtLeaveReq()进行设备退网申请,会通过ZDO的Mgmt消息处理函数ZDO_ProceMgmtLeaveReq()来调用NLME_LeaveReq()函数,实现退网申请,主要用来申请给其他设备退网。

当前设备直接使用NLME_LeaveReq()来进行退网申请,并且注意LeaveReq的addr必须为NULL!当前设备申请后,会在网络层发送一个LeaveInd给协调器(路由器),协调器根据LeaveInd执行结果返回LeaveRsp。

因此协调器可以通过ZDO_RegisterZDOCB的函数来注册LeaveInd后处理,比如删除自制表项等等。

寻址:

为了在网络中发送数据到一个设备,应用层一般用AF_DataRequest()函数。 typedef enum { afAddrNotPresent = AddrNotPresent, afAddr16Bit = Addr16Bit, afAddr64Bit = Addr64Bit, afAddrGroup = AddrGroup, afAddrBroadcast = AddrBroadcast } afAddrMode_t;

地址模式参数是需要的,因为在ZB中,数据包能被点传输、多点传输或者广播传输。点传输被发送到单个设备,多点传输一定发送到一组设备,广播传输一般被发送到网络中的所有设备。 如下是更详细的说明。

点到传输 (Unicast):这是标准地址模式,被用于发送一个数据包到网络中单个已知地址的设备。这个addrMode参数被设置为Addr16Bit或者Addr64Bit,目的网络地址在数据包中一同被发送。其中一个是64位IEEE地址(也可以叫MAC地址或扩展地址),一个是16位网络地址(也可以叫逻辑地址或短地址)。64位地址是全球唯一的,作为设备(产品)的终生地址被分配。它通常被开发商或安装的时候被指定。该地址由IEEE分配指定。16位地址在设备加入网络的时候被分配,由这个网络自动分配。该地址只能用与本网络中,标志不同的设备间传递信息。

间接寻址:数据包中的最终目的地址不识别的时候使用。该模式被AddrNotPresent设置,而且目的地址没有被指定。代替目的地址的是:一个存储在发送设备协议栈的“绑定表格”,该表格中有被绑定设备的地址。这个特性被调用是源于绑定。当被发送的信息包下载到协议栈时,从这个绑定表格中寻找使用的目的地址。然后该信息包被有规则的处理为点对点数据包。如果有多个(大于1)目的地址在绑定表格中被发现,那么该数据包将被拷贝成对应的份数分别发送给他们。

广播传输:该模式在应用层想发送一个数据包到所有网络中的所有设备时被使用。该地址模式被AddrBroadcast被设置,目的地址被设置为下列值之一: NWK_BROADCAST_SHORTADDR_DEVALL (0xFFFF)-信息将被发送到网络中的所有设备(包括休眠的设备)。对于休眠的设备,这个信息将被保持在它的父节点,直到该休眠设备获得该信息或者该信息时间溢出(在f8wConfig.cfg 中的NWK_INDIRECT_MSG_TIMEOUT选项)。

NWK_BROADCAST_SHORTADDR_DEVRXON (0xFFFD) –该信息将被发送到网络中有接收器并处于IDLE(RXONWHENIDLE)状态下的所有设备。也就是说,除了休眠模式设备的所有设备。 NWK_BROADCAST_SHORTADDR_DEVZCZR (0xFFFC) –该信息被发送到所有路由器(包括协调器)。

组地址:该模式用于应用层想发送一个数据包到一个设备组的时候。该地址模式被afAddrGroup设置这个组标志符。用该特性之前,在网络中,组不得不被定义[看ZStack API文档中的] aps_AddGroup() 注意:组能与间接寻址一起结合使用。该目的地址在绑定表格中发现,可以作为点对点或一个组地址。也要注意广播地址可以当作是组被提前设置,一个简单的组寻址的特例,。 例子代码对于一个设备添加它自己到一个组标志符1: aps_Group_t group; // Aign yourself to group 1 group.ID = 0x0001; group.name[0] = 0; // This could be a human readable string aps_AddGroup( SAMPLEAPP_ENDPOINT, &group );

一个应用可以能想知道它自身和父节点的地址,用下面的函数可以得到设备的地址(被定义在ZStack API文档中):

NLME_GetShortAddr() – 返回该设备的 16 位网络地址 NLME_GetExtAddr() –返回该设备的64 位扩展地址.用下面的函数可以得到该设备的父节点的地址(被定义在ZStack API文档中)。注意该函数在协调器中不被涉及到,但是被设备父节点代替(MAC协调器): NLME_GetCoordShortAddr() – returns this device’s parent’s 16 bit short addre.NLME_GetCoordExtAddr() – returns this device’s parent’s 64 bit extended addre.

zigbee入网退网机制分析

退会机制

退网申请

Zigbee心得体会

提前退网申请书

ZigBee芯片厂商及应用前景分析

入网协议

入网协议书

Zigbee读书日记(七)

zigbee学习自我总结!!!!!

zigbee入网退网机制分析
《zigbee入网退网机制分析.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档