主题:SysConfig 中讨论的其他器件
工具/软件:
问题与此非常相似
添加 20-21 传感器后、我们会观察到不正确的行为。
从转储中、我们可以看到、在轮询请求之后、协调器不会向传感器发送数据。 我们可以检查代码中的哪些内容?
RX 和 TX 队列大小设置为 8。 问题取决于网络中的传感器数量。
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.
工具/软件:
问题与此非常相似
添加 20-21 传感器后、我们会观察到不正确的行为。
从转储中、我们可以看到、在轮询请求之后、协调器不会向传感器发送数据。 我们可以检查代码中的哪些内容?
RX 和 TX 队列大小设置为 8。 问题取决于网络中的传感器数量。
我们重复了测试、计数器没有增加、我们显示。 仅增加 sensorMessagesReceived
collector_statistics.ackFailures
Collector_statistics.channelAccessFailures
collector_statistics.otherTxFailures
collector_statistics.rxDecryptFailures
collector_statistics.txEncryptFailures
collector_statistics.txTransactionExpired
collector_statistics.txTransactionOverflow
Collector_statistics.sensorMessagesReceived
很奇怪的是、我们没有看到仅对一个传感器的响应、而是看到来自同一传感器的数据请求之间的响应(重试之间)我们看到协调器和其他传感器之间的通信成功、看起来只有一个传感器通信“卡住“。 但下次使用另一个传感器时会随机发生。
我们使用禁用的 MAC_SEC 进行了新的测试
#define CONFIG_SECURE 错误
而确定

收集器侧
下面的网络转储仅过滤了一个有问题的传感器。 因为您可以看到协调器 5 次没有响应、传感器状态更改为 Orphan、然后是协调器重新调整事件。 在转储时、您看不到、但在任何类型的消息数据或数据请求之后、协调器向传感器发送了 ACK。

