吴晨刚
摘 要:北斗卫星导航系统提供的短报文服务在应急通信领域发挥着十分重要的作用,针对现有“北斗2号”导航系统短报文服务无反馈机制,无重传机制和数据长度短等问题,提出一种基于北斗短报文通信的数据传输方法。通过在某国有大型航运公司的实际生产应用,将“北斗2号”短报文的数据长度增加到原来的16倍左右,取得了良好的通信效果,为北斗短报文通信在航运领域生产应用提供了一种解决方案。
关键词:北斗;短报文;数据传输
中图分类号:TP311.5
文献标识码:A
0 引 言
北斗卫星导航系统是中国着眼于国家安全和经济社会发展需要,自主建设、独立运行的卫星导航系统,是为全球用户提供全天候、全天时、高精度的定位、导航和授时服务的国家重要空间基础设施[1]。
在一些传统通讯无法保证通讯的区域,北斗短报文可以做到稳定持续地传输数据,因此也被广泛应用于各行各业的生产活动中。
但是,北斗短报文在航运领域实际应用中存在如下不足之处:
北斗短报文通信存在数据部分损坏或者全部丢失的情况[2],而且目前“北斗2号”短报文协议不同于传统网络传输,无反馈机制和重传机制,使得发送方无法获知数据的接收状态,在实际应用中用户体验一般。
北斗短报文通信存在数据长度限制。目前,“北斗2号”短报文通信的单次长度限制为40汉字左右,在实际应用中存在发送短报文数据过长时用户不方便的问题。
北斗系统对发送频率存在限制,以及通信双方发送频率不一致的情况。目前在某航运公司使用“北斗2号”短报文通信时,岸端发送频率为 1次/ min,船端发送频率为1次/5 min 。同时,还存在接收方数量不一致的情况。在航运领域,岸端的接收方是多艘船舶,而船端的接收方通常是岸端,船舶之间的通信频率较少,对于岸端而言,存在对不同船舶的消息进行优先级调度问题。传统网络模式的消息反馈、重传数据方法,无法很好地在这种发送频率存在限制,通信双方频率不一致,以及接收方数量不一致的场景下进行使用,存在通信双方等待时间过长,后续消息阻塞等问题。
因此,对于短报文传输方法的设计实现与传统网络传输存在较大的区别。
1 方法总体介绍
本文提出的一种基于北斗短报文通信的数据传输方法包括发送数据模块,接收数据模块,调度模块。
传输方法将会使用到如下名词定义。
1.1 消息隊列[3]
分为待发送消息队列,回执消息队列,接收消息队列,拆包消息队列,发送消息队列。
另外,还有一个消息池,用于记录所有的发送和接收的消息。
1.2 发送周期
按照完整消息为一个单位,1次正常传输时间,加上n次重传传输时间为一个完整的发送周期。其中重传时,发送方会根据接收方消息回执的反馈,仅重传未发送成功的消息数据包。
其中,重传传输时间等于正常传输时间。尽管发送方仅重传未发送成功的消息数据包,会造成重传传输时间小于正常传输时间,但是不考虑这种情况的原因是:北斗通信信道资源较为紧张,需要发送方和接收方多次信息交互确认才能完成双方的周期同步变更。
1.3 定时器
对于发送方而言,定时器触发后会进行消息重传和更新消息状态。
对于接收方而言,定时器触发后会进行消息回执和更新消息状态。
发送方重发时刻计算公式如下:
TF1=T+∆T+(N-1)*H1+W1+H2+W2;
TFi=TFi-1+(N-1)*H1+W1+H2+W2;
式中,TF1为第1次重发时刻,TFi为第i次重发时刻,TFi-1为第i-1次重发时刻i∈[2,n];n为设定次数;T为当前时刻;∆T为发送信息在首发时的时间间隔;N为外发数据中子数据的总数;H1为发送频率,H2为接收方的发送频率,W1为在发送方发射时段产生的误差修正常数,W2为在接收方发射时段产生的误差修正常数;
接收方重接时刻计算公式如下:
TJ1=T3+(N-S)*H1+W1;
TJi=TJi-1+(N-1)*H1+W1+H2+W2;
式中,TJ1为第1次重接时刻,TJi为第i次重接时刻,TJi-1为第i-1次重接时刻,i∈[2,n];T3为首次接收到已收信息中子数据的时刻;N为已收信息中子数据的总数;S为首次接收到的已收信息中子数据对应的序号。
1.4 消息状态
分为待发送,发送中,发送成功,发送失败,预接收,接收中,接收成功,接收失败。
1.5 消息时间
分为创建时间,等待时间和入队时间。
对于接收消息而言,三个时间相等。
对于发送消息而言,创建时间是最初消息进入系统的时间;等待时间首次发送时等于创建时间,在消息发送周期失败后,如需重新发送时,等待时间变为当前时间;入队时间是守护线程调度该消息从待发送状态变为发送中状态时的时间。消息回执的时间等于对应接收消息的时间。
1.6 消息头部[4]
包括版本号,日期,序号,当前包号,总包号,消息类型。消息类型包括消息回执,消息,预操作消息。其中通过日期和序号可以准确定位一条消息。消息头部和所占字节数如图1所示。
1.7消息回执
内容为OK或者未完成的数据包号数组。
1.8 预操作
由于通过北斗系统进行数据发送时,无法做到和传统网络一样持续发送,须按照指定时间间隔进行数据发送,并且存在发送方和接收方发送频率相差较大的情况。
当按照每条消息为一个单元进行发送时,接收方的回执时间延迟将会导致发送方存在信道空闲的情况,所以引入预操作行为。通过优先级进行调度,对后续信息进行预发送或预回执,以充分利用发送信道。
1.9 重复回执
由于通过北斗系统进行数据发送时,无法保证接收方一定会收到数据,因此在信道空闲时,会对接收成功的消息,进行重复回执发送,确保接收方可以收到消息回执,以充分利用发送信道。
1.10 消息优先级
目前消息分为紧急消息,回执消息,一般消息,不紧急消息,预操作消息。
紧急消息的优先级大于一般消息,一般消息优先级大于不紧急消息,不紧急消息优先级等于预操作消息。
回执消息优先级较为特殊,当存在紧急消息时,其优先级等于紧急消息,否则等于一般消息。
预操作包含预发送,预回执和重复回执,操作次数小的优先级高。在操作次数相同时,预发送和预回执优先级相同,预发送和预回执优先级高于重复回执。
优先级一样时,等待时间早的优先级更高。发送消息和消息回执的等待时间完全相同时,消息回执优先级更高。
2 发送数据模块
发送数据模块用来接收外部发送短报文数据和本方法发送的回执消息。
当模块接收到发送请求后,会对数据进行北斗协议的特殊字符进行转义处理。
对于回执消息,在回执消息队列中保留最新的回执消息。
对于正常消息,在待发送消息队列和消息池增加该消息。如果消息长度超过单次最大长度减去自定义消息头部的长度时,则进行数据拆包处理后放入拆包消息队列,否则直接放入拆包消息队列。
发送数据模块流程如图2所示:
3 接收数据模块
接收数据模块会根据是否存在消息头部,判断是否为原始短报文消息。
对于自定义短报文,主要分为回执消息和正常消息。
如果是回执消息,则根据消息内容,从拆包消息队列和发送消息队列中删除已发送的消息。如果回执消息提示已完成发送,则更新待发送消息队列状态,并触发定时器。
如果是正常消息,当首次接收时,在接收消息队列和消息池增加该消息,并计算发送周期,设定定时器触发时间。每当接收消息时,都会放入拆包消息队列,根据队列中该消息的总个数和消息头部的总包号判断是否已完成接收。如果已完成接收,则会触发定时器。
接收数据流程如图3所示。
4 调度模块
4.1 定时器守护线程
定时器触发分为立即触发和间隔触发。立即触发操作由方法的模块触发,间隔触发由方法根据定时器触发时间判断是否触发。
4.1.1接收消息队列
立即触发情况:
(1)消息状态为接收成功。从拆包消息队列中获取该消息的所有消息包合并为一条完整的消息,然后进行特殊字符转义,得到原始消息内容,更新消息池中状态为接收成功,发送消息回执。
(2)消息状态为接收失败。更新消息池状态为接收失败。
间隔触发情况:
(3)消息状态为接收中。如果在发送周期中,则发送消息回执,设定定时器触发时间。如果已超出发送周期,更新接收消息隊列状态为接收失败并立即触发定时器。
(4)消息状态为预接收:删除消息池、接收消息队列和拆包消息队列的该消息数据。
4.1.2待发送消息队列
立即触发情况:消息状态为发送成功或发送失败。更新消息池中状态为发送成功或发送失败。
间隔触发情况:消息状态为发送中。如果在发送周期中,将拆包消息队列中该消息写入发送消息队列,设定定时器触发时间。如果已超出发送周期,更新待发送消息队列状态为发送失败,并立即触发定时器。
4.2 调度消息守护线程
当发现发送消息队列无数据,且接近信道下次允许发送时才会执行如下调度操作,如图4所示。
检查待发送消息队列是否存在发送中的消息
(1)如果不存在:
从待发送消息队列和回执消息队列获取一条高优先级消息。如果是待发送消息,则更新消息池状态为发送中,计算发送周期和设定定时器触发时间;更新待发送消息队列状态为发送中;将拆包消息队列中该消息放入发送消息队列。否则将回执消息放入发送消息队列后删除。
如果均不存在,则从接收消息队列获取一条高优先级且未达到重复操作上限的消息进行预回执或重复回执操作。
(2)如果存在:
从待发送消息队列和回执消息队列获取一条高优先级且未达到预操作上限的消息。如果是待发送消息,从拆包消息队列中获取一个数据包放入发送消息队列,并在预发送所有数据包后更新预操作次数。否则将回执消息放入发送消息队列后删除。
如果不存在回执消息,则从待发送消息队列和接收消息队列获取一条高优先级消息进行预发送或预回执操作。
4.3 发送消息守护线程
如果当前时间大于上次发送时间加发送频率,则从发送消息队列根据入队时间,获取最早的一条消息进行发送。
5 实验测试
搭建测试环境,模拟岸端给6条船舶依次发送如下报文,其中重传的次数设置为2,重复回执的次数设置为5。
丢包率模拟:在航运领域,短报文收发经常出现船舶的行驶过程中,丢包发生具有随机性,因此丢包率采用了随机数进行模拟丢包。每次发送时,从100以内选取一个随机数,如果随机数小于设定的loss指标,则认为丢包。
发送频率:目前岸端设备发送频率为1次/ min,船端设备发送频率为1次/5 min,目前船端发送的设计是预留定位发送信道,因此每10 min 发送短报文1次。本次实验按照岸端发送频率1次 /min,船端设备设定为2 min 和5 min 各1次,即短报文发送频率为4 min 和10 min 各1次。
测试报文如图5所示:
实验结果如下表所示:
从实验结果中,我们可以得出,随着loss指标不断增加,当loss等于60时,10 min 一次发送短报文的情况,仍然可以实现较高的数据包达到率,证明本传输方法的有效性,降低了丢包率。
6 结束语
本文所提供的基于北斗短报文通信的数据传输方法已在某航运企业实际生产应用,取得了良好的通信效果,将北斗2号短报文的数据长度增加到原来的16倍左右,同时增加通信的反馈功能和重传功能,并且充分利用了北斗的通信信道。
北斗卫星导航系统作为国家战略,成为生产生活中不可或缺的一部分。其强大的定位精准性、广泛的覆盖面以及安全性的保障为我国在各行各业提供了强大的支持和保障。
随着北斗短报文通信容量的不断增强,本方法会帮助北斗短报文在航运领域提供更好的服务[5]。
参考文献
[1] 陈忠贵,武向军.北斗三号卫星系统总体设计[J].南京航空航天大学学报,2020(6):835-845.
[2] 肖春晖,梁都朝.北斗短报文在海上安全信息播发中的应用[J].珠江水运,2017,(23): 79-80.
[3] 王亮,徐开来,马良荔.基于会话、队列控制的北斗短报文传输协议设计[J].舰船电子工程,2018,(3): 12-16.
[4] 李晨浩,宁蓓,杨淙喜等.北斗短报文服务系统与终端接口设计[J].船电技术,2023,(2): 9-13.
[5] 毛建峰,季克淮,王玉强等.基于北斗三代数据传输的航海保障应用研究[J].珠江水运,2022,(20): 60-62.