一种超低功耗无线数据传输网络设计方法
技术领域
本发明属于电子信息技术领域,具体涉及一种超低功耗无线数据传输网络设计方法。
背景技术
在水力、电力、能源、广播电视等行业的机房中,有一些需要定期抄表的监测数据,这类信息的特点是单次抄表数据数量小,并且对抄表的频率和实时性要求都不高,但是它们位置却很分散。例如温湿度监测指标,对于一个大型机房来说,不同位置的温湿度情况是不同的。空调附近的温度较低,而远离空调处的温度可能会高一些,所以需要在不同位置安装多个监测传感器。对于这类信息,采用无线传输的通信方式具有安装维护方便的优势。
对于无线通信来说,如果采集点附近有电源,可以方便直接利用。然而有些应用场合不方便有线供电,例如无人机房的水浸传感器,如果真的发生了水浸,那么用有线供电的方式甚至可能会引起危险,因此在类似的应用中采取电池供电更为合适。如果能最大程度的降低整机的电源消耗,就可以减少电池更换。若采用小型光电池与微型蓄电池相结合,可实现免维护的目标。对于那些处于阴暗角落的水浸传感器,可以用容量稍大点的一次性锂电池,达到连续运行十几年而无需更换的寿命。
为了省电的目标,需要适当降低无线发射功率,这就会减少数据传输的距离。另外,这些传感器常常会同时多个放在附近一起应用,而不是孤零零单用。因此,如果可以进行级联,让每一个传感器都具有数据接力转发的能力,那么就可以弥补小功率无线通信距离较短的不足。采取这种手拉手的通信方式,组成了一个网格形的数据传输网,可以显著地扩展通信距离。
发明内容
本发明的目的是提供一种超低功耗无线数据传输网络设计方法,利用这种方法可以研制出一种成本低,功耗小的无线数据传输网系统。
为实现上述目的,本发明采用如下技术方案:
一种超低功耗无线数据传输网络设计方法,该方法包括以下步骤:
步骤1,设计数据传输网络,该网络由集中器和节点两种设备组成,集中器下发指令遥控和汇总抄表数据,每个节点均受到集中器的控制,也可以上报抄表数据,并且,每个节点均是无线通信的中继器,可以把无线数据级联接力转发到下一级,这样,位于网络最末端节点的数据可以利用其它节点逐级中继上传,最终送达集中器;
这种设计重点在于具有双向数据传输能力的前提下,尽可能降低每个节点的功耗,每个节点都采取间歇供电工作模式,也就是采用休眠与接收两种状态交替工作的方法,让节点在绝大多数时间里保持休眠,这时整机电流只有十几微安;定时唤醒进入短暂的接收状态,此时瞬间耗电有几个毫安,偶尔还会进入数据发射状态,此时耗电几十毫安,因为数据量很小,发射时间会很短暂,发射机会又很少,尽管发射期间的电流稍大一些,但它也不是主要耗电部分,整个系统中,所有节点都工作在这种间歇供电的低功耗模式,集中器即可以低功耗,也可以用正常功耗模式,整个网络支持集中器到节点的双向通信,节点可以把抄表数据报送到集中器,集中器也可以把控制信息下发到指定节点。
步骤2,建立低功耗的通迅,采用FSK调制方式,通信的波特率采用25Kbps,最大数据有效负载不少于180字节,为保证在任意7毫秒之内均可以收到可识别的数据,将数据包按桢做分割,每桢均加上同步识别码,并且保证每桢的传输时间均小于7毫秒;
步骤3,设计路由通信过程,路由通信协议的数据包格式如下:
(1Byte) |
包信息(3Byte) |
长度不定 |
包类型 |
分桢总数、后面数据校验和、后面字节数 |
包数据 |
包类型定义了以下几种:
0x00表示普通单向数据包,并要求最终目标节点应答;
0x01表示单向数据包,不要求最终目标节点应答;
0x02表示节点主动上报单向数据包,要求集中器应答;
0x81表示节点发出的广播注册包,用于向集中器注册;
0x82表示节点代理其它节点的注册包,代其向集中器注册;
包信息用于检查数据是否有错,
包数据的具体格式由不同种类的数据包决定,
单向包的包数据格式由路由头、路由表和数据组成:
每个节点有一个唯一的四字节标识ID,规定集中器的ID是零,其它节点非零,在路由头中,节点数标明整个路径中,数据共经历了几个节点,最短的路由也需要有一个源地址加上一个目标地址共两个节点,已跳数就是路由跳数,从1开始,每经过一跳就加1,当已跳数等于节点数时,就表明数据已经抵达了最终目标,路由表就是把那些所有路由经历节点的ID按跳顺序进行排列,设计最大支持9跳,能满足绝大多数情况的需要了,设计更大的跳数在实际的应用中价值不大。
从这个协议可以看出,只需在集中器上保存全网的所有节点信息和网络拓扑图,而每一个节点都不需要知道其它节点是否存在,因为网络拓扑图的数据量是节点数量的平方,当节点数量较多时,占用的存贮空间较大,因为节点不需要保存网络的拓扑结构,所以不需要多大的存贮空间,更不需要计算最佳路由,这样的设计对CPU的性能要求非常低,选择速度慢一些的单片机用利于降低功耗。
步骤4,节点注册过程
一个节点刚上电时,处于未注册的状态,集中器的节点图里没有它的相关信息,刚上电的节点随机在某一时刻发起广播注册包:
发起广播注册的节点把自身ID广播出去向周边的邻居节点或集中器宣告自身存在;
功能码分为两种情况:
代理级别从0到7,表示广播节点希望到达路由的跳数,0表示广播节点希望直接注册到达集中器,1表示广播节点希望能一次代理转发后到达集中器,只有那些到达集中器实际跳数低于或等于请求级别的已注册节点才会执行代理注册,以减少低价值的注册信息占用信道,节点注册广播会依次累加广播注册包中的代理级别,尽可能地缩短路由;
完成注册=0x80,一个节点注册成功以后,发射信号通知正准备代理注册上报的邻居节点,让邻居节点取消关于这个节点的代理上报,减少冗余的代理注册;
如果一个未注册节点收到了其它未注册邻居的注册广播,那么就把这个邻居节点的信息收集起来,等到该节点注册时,就可以捎带上周围的邻居;
一个已注册的节点收到请求级别大于自身跳数级别的节点注册广播时,把这个注册广播包转换成代理注册包,择机发射出去:
代理注册包实际上也是一种单向包,因为代理注册数据包比原来那条广播注册包里多出了路由部分,会占用一些的空间,因此,若包长度发生了溢出,那就丢弃一部分周边节点信息;
集中器无论是收到广播注册包,还是收到这种代理注册包,都要向要注册的节点发送一个不要求应答的单向包,来通知这个节点已注册成功,收到注册成功信息的那个节点保存这个命令中的路由表反转信息,作为可能需要发起主动上报的路由,从此,除非在需要主动上报时,已注册的节点基本处于静寂状态不再主动发射信号,其它被捎带到集中器的周边邻居节点信息,只用于设置节点图中各节点的相邻关系,还没有真正进行注册;
集中器根据注册广播和主动上报的代理注册,可以得到整个网络的节点拓扑图,实际上它是一个表格,其规模大约是节点数量平方的一半,下表描述了一个包含有A、B、C、D四个节点的一个节点拓扑图;
|
A |
B |
C |
D |
A |
- |
X |
X |
X |
B |
Y |
- |
X |
X |
C |
Y |
Y |
- |
X |
D |
Y |
Y |
Y |
- |
在X和Y区域保存两个节点是否相邻,这是一个三角形矩阵,只需要保存X区域那个部分就够了;集中器每当收到有新节点注册时,在矩阵中添加这个新节点,再设置各节点的相邻关系,如果集中器要查询某个节点,可以从节点图中运用最优路由算法,按照取得的最短路径设置查询命令中的路由表,发射出去即可实现指定节点的查询抄表功能;
步骤5,网络故障自动维护
在实际使用中,如果一个中继节点发生故障,会导致路由表中后续的所有节点都失控,由于每个节点附近都会有其它邻居节点存在,当孤立节点发生故障时,其它邻居节点完全可以代替它实现中继转发功能;
集中器可以通过抄表查询命令超时发现节点故障并自动重建路由,集中器在查询某节点时,若命令超时未得到应答数据,可以根据路由表,先用二分法向各路由节点发出查询命令,最终找到故障节点,之后把故障节点从网络节点拓扑图中清除,重新计算路由,再次发射指定节点的查询命令即可完成路由重建过程;
节点利用主动上报也可以发现中继故障并自动重建路由,如果节点进行主动上报,而最终并没有得到集中器的应答,那么可以重新发出注册广播,要求周边的邻居节点再次进行代理注册,如果这些邻居的上级节点有故障,那么就因代理注册不成功,引发故障节点下级的所有节点重新注册,最终由故障节点同级的其它节点代理完成这些重新注册,重建新的有效上报路由。
进一步,所述步骤2中存在A、B两种情况:
A情况下,在接收窗口里节点认出同步识别码保持唤醒,数据桢N就可以正常识别接收,节点继续保持唤醒状态可以接收到数据桢N+1及其后面的所有数据;在B情况下,节点收到同步识别码之后保持唤醒状态,可以收到数据桢N+1和它之后的所有数据,但桢负载数据N将丢失,因此只需在数据桢N+1之后再次出现数据桢N,这样节点就可以完整收到所有的数据桢,对此把数据桢按照下面的格式进行设计:
同步码(8bit) |
桢识别码(32bit) |
桢序号(5bit) |
桢校验(3bit) |
桢数据(56bit) |
每桢数据都由1字节的同步码,4字节的桢识别码,1字节的桢序号校验,7字节的桢数据组成,共13字节;
同步码用来使接收电路的锁相环同步,桢识别码用来识别桢数据,识别码错误的桢数据将被丢弃,桢序号占5个数据位,从0到31,标明这桢数据有整个数据包中的位置,3个桢校验位对后面所有桢数据进行校验检查,校验出错的数据将被丢弃;
在25Kbps下,每桢的传输时间4毫秒,理论接收窗口期不低于6毫秒,考虑到实际产品中唤醒定时器存在约10%的误差,所以设计采用7毫秒的唤醒接收窗口期;
发射端要保持每桢的数据都要按照桢序号的顺序,连续循环对外发射,每次发射总共的时间要稍大于1秒钟,保证附近的其它节点一定可以在唤醒期间收到这包完整数据,只要节点在唤醒期间接收到发射的桢数据,就继续保持唤醒接收状态,最终收到完整的数据,考虑到实际生产中唤醒定时器存在约10%的误差,所以实际发射窗口设计1.2秒;
接收节点收到每个数据桢之后,先检查校验,然后把它按照桢序号计算部门这桢数据在整包数据中的位置,保存起来,等到接收超时以后,就可以得到一个完整的数据包,因为受到5位的桢序号限制,一包数据最多可以有32桢,每桢7个字节,所以最大数据包可以有224字节,满足一般抄表和遥控需要。
进一步,所述步骤3中,网络数据抄表有两种工作模式,一种是由集中器发起的查询抄表特定节点;另一种是由节点主动上报抄表数据到集中器;对于集中器查询模式,集中器保存有整个网络中所有节点拓扑图,就可以计算最佳路由,填写路由表之后发射无线数据,所有接收到数据的节点跟据路由表中已跳数作为索引,在路由表中得到当前的目标节点ID,再检查它与自己的ID是否相符,如果两者一致,那么自己正是这个查询的目标;若不一致就不理会它直接去休眠,目标节点再检查已跳数与节点数,如果节点数不等于已跳数加一,那么自己就是中继节点,只需把已跳数加一,然后再把数据包发射出去即可;如果自己就是最终的节点,在处理抄表命令完成之后;先反转路由表的内容,再重置已跳数为一,最后发射数据就实现抄表数据应答到集中器,有数据需要主动上报的节点,需要至少保存一个上报路由,这个路由信息可以从集中器从前查询抄表的历史命令中取得,也可以在节点注册到系统的过程中得到。
本发明的有益效果:
本发明通过这种超低功耗无线数据传输网络设计方法设计出一种运行在超低功耗模式下的一种双向数据传输网络,是一种采用多级中继方式的网格型网络,具有各节点自适应自动智能协商组网能力,网络可以自动计算最优路由,并且可以自动绕过个别节点故障节点。而且整个系统中,所有节点都工作在这种间歇供电的低功耗模式,集中器即可以低功耗,也可以用正常功耗模式。整个网络支持集中器到节点的双向通信,节点可以把抄表数据报送到集中器,集中器也可以把控制信息下发到指定节点,从而使工作效率更高。
附图说明
下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1为本发明网络连接示意图;
图2为本发明增加节点作为中继后的网络连接示意图;
图3为本发明步骤2中的AB两种情况示意图;
图4为本发明步骤2中发射窗口期需要有足够长的时间,至少跨越接收端一个的休眠唤醒周期才能保证数据传输的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1~图4所示,为本发明的一种实施例,一种超低功耗无线数据传输网络设计方法,该方法包括以下步骤:
步骤1,设计数据传输网络,该网络由集中器和节点两种设备组成,集中器下发指令遥控和汇总抄表数据,每个节点均受到集中器的控制,也可以上报抄表数据,并且,每个节点均是无线通信的中继器,可以把无线数据级联接力转发到下一级,这样,位于网络最末端节点的数据可以利用其它节点逐级中继上传,最终送达集中器,图1描述了这个网络结构;
这种设计重点在于具有双向数据传输能力的前提下,尽可能降低每个节点的功耗,每个节点都采取间歇供电工作模式,也就是采用休眠与接收两种状态交替工作的方法,让节点在绝大多数时间里保持休眠,这时整机电流只有十几微安;定时唤醒进入短暂的接收状态,此时瞬间耗电有几个毫安,偶尔还会进入数据发射状态,此时耗电几十毫安,因为数据量很小,发射时间会很短暂,发射机会又很少,尽管发射期间的电流稍大一些,但它也不是主要耗电部分,整个系统中,所有节点都工作在这种间歇供电的低功耗模式,集中器即可以低功耗,也可以用正常功耗模式,整个网络支持集中器到节点的双向通信,节点可以把抄表数据报送到集中器,集中器也可以把控制信息下发到指定节点。
步骤2,建立低功耗的通迅,一般需要抄表或监测的机房中,采样点的距离不会太远,常常位于同一幢楼里。即使不在同一楼,也会在附近。在每一个抄表数据的监测采样点都需要安装一个节点,整个区域内根据工作便利情况,选择安装集中器的地点。如果有其它区域独立于整个地区,可以在那种区域单独安装集中器,也可以把几个并不采样的节点,放在区域之间作为级联。图2描述了用中继节点把不同区域联接在一起的情况。
为了折中数据传输速度与耗电,设计低功耗的节点每秒唤醒一次进入接收状态。唤醒接收超时7毫秒。如果在唤醒期间收到有效数据,那么就继续保持唤醒状态一直接收数据,直至所有数据接收超时完毕。设计采用FSK调制方式,通信的波特率采用25Kbps,最大数据有效负载设计不少于180字节。如果采联简单的直接数据发射方式,可以估算出,完整的一包数据发射需要用接近60毫秒才能从头到尾传输完毕,还有在通信协议上,包头还需要一个加上一个固定多字节的同步识别码。也就是说,只有系统保持至少120毫秒的唤醒接收时间窗才可以识别并收到一包完整数据。这种的工作方式会明显增加耗电。为了保证在任意7毫秒之内都可以收到可以识别的数据,需要把数据包按桢做分割,每桢都加上同步识别码,并且保证每桢的传输时间都小于7毫秒。也就是有效负载数据时长加上双份同步码的总时长都小于7毫秒时,可以保证节点在这7毫秒以内可以正确收到这桢数据。图3描述了这种情况。这里存在A、B两种情况:
A情况下,在接收窗口里节点认出同步识别码保持唤醒,数据桢N就可以正常识别接收,节点继续保持唤醒状态可以接收到数据桢N+1及其后面的所有数据;在B情况下,节点收到同步识别码之后保持唤醒状态,可以收到数据桢N+1和它之后的所有数据,但桢负载数据N将丢失,因此只需在数据桢N+1之后再次出现数据桢N,这样节点就可以完整收到所有的数据桢,对此把数据桢按照下面的格式进行设计:
同步码(8bit) |
桢识别码(32bit) |
桢序号(5bit) |
桢校验(3bit) |
桢数据(56bit) |
每桢数据都由1字节的同步码,4字节的桢识别码,1字节的桢序号校验,7字节的桢数据组成,共13字节;
同步码用来使接收电路的锁相环同步,桢识别码用来识别桢数据,识别码错误的桢数据将被丢弃,桢序号占5个数据位,从0到31,标明这桢数据有整个数据包中的位置,3个桢校验位对后面所有桢数据进行校验检查,校验出错的数据将被丢弃;
在25Kbps下,每桢的传输时间4毫秒,理论接收窗口期不低于6毫秒,考虑到实际产品中唤醒定时器存在约10%的误差,所以设计采用7毫秒的唤醒接收窗口期;
发射端要保持每桢的数据都要按照桢序号的顺序,连续循环对外发射,每次发射总共的时间要稍大于1秒钟,保证附近的其它节点一定可以在唤醒期间收到这包完整数据,情况如图4所示,只要节点在唤醒期间接收到发射的桢数据,就继续保持唤醒接收状态,最终收到完整的数据,考虑到实际生产中唤醒定时器存在约10%的误差,所以实际发射窗口设计1.2秒;
接收节点收到每个数据桢之后,先检查校验,然后把它按照桢序号计算部门这桢数据在整包数据中的位置,保存起来,等到接收超时以后,就可以得到一个完整的数据包,因为受到5位的桢序号限制,一包数据最多可以有32桢,每桢7个字节,所以最大数据包可以有224字节,满足一般抄表和遥控需要。
步骤3,设计路由通信过程,路由通信协议的数据包格式如下:
(1Byte) |
包信息(3Byte) |
长度不定 |
包类型 |
分桢总数、后面数据校验和、后面字节数 |
包数据 |
包类型定义了以下几种:
0x00表示普通单向数据包,并要求最终目标节点应答;
0x01表示单向数据包,不要求最终目标节点应答;
0x02表示节点主动上报单向数据包,要求集中器应答;
0x81表示节点发出的广播注册包,用于向集中器注册;
0x82表示节点代理其它节点的注册包,代其向集中器注册;
包信息用于检查数据是否有错,
包数据的具体格式由不同种类的数据包决定,
单向包的包数据格式由路由头、路由表和数据组成:
每个节点有一个唯一的四字节标识ID,规定集中器的ID是零,其它节点非零,在路由头中,节点数标明整个路径中,数据共经历了几个节点,最短的路由也需要有一个源地址加上一个目标地址共两个节点,已跳数就是路由跳数,从1开始,每经过一跳就加1,当已跳数等于节点数时,就表明数据已经抵达了最终目标,路由表就是把那些所有路由经历节点的ID按跳顺序进行排列,设计最大支持9跳,能满足绝大多数情况的需要了,设计更大的跳数在实际的应用中价值不大。
从这个协议可以看出,只需在集中器上保存全网的所有节点信息和网络拓扑图,而每一个节点都不需要知道其它节点是否存在,因为网络拓扑图的数据量是节点数量的平方,当节点数量较多时,占用的存贮空间较大,因为节点不需要保存网络的拓扑结构,所以不需要多大的存贮空间,更不需要计算最佳路由,这样的设计对CPU的性能要求非常低,选择速度慢一些的单片机用利于降低功耗。
网络数据抄表有两种工作模式,一种是由集中器发起的查询抄表特定节点;另一种是由节点主动上报抄表数据到集中器;对于集中器查询模式,集中器保存有整个网络中所有节点拓扑图,就可以计算最佳路由,填写路由表之后发射无线数据,所有接收到数据的节点跟据路由表中已跳数作为索引,在路由表中得到当前的目标节点ID,再检查它与自己的ID是否相符,如果两者一致,那么自己正是这个查询的目标;若不一致就不理会它直接去休眠,目标节点再检查已跳数与节点数,如果节点数不等于已跳数加一,那么自己就是中继节点,只需把已跳数加一,然后再把数据包发射出去即可;如果自己就是最终的节点,在处理抄表命令完成之后;先反转路由表的内容,再重置已跳数为一,最后发射数据就实现抄表数据应答到集中器,有数据需要主动上报的节点,需要至少保存一个上报路由,这个路由信息可以从集中器从前查询抄表的历史命令中取得,也可以在节点注册到系统的过程中得到。
步骤4,节点注册过程
一个节点刚上电时,处于未注册的状态,集中器的节点图里没有它的相关信息,刚上电的节点随机在某一时刻发起广播注册包:
发起广播注册的节点把自身ID广播出去向周边的邻居节点或集中器宣告自身存在;
功能码分为两种情况:
代理级别从0到7,表示广播节点希望到达路由的跳数,0表示广播节点希望直接注册到达集中器,1表示广播节点希望能一次代理转发后到达集中器,只有那些到达集中器实际跳数低于或等于请求级别的已注册节点才会执行代理注册,以减少低价值的注册信息占用信道,节点注册广播会依次累加广播注册包中的代理级别,尽可能地缩短路由;
完成注册=0x80,一个节点注册成功以后,发射信号通知正准备代理注册上报的邻居节点,让邻居节点取消关于这个节点的代理上报,减少冗余的代理注册;
如果一个未注册节点收到了其它未注册邻居的注册广播,那么就把这个邻居节点的信息收集起来,等到该节点注册时,就可以捎带上周围的邻居;
一个已注册的节点收到请求级别大于自身跳数级别的节点注册广播时,把这个注册广播包转换成代理注册包,择机发射出去:
代理注册包实际上也是一种单向包,因为代理注册数据包比原来那条广播注册包里多出了路由部分,会占用一些的空间,因此,若包长度发生了溢出,那就丢弃一部分周边节点信息;
集中器无论是收到广播注册包,还是收到这种代理注册包,都要向要注册的节点发送一个不要求应答的单向包,来通知这个节点已注册成功,收到注册成功信息的那个节点保存这个命令中的路由表反转信息,作为可能需要发起主动上报的路由,从此,除非在需要主动上报时,已注册的节点基本处于静寂状态不再主动发射信号,其它被捎带到集中器的周边邻居节点信息,只用于设置节点图中各节点的相邻关系,还没有真正进行注册;
集中器根据注册广播和主动上报的代理注册,可以得到整个网络的节点拓扑图,实际上它是一个表格,其规模大约是节点数量平方的一半,下表描述了一个包含有A、B、C、D四个节点的一个节点拓扑图;
|
A |
B |
C |
D |
A |
- |
X |
X |
X |
B |
Y |
- |
X |
X |
C |
Y |
Y |
- |
X |
D |
Y |
Y |
Y |
- |
在X和Y区域保存两个节点是否相邻,这是一个三角形矩阵,只需要保存X区域那个部分就够了;集中器每当收到有新节点注册时,在矩阵中添加这个新节点,再设置各节点的相邻关系,如果集中器要查询某个节点,可以从节点图中运用最优路由算法,按照取得的最短路径设置查询命令中的路由表,发射出去即可实现指定节点的查询抄表功能;
步骤5,网络故障自动维护
在实际使用中,如果一个中继节点发生故障,会导致路由表中后续的所有节点都失控,由于每个节点附近都会有其它邻居节点存在,当孤立节点发生故障时,其它邻居节点完全可以代替它实现中继转发功能;
集中器可以通过抄表查询命令超时发现节点故障并自动重建路由,集中器在查询某节点时,若命令超时未得到应答数据,可以根据路由表,先用二分法向各路由节点发出查询命令,最终找到故障节点,之后把故障节点从网络节点拓扑图中清除,重新计算路由,再次发射指定节点的查询命令即可完成路由重建过程;
节点利用主动上报也可以发现中继故障并自动重建路由,如果节点进行主动上报,而最终并没有得到集中器的应答,那么可以重新发出注册广播,要求周边的邻居节点再次进行代理注册,如果这些邻居的上级节点有故障,那么就因代理注册不成功,引发故障节点下级的所有节点重新注册,最终由故障节点同级的其它节点代理完成这些重新注册,重建新的有效上报路由。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。