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.

请教:Z-Stack3.0.2 ZNP的应用

Expert 1395 points
Other Parts Discussed in Thread: Z-STACK, CC2530

芯片型号:CC2530F256

协议栈:Z-Stack3.0.2

测试:通过Z-TOOL2.0

Start Time: 2019/9/4 2:16:49

*** WARNING ***
Expected Z-Stack version (2.7.1) does not match with actual Z-Stack version (2.7.2). Z-Tool may not work properly.

<TX>02:18:31.78 COM1 SYS_OSAL_NV_WRITE (0x2109)
Id: 0x0003
Offset: 0x00
Len: 0x01
Value: . (0x03)

<RX>02:18:31.81 COM1 SYS_OSAL_NV_WRITE_SRSP (0x6109)
Status: SUCCESS (0x0)

<TX>02:18:57.53 COM1 SYS_RESET (0x4100)
Type: 0x00 (HARD RESET) (0x0)

<RX>02:19:00.64 COM1 SYS_RESET_RESPONSE (0x4180)
Reason: 0x02
TransportRev: 0x02
Product: 0x00
MajorRel: 0x02
MinorRel: 0x07
HwRev: 0x02

<TX>02:21:17.02 COM1 SYS_OSAL_NV_WRITE (0x2109)
Id: 0x0057
Offset: 0x00
Len: 0x01
Value: . (0x00)

<RX>02:21:17.06 COM1 SYS_OSAL_NV_WRITE_SRSP (0x6109)
Status: INVALID_PARAMETER (0x2)

<TX>02:35:40.69 COM1 SYS_OSAL_NV_WRITE (0x2109)
Id: 0x0057
Offset: 0x00
Len: 0x01
Value: . (0x00)

<RX>02:35:40.73 COM1 SYS_OSAL_NV_WRITE_SRSP (0x6109)
Status: INVALID_PARAMETER (0x2)

<TX>02:39:32.9 COM1 APP_CNF_BDB_START_COMMISSIONING (0x2F05)
CommissioningMode: (0x04) Network Formation (0x4)

<RX>02:39:39.26 COM1 APP_CNF_BDB_START_COMMISSIONING_SRSP (0x6F05)
Status: SUCCESS (0x0)

<RX>02:39:39.26 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:39.27 COM1 APP_CNF_BDB_COMMISSIONING_NOTIFICATION (0x4F80)
Status: 1 (0x1)
Commissioning Mode: 0x02 (Formation) (0x2)
Commissioning Mode: 0x04 (Network Formation) (0x4)

<RX>02:39:39.53 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:39.79 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:40.06 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:40.32 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:40.59 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:41.15 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 9 (0x9)

<RX>02:39:41.15 COM1 APP_CNF_BDB_COMMISSIONING_NOTIFICATION (0x4F80)
Status: 0x00 (Success) (0x0)
Commissioning Mode: 0x02 (Formation) (0x2)
Commissioning Mode: 0 (0x0)

<TX>02:40:35.8 COM1 UTIL_GET_DEVICE_INFO (0x2700)

<RX>02:40:35.81 COM1 UTIL_GET_DEVICE_INFO_RESPONSE (0x6700)
Status: SUCCESS (0x0)
IEEEAddr: 0x00124B0007665581
ShortAddress: 0x0000
DeviceType: COORDINATOR, ROUTER, END_DEVICE (0x7)
DeviceState: DEV_ZB_COORD (0x9)
NumAssocDevices: 0x00
AssocDevicesList

做了以上操作,也可以获取设备信息

看论坛帖子说下来该注册端点和发送数据。问题如下:

1、端点注册AF_REGISTER

EndPoint: 
AppProfID: 
AppDeviceId: 
AppDevVer: 
LatencyReq: 
AppNumInClusters:
AppInClusterList: 
AppNumOutClusters: 
AppOutClusterList: 

2、AF_DATA_REQUEST (0x2401)

