在ZigBee网络中进行数据通信主要有三种类型:广播(broadcast)、单播(unicast)和组播(multicast)。
广播通信如图16-1所示,描述的是一个节点发送的数据包,网络中的所有节点都可以收到。类似于开会时领导讲话,每个与会者都可以听到。
图16-1 广播通信
单播通信如图16-2所示,描述的是网络中两个节点之间进行数据包的收发过程。这就类似于任意两个与会者之间进行的讨论。
图16-2 单播通信
组播通信如图16-3所示,又称为多播,描述的是一个节点发送的数据包只有和该节点属于同一组的节点才能收到。这类似于大会之后,各小组进行讨论,只有本小组的成员才能听到相关的讨论内容,不属于该小组的成员不需要听取相关的内容。
图16-3 组播通信
那么,ZigBee协议栈是如何实现上述通信方式的呢?
通俗地讲,ZigBee协议栈将数据通信过程高度抽象,使用一个函数完成数据的发送,以不同的参数来选择数据发送方式(广播、组播还是单播)。ZigBee协议栈中数据发送函数原型如下:
在此,读者不必关心该函数的调用形式,只需要理解ZigBee协议栈的设计者是使用一个函数实现广播、组播和单播三种数据发送形式即可。
在AF_ DataRequest函数中,第一个参数是一个指向afAddrType_t类型的结构体的指针,该结构体的定义如下:
注意观察加粗字体部分的addrMode,该参数是一个afAddrMode_t类型的变量,afAddrMode_t类型的定义如下:
可见,该类型是一个枚举类型:
(1)当addrMode=AddrBroadcast时,对应的是广播方式发送数据。
(2)当addrMode=AddrGroup时,对应的是组播方式发送数据。
(3)当addrMode=Addr16Bit时,对应的是单播方式发送数据。
上面使用到的AddrBroadcast、AddrGroup、Addr16Bit是一个常数,在ZigBee协议栈里面定义如下:
到此为止,只是讲解了AF DataRcquest函数的第一个参数,该参数决定了以哪种数据发送方式发送数据。(www.xing528.com)
首先,需要定义一个afAddfrype_t类型的变量。
afAddrType_t SendDataAddr;
然后,将其addrMode参数设置为Addr16Bit。
SendDataAddr.addrMode=(afAddrMode_t) Addr16Bit;
SendDataAddr.addr.shortAddr=XXXX;
其中:XXXX代表目的节点的网络地址,如协调器的网络地址为0x0000。
最后,调用AF_DataRequest函数发送数据即可。
AF_DataRequest (&SendDataAddr, …)
注意:上述过程只是展示了如何以单播的方式发送数据,至于发送什么数据,发送长度等信息都省略了,这里主要是讲解单播方式发送数据是如何实现的。同理,当使用广播方式发送时,只需要将addrMode参数设置为AddrBroadcast即可。
上面讲解了网络通信的三种模式,下面结合具体实验,向读者展示如何在具体的项目开发中实现上述通信模式,只有在实验中真正地体会到各种通信模式的区别与联系,才能更好地掌握ZigBee网络数据传输的基本原理。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。