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.

路由设备汇报数据失败不重发

Other Parts Discussed in Thread: Z-STACK

设备是路由,汇报属性后父节点协调器没有ack 6240行,6244行设备发出route request,之后汇报的数据都又另一个路由转发了。但这条数据失败了。

之前的协调器的前两次 linkstatus 6160 6202,与设备B478已经不通了,设备与协调器的还是通的。这个情况怎么解决

路由linkstatus不同6160行6264行.zip

  •  路由设备汇报数据没有收到ack,发起了route request,然后有relay,之后数据正常,但这条数据丢失了,怎么办 

  • 建议加上APS-ACK机制。
    AF_DataRequest的options參數上去使能AF_ACK_REQUEST后,可以收到ACK confirm 回调则确认发送成功。
  • 我的问题是怎么回事呢?正常的吗?还是bug
    都加APS-ACK好像大大增加网络通讯了,APS-ACK本身也有需要转发。各家品牌产品貌似只有个别安防设备使用了,路由设备几乎都没有
  • 你的问题看上去路由设备汇报数据 没有发送成功,然后重发了3次都没成功,是设备找不到ZC了。ZR 认为原有路径已经失效,route request 去寻找一个新的路径,这些都是正常操作。
    dev.ti.com/.../z-stack-overview.html
  • em,前面分析都是对的,路由失效也很正常,发送数据是需要重新发现路由。但是发现路由成功后这个数据是不是应该再次发送啊。否则数据丢失了啊。
  • 并不会重发,因为失败后已经重发了三次,重发失败释放了RF buf这个数据已经释放掉了,除非你自己去做逻辑。
  • 那这个设计是不是不太合理啊。如果是路由失效很正常的。父节点断电或者什么情况都会导致路由失效,那么不能自动修复吗?非要等到应用发送数据时候,才发现路由不通,才重新建立路由,然后建立成功也不重发,这条数据就丢失了吗?
    linkstatus不是没15s发一次吗,维护邻居表,没有用吗?设计就注定路由发现时候丢失一条数据?
  • Z-Stack 3.0
    Developer’s Guide 5.2 Routing protocol
    the NWK layer will repeat the process of transmitting the packet and waiting for the
    acknowledgement, up to a maximum of NWK_MAX_DATA_RETRIES times. The maximum data retries in the NWK
    layer can be configured in f8wconfig.cfg. If an active entry cannot be found in the routing table or using an
    entry failed after the maximum number of retries, a route discovery is initiated and the packet is buffered until that
    process is completed.

    最后一句话,当重发失败最大次数后,路由发现被启动并且数据包被缓存直到进程被结束。没有释放buf啊,如果重发失败后启动路由发现,之后不再次启动重发,那么最后一句话什么意思呢
  • zstack这种情况都没有重复数据吗?这样的情况应该会碰到很多啊,大家都是自己再去写重发机制吗?重发机制不好写啊
  • 你的摘录的那段说的是NWK_MAX_DATA_RETRIES 是网络层重发次数,重发NWK_MAX_DATA_RETRIES没收到就释放了。
    APS-ACK你应该是知道的吧,使用APS-ACK,当接收端收到了会回复ACK或者response。发送端没有收到ACK或者response就去重发。定义一个定时器发送数据出去开始计时,一段时间内没有收到反馈,再去重发。
  • 自己写重发比较复杂,比如一个门磁汇报先报开,后报关。开的那次失败了路由发现,重新建立路由,下一次的关就会成功,这个时候再去重发失败的那次开。就会导致网关收到门磁的最后一次状态是开。实际最后一次状态应该是关。

    数据应该顺序汇报给网关,否则网关判断状态会错误记录最新状态。
    zstack发送数据失败了重新路由发现的数据不应该重发吗?任由数据丢失一次吗?下一次才正常?

    NWK_MAX_DATA_RETRIES 不就是mac重发次数吗,aps ack是另外一个参数修改。如果目的没有收到数据,aps重发都不会起作用