当前位置: 首页 > 编程日记 > 正文

引用-ZIGBEE-ZSTACK网络配置相关问题

下面是以道友问的问题,这里简单做分析,仅供交流学习用,有什么不对之处还请各位大虾指正。鄙人邮箱为:peterpanjy@163.com. 欢迎交流!!
1: 最主要的就是路由问题。我用06协议栈自带的例子程序sampleapp修改了一下,另协调器以网络地址的形式向终端发送数据,中间加入路由转发数据。拿 到室外试验了一下,结果路由根本不起作用。

zigbee06的路由程序应该怎么写? 需要什么设置么?
2:在sampleapp这个程 序中,我把终端的程序修改为之接收信号,其他事件一概不作处理,组网后用协议分析仪察看了一下,发现终端每一秒都在向协调器发送一个命令信号,协调器也会 作出应答,这

些例子程序都是协调器发送数据到路由的,请问终端要怎么设置?
3我想做的很简单:就是用协 调器用网络地址向终端发送数据,终端只负责接收,网络中存在路由器,起信息转发作用。觉得是一个很简单的程序,但是就是弄不出来,请指教以下具体应该怎么 弄?谢谢!
4:zigbee06要怎么设置网络形式?星状网状树形这些网络要怎么才能建立?需要哪些设置呢?
5:06里面,网络地址是怎 么分配的?还是用的04的分布式地址分配算法么?还是别的算法,有没有详细的解释说明呢?在协议栈 里,MAX_DEPTH,MAX_CHILDREN,MAX_ROUTER都是在那里设置的?我只在

nwk.globals.h中找到了
#if ( STACK_PROFILE_ID == HOME_CONTROLS )
    #define MAX_NODE_DEPTH      5
    #define NWK_MODE            NWK_MODE_MESH
这一个的定义。还有byte CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};这一句是什么意思呢,死活看不明白了...

下面针对上面问题简要分析下:

1、06协议的路由算法已经打包成库,是不能修改的。
C:\Texas Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Libraries\TI2430DB\bin这里应 该有您需要的库文件,要是可以您可以反编译看看。
至于您拿出去不能演示,那是因为您没有弄明白收到数据的现象。
希望下面的分析对您理解有 帮助!
2、至于每秒发信息,个人觉得可能不是每秒,大概是发送的周期信息。因为
在网络成功建立或者成功加入后,设备都在发送周期信息,见 程序如下:
case ZDO_STATE_CHANGE:
          SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
          if ( (SampleApp_NwkState == DEV_ZB_COORD)
              || (SampleApp_NwkState == DEV_ROUTER)
              || (SampleApp_NwkState == DEV_END_DEVICE) )
          {
            // Start sending the periodic message in a regular interval.
            osal_start_timerEx( SampleApp_TaskID,
                              SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
                              SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );
          }
可以看到网络状态 一旦改变(建立或者加入网络),就调用了定时触发事件:
SAMPLEAPP_SEND_PERIODIC_MSG_EVT
而 该事件为:
if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )
  {
    // Send the periodic message
    SampleApp_SendPeriodicMessage();
    // Setup to send message again in normal period (+ a little jitter)
    osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
        (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) );
    // return unprocessed events
    return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);
  }
这里调用了发送数据函数 SampleApp_SendPeriodicMessage(),而之后又调用了定时触发事件 SAMPLEAPP_SEND_PERIODIC_MSG_EVT,所以该事件不停的在触发并发送数据。
void SampleApp_SendPeriodicMessage( void )
{
  if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
                       SAMPLEAPP_PERIODIC_CLUSTERID,
                       1,
                       (uint8*)&SampleAppPeriodicCounter,
                       &SampleApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    // Error occurred in request to send.
  }
}
如 果想知道发送的是什么数据并了解发送到什么地方,建议可以分析下AF_DataRequest()函数里各个参数的含义。
3、其实您这个应用的却 不难,主要是您对ZSTACK还不怎么熟悉,不知道怎么下手。其实就是现在ZSTACK中随便哪个例子都可以满足您的要求。就拿SAMPLE来说,都可以 满足,就2项中提到的周期发送信

