基于树型网络的自组网方法、节点、网关及通讯系统与流程

文档序号:13450012阅读:446来源:国知局
基于树型网络的自组网方法、节点、网关及通讯系统与流程
本发明涉及数据传输领域,尤其涉及一种基于树型网络的自组网方法、节点、网关及通讯系统。
背景技术
:在物联网中,数据传输是各种数据采集系统中至关重要的一个环节,数据传输的方式逐渐由有线向无线方式发展,相对于有线传输方式,无线传输方式具有综合成本低、性能稳定、组网灵活、易于扩展等优势,并能突破在复杂地理环境下的应用限制,因此易于实现且具有高可靠性的无线数据传输网络在数据传输领域占据了举足轻重的地位,其主要体现在组网方法及其数据传输协议两个方面。目前,对于无线传输方式,一般通过组建专用的数据传输网络及其通信协议来实现,而在组建数据传输网络时,基本上都需要提前将信息记录下来,然后再录入网络,在实际现场施工过程中极为繁琐,一方面浪费人力;另一方面还增加了数据的不安全性,例如工作人员漏记录或错记录,都可能导致最后录入的数据和实际安装设备的信息对应不上,造成组网失败。技术实现要素:本发明要解决的技术问题在于,针对现有技术的上述组网过程繁琐的缺陷,提供一种基于树型网络的自组网方法、节点、网关及通讯系统,可实现新增节点的自动入网。本发明解决其技术问题所采用的技术方案是:构造一种基于树型网络的自组网方法,第一节点在首次入网时,进行以下步骤:s11.在初始状态下接收已入网的第二节点发出的第一网内通信包,其中,所述第一网内通信包的包头部分包括所述第二节点的节点层级及第三节点的节点地址,所述第三节点为所述第一网内通信包的源/目标节点;s12.根据所述第二节点的节点层级确定自身的节点层级,并根据自身的mac地址和自身的节点层级生成入网申请包的数据部分,而且,根据所述第二节点的节点层级及第三节点的节点地址生成入网申请包的包头部分,并将所述入网申请包发送至网关;s13.接收所述第二节点发出的来自网关的入网批准包,其中,网关在收到所述入网申请包后,根据自身存储的路由表将所述第二节点确定为第一节点的父节点,获取所述父节点的节点地址,记录所述第一节点的节点层级,并为所述第一节点分配节点地址,以生成入网批准包,且将其发送至所述第二节点,以使所有转发所述入网批准包的节点在自身的路由表中记录第一节点的节点地址及其父节点的节点地址;s14.判断所述入网批准包中的mac地址是否与自身的mac地址一致,并在一致时,根据所述入网批准包记录自身的节点地址、节点层级以及父节点的节点地址。优选地,所有转发所述入网批准包的节点在自身的路由表中记录第一节点的节点地址及其父节点的节点地址的步骤包括:节点在收到所述入网批准包后,判断所述第一节点的父节点的节点地址是否与自身的节点地址或自身的子节点的节点地址或自身的子子节点的节点地址一致,若一致,则在自身的路由表中记录第一节点的节点地址及其父节点的节点地址,并转发所述入网批准包。优选地,第一节点在重入网时,进行以下步骤:s21.接收已入网的第四节点发出的第二网内通信包,判断所述第四节点的节点层级是否比自身的节点层级至少高两级,若是,则执行步骤s22;其中,所述第二网内通信包的包头部分包括所述第四节点的节点层级及第五节点的节点地址,所述第五节点为所述第二网内通信包的源/目标节点;s22.根据所述第四节点的节点层级确定自身的新节点层级,并根据自身的mac地址、新节点层级及节点地址生成重入网申请包的数据部分,而且,根据所述第四节点的节点层级及第五节点的节点地址生成重入网申请包的包头部分,并将所述重入网申请包发送至网关,以使所有收到所述重入网申请包的节点在自身的路由表中将第一节点及其子节点和子子节点均配置为无效状态;s23.接收所述第四节点发出的来自网关的重入网批准包,其中,网关在收到所述重入网申请包后,根据自身存储的路由表将所述第四节点确定为第一节点的新父节点,获取所述新父节点的节点地址,并记录所述第一节点的新节点层级,以生成重入网批准包,且将其发送至所述第四节点,以使所有转发所述重入网批准包的节点在自身的路由表中记录第一节点的节点地址及其新父节点的节点地址;s24.判断所述重入网批准包中的mac地址是否与自身的mac地址一致,并在一致时,根据所述重入网批准包更新自身的节点层级及父节点的节点地址。优选地,所有收到所述重入网申请包的节点在自身的路由表中将第一节点及其子节点和子子节点均配置为无效状态的步骤包括:节点在收到所述重入网申请包后,判断所述第一节点的节点地址是否与自身的子节点的节点地址或自身的子子节点的节点地址一致,若一致,则在自身的路由表中将第一节点及其子节点和子子节点均配置为无效状态;所有转发所述重入网批准包的节点在自身的路由表中记录第一节点的节点地址及其新父节点的节点地址的步骤包括:节点在收到所述重入网批准包后,判断所述第一节点的新父节点的节点地址是否与自身的节点地址或自身的子节点的节点地址或自身的子子节点的节点地址一致,若一致,则在自身的路由表中记录第一节点的节点地址及其新父节点的节点地址,并转发所述重入网批准包。优选地,第一节点在其子节点故障时,进行以下步骤:s31.在发出第三网内通信包后,判断预设时间内是否收到其子节点转发的所述第三网内通信包,若无,则执行骤s32;s32.判断所述第三网内通信包的发送次数是否大于预设次数,若无,则执行s31;若是,则执行步骤s33;s33.向网关发送报障包,以使所有收到所述报障包的节点在自身的路由表中将第一节点的子节点及子子节点均配置为无效状态,其中,所述报障包包括:第一节点的节点层级、节点地址、以及所述子节点的节点地址。优选地,第一节点在其父节点故障时,进行以下步骤:s41.在发出第四网内通信包后,判断预设时间内是否收到其父节点转发的所述第四网内通信包,若无,则执行步骤s42;s42.判断所述第四网内通信包的发送次数是否大于预设次数,若无,则执行s41;若是,则执行步骤s43;s43.回到初始状态。本发明还构造一种基于树型网络的自组网方法,第一节点在首次入网时,网关进行以下步骤:s51.接收第一节点发送的入网申请包,其中,第一节点在初始状态下接收到已入网的第二节点发出的第一网内通信包后,所述第一网内通信包的包头部分包括所述第二节点的节点层级及第三节点的节点地址,所述第三节点为所述第一网内通信包的源/目标节点,根据所述第二节点的节点层级确定自身的节点层级,并根据自身的mac地址和自身的节点层级生成入网申请包的数据部分,而且,根据所述第二节点的节点层级及第三节点的节点地址生成入网申请包的包头部分,并将所述入网申请包发送至网关;s52.根据自身存储的路由表将所述第二节点确定为第一节点的父节点,获取所述父节点的节点地址,记录所述第一节点的节点层级,并为所述第一节点分配节点地址,以生成入网批准包,且将其发送至所述第二节点,以使所有转发所述入网批准包的节点在自身的路由表中记录第一节点的节点地址及其父节点的节点地址。优选地,第一节点在重入网时,网关进行以下步骤:s61.接收第一节点发送的重入网申请包,其中,第一节点在接收到已入网的第四节点发出的第二网内通信包后,其中,所述第二网内通信包的包头部分包括所述第四节点的节点层级及第五节点的节点地址,所述第五节点为所述第二网内通信包的源/目标节点,判断所述第四节点的节点层级是否比自身的节点层级至少高两级,若是,则根据所述第四节点的节点层级确定自身的新节点层级,并根据自身的mac地址、新节点层级及节点地址生成重入网申请包的数据部分,而且,根据所述第四节点的节点层级及第五节点的节点地址生成重入网申请包的包头部分,并将所述重入网申请包发送至网关,以使所有收到所述重入网申请包的节点在自身的路由表中将第一节点及其子节点和子子节点均配置为无效状态;s62.根据自身存储的路由表将所述第四节点确定为第一节点的新父节点,获取所述新父节点的节点地址,并记录所述第一节点的新节点层级,以生成重入网批准包,且将其发送至所述第四节点,以使所有转发所述重入网批准包的节点在自身的路由表中记录第一节点的节点地址及其新父节点的节点地址。本发明还构造一种节点,包括第一存储器和第一处理器,所述第一存储器中存储有计算机程序,所述第一处理器用于执行所述第一存储器中存储的计算机程序并实现以上所述的方法。本发明还构造一种网关,包括第二存储器和第二处理器,所述第二存储器中存储有计算机程序,所述第二处理器用于执行所述存储器中存储的计算机程序并实现以上所述的方法。本发明还构造一种基于树型网络的通讯系统,包括以上所述的网关及以上所述的节点,而且,所述节点为中继节点或普通节点。实施本发明的技术方案,通过建立一套自学习的动态路由机制,不需要工作人员的参与即可实现新增节点的自动入网,从而组建数据传输网络。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图中:图1是本发明基于树型网络的自组网方法实施例一的流程图;图2是本发明基于树型网络的自组网方法实施例二的流程图;图3是本发明基于树型网络的自组网方法实施例三的流程图;图4是本发明基于树型网络的自组网方法实施例四的流程图;图5是本发明通讯系统实施例一的拓扑结构图。具体实施方式首先说明的是,本发明设计了一种针对低速率、低数据量、低功耗、且对延时有一定的容忍度的通讯协议,本协议基于树型网络而实现,且其中包括三类设备:一、网关,对应树根;二、中继节点,对应树枝/树干;三、普通节点,对应树叶。其中,网关用于汇聚所有节点,并接入internet。中继节点与普通节点的区别是:中继节点由市电供电,其可对应多个下级的子节点及子子节点,而其上级节点仅一个,被称为父节点;普通节点位于网络的最边缘,其仅有父节点,而没有子节点,不对其它节点的报文包做中继操作,因此可由电池供电,属于低功耗设备。普通节点平时都处于休眠状态,由传感器事件唤醒或者定时唤醒,它唤醒后会有三个rf的时间窗口:1.检测rf信道是否被占用,(即有节点正在发包);2.发送数据;3.接收确认。时间窗口到达后,继续休眠。另外,为了达到节能、易施工的要求,可大量采用树叶节点(低功耗节点),并使用树枝节点保证网络覆盖。还需说明的是,本协议不支持节点之间两两互相通信,通信只可能是节点到网关,或者网关到节点。而且,网关其实也只是节点上网的中介而已,节点传感器采集到的数据及其业务逻辑只与internet上的对应后台相关。关于网内通信包,需说明的是,网内通信包按类型来分可分为应用层的app包和组网用的私有包,不管是那种类型的包,其包头部分均带有源/目标节点的节点地址。网内通信包在发出后,可能要经一个或多个中间节点的中继才能到达目标节点,而且,每个中间节点在转发该第一网内通信包时,仅修改节点层级和转发标记,并不会修改目标节点的节点地址。本发明的基于树型网络的自组网方法可建立一套自学习的动态路由机制,且具有自动优化能力,详见下面的具体说明。图1是本发明基于树型网络的自组网方法实施例一的流程图,在该实施例的自组网方法中,若在通讯系统中新加入一传感器节点,例如为第一节点,此时,该第一节点为初始状态,即,未获得网关分配的节点地址,未确定节点层级及父节点,而且,也未写入其上级节点的路由表中。因此,首先需要将该第一节点进行入网。在该实施例中,第一节点只要能接收到任意的一个网内通信包,以第一网内通信包为例,就可判断附近有特定的数据传输网络存在,进而可发起加入该数据传输网络的申请。具体地,在首次入网时,第一节点进行以下步骤:s11.在初始状态下接收已入网的第二节点发出的第一网内通信包,其中,所述第一网内通信包的包头部分包括所述第二节点的节点层级及第三节点的节点地址,所述第三节点为所述第一网内通信包的源/目标节点;在该步骤中,第一节点收到的第一网内通信包是第二节点发出的,第二节点为中继该第一网内通信包的中间节点,而且,第一网内通信包的包头部分包括第三节点(源/目标节点)的节点地址和第二节点的节点层级。另外需说明的是,在通讯系统的初始状态下,仅有一个网关设备,还没有任何节点入网,此时,第二节点和第三节点均为网关,即,网关向自身广播第一网内通信包。s12.根据所述第二节点的节点层级确定自身的节点层级,并根据自身的mac地址和自身的节点层级生成入网申请包的数据部分,而且,根据所述第二节点的节点层级及第三节点的节点地址生成入网申请包的包头部分,并将所述入网申请包发送至网关;在该步骤中,关于节点层级,需说明的是,可设置节点层级的值越小,节点层级的等级越高,例如,网关的节点层级为0,网关的子节点的节点层级为1,以次类推。由于第一节点能接收到第二节点发送的入网申请包,而第二节点已入网,其节点层级已确定,所以,可根据该第二节点的层级来确定自身的节点层级,例如,第二节点的层级为2,该第一节点的节点层级为3,低于第二节点一个等级。另外,当第一节点确定了自身层级后,可将所确定的节点层级及自身的mac地址填入入网申请包,然后将其发送至网关。在此还需说明的是,由于此时第一节点还未分配节点地址,所以不能以自己的身份来发该入网申请包,只能在包头部分借用第三节点的节点地址及第二节点的层级来发送该入网申请包。具体地,该入网申请包的包头部分包括第三节点的节点地址、第二节点的节点层级,该入网申请包的数据部分包括第一节点的节点层级、mac地址、为特殊值的节点地址(表示待分配)等。s13.接收所述第二节点发出的来自网关的入网批准包,其中,网关在收到所述入网申请包后,根据自身存储的路由表将所述第二节点确定为第一节点的父节点,获取所述父节点的节点地址,记录所述第一节点的节点层级,并为所述第一节点分配节点地址,以生成入网批准包,且将其发送至所述第二节点,以使所有转发所述入网批准包的节点在自身的路由表中记录第一节点的节点地址及其父节点的节点地址;在该步骤中,网关在接收到入网申请包后,根据其包头部分中的第三节点的节点地址字段及数据部分中的第一节点的节点层级字段,再结合自身的路由表,从第三节点的路由表链中找到比第一节点的节点层级高一级的节点,即,查找到第二节点,并将查找到的节点确定为第一节点的父节点,将该节点的地址作为父节点地址。同时,还记录入网申请包的包头部分中的第一节点的节点层级,为第一节点分配节点地址,然后生成入网批准包,即,入网批准包的数据部分包括第一节点的节点地址、节点层级、mac地址、父节点的节点地址。另外,由于此时第一节点还未获取到自身的节点地址,所以,网关只能将其发送至第一节点的父节点,即第二节点,所以,入网批准包的包头部分包括第二节点的节点地址。优选地,在发送至第二节点的过程中,中间的节点在收到该入网批准包后,判断第一节点的父节点的节点地址是否与自身的节点地址或自身的子节点的节点地址或自身的子子节点的节点地址一致,即,检查该入网批准包是否是发给自己或自己的子节点或子子节点的,若一致,则在自身的路由表中记录第一节点的节点地址及其父节点的节点地址,即,添加“第一节点-父节点”的路由信息,并转发该入网批准包;若不是,则不添加上述路由信息,且也不转发该入网批准包。最后还需说明的是,在该入网批准包到达第二节点后,由于第二节点还会转发该入网批准包,所以,第一节点也可收到该入网批准包。s14.判断所述入网批准包中的mac地址是否与自身的mac地址一致,并在一致时,根据所述入网批准包记录自身的节点地址、节点层级以及父节点的节点地址。在该步骤中,第一节点在收到入网批准包后,若判断入网批准包中的mac地址与自身的mac地址一致,则记录自身的节点地址、节点层级及其父节点的节点地址(第二节点的地址)。在该实施例中,每个新加入的节点都可通过上述自组网方法进行入网,确定自身的节点层级,获取网关所分配的节点地址。而且,中间的节点通过分析网关发出的入网批准包来建立自身的线性路由表,用于管理其下级子节点及子子节点,使各个节点在收到报文后仅转发其子节点或子子节点的报文,从而实现了自动组网。在报文传输过程中发现,节点在转发包时,若其层级越低,则该包的转发次数就越多,发包效率就越低,所以,对于该节点,总是希望其层级越高越好。在这种情况下,节点若能接收到自己的上上级节点的包,则其可主动请求重新入网,变更层级及路由关系。不难理解,因为节点在初始状态下,只要一检测到包就会尽快入网,若后续又检测到更高层级的节点发的包,则一定会请求重新设定层级及路由关系。下面将具体说明如何进行重入网来对所建立的路由表进行自动优化。图2是本发明基于树型网络的自组网方法实施例二的流程图,在该实施例中,以第一节点为例,该第一节点在重入网时,进行以下步骤:s21.接收已入网的第四节点发出的第二网内通信包,判断所述第四节点的节点层级是否比自身的节点层级至少高两级,若是,则执行步骤s22;其中,所述第二网内通信包的包头部分包括所述第四节点的节点层级及第五节点的节点地址,所述第五节点为所述第二网内通信包的源/目标节点;在该步骤中,第一节点收到的第二网内通信包是第四节点发出的,第四节点为中继该第二网内通信包的中间节点,而且,第二网内通信包的包头部分包括第五节点(源/目标节点)的节点地址和第四节点的节点层级。另外,需说明的是,重入网的请求可发生在网络的日常维护时,在日常维护时,网关从路由表中挑选最边缘的中继节点进行发包检测,所发的包为重入网申请包,只需较少的包就可检测网络中所有中继节点的状态。在另一个例子中,重入网请求发生在数据包传输过程中。所以,不管是网关发出的重入网申请包,还是数据包,只要第一节点接收到新上级节点发出的第二网内通信包,且判断第四节点的节点层级比自身的节点层级至少高两级(即,比当前的父节点的层级高),则判断需要重入网,而且,根据第四节点的节点层级确定自身的新节点层级。s22.根据所述第四节点的节点层级确定自身的新节点层级,并根据自身的mac地址、新节点层级及节点地址生成重入网申请包的数据部分,而且,根据所述第四节点的节点层级及第五节点的节点地址生成重入网申请包的包头部分,并将所述重入网申请包发送至网关,以使所有收到所述重入网申请包的节点在自身的路由表中将第一节点及其子节点和子子节点均配置为无效状态;在该步骤中,优选地,第一节点发出的重入网申请包在传输过程中,中间的节点在收到该重入网申请包后,判断第一节点的节点地址是否与自身的子节点的节点地址或自身的子子节点的节点地址一致,若一致,则在自身的路由表中将第一节点及其子节点和子子节点均配置为无效状态。s23.接收所述第四节点发出的来自网关的重入网批准包,其中,网关在收到所述重入网申请包后,根据自身存储的路由表将所述第四节点确定为第一节点的新父节点,获取所述新父节点的节点地址,并记录所述第一节点的新节点层级,以生成重入网批准包,且将其发送至所述第四节点,以使所有转发所述重入网批准包的节点在自身的路由表中记录第一节点的节点地址及其新父节点的节点地址;在该步骤中,优选地,重入网批准包在传输过程中,中间的节点在收到该重入网批准包后,判断第一节点的新父节点的节点地址是否与自身的节点地址或自身的子节点的节点地址或自身的子子节点的节点地址一致,若一致,则在自身的路由表中记录第一节点的节点地址及其新父节点的节点地址,并转发该重入网批准包。s24.判断所述重入网批准包中的mac地址是否与自身的mac地址一致,并在一致时,根据所述重入网批准包更新自身的节点层级及父节点的节点地址。在该实施例中,还需说明的是,重入网的过程与首次入网的过程类似,所不同的仅是:在首次入网时,第一节点还没有被分配的节点地址,它是在找到一个父节点后,确定自己的节点层级,并以所接收的网内通信包的包头信息发出入网申请包。而在重入网时,已获取到网关所分配的节点地址。在报文传输过程中还发现,一些节点会发生故障,若不进行及时处理,将会造成通讯中断。在这种情况下,若发现中继节点失效,则其上级节点会发出报障包向网关汇报,这样,在报障包的传输过程中,所有收到该报障包的节点在自身的路由表中将失效节点及其子节点均配置为无效状态。下面将具体说明如何进行报障来对所建立的路由表进行自动优化。在该实施例中,第一节点在其子节点故障时,进行以下步骤:s31.在发出第三网内通信包后,判断预设时间内是否收到其子节点转发的所述第三网内通信包,若无,则执行骤s32;s32.判断所述第三网内通信包的发送次数是否大于预设次数,若无,则执行s31;若是,则执行步骤s33;在该步骤中,优选地,若判断需要重发报文时,先等待一延时时间,并再次执行步骤s31,例如通过冲突退避算法计算延时时间,该延时时间为预设时间范围内的随机值或与第一节点相关的时间值。s33.向网关发送报障包,以使所有收到所述报障包的节点在自身的路由表中将第一节点的子节点及子子节点均配置为无效状态,其中,所述报障包包括:第一节点的节点层级、节点地址、以及所述子节点的节点地址。在该实施例中,对于某节点,其上级节点可通过重传失败来检测其是否失效,若已失效,则其上级节点会生成一报障包,并向网关汇报,这样,所有收到该报障包的节点可根据报障包的内容修改路由信息。进一步地,失效节点的下级节点也通过重传失败来检测到其已失效,此时,该下级节点则重回初始化状态,重新入网。具体地,第一节点在其父节点故障时,进行以下步骤:s41.在发出第四网内通信包后,判断预设时间内是否收到其父节点转发的所述第四网内通信包,若无,则执行步骤s42;s42.判断所述第四网内通信包的发送次数是否大于预设次数,若无,则执行s41;若是,则执行步骤s43;在该步骤中,优选地,若判断需要重发报文时,先等待一延时时间,并再次执行步骤s41,例如通过冲突退避算法计算延时时间,该延时时间为预设时间范围内的随机值或与第一节点相关的时间值。s43.回到初始状态。以上实施例说明了在节点中执行的入网过程,基于此,本发明还构造一种节点,该节点包括第一存储器和第一处理器,第一存储器中存储有计算机程序,第一处理器用于执行第一存储器中存储的计算机程序并实现以上实施例的方法。图3是本发明基于树型网络的自组网方法,首先说明的是,该实施例的自组网方法应用在网关中,且与图1所示的实施例相对应。在该实施例中,第一节点在首次入网时,网关进行以下步骤:s51.接收第一节点发送的入网申请包,其中,第一节点在初始状态下接收到已入网的第二节点发出的第一网内通信包后,所述第一网内通信包的包头部分包括所述第二节点的节点层级及第三节点的节点地址,所述第三节点为所述第一网内通信包的源/目标节点,根据所述第二节点的节点层级确定自身的节点层级,并根据自身的mac地址和自身的节点层级生成入网申请包的数据部分,而且,根据所述第二节点的节点层级及第三节点的节点地址生成入网申请包的包头部分,并将所述入网申请包发送至网关;s52.根据自身存储的路由表将所述第二节点确定为第一节点的父节点,获取所述父节点的节点地址,记录所述第一节点的节点层级,并为所述第一节点分配节点地址,以生成入网批准包,且将其发送至所述第二节点,以使所有转发所述入网批准包的节点在自身的路由表中记录第一节点的节点地址及其父节点的节点地址。图4是本发明基于树型网络的自组网方法,首先说明的是,该实施例的自组网方法应用在网关中,且与图2所示的实施例相对应。在该实施例中,第一节点在重入网时,网关进行以下步骤:s61.接收第一节点发送的重入网申请包,其中,第一节点在接收到已入网的第四节点发出的第二网内通信包后,其中,所述第二网内通信包的包头部分包括所述第四节点的节点层级及第五节点的节点地址,所述第五节点为所述第二网内通信包的源/目标节点,判断所述第四节点的节点层级是否比自身的节点层级至少高两级,若是,则根据所述第四节点的节点层级确定自身的新节点层级,并根据自身的mac地址、新节点层级及节点地址生成重入网申请包的数据部分,而且,根据所述第四节点的节点层级及第五节点的节点地址生成重入网申请包的包头部分,并将所述重入网申请包发送至网关,以使所有收到所述重入网申请包的节点在自身的路由表中将第一节点及其子节点和子子节点均配置为无效状态;s62.根据自身存储的路由表将所述第四节点确定为第一节点的新父节点,获取所述新父节点的节点地址,并记录所述第一节点的新节点层级,以生成重入网批准包,且将其发送至所述第四节点,以使所有转发所述重入网批准包的节点在自身的路由表中记录第一节点的节点地址及其新父节点的节点地址。以上实施例说明了在网关中执行的第一节点的入网过程,基于此,本发明还构造一种网关,该网关包括第二存储器和第二处理器,第二存储器中存储有计算机程序,第二处理器用于执行存储器中存储的计算机程序并实现以上实施例的方法。最后还需说明的是,网关设备的rf模块并无特殊需求,它可采用跟节点相同的rf模块,因此成本低,结构简单。本发明还构造一种基于树型网络的通讯系统,该通讯系统包括以上所述的网关及以上所述的节点,而且,所述节点为中继节点或普通节点。下面以一个具体例子来说明本发明的组网过程:首先说明报文包的格式,一个报文包包括包头部分(header字段)和数据部分(data字段)。header字段的格式如下所示:groupid+levelid+nodeaddr+flag+packetnum其中,groupid为组标识,用于标识不同的网络,通常不同id的网络会使用不同的rf频道,它的作用是在节点布设密集时分流;levelid为节点层级,数字越小层级越高,网关的层级为0,用于表示包要几跳才能到达网关,能直接收到网关包的节点的层级为1;nodeaddr为节点地址,由网关分配,而网关自己的节点地址始终为0;packetnum为包序号,每次加1,溢出后重新从零开始计数,重发的包其包序号保持不变;flag为标记位,且具体包括有:1.forward为转发标记,forward=1时表明这个包是转发的,forward=0时表明这个包是非转发的;2.to/from为发送方向标记为,其以网关为基准而设,to=0(from=1)代表由网关发出,to=1(from=0)代表发往网关;3.private/app用于区分自组网内部使用的包还是应用层的包。关于data字段的格式,由于自组网内部使用的包有三种类型:join包(用于节点申请入网,网关批准节点入网)、repo包(用于节点报障,说明下级节点失效)、ackn包(对重发包的应答,而不必再次转发,其实就是重发包的header)。所以,下面仅说明三种private包中的data字段部分。join包的data字段格式为:type(join)+节点层级+节点地址+上级节点地址+节点mac地址+供电类型repo包的data字段格式为:type(repo)+节点层级+节点地址+下级节点地址+节点mac地址+供电类型ackn包的data字段格式为:type(ackn)+(groupid+levelid+nodeaddr+flag+packetnum)以图5所示的通讯系统的拓扑结构为例,在该通讯系统中,网关g1能直接收到节点n1、n2的包;节点n1能直接收到网关g1、节点n3、n4的包;节点n2能直接收到网关g1、节点n4的包;节点n3能直接收到节点n1、n4的包;节点n4能直接收到节点n1、n2、n3的包。关于路由表的格式,需说明的是,其为一包括该节点所有子节点及子子节点的地址,及每个子节点及子子节点的父节点地址的表。若网关g1、节点n1、节点n2、节点n3、节点n4的节点地址分别依次为0、1、2、3、4,则结合下表所示的网关中的路由表的格式,表中第一排是网关的所有子节点、子子节点的节点地址的线性列,第二排则是第一排中的节点所对应的父节点的地址。显然,对于第一排中的某个节点,只要第二排中对应有父节点,则第一排中的节点一定是第二排中的节点的下级节点或下下级节点。在传输数据时,只要是发往或来自第一排某节点的包,第二排中相应的父节点就必须要转发该包,相反,则不转发。012340012该通讯系统在初始状态时,系统中只有一个设备,即网关g1。随着节点的加入,开始进行自组网。首先,网关g1对自己发join包,此时,节点n1、n2均能收到该join包,按冲突退避算法选择一随机时间,发送自己的join包,在join包的包头部分中,节点n1(或n2)的节点地址因还未分配,所以填父节点的地址,即网关的地址0,节点层级也是父节点的层级。在join包的数据部分中,节点n1(或n2)的节点地址未分配,填特殊值(例如为0),该特殊值表示待分配,另外,由于节点n1(或n2)能收到网关g1的包,所以可确定节点层级为1,并在join包填入节点层级和mac地址。具体为:data字段:type=join+节点层级=1+节点地址=0+上级节点地址=0+节点mac地址+供电类型header字段:levelid=0+groupid=1+nodeaddr=0+flag(t)+packetnum网关g1在收到该join包后,记录mac地址,为节点n1(或n2)分配节点地址,并在join包中填入为节点分配的地址,重发这个join包,目的地是上级节点地址,即网关自己,发送方向标记位t=0,即,该join包由网关g1发出,为入网批准包。节点n1(或n2)接收到网关发给网关的join包后,根据mac地址确定是批准自己入网的join包,便记录其中的层级和节点地址。这样,节点n1(或n2)便完成了首次入网。当节点n1(或n2)入网后,便成为网络的边缘节点,网关会定时向它们发join包,以维护网络。当节点n1(或n2)收到该join包后,会再将该join包重新发给自己,以作为对网关的ack包,此时,节点n3(或n4)便可收到发给n1(假设先收到发给n1的包)的join包,然后发送自己的join包,其中,data字段的节点地址填特殊值0,另外,由于能收到节点层级=1的包,所以节点层级填2,即,data字段为:type=join+节点层级=2+节点地址=0+上级节点地址=1+节点mac地址+供电类型而header字段为:levelid=1+groupid=1+nodeaddr=1+flag(t=1)+packetnum当节点n1收到该join包后,发现上级节点地址=1,就是自己,于是修改包header中的层级及标记位,即,levelid=1,flag(f=1,t=1,p=0),然后重发此包。网关g1收到该join后,记录mac,分配节点地址,并在join包填入所分配的节点地址,重发这个join包,目的地就是上级节点地址,即,节点n1的地址,修改标记位t=0,然后发往节点n1。该join包的header字段为:levelid=0+groupid=1+nodeaddr=1+flag(t=0)+packetnum当节点n1收到该join包后,发现header中目的地节点地址与自己的节点地址一致,并且是网关发出的join包,于是记录其中的路由信息,修改包header中的层级=1,再次发送这个包,作为对网关g1的确认包,同时也通知节点n3为其所分配的节点地址。另外,节点n1无需等节点n3的重发包,因为目的地本来就是节点n1的节点地址,本次传输已经终结。而且,节点n3也不会重发这个包,一是因为此包本来就是发给n1的,二是因为若不成功,即没有收到节点n1发的join包,节点n3再申请一次入网即可。另外,在传输join包时,只要目的地的节点地址在自己的路由表内,而且是由网关g1发出的join包,节点就会将join包内的信息加入到自己的路由表中,也可能是删除某条路由。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何纂改、等同替换、改进等,均应包含在本发明的权利要求范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1