用户
 找回密码
 立即注册

扫一扫,访问微社区

查看: 2522|回复: 6

[求助] 新手请教关于节点通信的问题

[复制链接]

3

主题

9

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2018-10-3 23:47:01 | 显示全部楼层 |阅读模式
两个节点进行通信的基本条件为:1、都在同一个网络内;2、端点号必须一致;3、得知道对方的网络通信地址。
对于第二点,修改例程里路由器的端点号,即修改router_epDesc.endPoint的值,使其与协调器以及终端的端点号不一样,然后单播或者广播发送消息,协调器和终端依然能收到。
发现只要在NodeSendRFDate中,只要保证dist.endPoint目的地的端点号与协调器和终端一样就能收到消息,而无所谓路由器的端点号是多少。


后来想了想,猜想是不是节点的端点号是指ZDO_EP,但是将路由器的ZDO_EP改成1后,依然能进行通信,不明所以。


新手请教是怎么回事???不是说两个节点通信的基本条件是端点号必须一致吗???


欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复

使用道具 举报

3

主题

9

帖子

51

积分

注册会员

Rank: 2

积分
51
 楼主| 发表于 2018-10-3 23:53:43 | 显示全部楼层
void NodeSendRFDate(endPointDesc_t *srcEp, uint8* uStr,uint8 uLen,uint16 uShortAddr,
                     afAddrMode_t AddMode,uint16 uClusterID)
{
    afAddrType_t dist;
    dist.addrMode = (afAddrMode_t)AddMode;   //发送模式
    dist.endPoint = NODE_ENDPOINT;           //端点号
    switch( AddMode )
    {
        case afAddr16Bit:
            dist.addr.shortAddr = uShortAddr;  //单点传送模式
            break;
        case afAddrGroup:
            dist.addr.shortAddr = SaveGroupID; //组传送模式
            break;   
        case afAddrBroadcast:
            dist.addr.shortAddr = 0xffff;  //组传送模式
            break;   
        default:
            break;
    }
    /* 向指定地址的节点发送数据 */              
    uint8_t status = AF_DataRequest(&dist, srcEp,
                                    uClusterID,
                                    uLen,
                                    uStr,
                                    &trans_id,
                                    AF_DISCV_ROUTE, AF_DEFAULT_RADIUS);
}
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

140

主题

264

帖子

1529

积分

超级版主

Rank: 8Rank: 8

积分
1529
发表于 2018-10-4 09:53:14 | 显示全部楼层

两个节点进行通信的基本条件为:1、都在同一个网络内;2、端点号必须一致;3、得知道对方的网络通信地址。

很不错,你有自己的思考,但是通信的基本知识需要了解到一点。类比TCP/IP, 你可以ping一个地址,192.168.0.3, 而不用需要知道端口号。

在zigbee中, endpoint就是端口号,所以通信首先是找short addr, 然后才是endpoint, 然后才是cluster。在网络的传输过程,网络层只需要shortaddr,后面的都没用。路由也是基于short addr 的要求来作的,与其他信息无关。
还有一点是 endpoint 一致,而不是一样,所以才会有 dist.endPoint 这个参数,如果要一样,那本地参数与远程一样,就没有设置这个参数的意见了。换言之,知道对方的endpoint, 本方就能将数据准确地交给对方的应用层。与路由无关,再者为何时是应用层,因为数据只有交给应用层(或ZDO)处理才有意见,不然传输的目的就没有了。
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

3

主题

9

帖子

51

积分

注册会员

Rank: 2

积分
51
 楼主| 发表于 2018-10-4 10:28:11 | 显示全部楼层
您的回答我大概了解了,意思就是说节点之间的通信主要就是根据shortAddr来找到目的节点并进行通信。
但是还是不理解,这的断点号一致是什么意思?什么样是一致?什么样是不一致?能举个例子吗?
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

140

主题

264

帖子

1529

积分

超级版主

Rank: 8Rank: 8

积分
1529
发表于 2018-10-4 10:36:25 | 显示全部楼层
假定 C1的地址是0x0000,  E2的地址是0X2498,(endpoint0,1);

在C1上写发送数据的时候, dest.endpoint=1, 就可以认为是一致了,这跟C1上的endpoint, 网络中其他节点的endpoint都没有关系。
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

3

主题

9

帖子

51

积分

注册会员

Rank: 2

积分
51
 楼主| 发表于 2018-10-4 13:44:31 | 显示全部楼层
NewbitMG 发表于 2018-10-4 10:36
假定 C1的地址是0x0000,  E2的地址是0X2498,(endpoint0,1);

在C1上写发送数据的时候, dest.endpoint=1, ...

意思就是说,一致指的是要求发送的时候,目的地的端点号要跟接收数据的终端设备的端点号一致是吗?
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

78

主题

197

帖子

1022

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1022
发表于 2018-10-8 09:08:58 | 显示全部楼层
本帖最后由 a41359020 于 2018-10-8 09:10 编辑

这里的一致是指发送端发送时填的的dst.endpoint 要和接收端的source.endpoint一致,而不是发送端的source.endpoint和接收端的source.endpoint。

例:
A设备包含endPoint 0x01,B设备包含endPoint 0x02, C设备包含endPoint 0x03;

B、C设备向A设备发送数据的时候只要dst.endpoint = 0x01,A设备就可以收到。
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则