e2e.ti.com/.../network-dump-full.zip
完整的网络转储
高 SV、
感谢您的完整拍摄。
很抱歉弄错了。 您对轮询指示回调是 pollIndCB。 我要引用的是,当收集器发送消息成功的时候,Mac 层返回 与 API Mac 状态成功的 dataCnfCB。
但在您的监听日志中、我们现在可以清楚地看到收集器没有将数据发送到轮询传感器、因此它转换为孤立。
该日志还显示收集器在 2s 后收到另一个数据请求。我认为、这里实际上可能会出现时序问题、因为收集器会尝试使用配置消息来设置传感器计时器、使每个传感器都有不同的插槽。
为了在我们进行进一步调试之前进行确认、您是否以 5s(而不是 2s)的轮询和报告间隔测试了同一网络、那么错误是否持续存在?
此致、
Theo
我们更改了周期、问题 在 5 秒周期中似乎并不常见、而在 10 秒周期中则更少、因此取决于周期。
不确定我是否理解“收集器尝试使用配置消息来设置传感器计时器、以便每个传感器都有不同的插槽。“
我们修改了协调器的原始代码、收集器不会向传感器发送任何配置、我们仅使用不带任何配置选项的数据消息、因为我们不需要它。 您能否详细解释一下协调器算法、配置消息和时隙? 时隙是否是必要的、我想该消息可以在任意随机时间出现在协调器上、并且应该进行处理?
您好、
感谢您的确认。 我来解释一下发生了什么。
当运行 15.4-Stack 且传感器加入收集器时、它需要向收集器发送配置请求。 收集器将以下配置消息发送到 sensor.c processConfigRequest () 中接收的传感器。 这会重新初始化轮询和报告计时器、并通过在不同时间将配置消息发送到不同的传感器、最终在可能重叠或冲突的不同“时隙“触发其计时器。
在您的情况下、似乎正是这种碰撞导致一些传感器不再接收数据。
您是否 从应用程序中删除了 processConfigRequest ()(传感器)和配置消息发送(收集器)?
此致、
Theo
高 SV、
我想这就是问题的原因所在。 网络设置需要配置请求。
请参阅下面的过程摘要。
工程设置
-在传感器 SysConfig 中,您可以配置报告和轮询间隔。
-在收集器 SysConfig 中、您可以配置报告和轮询间隔。
网络加入
-收集器打开网络。
-传感器开始查找网络并使用传感器 SysConfig 中的报告和轮询间隔。
-传感器加入收集器网络。
-传感器将配置请求发送给收集器,并通过配置消息进行回复。
-传感器处理配置消息,并使用收集器 SysConfig 报告和轮询间隔重新初始化其网络计时器。
最后一步确保传感器的网络计时器在不同时间点重新初始化、从而有助于避免冲突并创建“不同的插槽“。
是否可以尝试使用配置消息过程?
此致、
Theo
在 ALG 下方、收集器如何选择“时隙“。
正如您所看到的、对于所有使用的传感器、固定数据上传周期、我在每个传感器间隔中没有看到任何个人、如果我错了、请纠正我。
我们使用固定的 CONFIG_REPORT_INTERVAL、因此不需要配置消息。
CONFIG_REPORT_INTERVAL
CONFIG_POLLING_INTERVAL
/*!
*@为所有关联设备生成配置请求
*需要一个。
*/
静态 void generateConfigRequests (void)
{
#ifndef POWER_MEAS
int x;
if (certification_test_mode)
{
/*在认证模式下,只能背对背上行链路
*应支持数据流量*/
返回;
}
/*清除所有超时事务*/
适用于 (x = 0;x < CONFIG_MAX_DEVICE;x++)
{
if (((Cllc_associatedDevList[x].shortAddr!= CSF_INVALID_SHORT_ADDR)
&&(Cllc_associatedDevList[x].status & CLLC_Assoc_STATUS_ALIVE)
{
if (((Cllc_associatedDevList[x].status &
(Assoc_config_sent | Assoc_CONFIG_RSP))
==(Assoc_config_sent | Assoc_CONFIG_RSP))
{
llc_associatedDevList[x].status &=~(Assoc_config_sent)
| Assoc_CONFIG_RSP);
}
}
}
/*确保我们一次只发送一个配置请求*/
if (findDeviceStatusBit (Assoc_config_MASK、Assoc_config_sent)== NULL)
{
/*在所有设备上运行*/
适用于 (x = 0;x < CONFIG_MAX_DEVICE;x++)
{
/*确保该条目有效。 */
if (((Cllc_associatedDevList[x].shortAddr!= CSF_INVALID_SHORT_ADDR)
&&(Cllc_associatedDevList[x].status & CLLC_Assoc_STATUS_ALIVE)
{
uint16_t status = Cllc_associatedDevList[x].status;
/*
设备是否已发送或已收到配置请求?
*/
if ((((status &(assoc_config_sent | assoc_config_RSP))== 0)))
{
ApiMac_sAddr_t dstAddr;
collector_status_t stat;
/*设置目标地址*/
dstAddr.addrMode = ApiMac_addrType_short;
dstAddr.addr.shortAddr =
llc_associatedDevList[x].shortAddr;
/*发送配置请求*/
STAT = Collector_sendConfigRequest (
&dstAddr、(CONFIG_FRAME_CONTROL)、
(CONFIG_REPORT_INTERVAL)、
(CONFIG_POLLING_INTERVAL));
if (stat == collector_status_success)
{
/*
标记消息已发送并等待响应
*/
Cllc_associatedDevList[x].status || Assoc_config_sent;
Cllc_associatedDevList[x].status &=~Assoc_CONFIG_RSP;
}
/*一次只执行一个*/
休息;
}
}
}
}
#endif
}
高 SV、没有单独的时间间隔。
当传感器从收集器接收到配置消息时、它正在重新初始化其轮询和报告计时器。
配置消息会在不同时间点发送给所有传感器、这意味着它们会在不同时间重新初始化计时器。
这会导致“不同的槽位“。
您可以在 sensor.c -> processConfigRequest () 中看到传感器计时器的重新初始化。
请使用此配置消息进行测试、因为它是默认设置。
此致、
Theo
我们使用一个传感器进行了新的测试、发现了相同的问题、因此不是由碰撞引起的。
e2e.ti.com/.../18.07.25_2D00_sensor_5F00_side_2D00_wireshark-_2800_1_2900_.pcapng.zip