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.

[参考译文] CC2538:Z-Stack协调器无法清除到连接的休眠终端设备的间接消息

Guru**** 2551870 points
Other Parts Discussed in Thread: Z-STACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/586537/cc2538-z-stack-coordinator-is-not-able-to-purge-an-indirect-message-to-a-connected-sleeping-enddevice

部件号:CC2538
主题中讨论的其他部件:Z-stack

您好,

我´m将Z-Stack Mesh 1.0 =0用作连接到休眠终端设备的协调器,因此,仅发送间接消息。

由于内存限制,每个连接的终端设备只存储一条间接消息。

使用应用程序定义的转换ID (用作以后标识消息的句柄,例如在数据确认时),使用AF_DataRequest()发送消息。

直到这里一切都正常。

由于在实际发送消息之前,可能需要长达一个小时的时间,具体取决于终端设备的轮询配置,因此我需要实现删除尚未发送的待处理消息的可能性。

我没有找到任何关于这个问题的文件或论坛讨论。

Z-Stack提供的唯一可能是ZMAC.h中定义的以下函数:

extern ZMacStatus_t ZMacPurgeReq (字节msduHandle);

遗憾的是,此函数返回“成功”,但不清除给定句柄(即应用程序定义的转换ID)指示的消息。

如果我等待终端设备的下一轮询请求,则仍会发送消息。

此外,我在一个for循环中调用了ZMacPurgeReq()(希望删除所有待处理的消息...),但消息仍然被发送!

n´t有人知道为什么这种方法不起作用吗?

此致

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

    您如何"掌握"消息? 是否更改了默认值Nwk_indiry_MSG_timeout (在f8wConfig.cfg中)? 默认情况下,此值定义为7秒,因此,如果终端设备在7秒后未轮询,则发送到TX队列的消息将在7秒后删除。 您可以根据应用程序的需要将此值增加到更大的值,最多可达6.5535万秒。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想您应该减少Nwk_indiry_MSG_TIMEOUT以尽快清除间接消息队列。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Jason:

    感谢您的回复。

    ´ll我的解释不够充分,所以我再试一次:

    我´m不会在应用程序级别"保留"消息,因为Z-Stack会根据其功能处理休眠终端设备(SED)的消息,这些功能在设备加入时进行评估。
    ´s的超时值不是问题,所有这些都可以正常工作。

    假设一种配置,即每1小时从SED轮询一次消息。
    ´s协调员在某个时间向SED发送消息,现在它已在消息队列中。
    ´s,假设下次SED将再次轮询消息时,仍将有50分钟的时间。

    在下次SED轮询之前的某个位置,一般状态会发生某种变化,协调员希望使用函数ZMacPurgeReq()从队列中删除最后一条消息,因为它根本不会被发送。
    调用ZMacPurgeReq()后,将发送新消息(在这种情况下分别放入队列)。

    的调用应直接从队列中删除消息,这是否正确?
    这不是我目前唯一的问题...

    因此,我的问题是:
    ZMacPurgeReq()是否应如前面所述删除待处理的消息?
    如果是:为什么它不起作用? 这是Z-Stack中的一个错误吗?
    如果否:在上述情况下,是否可以删除根本不发送的消息?

    再次感谢您的支持。

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我之前提到的,Z-Stack设计为在Nwk_indiry_MSG_timeout (默认值为7)秒后自动从TX队列中删除间接消息。 假设我有协调员'C'和设备'A'。 使用默认堆栈配置时,如果我从'C'发送AF Data Req,目标地址为'A','A'轮询'C'以获取此数据的时间不超过7秒,否则'C'将自动从其TX队列中删除缓冲数据包。

    我想说的是,在正确配置了这个编译时变量Nwk_indiry_MSG_timeout后,你不应该需要“清除”队列,Z-Stack会自动为你执行此操作。

    顺便说一下,您是否有任何理由使用Z-Stack Mesh 1.0 0.0而不是新的Z-Stack 3.0 ? Z-Stack 3.0 提供了许多错误修复和较旧堆栈的稳定性改进,因此如果可能,我建议您进行升级。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉我的回复太晚了,但我已被其他任务所填满。

    对于所描述的情况,仍然没有答案。

    正如我之前提到的:这不是配置问题。

    我对Z-Stack有一定的经验,并且知道如何处理"标准"功能(包括向SED发送间接消息)。

    设备'A'每1小时轮询一次消息。
    此轮询时间也在'C'中配置。
    这里仍然没有问题。
    所有消息均已正确发送...

    现在:
    'c'向'a'发送消息(=>现在它在消息队列中等待'a'轮询)
    由于错误或状态更改或其他原因,'C'想在该消息实际发送到'A'之前删除它...

    要达到此'C',调用ZMacPurgeReq()来删除排队的消息,根本不会发送。
    这(仅此)不起作用!

    因此,我的问题仍然是:
    ZMacPurgeReq()是否应如前面所述删除待处理的消息?
    如果是:为什么它不起作用? 这是Z-Stack中的一个错误吗?
    如果否:在上述情况下,是否可以删除根本不发送的消息?

    有人吗?