ZigBee网络中的数据通信主要有三种类型:单播、组播、广播。那这三种方式如何设置呢?在哪里设置呢?还记得之前学习的 ZigBee协议栈进行数据发送是调用AF_DataRequest这个函数:
参数1:afAddrType_t *dstAddr,该参数包含了目的节点的网络地址、端点号及数据传送的模式,如单播、广播或多播等。
afAddrType_t结构体如下:
在ZigBee中,数据包可以单点传送(unicast),多点传送(multicast)或者广播传送,所以必须有地址模式参数。一个单点传送数据包只发送给一个设备,多点传送数据包则要传送给一组设备,而广播数据包则要发送给整个网络的所有节点。因此上述结构体中的afAddrMode_t addrMode 就是用于指定数据传送模式,是个枚举类型,可以设置为以下几个值。
现在我们知道通信方式在哪里设置了,那不同的通信模式要设置哪些参数呢?
1.单播通信
注意,其实单播有两种方式:一种是绑定传输,my_DstAddr.addrMode=(afAddrMode_t)AddrNotPresent;一种是直接指定目标地址的单播传输,比如协调器就是0x0000。
1)单播绑定传输
2)直接指定目标地址的单播传输
采用标准寻址模式,它将数据包发送给一个已经知道网络地址的网络设备,将afAddrMode设置为Addr16Bit,并且在数据包中携带目标设备地址。
2.广播通信
当应用程序需要将数据包发送给网络的每一个设备时,就使用这种模式。地址模式设置为AddrBroadcast。目标地址 my_DstAddr.addr.shortAddr可以根据需求设置为下面广播地址的一种。
NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF):数据包将被传送到网络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包在被查询到之前将被保留在其父亲节点,直到消息超时(NWK_INDIRECT_MSG_TIMEOUT 在f8wConifg.cfg 中)。
NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD):数据包将被传送到网络上所有在空闲时打开接收的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。(www.xing528.com)
NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC):数据包发送给所有的路由器,包括协调器。
3.组播
当应用程序需要将数据包发送给网络上的一组设备时,就使用该模式。地址模式设置为afAddrGroup,addr.shortAddr 设置为组ID。使用组播方式需要加入特定的组。
(1)首先声明一个组对象aps_Group_t SampleApp_Group。
aps_Group_t结构体的定义:
每个组有特定的ID和组名,组名存放在name数组中,name数组的第一个元素是组名的长度,第二个元素开始存放组名字符串。
(2)对SampleApp_Group赋值。
(3)在本任务里将端点加入到组中。
(4)设定通信的目标地址及模式。
通信时,发送设备的输出cluster设定为接收设备的输入cluster,且profileID设定相同,即可通信。
(5)若要把一个设备加入组中的端点从组中移除,调用aps_RemoveGroup。
注意:组可以用来关联间接寻址。在绑定表中找到的目标地址可能是单点传送或者是一个组地址。另外,广播发送可以看作是一个组寻址的特例。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。