息,在发送函数里有个参数为AF_DISCV_ROUTE,就是这里设置为允许去找路由器路由信息,这个参数为2,则直接启动AODV查找路由,为 1时,先查路由表,找不着路由则启动路由查找,为0时,不用AODV

,直接走树路由!而参数AF_DEFAULT_RADIUS指明了路由深度为:#define AF_DEFAULT_RADIUS                  DEF_NWK_RADIUS
#define DEF_NWK_RADIUS 10
路由深度为10,也就是只能经过10次路由,每路由一次,该数据减1,有兴趣可以用协议分析仪看一下。
4、 ZSTACK网络结构设定
找到nwk_globals.h文件
// 网络模式控制
#define NWK_MODE_STAR         0
#define NWK_MODE_TREE         1
#define NWK_MODE_MESH         2
// 网络加密控制
#define SECURITY_RESIDENTIAL  0
#define SECURITY_COMMERCIAL   1
// 协议栈参数设置
#define NETWORK_SPECIFIC      0
#define HOME_CONTROLS         1
#define ZIGBEEPRO_PROFILE     2
#define GENERIC_STAR          3
#define GENERIC_TREE          4

#define STACK_PROFILE_ID      XXXXXXXXXX
这里定义协议栈模式的,是很重要的,直接涉及到下面的 定义。这里的值就为上面定义的协议栈参数色绘制那5个,当然用户还可以继续定义的!
当XXXXXXXXXX= HOME_CONTROLS时,程序如下:
#if ( STACK_PROFILE_ID == HOME_CONTROLS )
    #define MAX_NODE_DEPTH      5
    #define NWK_MODE            NWK_MODE_MESH
    #define SECURITY_MODE       SECURITY_RESIDENTIAL
#if   ( SECURE != 0  )
    #define USE_NWK_SECURITY    1   // true or false
    #define SECURITY_LEVEL      5
#else
    #define USE_NWK_SECURITY    0   // true or false
    #define SECURITY_LEVEL      0
#endif
可以看出此时,网络结构为网状网络
当XXXXXXXXXX= GENERIC_STAR时:
#elif ( STACK_PROFILE_ID == GENERIC_STAR )
    #define MAX_NODE_DEPTH      5
    #define NWK_MODE            NWK_MODE_STAR
    #define SECURITY_MODE       SECURITY_RESIDENTIAL
#if   ( SECURE != 0  )
    #define USE_NWK_SECURITY    1   // true or false
    #define SECURITY_LEVEL      5
#else
    #define USE_NWK_SECURITY    0   // true or false
    #define SECURITY_LEVEL      0
#endif
可以看出此时,网络结构为星状网络
当XXXXXXXXXX= NETWORK_SPECIFIC 时:
#elif ( STACK_PROFILE_ID == NETWORK_SPECIFIC )
// define your own stack profile settings
    #define MAX_NODE_DEPTH          5
    #define NWK_MODE            NWK_MODE_MESH
    #define SECURITY_MODE       SECURITY_RESIDENTIAL
#if   ( SECURE != 0  )
    #define USE_NWK_SECURITY    1   // true or false
    #define SECURITY_LEVEL      5
#else
    #define USE_NWK_SECURITY    0   // true or false
    #define SECURITY_LEVEL      0
#endif
#endif
当然这些参数用户都是可以自己设定的,当然 也不能乱设定哈!
5、ZSTACK网络参数设定
// 网络中最多设备个数
#if !defined( NWK_MAX_DEVICE_LIST )
  #define NWK_MAX_DEVICE_LIST     20  // 目前设置为20个
#endif
路由器个数和终端节点个数 设定,通过wk_globals.c 中的下面代码来实现。
    byte CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};
    byte CskipChldrn[MAX_NODE_DEPTH+1] = {20,20,20,20,20,0};
在这里 CskipRtrs[MAX_NODE_DEPTH+1] = {5,0};是通过一个数组的方式来定义的,元素0 表示在路由0 级的时候最多挂载的路由器节点个数,元素1,表示在路由1 级中最多挂载的的路由器节点个数。这

里我们定义了在0 级(协调器直接通讯)最多挂载5 个路由器,第一级不挂载。
CskipChldrn[MAX_NODE_DEPTH+1] = {50,0};同样是通过一个数组的方式来定义的,元素0 表示在路由0 级的时候最多挂载的终端节点个数,元素1,表示在路由1 级中最多挂载的的终端节点个数。这里

