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.

[参考译文] LAUNCHXL-CC1352R1:收集器/传感器-传感器在收集器断电后不会进入孤立状态、重新加入问题

Guru**** 2482225 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1232158/launchxl-cc1352r1-collector-sensor---sensor-do-not-go-into-orphan-state-after-collector-power-loss-re-join-issue

器件型号:LAUNCHXL-CC1352R1

嗨、

我将在 FH 模式下使用收集器和传感器的 SimpleLink SDK 示例。
https://dev.ti.com/tirex/explore/node?a=BSEc4rl__6.40.00.13&devtools=LAUNCHXL-CC1352R1&node=A__ADh8veUDmQ809L8z0l6GtQ__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__6.40.00.13&r=BSEc4rl__7.10.00.98

关于这 篇文章 、其中引用了"如果功率损耗对于传感器而言太短、从而注意到收集器已离线、则不会进入孤立状态。 由于它仍然知道网络、因此它将能够向收集器发送消息。"

 

问题是、当我在超过1分钟的时间内断开收集器时、在由10个传感器组成的网络中、始终有一个或两个传感器不会进入孤立状态、因此 会发生同步损失、并且每次启动都会增加。  我可以看出这一点、因为我强制它们在成为孤立对象时进行重置、然后它们进入"搜索网络阶段"。 可在进入孤立状态时修复问题。  

我的问题是、传感器是否有可能进入未定义状态?

在  静态 void pollCnfCb (ApiMac_mlmePollCnf_t *pData)函数中的 jdlc.c 中,如果没有从收集器接收到 ack ,并且如果(devInfoBlock.dataFailures == config_MAX_DATA_failures)是 true,则存在另一个 if 语句:  
如果(CONFIG_MAC_BEART_ORDER = JDLLC_BEARGE_ORDER_NON_BEAKER)

如果在任何给定时刻为假、这是否有任何变化? 我的 CONFIG_MAC_BEACON_ORDER_ORDER 为15 (默认值)。

 else if(pData->status == ApiMac_status_noAck)
    {

            /* track the number of failures  */
            devInfoBlock.dataFailures++;

        if((devInfoBlock.currentJdllcState == Jdllc_states_joined)
           || (devInfoBlock.currentJdllcState == Jdllc_states_rejoined))
        {
            if(!CONFIG_FH_ENABLE)
            {
                /* retry poll with shorter interval in busy network */
                Ssf_setPollClock(JDLLC_RETRY_POLL);
            }
        }

        if(devInfoBlock.dataFailures == CONFIG_MAX_DATA_FAILURES)
        {
            if(CONFIG_MAC_BEACON_ORDER == JDLLC_BEACON_ORDER_NON_BEACON)
            {
                handleMaxDataFail();
            }
        }
        else
        {
            if(devInfoBlock.currentJdllcState == Jdllc_states_initRestoring)
            {
                if((!CONFIG_RX_ON_IDLE) && (!CONFIG_FH_ENABLE))
                {
                    /* set event for polling if sleepy device*/
                    Util_setEvent(&Jdllc_events, JDLLC_POLL_EVT);
                }
            }
        }
    }