发明内容:
本发明的目的是提供一种数据传输协议适于多种无线模块,高效适用、配置灵活、数据传输可靠,组网简单实用,不受分支节点限制的分布式无线自组网。
本发明是这样实现的:
本发明分布式无线自组网,其特征在于包括一个主机、一个同步控制节点和多个分支节点;
主机启用三个传输信道,信道P0作为其在发送模式下接收来自分支节点的自动应答信号,其地址与主机发送地址相同,并在发送地址列表中切换,信道P1接收各分支节点数据,其地址在与各分支节点发送地址列表中相同的地址列表中切换,信道P2接收同步控制节点指令,只有一个公用地址;
分支节点的发送地址及其P0信道有固定且相同的地址,其中P0信道用于接收来自主机的应答信号,P1信道接收主机和同步控制节点指令,其地址在两个地址之间相互切换,分别是与本分支节点对应的主机发送地址和公用地址;
同步控制节点向各分支节点和主机传输启动指令和数据读取指令,同步控制节点仅开通P0信道且只有一个公用地址;
主机、同步控制节点和分支节点根据多节点多参数分布式无线数据传输要求,实现同步控制和异步传输的一对多组网方法,各分支节点与主机采用多信道多地址切换模式,利用地址匹配识别和自定义报文组合完成各分支节点与主机之间的数据传输。
无线分支节点的发送地址和接收地址分别设置对应不同的地址,但在相互通信时必须满足发送端的发送地址与对应接收端相应信道分配的地址一致。
主机P0信道地址、P1信道地址切换为不同地址,其切换地址的数量与总的分支节点数量相同。
所述自定义报文长度为32个字节,其中报头占8个字节,其余24个字节为数据体,自定义报文、报头、数据体的长度根据实际需求或结合满足要求的不同无线模块进行调整,所述报文中报头部分包括分支节点完成标志、分支节点号、分支节点内部数据道号、道数据结束标志、报文计数,报头部分按实际情况增加标志。
主机采用主动查询分支节点状态的方式来读取数据,为避免死循环,分支节点超时未响应,主机跳过该分支节点查询下一个分支节点。
所述无线模块为nRF24L01+、nRF24L01、nRF2401中的一种,或者其他符合多信道、收发一体式、地址匹配通信要求的无线芯片。
主机启动后的流程如下:
1.向分支节点发送配置参数:
将主机地址切换至其发送地址列表中对应首分支节点的发送地址,向分支点发送配置参数,启动计时功能,等待分支节点配置完成后的应答信号,在计时时间内接收到应答信号,将主机发送地址切换到与发送地址列表中对应下一个分支节点的发送地址,执行以上相同操作;
在计时时间内未接收到应答信号,重发N次,期间接到应答信号则将主机发送地址切换到对应下一分支节点地址,执行以上相同操作;
N次都未接到应答信号,检查网络;
循环以上过程,直到全部分支节点配置完成,
2.接收数据
将主机发送地址及其P0信道地址切换至其发送地址列表中对应首分支节点的发送地址,主机P1信道地址切换至与首分支节点发送地址相同的地址,主机P2信道收到同步信号后,主机向首分支节点发送连接指令,确认连接并接收到应答信号后,主机P1信道开始读取首分支节点数据,首分支节点数据传输完成后,主机发送地址及其P0信道地址切换到其发送地址列表中对应下一分支节点的发送地址,P1信道地址切换至与下一个分支节点发送地址相同的地址,循环执行以上相同操作;
在计时时间内未接收到应答信号,重发N次,期间接收到应答信号进入读取数据步骤;
N次都未接到应答信号,检查网络;
循环以上过程,直到全部分支节点数据传输完成。
分支节点启动后的流程如下:
分支节点的发送地址及P0信道地址固定且相同,并且各分支节点地址不相同,P1信道的地址在两个地址之间相互切换,分别是与本分支节点对应的主机发送地址相同地址和公用地址,且默认地址是与本分支节点对应的主机发送地址相同的地址;
P1信道地址首先切换到本分支节点对应的主机发送地址相同的地址;
接到主机配置命令时,首先完成执行相应的配置操作,完成后发送配置完成响应信号,分支节点的P1信道地址切换到公用地址,等待同步控制节点发送的同步信号,接收到同步信号后,分支节点P1信道地址再次切换到与对应的主机发送地址相同的地址,等待主机发送的连接指令,连接成功后分支节点向主机发送数据,数据发送完成后,分支节点P1信道再次切换至公用地址。
主机和各分支节点均采用多信道多地址切换技术,主机相对于无线分支节点采用一对多通信方式,这种通信方式的前提是无线模块之间相互通信时,必须保证具有相同的地址和匹配的频段。
组网过程中,主机部分采用单个无线分支节点,利用信道和地址切换的方式逐次与各分支节点相互通信,主机部分开启三个信道,其中P0信道用来接收发送数据时分支节点返回的应答信号,其地址与主机发送地址相同,同时主机发送地址的数量和分支节点数量相同,主要用来传输指令;P1信道负责接收不同分支节点数据,其地址与各分支节点的发送地址相同,主机也正是通过P1信道切换不同地址分别与各分支节点完成通信的,切换的地址列表包括了所有需要与主机进行通信的分支节点发送地址;P2信道作为接收同步信号的通道,其地址与同步控制节点的发送地址相同,即公用地址。主机通过无线自组网读取分支节点数据时,采用主动请求的方式,并且在超时无响应的情况下跳过该分支节点。
各分支节点部分主要包括地址分配和数据封装,其中分支节点开启两个信道,P0信道作为发送数据时接收应答信号的通道,其主要用于发送本分支节点数据;P1信道地址在公用地址和对应主机发送地址之间切换,此通道主要用来接收指令,包括同步指令、配置指令、主机请求读取数据的指令;分支节点部分另一个主要功能是数据的封装,包括报文的组合方式及规则的编写。
同步控制节点负责控制整个网络中的特定功能,如启动分支节点同步采集和通知主机开始查询分支节点状态并读取数据,本分支节点仅启动P0通道用来接收应答信号,并分配网络中的公用地址。
整个网络中传输的有效数据包长度32个字节,并可以根据实际情况进行调整,网络中针对主机发送的配置指令将报头高4个字节及低4个字节作为区分不同配置的关键字,中间24个字节为具体的配置参数;分支节点部分发送的数据包中主要将高8个字节分配为报文的标示字节,主要是用来标示分支节点所传送数据的特定信息(如本分支节点发送完成与否、分支节点号、采集道号、数据包数量、当前道数据发送完成与否),其余24个字节为数据体。
本发明的工作原理是:整个一对多传输网络中主机和分支节点在无数据传输的情况下均处于接收模式,只有在需要发送数据时才切换至发送模式。首先分配主机地址,其发送地址首先配置为地址列表中的第一个发送地址,即与网络中第一个分支节点相对应的发送地址,其P1信道地址与网络中第一个分支节点的发送地址相同,P2信道地址与公用地址相同;分支节点P1信道地址首先切换至与对应主机发送地址相同的地址,此时主机可以向分支节点发送各种配置指令及配置参数信息,配置完成后分支节点P1信道地址切换至公用地址,此时主机P2信道地址、分支节点P1信道地址和同步控制节点的发送地址相同,主机在收到同步信号后,定时向第一个分支节点发送请求连接指令,具体的定时间隔时间根据实际采集系统的需求而定,分支节点完成诸如采集工作一系列操作后,等待接收主机发送的确认连接指令,确认连接后分支节点开始向主机传输数据,本分支节点传输完成后将P1信道地址重新切换至与对应主机发送地址相同的地址等待下一次操作;主机读取完第一个分支节点的数据后将发送地址切换至与网络中下一个分支节点对应的发送地址,其P1信道切换为与网络中下一个分支节点发送地址相同的地址,同时向该分支节点发送确认连接的指令,该分支节点在收到连接的指令后开始发送本分支节点数据,整个网络以此类推,直至传输完所有数据。
本发明的有益效果是:本发明结合当前一对多无线数据传输网络的应用优势,提出一种多信道多地址切换的一对多无线组网方法,网络的数据传输协议中报文长度及具体参数可以根据实际情况进行修改定制,整个分布式无线自组网的组网方法简单易实现,方便移植应用到各种无线模块的自组网络中,其数据传输协议具有精确定位丢失数据包的功能,并具有高效实用、配置灵活、数据传输可靠的特点。
具体实施方式
为了使本发明更容易被理解,此处对采用一对十二的多分支节点组网方式进行阐述,并可以以此类推进行分支节点和地址扩展,下面结合附图和具体实施方式对本发明做进一步说明。
参阅图1及图2,一种分布式无线自组网,由主机、分支节点、同步控制节点组成,其中主机4以地址切换的方式分别与分支节点1、2、3相互进行数据传输,同步控制节点5单向向主机4和分支节点1、2、3传输同步控制指令,主机和分支节点在相互通信时需要同时使用发送地址和接收地址,同时主机和分支节点在发送和接收数据时需要切换至相应的模式,即发送模式或接收模式,以下部分操作均是在其切换至相应的模式下进行的。
参阅图2,主机使用信道P0、P1、P2,其中P0信道用于发送数据时接收应答信号,其地址与主机发送地址相同,主机发送地址及P0信道地址根据地址列表循环切换对应至不同分支节点,P1信道地址与对应各分支节点的发送地址相同,用于接收分支节点发送的数据,P2信道地址与公用地址相同,用于接收同步指令;分机使用信道P0、P1,其中P0信道用于发送数据时接收应答信号,其地址与本机发送地址相同,P1信道地址则分别对应主机地址和公用地址,并根据需要在两个地址之间进行切换;同步控制节点地址使用P0信道,其地址与本机发送地址相同,只分配公用地址。
为保证本发明更易于被理解,此处通过叙述一个主机分别与十二个分支节点进行通信的组网方法对本发明进行详细的说明。在进行通信需要对数据传输过程中所使用的报文格式进行说明,针对一对十二的组网方式报文采用了以下的定义格式:整个数据传输过程中的报文长度为十六进制格式的32个字节,参考图3,主机向分支节点发送的数据包中首尾各四个字节,即第28~31个字节及第0~3个字节按顺序分别为0xa3、0xa2、0xa1、0xa0时,标示为主机向分支节点发送的配置命令,而其中的第4~27个字节为具体的配置参数;当主机或分支节点接收到的数据包中第28~31个字节及第0~3个字节均为0x05时,其他字节随机,标示为同步控制节点所发送同步命令;参考图4,分支节点向主机传输数据时,将整个报文的最高8个字节用于标示数据包,主机通过报文的标示来进行解包,以便进行实际数据的提取和纠错,其中第30~31字节为本分支节点数据发送完成标志,第29字节为分支节点的编号,第28字节为采集道号,第26~27字节为数据包计数,第24~25字节为当前采集道数据发送完成标志,第0~23字节为实际的数据体部分。主机可以根据报文的报头部分实现对数据的恢复和纠错。
参考图4,主机与分支节点相互通信时,必须保证其发送地址与对应的接收地址相同才能完成通信,本网络中使用的地址宽度为十六进制格式的五个字节,由于主机需要分别与传输网络中的十二个分支节点依次进行通信,因此主机的发送地址需要在十二个地址范围内进行切换,此处主机部分所对应的地址列表中具体的十二个地址分配为高四个字节相同且由高至低分别为0x51、0x52、0x53、0x54,最低字节用于区分不同分支节点分别为0xC1、0xC2、0xC3、0xC4……0xCB、0xCC,逐次加一;参考图6,分支节点的地址与主机类似,具体的十二个地址分配也为高四个字节相同且由高至低分别为0x51、0x52、0x53、0x54,最低字节用于区分不同分支节点分别为0xA1、0xA2、0xA3、0xA4……0xAB、0xAC,逐次加一。当然这并不是主机和分支节点地址的唯一编排方式,其可以有多种组合方式,前提是两个分支节点通信时的发送地址和接收地址要对应;参考图7,同步控制节点部分的地址设置为公用地址,其由高至低具体分配为0x51、0x52、0x53、0x54、0x55,此处公用地址的分配也可以取其他的组合方式。
参考图8,主机部分在整个数据传输过程中主要实现两个功能:一是向分支节点发送配置参数,二是接收分支节点传输的数据包。当主机向分支节点发送配置字时,首先将其地址切换至其发送地址列表中对应首分支节点的发送地址,开始向分支节点发送配置数据包并启动计时功能,同时循环等待分支节点配置完成后向主机返回的响应,如果在计时时间内接收到响应,表示分支节点接收到配置数据包并且配置完成,则将主机的发送地址切换至其发送地址列表中对应下一个分支节点的发送地址,并执行以上相同的操作,反之,如果计时时间内没有收到响应,则主机直接跳转至多次重发功能部分,如果在多次重发允许次数范围内接收到响应,表示分支节点正确接收到了配置数据包并且配置完成,则将主机的发送地址继续切换至其发送地址列表中对应下一个分支节点的发送地址,并执行以上相同的操作,直至配置完网络中所有分支节点,而如果超过了多次重发次数仍未接收到响应,则说明整个网络出现了问题,需要对网络进行检查;主机在接收数据时首先需要将其发送地址其发送地址列表中对应首分支节点的发送地址,并将自身P1信道接收地址切换至对应分支节点发送地址,P2信道地址为公用地址,在接收数据前需要等待同步信号,当收到同步信号后则向首分支节点发送连接指令数据包,并一直等待连接响应,如果在计时范围内收到响应或在计时时间内未收到响应,但是在启动多次重发功能后,在重发次数范围内收到了响应,则开始接收分支节点传输的数据,接收完本分支节点数据后,将主机的发送地址切换至其发送地址列表中对应下一个分支节点的发送地址,同时将自身的P1信道地址切换至对应下一个分支节点的发送地址,并且执行与首分支节点相同的操作,直至接收完成整个传输网络中所有分支节点的数据,反之,如果在计时范围内未收到响应,并且在多次重发范围内未收到响应则需要对网络进行检查。
参考图9,分支节点部分主要是接收配置指令和向主机发送本分支节点数据。本分支节点的发送地址是固定的,并且各分支节点不能相同,P1信道的接收地址在两个地址之间相互切换,两个地址分别是与对应主机发送地址相同的地址和公用地址,且其默认地址是与主机相对应发送地址相同的地址。分支节点在接收到配置命令时,首先执行相应的配置操作,完成后向主机发送一个标示本分支节点配置完成的数据包,同时将本分支节点P1信道地址切换至公用地址,并等待同步控制节点所发送的同步信号,等待同步工作完成后将地址重新切换至与主机对应的发送地址(其中分支节点的同步工作主要是其需要进行的一些同步操作功能,如启动数据采集等),当然分支节点部分可以不经过配置操作直接等待同步操作并进行数据传输。分支节点在向主机传输数据时,首先需要等待主机发送的连接指令,确认连接后分支节点连续向主机发送数据,同时分支节点需要累计数据包的数量,在发送完成结束数据包后表示整个分支节点数据发送完成,进而将分支节点的P1信道地址切换至与对应主机发送地址相同的地址重复执行以上操作。