我们定义了在0 级(协调器直接通讯)最多挂载50 个终端,第一级不挂载。如下所示。
#if defined ( RTR_NWK )
  // change this if using a different stack profile...
  // Cskip array
  uint16 *Cskip;

#if ( STACK_PROFILE_ID == HOME_CONTROLS )
    byte CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};
    byte CskipChldrn[MAX_NODE_DEPTH+1] = {20,20,20,20,20,0};
  #elif ( STACK_PROFILE_ID == GENERIC_STAR )
    byte CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
    byte CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
  #elif ( STACK_PROFILE_ID == NETWORK_SPECIFIC )
    byte CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
    byte CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
  #endif // STACK_PROFILE_ID
#endif  // RTR_NWK
那么这里的 CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};意思就是允许每级R或C最多能加入6各路由器。而byte CskipChldrn[MAX_NODE_DEPTH+1] = {20,20,20,20,20,0};表示每个路由器或协调器最

多挂在20个子节点,为什么有6维呢,那是因为参数MAX_NODE_DEPTH为5嘛,我想这个不用我多解释了哈

转载于:https://www.cnblogs.com/victoire/archive/2010/02/01/1661020.html

相关文章:

GHOST还原教程详细

要提醒您注意的是在使用 GHSOT 软件恢复系统时,请勿中途中止!如果您在恢复过程中重新启动了计算机那么您的计算机将无法启动!必定要接双硬盘或用光盘系统启动才可恢复 在您的系统遇到以下的情况之一 怀疑或确定您的系统中了病毒或木马 系统运…

【java】增强for循环的简单使用(遍历数组)

public class Test4 {public static void main(String[] args) {int[] intArray {1, 2, 4, 5, 7, 8};for(int number : intArray) {System.out.println(number);}} }

字符设备驱动程序 2

三、字符设备的注册内核内部使用struct cdev结构来表示字符设备。在内核调用设备的操作之前&#xff0c;必须分配并注册一个或多个struct cdev。代码应包含<linux/cdev.h>&#xff0c;它定义了struct cdev以及与其相关的一些辅助函数。 注册一个独立的cdev设备的基本过程…

qmake 简易教程

qmake 简易教程 qmake是Qt开发中默认的构建工具。posted on 2018-05-27 00:09 JichengTang 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/tangjicheng/p/9094857.html

MSF连环攻击实验

MSF连续攻击实验 一、实验拓扑 二、实验环境 Windows XP BT 5 32位 三、实验原理 通过扫描 XP主机&#xff0c;利用扫描出的漏洞建立 TCP会话&#xff0c;通过进程的提权&#xff0c;进一步获取目标机的控制权限 四、实验目的 掌握MSF连续攻击的原理和利用MSF攻击检测技术进行服…

【java】关于面向对象优点的个人理解

本文只是一些个人的理解&#xff0c;没有过多的进行基础理论的堆积&#xff0c;尽量说人话&#xff0c;让不懂的人也可以有一点概念。 相同的目标&#xff1a; 去第一餐厅吃饭 面向过程&#xff1a; 进入第一餐厅、买饭、吃饭 面向对象&#xff1a; 创建对象 第一餐厅、同…

(转)flash的Socket通讯沙箱和安全策略问题

一、沙箱和安全策略问题 1、此问题发生在连接时&#xff0c;准确地说是连接前&#xff0c;分别两种情况&#xff1a; 1.本地播放 本地播放时&#xff0c;默认情况下Flash Player将不允许swf访问任何网络。 访问http://www.macromedia.com/suppor…

asp.net code-behind

asp.net code-behind 技术是指页面与代码分离。 asp.net framework允许创建两种不同的页面&#xff0c;一种是单页面&#xff08;页面包含页面代码与控件&#xff0c;页面代码包含在<script runat"server"></script>标签中&#xff09;&#xff0c;另外一…

python 基础_列表的其他操作 4

一.查找某个元素在数组中出现的次数 &#xff0c;count的运用 a [a,b,c,c,c,a] print(a.count(c)) 二.把一个元素插入到另一个元素的末尾&#xff0c;extend。如下面&#xff0c;把b里面的值赋予给a。 a [a,b,c] b [d,e,f] a.extend(b) print (a) print (b) 输出的结果为 [a…

