This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 传感器无法切换到可用的收集器网络

Guru**** 1565925 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/944071/sensor-does-not-switch-to-available-collector-network

器件型号:CC1350

背景

我有一个使用 TI 15.4堆栈实现的传感器和收集器网络。 我能够成功地连接传感器和收集器。

问题

我有两个收集器、希望能够从传感器接收数据。 该器件能够成功连接到一个集电极、但在第一个集电极断电后无法连接到另一个集电极。

我认为这种行为是由于第一个收集器的网络配置仍然存在于传感器上。 如果按 BTN2取消关联设备并重新启动设备、我可以更改此设置。 我计划在运行时实施此故障转移、在 jdlc 代码中的"handleMaxDataFaor"周围实施。

我希望确认、在运行时在传感器上执行解离是在运行时完成收集器更改的正确方法。 这样做时、是否需要考虑任何影响? 器件是否仍然可以重新加入第一个收集器、是否应关闭 collector2的电源?

相关:

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz/f/156/t/734152?RTOS-CC1350STK-How-many-MAX-devices-or-node-can-be-connected-to-single-collector-

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz/f/156/p/768809/2856604

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、CDev、

    我指派了一名专家发表意见。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、CDev、

    这是一个非常常见的用例、您走的是正确的道路。

    您需要在运行时调用不关联 API (在按 BTN-2时调用的 API 相同)、并将传感器的状态更改为启动。

    这将强制传感器执行您在重新启动器件时强制它执行的操作。

    您可以同时打开它们、请记住、传感器将按升序扫描其通道列表中的通道、并将加入它找到的第一个网络/收集器。

    此致、

    AB

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    分享我的解决方法:

    从这里的 slev1n 帖子 中、我向 ScanCnfCb 添加了逻辑:

    if (pData->scanType = ApiMac_scantype_孤立){
    SCAN_FAIL_CTR = SCAN_FAIL_CTR + 1;
    /*如果出现过多的扫描故障,则会擦除非易失性内存*/
    如果(SCAN_FAIL_CTR >= NUMBER_OL_MAX_SCAN_FAIL)
    {
    Jdlc_sendDisconnocationRequest();
    Util_setEvent (&Sensor_Events、sensor_start_EVT);
    sendAssocReq();
    SCAN_FAIL_CTR = 0;
    
    }
    } 

    这将处理发送取消关联请求、重置为开始状态(将调用 Jdlc_join)。 sendAssocReq 比我想的预期结果更具攻击能力。 请求将失败,进入 else 块并重置 parentFound。

    此外、我修改了 jdlc.c 中的 beaconNotifyIndCb

    if (checkBeaconOrder (pData->panDesc.superframeSpec)=true)
    {
    devInfoBlock.panID = pData->panDesc.coordPanId;
    panIdMatch = true;
    // if (devInfoBlock.panID = JDLLC_INVALID_PAN)
    // {
    // /*设备可以加入任何网络,与
    //关联 *接收信标的第一个协调器*/
    // devInfoBlock.panID = pData->panDesc.coordPanId;
    // panIdMatch = true;
    //}
    // /*检查传入 PAN ID 以查看它是否是有效的协调器*//
    否则、如果(devInfoBlock.panID =pData->panDesc.coordPanId)
    // {
    // panIdMatch = true;
    //} 

    这解决了 LEV1n 与他的"测试4"一起面临的问题。 如果传感器发送了不相关的请求、但集电极已死、

    disassoCnfCb 函数将进入 else 块、而不会重置 devinfoBlock 的 PAN ID。 引入第二个收集器时、由于此原因、panId 无法匹配。

    需要注意的一些事项:

    此解决方案将状态从 scanOrphan 更改为 scanActive。 这将改变扫描频率  

    CONFIG_SCAN_BACKOFF_INTERVAL 中的 CONFIG_ALOW_退避_INTERVAL