DstAddr: 
DestEndpoint: 
SrcEndpoint: 
ClusterID: 
TransID: 
Options: 
Radius: 
Len: 
Data: 

以上参数怎么获取?该怎么填,有那些资料可以参考?

3、终端用的是Z-Stack 3.0.2  SampleLight例程,把控制回路增加到三路,目前用SampleSwitch作协调器

可以控制其中的一路,若用ZNP协调器控制是不是要注册三个端点?谢谢!

  • 您好!首先感谢您的回复和帮助。在您的帮助和指导下目前环境采集部分已基本搞惦,现在环境采集部分有两个小问题:

    1、在终端刚入网后的一段时间内,终端在给协调器发送ClusterID:0x0402的温湿度数据的同时,也会一直给协调器发送ClusterID:0x0003的数据(如下图),有办法屏蔽么?

    2、串口打印的数据和协调器收到的数据不一致;目前串口打印的温度会比协调器接收到的温度高1度,比如:串口打印22,协调器收到23。湿度:串口显示的会比协调器收到的数值个位低2,比如打印的是55%,协调器收到是53%,这应该是哪个环节出了问题呢。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 1. 之前看你的抓包檔有看到你去綁定ClusterID:0x0003,應該是這樣才會發送ClusterID:0x0003的数据,不要綁定應該就不會發送了

    2. 這個你要自己調試看看你的程序那理有問題

  • 好的,我回头再修改下代码试试,十分感谢您的回复和帮助。我接下来开发门磁、漏水报警终端,我刚才看了下资料:

    SampleCIE

    The Control and Indicating Equipment (CIE) implements the following clusters:

    • Server Side:
      • IAS Ancillary Control Equipment (ACE)
    • Client Side:
      • IAS Warning Device (WD)
      • IAS Zones

    SampleFireDetector

    The Fire Detector implements the following clusters:

    • Server Side:
      • IAS Zones

    SampleWarningDevice

    The Warning Device implements the following clusters:

    • Server Side:
      • IAS WD
      • IAS Zones

    我选哪个更合适,感觉

    SampleCIE
    The Control and Indicating Equipment (CIE) implements the following clusters:
    Server Side:
    IAS Ancillary Control Equipment (ACE)
    Client Side:
    IAS Warning Device (WD)
    IAS Zones

    更合适,麻烦您帮指导下。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 门磁、漏水报警终端應該用ias zone
  • 好的,谢谢!十分感谢您的回复和帮助。我回头看看代码,您几号放假?别影响您正常休假。
    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 我還沒放假,不客氣
  • 好的,我回头看下代码,到时有什么问题再来请教。
    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!十分感谢您的指导帮助和快速回复!
    我现在在用SampleCIE的例程做门磁、漏水传感器的开发,截图如下:

    问题如下:

    1、绑定协调器时我在初始化代码尾部放置了:

     bdb_StartCommissioning( BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING );

    但是绑定不了,感觉和温度传感器出现同样的情况,终端会连续发送12次广播然后就停下来了,是不是也需要像温度传感器那样去绑定呢?

    2、在zcl.h文件中看到:

    // Security and Safety (SS) Clusters
    #define ZCL_CLUSTER_ID_SS_IAS_ZONE 0x0500
    #define ZCL_CLUSTER_ID_SS_IAS_ACE 0x0501
    #define ZCL_CLUSTER_ID_SS_IAS_WD 0x0502

    我该用哪个呢?是0x0500么?

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 1. 怎麼會用SampleCIE的例程做门磁、漏水传感器的开发?不是說過了要用IAS Zone?
    2. IAS Zone绑定就是用ZCL_CLUSTER_ID_SS_IAS_ZONE 0x0500
  • 哦,不好意思,我下载到的代码包里:

    我再去找找看。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • FireDetector就是用IAS Zone,你可以用它下去改成做门磁、漏水传感器
  • 好的,十分感谢您的指导帮助和快速回复!
    我这就用SampleFireDetector这个历程来修改。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助。

             现在用SampleFireDetector的例程来测试,在绑定时有点问题请教,终端的端点是:#define SAMPLEFIREDETECTOR_ENDPOINT     17协调器的端点我该怎么选呢?刚才测试了7、8、9、17好像都不行。

             再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 你自己的协调器的端点不知道是多少?

  • 是的,不好意思,我学zigbee时间不长,通过哪里可以获取,或者看到呢。我刚才试了几个之前用的端点都不可以。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 你协调器怎樣註冊端点?

  • 您好!首先感谢您的回复和帮助。我用的是ZNP的方式,按照下面的序列初始化:

    1、SYS_OSAL_NV_WRITE (0x2109)
    2、SYS_RESET (0x4100)
    3、SYS_OSAL_NV_WRITE (0x2109)
    4、APP_CNF_BDB_SET_CHANNEL (0x2F08)
    5、APP_CNF_BDB_SET_CHANNEL (0x2F08)
    6、APP_CNF_BDB_START_COMMISSIONING (0x2F05)
    7、UTIL_GET_DEVICE_INFO (0x2700)
    8、SYS_OSAL_NV_WRITE (0x2109)
    9、APP_CNF_BDB_START_COMMISSIONING (0x2F05)

    之前开关类的,是在开关上电前执行APP_CNF_BDB_START_COMMISSIONING (0x2F05)在终端初始化部分执行了绑定。上个开发 温度传感器是按终端里的端点对应的去绑定的。

    再次对您的回复及支持和帮助致以由衷的感谢!谢谢!

  • 你應該用AF_REGISTER去註冊endpoint
  • 您好!十分感谢您的指导帮助和回复!

    试过用AF_REGISTER去注册,貌似无效,截图如下:

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 你協調器上IAS Zone cluster 要放在AppOutClusterList

  • 您好!十分感谢您的指导帮助和回复!

    我分别测试了下面两种配置:

    好像还是不行,当我按下按键执行:

    if ( keys & HAL_KEY_SW_6 )
    {
    // start a fire
    zclSampleFireDetector_SendChangeNotification();
    }

    时,Z-Tool依然没变化。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 你有先作绑定嗎?
  • 您好!也是两种做法都尝试了,最开始是在初始化末尾加了绑定的语句:

    bdb_StartCommissioning( BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING );

    试了不行,后来把这个绑定操作单独用一个按键来触发,就和原代码一样,我只是定义和修改了按键部分,按键部分在前面的开发里也在用。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 有使用使用ZDO_BIND_REQ作绑定?
  • 是的,下午用ZDO_BIND_REQ做绑定也测试了很多次,分别置换了不同的端点来测,在抓包软件上能看到

    133890 32011.344537 0x0000 0x1f3b ZigBee ZDP 127 ? Bind Request Src: TexasIns_00:17:9a:4a:2b, Dst: TexasIns_00:07:66:55:81, Intruder Alarm System Zone (Cluster ID: 0x0500)
    133894 32011.370207 0x1f3b 0x0000 ZigBee ZDP 107 ? Bind Response, Status: Success

    134177 32081.847304 0x0000 0x1f3b ZigBee ZDP 127 ? Bind Request Src: TexasIns_00:17:9a:4a:2b, Dst: TexasIns_00:07:66:55:81, Intruder Alarm System Zone (Cluster ID: 0x0500)
    134181 32081.871331 0x1f3b 0x0000 ZigBee ZDP 107 ? Bind Response, Status: Table Full

    但是就算软件上显示绑定成功,也依然无效。去执行“   zclSampleFireDetector_SendChangeNotification();”时,Z-Tool或串口助手都没反应。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 有抓包档?

  • 有的,早上开机就一直在抓,抓包档比较大估计看起来比较累,先传上来;看下,若不明天抓个比较小的,您再分析。

    抓包档:20200110_1.rar

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 你抓一份有入網跟绑定的來看

  • 您好!十分感谢您的指导帮助和回复!

        刚刚抓了一个包在363行附近有密钥确认的提示,附抓包档:20200111_1.rar用AF_REGISTER 来注册端点,截图如下:

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!刚才又用ZDO_BIND_REQ指令做绑定操作,抓了一个数据包,Z-Tool分别测试了不同端点截图如下:

    附抓包档:20200111_2.rar

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 抓包確實看到綁定成功,你可能要調試看為什麼沒發送report

  • 好的,十分感谢您的指导帮助和回复,您辛苦了!

    那我是以那种绑定方式来调试、测试呢?

    1、AF_REGISTER 来注册端点。

    2、用ZDO_BIND_REQ指令做绑定操作。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 就是照這樣調试

  • 好的,我回头再找套板子,换个底板再来调试看下,辛苦您了!

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!十分感谢您的指导帮助和回复!

             现在调试出来了,但是发现这个终端的 数据请求“Data Request”过于频繁,该修改哪个参数呢?

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • f8wconfig.cfg理頭的POLL_RATE
  • 好的!十分感谢您的指导帮助和回复!

    现在有几个问题请教如下:

    1、在firedetector代码中我修改了端点,这个在以后使用中不会有啥影响吧?

    2、在环境监测那部分开发里用了ZDO_BIND_REQ这个指令来做绑定操作,因为要获取终端的DstADDr,所以代码里在终端上电时有个绑定操作,会导致上电后一直在发送ClusterID: 0x0003的数据,有没有获取DstADDr的其它方式呢?

    3、后续我若作电源插座开发,会涉及到模拟量采集,用那个例程比较合适。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 1. 不会有啥影响

    2. 不去绑定ClusterID: 0x0003不就好了

    3. 可以用SampleLight下去改

  • 好的!十分感谢您的指导帮助和回复!

            我先试试看,有什么问题再来请教!

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助,现在有几个问题请教如下:

    1、终端有时会连续发送几次:Data Request 而得不到Ack,然后终端就掉线了,在连续发送Data Request 得不到Ack时和终端正常在线时的RSSI值是一样的都是-6dB左右,这种情况一般是什么原因造成的?该怎么解决呢?

    2、在samplefiredetector例程里,终端触发按键时协调器会输出:FE 1D 44 81 00 00 00 05 E9 BE 07 07 00 8B 00 92 65 7D 00 00 09 19 01 00 00 00 00 00 00 00 E9 BE 1D D0 我可以通过设置以下代码中的不同数值来表示漏水、红外、门磁的识别码不?

    zclSS_IAS_Send_ZoneStatusChangeNotificationCmd(SAMPLEFIREDETECTOR_ENDPOINT,
    &zclSampleFireDetector_DstAddr,
    zclSampleFireDetector_ZoneStatus, 0, zoneid,0,
    1, 1 );


    再次感谢您的支持和帮助!谢谢!

  • 1. Data Request 而得不到Ack比較是父節点的問題

    2. 不行、你要用device type去區分

  • 您好!首先感谢您的回复和帮助。

             我现在的协调器是用CC2530写入的ZNP代码,这个协调器在终端都入网之后工作期间,PC或者MCU无需再给协调器发送什么数据或指令了吧?

    再次感谢您的支持和帮助!谢谢

  • 好的!感谢您的回复和帮助,我回头换个协调器的板子再测试下看,看是硬件还是代码的问题。

    再次感谢您的支持和帮助!谢谢

  • 您好!首先感谢您的回复和帮助。
    有几个关于samplefiredetector例程的几个问题想请教您一下:
    1、我看了下wiki的操作步骤:
    "3. SW3 on the CIE
    Sends a write attribute request to the Fire Detector (the last device that joined the network) to write the CIE IEEE Address attribute.
    4. SW3 on the Fire Detector
    Sends a IAS Zone Enrollment request to the CIE."我现在用ZNP模式做协调器,这个功能是无法实现的吧?
    if ( keys & HAL_KEY_SW_3 )
    {
    // zone enrollment request to CIE, only perform after writing cie address attribute value
    afAddrType_t zclCIE_Addr;
    zclCIE_Addr.addrMode = (afAddrMode_t)(Addr64Bit);
    osal_memcpy(zclCIE_Addr.addr.extAddr, zclSampleFireDetector_IAS_CIE_Address, Z_EXTADDR_LEN);
    zclCIE_Addr.endPoint = AF_BROADCAST_ENDPOINT;
    zclSS_IAS_Send_ZoneStatusEnrollRequestCmd( SAMPLEFIREDETECTOR_ENDPOINT, &zclCIE_Addr,zclSampleFireDetector_ZoneType, 22, 0, 1);
    }
    就是我终端上这部分功能是不可以不去理会它了?
    2、您说以device type来判断终端设备类型,是指zcl_ss.h里的这些定义吧?
    #define SS_IAS_ZONE_TYPE_STANDARD_CIE 0x0000
    #define SS_IAS_ZONE_TYPE_MOTION_SENSOR 0x000D
    #define SS_IAS_ZONE_TYPE_CONTACT_SWITCH 0x0015
    #define SS_IAS_ZONE_TYPE_FIRE_SENSOR 0x0028
    #define SS_IAS_ZONE_TYPE_WATER_SENSOR 0x002A
    再次感谢您的支持和帮助!谢谢

  • 1. 正規來說是要的、你必須透过AF_DataRequest去下命令

    2. 是的

  • 您好!首先感谢您的回复和帮助。
    1、那比如我现在的模式(ZNP协调器),正常流程是不是这样:
    1)、终端将IAS区域注册请求发送给ZNP协调器(替换了CIE)。
    2)、ZNP协调器(替换了CIE)将写入属性的请求发送到火灾检测器。
    3)、采用 ZDO_BIND_REQ指令绑定,或者是AF_REGISTER指令来注册端点。
    2、我之前测试了下,按下按键HAL_KEY_SW_3,在抓包软件上看不到任何数据,后来在zcl_samplefiredetector_data.c
    文件中做以下修改:
    //uint8 zclSampleFireDetector_IAS_CIE_Address[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
    uint8 zclSampleFireDetector_IAS_CIE_Address[8] = {0x81, 0x55, 0x66, 0x07, 0x00, 0x4B, 0x12, 0x00};
    触发按键3在抓包软件中可以看到“ISA区域:区域注册请求”的提示,同时ZNP输出到串行的数据可以看到设备类型:
    FE 1B 44 81 00 00 00 05 B0 9E 08 17 00 73 00 CA B4 4F 00 00 07 09 01 01 28 00 16 00 B0 9E 1D AB
    当我用ZDO_BIND_REQ绑定后,执行:
    if ( keys & HAL_KEY_SW_4 )
    {
    // start a fire
    zclSampleFireDetector_SendChangeNotification();
    }
    得到的数据中却看不出设备类型。是不是绑定的流程或方法还是有问题呢?
    3、我用AF_DataRequest去下发指令绑定,这个指令有没有文档可以参考呢?
    再次感谢您的支持和帮助!谢谢

  • 1&2. 步驟細節都在processors.wiki.ti.com/.../Fire_Alarm_System
    3. 可以參考ZCL spec
  • 好的,谢谢您的支持和帮助!谢谢

  • 您好!首先感谢您的回复和帮助。
              我用SampleCIE例程作为协调器,SampleFireDetector例程作为终端,手动绑定可以,用ZNP作为协调器一直会出现绑定失败,在第296行是我手动绑定成功的抓包数据,在第5832行、12810行、12688行都是ZNP作为协调器时绑定失败的抓包。等您有时间了帮分析下看问题出在哪儿了。附抓包档:分析.rar

    再次感谢您的支持和帮助!谢谢