吳晨剛
摘 要:北斗衛星導航系統提供的短報文服務在應急通信領域發揮著十分重要的作用,針對現有“北斗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.