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-CC13-90:TI-15.4堆栈中从传感器节点到收集器节点的数据丢失

Guru**** 2482105 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1250397/launchxl-cc13-90-data-loss-from-sensor-node-to-collector-node-in-ti-15-4-stack

器件型号:LAUNCHXL-CC13-90

您好!

我们有一个系统使用 TI-15.4堆栈传感器/收集器作为网络协处理器。 外部 MCU (MSP430)会定期尝试通过传感器节点向外发送数据。 如果没有收到操作成功的显式确认代码、外部 MCU 将尝试再次重新发送相同的数据、直到收到此类确认。 此类确认代码通过以下函数发送到外部 MCU:

// sensor.c

/*!
 * @brief      MAC Data Confirm callback.
 *
 * @param      pDataCnf - pointer to the data confirm information
 */
static void dataCnfCB(ApiMac_mcpsDataCnf_t *pDataCnf)

 一般来说、系统运行良好。 在测试期间、传感器节点有时会发送 noAck 回调代码、并且外部 MCU 将重新发送、由它进行处理。

//api_mac.h

/*!
 The operation or data request failed because no
 acknowledgement was received
 */
ApiMac_status_noAck = 0xE9,

但经过现场长时间测试、我们发现尽管采用了重新发送策略、但仍有小部分预期由外部 MCU 发出的数据包未到达目的地。 百分比范围为0%至1%、大致取决于网络中的传感器节点数量以及传感器节点与收集器节点之间的距离。 传感器节点越多、传感器节点越多、数据丢失的百分比就越大。

理论上、此类数据丢失可能发生在以下3个步骤中的任何一个:

1) 1)通过 UART 从外部 MCU 传输到传感器节点。 如果在此步骤中数据包损坏、则传感器节点根本不会发出确认代码、因此不会触发重新发送。

2) 2)通过射频从传感器节点到收集器节点。  

3)集电极到外部 MCU (STM32)。 如果收集器节点未能发送其接收到的一些数据包、则说明了在传感器节点发送确认发送操作成功后数据包丢失的原因。

我们正在新固件中添加配置、以防止1)这种情况发生。 但是、这是否有助于减少数据丢失需要很长时间才能找出。 因此、我想评估2)和3)的可能性、并查看是否可以采取任何措施来缓解。

提前感谢。

ZL

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

    您好、Zhiyong、

    感谢您发送编修。

    如您所说、他们的系统中有可能丢失数据包。 有几个问题:

    1) 1)他们的软件基于哪个版本的 SDK?

    2) 2)他们在哪种模式下使用堆栈? 非信标、信标或频跳?

    接下来的几个调试步骤:

    a)您可以使用数据包监听器来收集通过无线电传输的数据包的日志。 如果这种情况经常发生1%、那么您应该能够在日志中发现它。

    b)您可以使用全局变量  Collector_statistics 和 Sensor_msgStats 来查看发送和接收的数据包数量。  

    谢谢、

    M·H

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

    尊敬的 Marie:

    感谢您的答复。 要回答您的问题、请1) SDK 版本:4.20.1.103;2)模式:跳频。

    我们在开发阶段从未发现数据丢失、但当时网络中通常只有2 ~ 3个传感器节点、测试时频繁使用数据包、但测试周期较短、例如一天中每10秒发送一次数据。 我应注意的是、实验室中的测试也处于非常有利的条件、传感器节点被放置在靠近收集器节点的位置。  我们只注意到了可能受到其他工业设备干扰的现场数据丢失。 这就是为什么我认为可能会在步骤2)发生数据丢失、即使收集器节点做出显式确认也是如此。

    此致!

    ZL

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

    您好、Zhiyong、

    好的。

    问题是否可以在仅连接一个节点的情况下重现?

    我想比较  Sensor_msgStats 和 Collector_statistics、以查看设备是否就发送/接收的数据包数量达成一致。

    谢谢、

    M·H

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

    在浏览过各种系统日志后、 我相信在最后一步很可能会丢失数据:无法输出到外部 MCU。 有时收集器节点上的射频内核可能保持活动状态、并在另一个应用内核挂起时发送确认、因此会导致应用内核之间挂起、然后由外部 MCU 复位的数据丢失。 我认为在这种情况下、唯一的解决方案就是应用内核的不稳定性。