1.一种基于LoRa的快速数据帧连续传输方法,其特征是:包括以下步骤:(1)每个节点均在MAC层设置:1)一个容量为8个最大长度数据帧的待确认数据帧缓存,用于存储已经发送但还没收到对应确认信息的需确认数据帧;同时,设置一个“等待接收确认帧”参数(用“wait”表示),用于表示是否在等待接收已发数据帧对应的确认帧,其值=0表示未等待,其值≠0表示在等待,在等待时间内不能发送新的数据帧,缺省默认值为0。2)一个长度为8位的2进制矢量——需确认数据帧接收矢量(用“WV”表示),用于记录成功接收需确认数据帧的状况,矢量中每一位元素的位置对应需确认数据帧的编号,元素的值为“1”表示成功收到该元素所在位置对应的需确认数据帧,值为“0”表示未收到,缺省默认值为“0”。3)一个“当前目的MAC地址”的参数(用“MAC_A”表示),用于表示当前正在发生的这一批数据帧的目的MAC地址,缺省初始值为-1。
(2)一个节点判断:wait是否等于0:
若不等于,则当前节点执行数据帧确认和重传操作,完成后设置:wait=0,MAC_A=-1;
然后执行下一步。
如等于,不进行任何操作。
(3)当前节点判断:在自己的MAC层发送缓存中有无待发的分组?如果有,执行数据帧发送操作,然后执行下一步;如果无,不进行任何操作。
(4)当前节点判断:是否收到对方节点发给自己的数据帧:
如果是,处理收到的数据帧。
如果否,不进行任何操作。
2.根据权利要求1所述的一种基于LoRa的快速数据帧连续传输方法,其特征是:步骤(3)中“数据帧发送操作”,包括以下步骤:
3.1)当前节点判断:当前正在发送的数据帧批次是否已发送完毕:若是,则在一个新的连续发送数据帧批次中发送MAC层发送缓存中的第一个待发分组;
如果不是,不进行任何操作。
3.2)当前节点判断:MAC层发送缓存中的第一个待发分组能否放在当前正在发送的数据帧批次中发送:如果能,则将第一个待发分组放在当前正在发送的数据帧批次中发送。
如果不能,则让第一个待发分组在MAC层发送缓存中继续等待,等到当前批次的数据帧的确认过程结束,然后在新的数据帧发送批次中发送第一个待发分组。
3.根据权利要求1所述的一种基于LoRa的快速数据帧连续传输方法,其特征是:步骤(4)中“处理收到的数据帧”,包括以下步骤:
4.1)当前节点将数据帧帧体的内容取出,上传给节点的上一层。
4.2)当前节点从帧头部提取出“MType”字段的值,根据该值判断:该数据帧是否需要确认:如果需要,当前节点从收到的数据帧头部的3个保留位中取出值,依序组合形成该数据帧的编号,接着将需确认数据帧接收矢量中与该编号对应的元素置为1。
如果不需要,则不进行任何操作。
4.3)当前节点判断:是否需要回复确认信息给数据帧发送节点:如果是:在“需确认数据帧接收矢量中只有0号元素值为1”且“当前节点即将向对方节点发送数据帧”的情况下,当前节点将待发数据帧头部的“ACK”位置1,然后将数据帧发送给对方节点;否则,当前节点生成一个新类型的、帧体长度可以在0~5bits之间自适应动态变化的确认帧;接着,从该确认帧头部的3个保留位开始,依序填入需确认数据帧接收矢量的元素,确认帧里的1位填入矢量的1个元素;填入时根据需确认数据帧接收矢量值为1的个数和分布情况来决定是否在帧体里增加位数以及增加多少位;然后,将该确认帧发送给对方节点。
如果否,不进行任何操作。
4.根据权利要求2所述的一种基于LoRa的快速数据帧连续传输方法,其特征是:步骤
3.2)中“将第一个待发分组放在当前正在发送的数据帧批次中发送”,包括以下步骤:
3.2.1)当前节点将MAC层发送缓存中的第一个待发分组取出,封装成一个数据帧。
3.3.2)当前节点判断:新封装的待发数据帧是否需要确认:如果是:令数据帧编号=待确认数据帧缓存的帧数,并将该编号以3位二进制数的形式,依序写入数据帧头部的3个保留位中,接着将数据帧拷贝至待确认缓存的尾部,然后确定数据帧头部Fpending字段和MAC_A、wait参数的值,最后,把数据帧发送给对方节点。
如果否:确定数据帧头部Fpending字段和wait参数的值,然后把数据帧发送给对方节点。