DataGrid和GridView单击背景变色双击颜色还原

DataGrid中 首先我们假设.aspx文件中DataGrid的数据行的样式为 <AlternatingItemStyle BackColor"White" ForeColor"#284775" /><ItemStyle BackColor"#F7F6F3" ForeColor"#333333" /> 则在DataGrid的ItemDataBound事件中…

elasticsearch的备份和恢复(转)

vim /etc/elasticsearch/elasticsearch.yml path.repo: ["/data/backups/es_backup"] #备份目录&#xff0c;根据自己情况进行填写 systemctl restart elasticsearch.service mkdir -pv /data/backups/es_backup chmod 755 /data/backups/es_backup chown elas…

【javamatlab】以一个简单的例子实现java和matlab混编

目录 使用环境&#xff1a; MATLAB: matlab代码&#xff1a; 将matlab代码打包&#xff1a; eclipse&#xff1a; jar包配置&#xff1a; 使用jar包&#xff1a; 使用环境&#xff1a; jdk8&#xff08;ide使用eclipse2019-6&#xff09;、matlab2019a 应该从2018开始m…

转载CSDN - 从程序员到HR——面试经验分享

CSDN博客一周热文推荐&#xff0c;为您总结回顾过去一周的CSDN博客热门文章&#xff0c;推荐优质的博客作者&#xff0c;分享精华文章和优质博客。 [1] 谭海燕&#xff1a;北漂之惠普H3C面试经历 上一篇讲到了《北漂之百度面试》&#xff0c;今天跟大家分享我在H3C的面试经历。…

近期上海面试总结(一)

转眼来上海已经4年了&#xff0c;随着对公司业务的不断熟悉&#xff0c;同时通过与众多的人接触也渐渐加深了对职场的理解&#xff0c;从刚开始的初生牛犊不怕虎毅然来到上海&#xff0c;到如今已快有四个年头了&#xff0c;今年还是面临职场上的抉择&#xff0c;再次找工作吧&…

Expect 教程中文版

原文链接 本教程由*葫芦娃*翻译&#xff0c;并做了适当的修改&#xff0c;可以自由的用于非商业目的。 [BUG]   有不少部分&#xff0c;翻译的时候不能作到“信&#xff0c;达”。当然了&#xff0c;任何时候都没有做到“雅”&#xff0c;希望各位谅解。 [原著]     Don L…

【智能小车】舵机的基本原理(学习自平衡小车之家的资料)

概述&#xff1a; 根据控制方式舵机应该称为微型伺服马达。早期在模型上使用最多&#xff0c;主要用于控制模型的舵面&#xff0c;所以俗称舵机。舵机特点是接受一个简单的控制指令就可以自动转到一个比较精确的角度。 注&#xff1a; 微型伺服马达&#xff1a;一个微型伺服马…

005本周总结报告

这周主要学习了java中的类和对象的知识点&#xff0c;发现和C中的类和对象极为相似&#xff0c;对于类和对象的概念理解起来也简单。同时在自学的过程中也把类的知识重新复习巩固了一下&#xff08;如类的三大特征&#xff1a;继承&#xff0c;封装和多态&#xff0c;构造&…

IE6 下div高度显示的问题

IE6下默认的字体尺寸大致在 12 - 14px 之间&#xff0c;当你试图定义一个高度小于这个默认值的 div 的时候&#xff0c; IE 会固执的认为这个层的高度不应该小于字体的行高。所以即使你用 height: 6px; 来定义了一个 div 的高度&#xff0c;实际在 IE 下显示的仍然是一个 12 px…

ASP.NET Core 2 学习笔记(七)路由

ASP.NET Core通过路由(Routing)设定&#xff0c;将定义的URL规则找到相对应行为&#xff1b;当使用者Request的URL满足特定规则条件时&#xff0c;则自动对应到相符合的行为处理。从ASP.NET就已经存在的架构&#xff0c;而且用法也很相似&#xff0c;只有些许的不同。本篇将介绍…

[NOI2005]维护数列

