一种ZigBee数据传输的方法
【专利摘要】本发明涉及ZigBee【技术领域】,具体为一种ZigBee数据传输的方法。所述方法由分组方法和重组方法两部分组成;对于发送数据方来说,通过直接调用本发明的分组传输接口就可以发送大数据,屏蔽ZigBee底层发送机制。本发明能将多个数据包同时发送,下一个数据包启动分组发送不受上一个数据包发送是否结束的影响。本发明采用自定义的分组传输技术,可更灵活地利用ZigBee来发送大数据。发送端可以发送的最大数据包长为10368B。若将7位目的分组标号扩展为15位目的分组标号,一个ZigBee包包含最大数据为2621440B。本发明根据当前网络状态来动态设定当前发送帧的超时时间。对于接收数据方来说,通过ZigBee帧头部信息和分组头部信息进行重组,不需要考虑接收的帧的顺序。
【专利说明】—种Z i gBee数据传输的方法
【技术领域】
[0001]本发明涉及ZigBee【技术领域】,具体为一种ZigBee数据传输的方法。【背景技术】
[0002]ZigBee技术是一种短距离、低功耗的无线通信技术。其特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本,适用于自动控制和远程控制领域,可以嵌入各种设备,满足低成本、低功耗无线传感器网络的需求。
[0003]当应用程序在传送数据时,除去ZigBee协议开销后,每帧可携带的有效负荷最大长度为84字节。在ZigBee协议中,提供了分组传输机制,在该分组传输机制中,API发送帧最多可包含255个字节的数据,这将被分成多个分组,并在接收侧重组。如果接收侧没有收到其中的一个或多个分组,接收器将丢弃整个数据,并且向发送侧反馈一个传输失败的API帧。
[0004]现有技术ZigBee协议提供的分组传输方法存在如下技术缺陷:API发送帧最多只能传输最多255个字节的数据;传输当中若存在一个或者多个分组接收失败,接收器将丢弃整个数据,故数据通信的可靠性和传输效率比较低。
[0005]中国专利“CN101860423 —种协议分组传输的重传方法和装置”提供了一种协议分组传输的重传方法和装置。发送方依次发送其传输窗口内的数据块,每发送完一块数据块,就启动帧间定时器,在延时设定的时间后,再接着发送下一块,直到窗口内所有数据块被发送完。数据块也可称为分组。当传输窗口内所有数据块发送完以后,发送启动第一个超时定时器。若在第一个超时定时器溢出时仍然没有收到对已发送分组的确认巾贞,则生成一个请求确认帧并发送至接收方,同时启动第二个超时定时器。若第二个超时定时器溢出前收到确认帧,判断确认帧是否有效,确认有效后,根据确认帧携带的确认信息的指示,重传已发送分组中未被接收方正确接收的分组。若在第二个超时定时器溢出前仍然没有收到确认帧,则重传请求确认帧。
[0006]中国专利“CN101860423所述的技术方案在发送失败时,需启动两个定时器,并需要再重发一次请求确认帧,增加发送次数,延长发送时间。此外,需要等待上一个窗口发送成功才能发送下一个窗口,这样极大地降低了信道的使用率。
【发明内容】
[0007](一)要解决的技术问题
[0008]本发明的目的为提出一种既能提高数据传输的可靠性,又能避免重发请求确认帧的分组传输的方法。
[0009]对于发送数据方来说,本发明所述方法通过直接调用分组传输接口发送大数据,屏蔽ZigBee底层发送机制。本发明所述方法能将多个数据包同时发送,下一个数据包是否启动分组发送不受上一个数据包发送是否结束的约束。针对采用ZigBee模块自带的分包重组协议发送端发送的最大数据包长为255B这一技术问题,本发明采用自定义的分组传输技术,可更灵活地利用ZigBee来发送大数据,发送端发送的最大数据包长为10368B。针对现有技术中超时时间设为固定值时无法适应由于网络规模的大小导致传输速率快慢的变化这一技术问题,本发明所述方法根据当前网络状态来动态设定当前发送帧的超时时间。当网络规模大时,传输速率慢,超时时间设定为一个较大值;当网络规模小时,传输速率快,超时时间设定为一个较小值。
[0010]对于接收数据方来说,本发明所述方法通过ZigBee帧头部信息和分组头部信息进行重组,不需要考虑接收的帧的顺序。
[0011](二)技术方案
[0012]为了解决上述技术问题,本发明提供了
[0013]一种ZigBee数据传输的方法,其特征为,所述方法由分组方法和重组方法两部分组成;所述分组方法使用=ZigBee包、ZigBee巾贞格式、ZigBee模块和ZigBee协议;所述分组方法中ZigBee巾贞协议由定界符、长度、负载和校验组成;所述ZigBee巾贞格式为依照ZigBee帧协议形成的数据格式;所述负载包括有效负荷;所述有效负荷中插入分组发送的标志字段,所述标志字段由分包标号、结束分组标志位和分组标号组成;
[0014]所述分组方法步骤如下:
[0015](I)将ZigBee包分为η个分组;
[0016](2)填充所述有效负荷;
[0017](3)将每个所述有效负荷填充ZigBee协议规定的帧开销并封装为ZigBee帧格式,得到封装完的ZigBee帧;
[0018](4)将所述封装完的ZigBee帧添加到发送缓存中准备发送;
[0019](5)发送完所述封装完的ZigBee巾贞的同时将所述ZigBee巾贞添加到已发送列表中,
等待应答信息;
[0020](6)根据接收ZigBee模块的应答帧和发送超时判断分组发送成功或失败;
[0021 ] 所述重组方法步骤如下:
[0022](I)程序启动时创建接收线程和接收监控线程;
[0023](2)当所述接收监控线程接收到一个ZigBee巾贞后,所述接收线程解析其ZigBee中贞头部信息和分组头部信息,获取64位目的节点物理地址、分包标号、分组标志和结束分组标志位;
[0024](3)根据64位目的节点物理地址和分包标号查找已接收的数据包列表,获取所述数据包的接收情况;
[0025](4)如果没有找到对应的所述数据包,说明这是一个新数据包,创建所述新数据包的信息,把所述新数据包也添加到已接收包列表中,并将所述接收监控线程接当前接收到的ZigBee帧的分组也添加到所述新数据包中;
[0026](5)如果已找到对应的所述数据包,若所述数据包中已经存在与当前接收到的ZigBee帧的分组标志相同的分组,则丢弃当前接收到的ZigBee帧;若所述数据包中不存在与当前接收到的ZigBee巾贞的分组标志相同的分组,则添加当前接收到的ZigBee巾贞的分组到所述数据包的分组列表中,并将已接收分组数加I ;
[0027](6)设置最后一次接收时间为当前时间,用于超时处理,并判断结束分组标志位是否为I ;当结束分组标志位为I时,将所述数据包的分组数设置为该分组标志加I ;当结束分组标志位为O时,继续等待接收分组;
[0028](7)判断已接收分组数是否等于所述数据包的分组数;如不相等,分组接收没有结束,还需继续等待;若相等,则所述数据包接收完毕,对该包的所有分组进行接收重组;
[0029](8)接收监控线程也在定时轮询方式执行,若已接收列表中的包接收下一个分组的已等待时间超过接收超时时间,则判断所述数据包接收失败,把所述数据包从已接收列表中删除。
[0030]优选地,所述负载由帧类型、分组标志、64位目的节点物理地址、16位目的节点网络地址、广播深度、发送选项和有效负荷组成;所述有效负荷由标志字段和数据组成;所述标志字段共3个字节;所述标志字段由16位目的分包标号、I位目的结束分组标志位和7位目的分组标号组成;所述传输的传输对象为ZigBee包,所述分包标号所标识的对象为ZigBee包分组后的数据包;所述结束分组标志位结合所述分组标号用于获取ZigBee包所包含的分组数量;所述分组方法包括ZigBee模块串口,在ZigBee模块串口中设置硬件流控。
[0031]优选地,所述16位目的分包标号用于标识ZigBee模块的ZigBee分包标号;所述I位目的结束分组标志位中O表示所述ZigBee分组不是最后一个分组,I表示所述ZigBee分组是最后一个分组;所述分组标号用于对分组进行排序,接收方按照所述分组标志位进行重组数据。
[0032]优选地,一个所述ZigBee包最大分组为128个,一个所述ZigBee包包含最大数据为10368B;将所述7位目的分组标号扩展为15位目的分组标号,一个所述ZigBee包包含最大数据为2621440B。
[0033]优选地,所述硬件流控在ZigBee模块数据处理超负荷时通知本端设备停止向ZigBee模块发送数据;当ZigBee模块可利用资源空闲时所述硬件流控通知本端设备向ZigBee模块发送数据。
[0034]优选地,所述重组方法第(7)步中采用的接收重组步骤如下:
[0035](I)计算出数据的总长度,遍历该包下的各个分组,把每个分组的长度进行相加,得出总长度;
[0036](2)依照总长度大小分配用于存储数据的缓存空间;
[0037](3)把该包的分组按照分组标号的大小进行从小到大排序并根据排序依次把各个分组的数据拷入缓存空间;
[0038](4)把该包从已接收列表中删除;
[0039](5)把数据交给上层应用进行处理。
[0040](三)有益效果
[0041]本发明通过在ZigBee帧中插入自定义的标志字段,共3个字节:分包标号、分组标号和结束分组标志位,将超过ZigBee帧的最大长度有效负荷(84字节)的数据进行分组发送。针对现有技术采用ZigBee模块自带的分包重组协议,发送端发送的最大数据包长为255B,本发明所述方法采用自定义的分组传输技术,可更灵活地利用ZigBee来发送大数据,发送端发送的最大数据包长为10368B。同时,在ZigBee模块串口中设置硬件流控,使得每个ZigBee帧都能根据流控调节及时发送出去,不需要延时等待或超时设定,也有效地防止瞬间大量数据对ZigBee网络带来的冲击,确保网络高效而稳定。
[0042]对于发送数据方来说,针对现有技术每次发送大数据都要考虑数据需要分成多少个帧,本发明所述方发通过直接调用本发明的分组传输接口就可以发送大数据,屏蔽ZigBee底层发送机制。
[0043]针对现有技术中发送超时时间设为固定值时,无法适应由于网络规模的大小导致传输速率快慢的变化,本发明所述方法根据当前网络状态来动态设定当前发送帧的超时时间。当网络规模大时,传输速率慢,超时时间设定为一个较大值;当网络规模小时,传输速率快,超时时间设定为一个较小值。
[0044]对于接收数据方来说,针对现有技术重组时需要考虑接收的帧的顺序,本发明所述方发通过ZigBee帧头部信息和分组头部信息进行重组。本发明根据接收ZigBee模块的应答帧和发送超时判断来判断分组发送是否成功。本发送可单独判断每一个发送分组是否发送成功,如果发送超时或者失败,不需要像中国专利“CN101860423 —种协议分组传输的重传方法和装置” 一样,再次发送请求确认帧后至接收方来确认哪个数据块发送失败。
[0045]接收方解析出ZigBee帧头部信息和分组头部信息,根据64位目的节点物理地址、分包标号、分组标号和结束分组标志位进行接收重组,这样使得接收方不必考虑接收帧的顺序,即接收到ZigBee帧不需要根据分组标号进行顺序接收,有效防止出现网络异常导致ZigBee帧没有按照顺序传输到接收方的情况。
[0046]当ZigBee包中的某一个或者多个分组没有接收成功时,如果超过接收超时时间(接收超时时间必须大于发送次数最大值*平均发送超时时间,如超过40台网络时设定为90s),则判断该包接收失败,把该包从已接收列表中删除。这样使得接收方不必为某一个分组接收失败而超长时间等待。针对中国专利“CN101860423 —种协议分组传输的重传方法和装置”需要等待上一个传输窗口内所有数据块发送完后,才能发送下一个传输窗口,本发明所述方法可多个数据包同时发送,下一个数据包是否启动分组发送不受上一个数据包是否发送结束的约束。
【专利附图】
【附图说明】
[0047]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0048]图1是根据本发明一种ZigBee数据传输的方法一个实施例的插入分组标志的帧结构示意图;
[0049]图2是根据本发明一种ZigBee数据传输的方法一个实施例的分组示意图;
[0050]图3是根据本发明一种ZigBee数据传输的方法一个实施例的发送帧示意图;
[0051]图4是根据本发明一种ZigBee数据传输的方法一个实施例的超时重传示意图。
[0052]图中:Frame Type:巾贞类型;Frame ID:分组标志;64-bit Destination Addr:64位目的节点物理地址;16-bit Destination Addr:16位目的节点网络地址!BroadcastRadius:广播深度;0ptions:发送选项,RF Data:有效负荷。
【具体实施方式】
[0053]下面结合说明书附图和实施例,对本发明的【具体实施方式】作进一步详细描述。以下实施例仅用于说明本发明,但不能用来限制本发明的范围。[0054]本发明分为两个部分:分组方法和重组方法。
[0055]分组方法:
[0056]图1所示,ZigBee帧结构包括定界符、长度、负载、校验,其中负载包括:帧类型、分组标志、64位目的节点物理地址、16位目的节点网络地址、广播深度、发送选项、有效负荷。除了有效负荷之外的字段,都是ZigBee帧携带的必要开销。
[0057]本发明在有效负荷中插入分组发送的标志字段,共3个字节,包括:
[0058](I) 16bit的分包标号,标识了 ZigBee模块的ZigBee分包标号。
[0059](2) Ibit的结束分组标志位,O表示该分组不是最后一个分组,I表示该分组是最后一个分组,这样可以结合下面的分组ID来获取该包所包含的分组数量。
[0060](3)7bit的分组标号,用来对分组进行排序,接收方按照分组ID进行重组数据。一个包最大分组为128个(0x0?0x7F)。因此对于一个ZigBee包所能包含的最大数据为(84-3)B*128=10368B,大约为10KB。相比ZigBee自带的分组协议最大传输为255B,本发明的分组协议最大传输长度可到达IOKB左右,这对于一般的嵌入式应用已经是足够的。注:如果需要传输更大数据,可将分组标号扩展为15bit,这样最大传输长度将可达到(84-4)B*32768=2621440B。
[0061]给定一个长度为length的发送数据包。假设ZigBee帧能发送的有效负荷最大长度为max_send,则采用分组后,能发送的最大长度为max_send_frag=max_send-3,即去掉上述的头部信息,共3个字节。
[0062]将发送数据包分为η个分组:n=[length/max_send_frag]向上取整数。例如,当length 为 1000B, max_send_frag 为 81B,贝丨J η 为 13,即分为 13 个分组。
[0063]前(η-1)个分组的有效负荷长度均为max_send_frag,最后一个分组有效负荷长度为 length-(n_l)氺max_send_frag。
[0064]图2所示,填充有效负荷步骤如下:
[0065](I)将前(η-1)个分组的结束分组标志位写0,分组标号分别写入
O,I, 2,, (n-2);
[0066](2)将最后一个分组的结束分组标志位写1,分组标号写入(η-1);
[0067](3)将这η个分组的分包标号写为(已发送的包数量+1);
[0068](4)将数据data按照顺序填充到各个frag分组中。
[0069]当每个分组的有效负荷填充完成后,将每个有效负荷填充ZigBee协议规定的帧开销,封装成为ZigBee帧格式。ZigBee帧开销需要对长度、帧类型、分组标志、64位目的节点物理地址、16位目的节点网络地址、广播深度、发送选项进行赋值。分组标志结合16位目的节点网络地址来定位发送的帧,在一定时间内必须确保分组标志值的唯一性,分组标志值根据上一次分配的值加I后模255来分配,因为分组标志为O则设置为不需要应答故分组标志若被分配到O则需再次分配。
[0070]ZigBee帧封装完后即可添加到发送缓存中准备发送出去。发送结束的同时将发送帧添加到已发送列表中,并等待应答信息。
[0071]图3所示,每两个帧之间存在帧间隙,即时间片段,其作用是使介质中的信号处于稳定状态,同时让接收端对接收的帧作相应处理。Digi公司对XBee PRO模块的IFG建议是IOOms0此外,在ZigBee模块串口中设置硬件流控。当ZigBee模块数据处理超负荷时,硬件流控通知本端设备停止往ZigBee模块发送数据。待ZigBee模块数据处理完毕,可以接收更多数据时,硬件流控通知本端设备继续发送数据。由硬件流控进行调节,使ZigBee模块对每个帧都能及时处理,避免了规定每两帧之间的帧间隙。ZigBee模块连续发送分组时不需要设置传输窗口。
[0072]判断分组发送成功或失败根据接收ZigBee模块的应答帧和发送超时判断。
[0073]接收Zigbee模块的应答巾贞:接收方接收到Zigbee巾贞后,ZigBee模块会自动反馈应答帧给发送方。发送方获取该帧的16位目的节点网络地址、分组标志以及发送状态。根据16位目的节点网络地址和分组标志查找已发送列表中的分组,如果查找不到该分组,说明该分组已经被判断超时了(见下述超时判断),则丢弃该应答帧,不进行任何处理。如果查找到该分组,则从已发送列表中删除该分组,并根据发送状态的值来判断该分组是否发送成功。
[0074]图4所示在超过超时时间,没有收到B的应答巾贞或者应答巾贞反馈发送失败,则启动超时重传,重新发送Fl帧,直到收到接收方应答帧反馈成功后,才从发送列表中删除Fl帧。
[0075]1、当发送状态的值为O时,则表明发送成功,根据公式I来计算该分组的发送时间,公式2计算分组发送平均时间,公式3计算分组加权发送时间,以便用于发送超时判断。初始化时,将上次分组发送平均时间和最近一次分组发送时间设置为一个较大值,可根据网络设备节点的多少进行设置,如超过40台组网通信时,将上次分组发送平均时间和最近一次分组发送时间的初始值可设置为10s。
[0076]分组发送时间=确认帧接收时间戳-分组发送时间戳(公式I)
[0077]分组发送平均时间=(n*上次分组发送平均时间+最近一次分组发送时间)/(n+l)(公式2)
[0078]其中η为已发送成功的次数。
[0079]分组加权发送时间=(1-α )*分组发送平均时间+α*最近一次分组发送时间(公式3)
[0080]其中α为计算因子。本案例取0.6,即最近一次分组发送时间比分组发送平均时间的影响因子要大些。
[0081]2、当发送状态的值不为O时,则认为发送失败,按照以下步骤进行重发操作:
[0082]( I)发送失败次数加I ;
[0083](2)判读失败次数是否超过发送次数最大值(发送次数最大值可由用户自设定),超过最大值,则判定该分组发送失败;
[0084](3)未超过发送次数最大值,则重新分配分组标志,并再次尝试发送该分组,发送完毕后把分组添加到已发送列表中;
[0085]超时判断:程序启动时创建一个发送监控线程,该线程主要定时监控发送列表中的分组,用于扫描判断各个分组发送是否超时,定时时间可设置为I秒,也可由用户根据ZigBee组网设备规模来确定。
[0086]本发明根据当前网络状态来动态判断各个分组发送是否超时:
[0087]分组发送超时时间=3* (分组加权发送时间)(公式4)
[0088]公式4表明分组发送超时时间是分组加权发送时间的3倍。其中分组加权发送时间由公式3给出,即分组发送平均时间、最近一次分组发送时间和计算因子α这三个因素来确定。当α取值为0.6时,则表明最近一次分组发送时间的影响因素大于分组发送平均时间。如果当前ZigBee网络速率变慢时,最近一次分组发送时间比分组发送平均时间大,则分组发送超时时间也会变大。如果当前ZigBee网络速率变快时,最近一次分组发送时间比分组发送平均时间小,则分组发送超时时间也会变小。这样使得分组发送超时时间能够动态设定以适应网络速率的变化。
[0089]分组发送等待时间=当前时间-分组发送时间戳(公式5)
[0090]当公式5的分组发送等待时间大于公式4的分组发送超时时间,则认为分组发送失败,把分组从发送列表中删除,并按以下步骤进行重发操作:
[0091 ] (I)发送失败次数加I ;
[0092](2)判读失败次数是否超过发送次数最大值,超过最大值,则判定该分组发送失败;
[0093](3)未超过发送次数最大值,则重新分配分组标志,并再次尝试发送该分组,发送完毕后把分组添加到已发送列表中。
[0094]第二部分:重组方法
[0095]程序启动时创建接收线程和接收监控线程。当接收到ZigBee巾贞时,接收线程用于接收重组。接收监控线程用于判断接收的包是否超时,当接收一个包含多个分组的包时,可能存在其中一个或者多个分组发送失败的情况,此时接收方就接收不到发送失败的分组,因此需要引入超时判断功能来决定该包是否接收失败。接收监控线程定时时间设置为IOs的定时检查,检查包是否接收失败。
[0096]当接收方接收到一个ZigBee巾贞后,接收线程解析其ZigBee巾贞头部信息和分组头部信息,获取64位目的节点物理地址、分包标号、分组标号和结束分组标志位。根据64位目的节点物理地址和分包标号查找已接收的数据包列表,获取所述数据包的接收情况。按照以下步骤进行处理:
[0097](I)如果没有找到对应的包,说明这是一个新包,就创建该新包的信息,把该新包也添加到已接收包列表中,并该接收方接收到的ZigBee巾贞的分组添加到该新包中。继续往下执行。
[0098](2)如果已找到对应的包,存在以下两种情况:
[0099]若所述数据包中已经存在与当前接收到的ZigBee帧的分组标志相同的分组,说明已经接收过当前接收到的ZigBee巾贞,贝U丢弃当前接收到的ZigBee巾贞;
[0100]若所述数据包中不存在与当前接收到的ZigBee帧的分组标志相同的分组,则添加当前接收到的ZigBee帧的分组到所述数据包的分组列表中,并将已接收分组数加I。
[0101](3)计算当前接收到的ZigBee帧的分组中数据的长度,并将数据存到该包的分组链表中。
[0102](4)设置最后一次接收时间为当前时间,用于超时处理。并判断结束分组标志位是否为I。
[0103]当结束分组标志位为1,则置该包的分组数设置为
[0104]分组数=(分组标号+1),(公式6)
[0105]注:分组标号是从O开始计数。
[0106]当结束分组标志位为0,则说明该分组不是最后一个分组,继续等待接收帧。[0107](5)判断已接收分组数是否等于所述数据包的分组数。如果不相等,分组接收没有结束,还需继续等待。
[0108]如果相等,则所述数据包接收完毕,然后对该包的所有分组进行接收重组。重组步骤如下:
[0109](I)计算出数据的总长度。遍历所述数据包下的各个分组,把每个分组的长度进行相加,得出总长度。
[0110](2)分配大小为总长度用于存储数据的缓存空间。
[0111](3)把所述数据包的分组按照分组标号的大小进行从小到大排序,然后根据排序依次把各个分组的数据拷入到缓存空间。
[0112](4)把该包从已接收列表中删除。
[0113](5)把数据交给上层应用进行处理。
[0114]与此同时,接收监控线程也在定时轮询方式执行。如果已接收列表中的包接收下一个分组的已等待时间超过接收超时时间(接收超时时间可有用户根据网络大小设定,如超过40台时可设定90s),贝U判断该包接收失败,把该包从已接收列表中删除。
[0115]已等待时间=当前时间-最近该包的分组接收时间(公式7)
[0116]以上实施方式仅用于说明本发明,而非对本发明的限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行各种组合、修改或者等同替换,都不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。
【权利要求】
1.一种ZigBee数据传输的方法,其特征为,所述方法由分组方法和重组方法两部分组成;所述分组方法使用:ZigBee包、ZigBee帧格式、ZigBee模块和ZigBee协议;所述分组方法中ZigBee帧协议由定界符、长度、负载和校验组成;所述ZigBee帧格式为依照ZigBee帧协议形成的数据格式;所述负载包括有效负荷;所述有效负荷中插入分组发送的标志字段,所述标志字段由分包标号、结束分组标志位和分组标号组成; 所述分组方法步骤如下: (1)将ZigBee包分为η个分组; (2)填充所述有效负荷; (3)将每个所述有效负荷填充ZigBee协议规定的帧开销并封装为ZigBee帧格式,得到封装完的ZigBee帧; (4)将所述封装完的ZigBee帧添加到发送缓存中准备发送; (5)发送完所述封装完的ZigBee帧的同时将所述ZigBee帧添加到已发送列表中,等待应答信息; (6)根据接收ZigBee模块的应答帧和发送超时判断分组发送成功或失败; 所述重组方法步骤如下: (1)程序启动时创建接收线程和接收监控线程; (2)当所述接收监控线程接收到一个ZigBee帧后,所述接收线程解析其ZigBee帧头部信息和分组头部信息,获取64位目的节点物理地址、分包标号、分组标志和结束分组标志位; (3)根据64位目的节点物理地址和分包标号查找已接收的数据包列表,获取所述数据包的接收情况; (4)如果没有找到对应的所述数据包,说明这是一个新数据包,创建所述新数据包的信息,把所述新数据包也添加到已接收包列表中,并将所述接收监控线程接当前接收到的ZigBee帧的分组也添加到所述新数据包中; (5)如果已找到对应的所述数据包,若所述数据包中已经存在与当前接收到的ZigBee帧的分组标志相同的分组,则丢弃当前接收到的ZigBee帧;若所述数据包中不存在与当前接收到的ZigBee帧的分组标志相同的分组,则添加当前接收到的ZigBee帧的分组到所述数据包的分组列表中,并将已接收分组数加I ; (6)设置最后一次接收时间为当前时间,用于超时处理,并判断结束分组标志位是否为I ;当结束分组标志位为I时,将所述数据包的分组数设置为该分组标志加I ;当结束分组标志位为O时,继续等待接收分组; (7)判断已接收分组数是否等于所述数据包的分组数;如不相等,分组接收没有结束,还需继续等待;若相等,则所述数据包接收完毕,对该包的所有分组进行接收重组; (8)接收监控线程也在定时轮询方式执行,若已接收列表中的包接收下一个分组的已等待时间超过接收超时时间,则判断所述数据包接收失败,把所述数据包从已接收列表中删除。
2.根据权利要求1所述的一种ZigBee数据传输的方法,其特征在于,所述负载由帧类型、分组标志、64位目的节点物理地址、16位目的节点网络地址、广播深度、发送选项和有效负荷组成;所述有效负荷由标志字段和数据组成;所述标志字段共3个字节;所述标志字段由16位目的分包标号、I位目的结束分组标志位和7位目的分组标号组成;所述传输的传输对象为ZigBee包,所述分包标号所标识的对象为ZigBee包分组后的数据包;所述结束分组标志位结合所述分组标号用于获取ZigBee包所包含的分组数量;所述分组方法包括ZigBee模块串口,在ZigBee模块串口中设置硬件流控。
3.根据权利要求2所述的一种ZigBee数据传输的方法,其特征在于,所述16位目的分包标号用于标识ZigBee模块的ZigBee分包标号;所述I位目的结束分组标志位中O表不所述ZigBee分组不是最后一个分组,I表示所述ZigBee分组是最后一个分组;所述分组标号用于对分组进行排序,接收方按照所述分组标志位进行重组数据。
4.根据权利要求3所述的一种ZigBee数据传输的方法,其特征在于,一个所述ZigBee包最大分组为128个,一个所述ZigBee包包含最大数据为10368B ;将所述7位目的分组标号扩展为15位目的分组标号,一个所述ZigBee包包含最大数据为2621440B。
5.根据权利要求4所述的一种ZigBee数据传输的方法,其特征在于,所述硬件流控在ZigBee模块数据处理超负荷时通知本端设备停止向ZigBee模块发送数据;当ZigBee模块可利用资源空闲时所述硬件流控通知本端设备向ZigBee模块发送数据。
6.根据权利要求1~5项中任一项所述的一种ZigBee数据传输的方法,其特征在于,所述重组方法第(7)步中采用的接收重组步骤如下: (1)计算出数据的总长度,遍历该包下的各个分组,把每个分组的长度进行相加,得出总长度; (2)依 照总长度大小分配用于存储数据的缓存空间; (3)把该包的分组按照分组标号的大小进行从小到大排序并根据排序依次把各个分组的数据拷入缓存空间; (4)把该包从已接收列表中删除; (5)把数据交给上层应用进行处理。
【文档编号】H04L1/00GK103944880SQ201410092532
【公开日】2014年7月23日 申请日期:2014年3月13日 优先权日:2014年3月13日
【发明者】席小鹭, 吴宏, 姚红春, 仇洁婷, 陈儒军 申请人:湖南强军科技有限公司