微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > ZLL 重新上电后不能通信的问题

ZLL 重新上电后不能通信的问题

时间:10-02 整理:3721RD 点击:

你好!

请教一个问题!

前提: 有一个遥控器E1和一个路由R1,分别烧录SampleRemote-EB-EndDevice工程和SampleLight-Zlight-RouteDevice工程。我在遥控器中用串口来触发TOUCH_LINK_KEY来与路由R1成功组网。并在遥控器E1中调用zclGeneral_SendOnOff_CmdOn()和zclGeneral_SendOnOff_CmdOff()函数成功 开/关 操作路由R1,表明遥控器E1与路由R1通信OK。

现象: 当我将遥控器E1重新上电后,我在遥控器E1中直接调用zclGeneral_SendOnOff_CmdOn()和zclGeneral_SendOnOff_CmdOff()函数来进行操作路由R1时,发现路由R1没有任何反应。

问题: 怎么遥控器E1重新上电后就不能再与路由R1通信了呢? 谢谢!

注:SampleRemote-EB-EndDevice工程(遥控器E1)添加我自己的串口处理函数,而SampleLight-Zlight-RouteDevice工程(路由R1)的代码没有作任何修改。

   在遥控器E1中获取 linkedTargets值始终保持相同的值。

你好,

在重启以后,当你再去ON/OFF控制一个灯的时候,调用的是下面程序

zclGeneral_SendOnOff_CmdOn( SAMPLEBRIDGE_ENDPOINT, &zllSampleBridge_DstAddr, FALSE, sampleBridgeSeqNum++ );

在上面这个函数里面因为Reset,所以zllSampleBridge_DstAddr被初始化,所以值为0

在zllSampleBridge_Init被初始化。

那么这个命令显示是一个无效的命令,因为目的地址不对。

正确的做法是,需要选择一个合适的灯,选择灯的时候,就把这个目的地址获取到了,之后就可以控制了

选择灯也是通过按键实现的

if ( keys == DEV_SEL_UP_KEY )
{
if ( linkedAddrNum > 0 )
{
if( (linkedAddrSelIdx+1) >= linkedAddrNum )
{
linkedAddrSelIdx = 0;
}
else
{
linkedAddrSelIdx++;
}
zllSampleBridge_DstAddr.addrMode = afAddr16Bit;
zllSampleBridge_DstAddr.addr.shortAddr = linkedTargets.arr[linkedAddrSelIdx].Addr;
zllSampleBridge_DstAddr.endPoint = linkedTargets.arr[linkedAddrSelIdx].EP;

zclGeneral_SendIdentify( SAMPLEBRIDGE_ENDPOINT, &zllSampleBridge_DstAddr,
SAMPLEBRIDGE_CMD_IDENTIFY_TIME, FALSE, sampleBridgeSeqNum++ );

HalLcdWriteStringValue( "Dev Sel:", zllSampleBridge_DstAddr.addr.shortAddr, 16, HAL_LCD_LINE_3 );
}
else
{
HalLcdWriteString( "Dev Sel: no trgt", HAL_LCD_LINE_3 );
}
}

if ( keys == DEV_SEL_DN_KEY )

VV

  你好,感谢你的回复,谢谢^_^

 你说得很对,遥控器E1 重新上电后,zllSampleBridge_DstAddr会被初始化为0.

所以我为了避免zllSampleRemote_DstAddr的值被初始化,我在自己的串口函数中直接调用zclGeneral_SendOnOff_CmdOn( SAMPLEREMOTE_ENDPOINT, &zllSampleRemote_DstAddr_mod, FALSE, sampleRemoteSeqNum++ );这个zllSampleRemote_DstAddr_mod值是从串口中获取的网络短地址。这样一来遥控器E1重新上电后,在串口调用时zllSampleRemote_DstAddr_mod值就不会变了,但还是不能通信,现象和原来一样。

这怎么会这样呀?

 

节点的信息地址保存的是否正确

VV

   你好!

  你说的“节点信息地址”是网络地址吗?你说的“保存”在哪里?

  我保证在整个过程中使用的节点网络地址都是正确的,我从linkedTargets变量取到的。

谢谢!

VV

  你好!

   我在这里再次把我的问题重新说一次,请原谅我这么啰嗦哈!

前提:第一次的实验现象是 有一个遥控器E1和一个路由R1,分别烧录SampleRemote-EB-EndDevice工程和SampleLight-Zlight-RouteDevice工程。我在遥控器中用串口来触发TOUCH_LINK_KEY来与路由R1成功组网。并在遥控器E1中调用zclGeneral_SendOnOff_CmdOn()和zclGeneral_SendOnOff_CmdOff()函数成功 开/关 操作路由R1,表明遥控器E1与路由R1通信OK。为了避免zllSampleRemote_DstAddr的值在重新上电时被初始化,我在自己的串口函数中直接调用zclGeneral_SendOnOff_CmdOn( SAMPLEREMOTE_ENDPOINT, &zllSampleRemote_DstAddr_mod, FALSE, sampleRemoteSeqNum++ );这个zllSampleRemote_DstAddr_mod(这个是我自己定义的)值是从串口中获取的网络短地址(这个地址我是从linkedTargets获取的,我确保在整个环节中使用节点的网络地址是正确的)。这样一来遥控器E1重新上电后,在串口调用时zllSampleRemote_DstAddr_mod值就不会变。

现象: 第二次实验现象是当我将遥控器E1重新上电后,我同样在遥控器E1的串口函数中直接再次调用zclGeneral_SendOnOff_CmdOn()和zclGeneral_SendOnOff_CmdOff()函数来进行操作路由R1时,发现路由R1没有任何反应。这个过程中什么也没有变,在第一次实验中的设置我都没有变,变的是我给遥控器E1重新上电了就不能通信了。

问题: 怎么遥控器E1重新上电后就不能再与路由R1通信了呢? 谢谢!

注:SampleRemote-EB-EndDevice工程(遥控器E1)添加我自己的串口处理函数(这个函数调用TOUCHLINK/开灯/关灯等等命令),而SampleLight-Zlight-RouteDevice工程(路由R1)的代码没有作任何修改。

在遥控器E1中获取 linkedTargets值始终保持相同的值。

你把zllSampleRemote_DstAddr_mod完整的赋值过程发出来看下,

另外你能否把整个过程,用Sniffer抓包下来看看!用附件上传抓包文件

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top