输入格式 输入文件的第 1 行包含两个数 N 和 M&#xff0c;N 表示初始时数列中数的个数&#xff0c;M 表示要进行的操作数目。 第 2 行包含 N 个数字&#xff0c;描述初始时的数列。 以下 M 行&#xff0c;每行一条命令&#xff0c;格式参见问题描述中的表格 输出格式 对于输入…

java 常用正则表达式

匹配中文字符的正则表达式&#xff1a; [\u4e00-\u9fa5]评注&#xff1a;匹配中文还真是个头疼的事&#xff0c;有了这个表达式就好办了匹配双字节字符(包括汉字在内)&#xff1a;[^\x00-\xff]评注&#xff1a;可以用来计算字符串的长度&#xff08;一个双字节字符长度计2&…

考研总结以及假期规划

从标题不难看出&#xff0c;这是自我总结的水文一篇 备考总结 持续了将近一年的备考时间结束了&#xff0c;漫无目的地玩了几天的手机之后&#xff0c;感觉需要做点什么来充实一下自己了。&#xff08;写下这句话之后又回去玩手机了&#xff0c;直到昨天山东泰山拿了双冠王受到…

JAVA Functions in XI(转)

JAVA Functions in XI 1. Split Function 按字符分割成字符串数组 String [ ] StrArray LGORT.split(",") //-- pass LGORT to this UDF int len1 LGORT.length; for ( i0;i<len1;i){ result.addValue(StrArray[i]); } 2. Global Containers…

2018.5.29 Oracle连接到空闲例程

解决方法如下&#xff1a; 1、通过cmd命令窗启动Oracle&#xff1a;(最好是以管理员身份启动) C:\Users\Administrator>sqlplus /nolog SQL>conn /as sysdba 或者这种 conncet sys/123456orcl as sysdba //sys是用户名 123456是密码 。 后面的是数据库名字 SQL>s…

关于css中float的一切

原文&#xff1a;http://css-tricks.com/all-about-floats/ 这篇文章说的简单易懂 float是CSS中关于定位的属性。 float有4个值&#xff1a;none, left, right, inherit (继承父元素的float属性值&#xff09; float的姐妹属性&#xff1a;clear clear有4个值&#xff1a;both…

【光纤通信】关于RFA(喇曼光纤放大器)

近日在准备考研复试&#xff0c;在学习光纤通信的时候对书中关于RFA的解释不是很理解&#xff0c;经过查阅文献后将自己此刻的理解记录一下。 喇曼散射 解释一&#xff1a; “入射泵浦光子通过光纤的非线性散射转移部分能量&#xff0c;产生低频斯托克斯光子&#xff0c;而剩…

艾伟_转载:学习 ASP.NET MVC (第五回)理论篇

本系列文章导航学习 ASP.NET MVC &#xff08;第一回&#xff09;理论篇学习 ASP.NET MVC &#xff08;第二回&#xff09;实战篇学习 ASP.NET MVC &#xff08;第三回&#xff09;实战篇学习 ASP.NET MVC &#xff08;第四回&#xff09;实战篇学习 ASP.NET MVC &#xff08;第…

Jmeter(二十九)_dotnet搭建本地接口服务

这里使用的服务名为Bookshelf&#xff0c;在github上&#xff0c;自行下载。要运行此服务&#xff0c;需要.Net Core SDK 2.1或更高版本。如果尚未安装&#xff0c;从.Net Core官方网站下载并安装。 在本地克隆项目后&#xff0c;在命令行工具中打开项目文件夹并运行“dotnet r…

【eclipse】eclipse使用常见问题(持续更新)

创建maven工程中没有src/main/java及src/main/test文件夹 解决方法&#xff1a; 第一步 第二步 第三步 【eclipse】快速调整eclipse背景和格式的方法 第一步 第二步 第三步 &#xff1a;选择相应的格式 效果如图 eclipse 中使包名按层级显示的方法 使用eclipse在没网时编写配置…

Prometheus+Granfana

二、虚机&#xff08;服务器&#xff09;方式prometheus在虚机&#xff08;服务器&#xff09;中安装运行。 命令行启动在安装完成以后&#xff0c;可以直接在命令行启动。启动方式通常是&#xff1a; ./prometheus --config.fileprometheus.yml & 或者nohup /opt/promethe…