TI中文支持网
TI专业的中文技术问题搜集分享网站

现在有个需求是 有几个灯要隔0.1秒由协调器 控制一起亮或者 一起灭.但出了些问题

问题1:

首先是 0.1 秒广播一次的话 会出现 zBufferFull 的问题,百度一下找到了 改MAX_BCAST    的方法了.

但终端接收 我观察了一下会出现掉包的问题.然后很频繁几个包就掉一个包. 请问有什么方法吗?

我现在的做法是

协调器0.1秒广播一次 全部灯的状态, 然后各终端根据收到数据包来亮或者灭.

================================================================

第二个问题: 如果不广播用点播的方式 , 怎么知道 下面10个节点的地址?

例如 我现在有个10节点,分到编号是1至10, 现在要1,2,3,4,5号节点亮灯, 6,7,8,9,10 灭灯

这个有什么方法吗?

我现在的方法是 组网时,终端向协调器发个数据包上报 自己的地址.

协调器 保存一份 终端的地址表.然后根据这个地址表来发送.

 

请问有其他的方法吗?

 

James Chu:

use Group function.

4.6.2PrototypeZStatus_t zclGeneral_SendGroupAdd( uint8 srcEP, afAddrType_t *dstAddr,int16 groupID, uint8 *groupName,uint8 disableDefaultRsp, uint8 seqNum );

chengzi chen:

回复 James Chu:

我做过类似的事情,协调器快速的广播数据。我是这么解决的:

在广播的时候发送时间短于300ms一次的话就会产生发送失败的现象,每9次失败几次,失败的原因为zBufferFull,而采用单播发送频率在30ms以下才会产生丢包问题,并且丢包问题不是因为zBufferFull,那么广播为什么会有300ms这么长的时间,再短就会发送失败?是不是有些参数可以配置修改?比如说MAX_BCAST、 INT_HEAP_LEN、 _NIB.BroadcastDeliceryTime等等之类的?   修改-DMAX_BCAST参数即可。默认为9,_NIB.BroadcastDeliceryTime=3000ms,-DMAX_BCAST=9,即3000ms内发送9个数据包,多余9个则发送失败,设置_NIB.BroadcastDeliceryTime=2000ms,-DMAX_BCAST=20,或者更多,则2000ms内发送20个数据包,最短间隔提高到100ms一次,修改的大一点即可。

data wu:

回复 chengzi chen:

zgBcastDeliveryTime 的单位是100ms吗?

我查了一下 默认值 是30 按这说法说是3000ms的话.

赞(0)
未经允许不得转载:TI中文支持网 » 现在有个需求是 有几个灯要隔0.1秒由协调器 控制一起亮或者 一起灭.但出了些问题
分享到: 更多 (0)