问题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的话.