吳晨剛






摘 要:北斗衛(wèi)星導(dǎo)航系統(tǒng)提供的短報(bào)文服務(wù)在應(yīng)急通信領(lǐng)域發(fā)揮著十分重要的作用,針對(duì)現(xiàn)有“北斗2號(hào)”導(dǎo)航系統(tǒng)短報(bào)文服務(wù)無反饋機(jī)制,無重傳機(jī)制和數(shù)據(jù)長(zhǎng)度短等問題,提出一種基于北斗短報(bào)文通信的數(shù)據(jù)傳輸方法。通過在某國(guó)有大型航運(yùn)公司的實(shí)際生產(chǎn)應(yīng)用,將“北斗2號(hào)”短報(bào)文的數(shù)據(jù)長(zhǎng)度增加到原來的16倍左右,取得了良好的通信效果,為北斗短報(bào)文通信在航運(yùn)領(lǐng)域生產(chǎn)應(yīng)用提供了一種解決方案。
關(guān)鍵詞:北斗;短報(bào)文;數(shù)據(jù)傳輸
中圖分類號(hào):TP311.5
文獻(xiàn)標(biāo)識(shí)碼:A
0 引 言
北斗衛(wèi)星導(dǎo)航系統(tǒng)是中國(guó)著眼于國(guó)家安全和經(jīng)濟(jì)社會(huì)發(fā)展需要,自主建設(shè)、獨(dú)立運(yùn)行的衛(wèi)星導(dǎo)航系統(tǒng),是為全球用戶提供全天候、全天時(shí)、高精度的定位、導(dǎo)航和授時(shí)服務(wù)的國(guó)家重要空間基礎(chǔ)設(shè)施[1]。
在一些傳統(tǒng)通訊無法保證通訊的區(qū)域,北斗短報(bào)文可以做到穩(wěn)定持續(xù)地傳輸數(shù)據(jù),因此也被廣泛應(yīng)用于各行各業(yè)的生產(chǎn)活動(dòng)中。
但是,北斗短報(bào)文在航運(yùn)領(lǐng)域?qū)嶋H應(yīng)用中存在如下不足之處:
北斗短報(bào)文通信存在數(shù)據(jù)部分損壞或者全部丟失的情況[2],而且目前“北斗2號(hào)”短報(bào)文協(xié)議不同于傳統(tǒng)網(wǎng)絡(luò)傳輸,無反饋機(jī)制和重傳機(jī)制,使得發(fā)送方無法獲知數(shù)據(jù)的接收狀態(tài),在實(shí)際應(yīng)用中用戶體驗(yàn)一般。
北斗短報(bào)文通信存在數(shù)據(jù)長(zhǎng)度限制。目前,“北斗2號(hào)”短報(bào)文通信的單次長(zhǎng)度限制為40漢字左右,在實(shí)際應(yīng)用中存在發(fā)送短報(bào)文數(shù)據(jù)過長(zhǎng)時(shí)用戶不方便的問題。
北斗系統(tǒng)對(duì)發(fā)送頻率存在限制,以及通信雙方發(fā)送頻率不一致的情況。目前在某航運(yùn)公司使用“北斗2號(hào)”短報(bào)文通信時(shí),岸端發(fā)送頻率為 1次/ min,船端發(fā)送頻率為1次/5 min 。同時(shí),還存在接收方數(shù)量不一致的情況。在航運(yùn)領(lǐng)域,岸端的接收方是多艘船舶,而船端的接收方通常是岸端,船舶之間的通信頻率較少,對(duì)于岸端而言,存在對(duì)不同船舶的消息進(jìn)行優(yōu)先級(jí)調(diào)度問題。傳統(tǒng)網(wǎng)絡(luò)模式的消息反饋、重傳數(shù)據(jù)方法,無法很好地在這種發(fā)送頻率存在限制,通信雙方頻率不一致,以及接收方數(shù)量不一致的場(chǎng)景下進(jìn)行使用,存在通信雙方等待時(shí)間過長(zhǎng),后續(xù)消息阻塞等問題。
因此,對(duì)于短報(bào)文傳輸方法的設(shè)計(jì)實(shí)現(xiàn)與傳統(tǒng)網(wǎng)絡(luò)傳輸存在較大的區(qū)別。
1 方法總體介紹
本文提出的一種基于北斗短報(bào)文通信的數(shù)據(jù)傳輸方法包括發(fā)送數(shù)據(jù)模塊,接收數(shù)據(jù)模塊,調(diào)度模塊。
傳輸方法將會(huì)使用到如下名詞定義。
1.1? 消息隊(duì)列[3]
分為待發(fā)送消息隊(duì)列,回執(zhí)消息隊(duì)列,接收消息隊(duì)列,拆包消息隊(duì)列,發(fā)送消息隊(duì)列。
另外,還有一個(gè)消息池,用于記錄所有的發(fā)送和接收的消息。
1.2? 發(fā)送周期
按照完整消息為一個(gè)單位,1次正常傳輸時(shí)間,加上n次重傳傳輸時(shí)間為一個(gè)完整的發(fā)送周期。其中重傳時(shí),發(fā)送方會(huì)根據(jù)接收方消息回執(zhí)的反饋,僅重傳未發(fā)送成功的消息數(shù)據(jù)包。
其中,重傳傳輸時(shí)間等于正常傳輸時(shí)間。盡管發(fā)送方僅重傳未發(fā)送成功的消息數(shù)據(jù)包,會(huì)造成重傳傳輸時(shí)間小于正常傳輸時(shí)間,但是不考慮這種情況的原因是:北斗通信信道資源較為緊張,需要發(fā)送方和接收方多次信息交互確認(rèn)才能完成雙方的周期同步變更。
1.3? 定時(shí)器
對(duì)于發(fā)送方而言,定時(shí)器觸發(fā)后會(huì)進(jìn)行消息重傳和更新消息狀態(tài)。
對(duì)于接收方而言,定時(shí)器觸發(fā)后會(huì)進(jìn)行消息回執(zhí)和更新消息狀態(tài)。
發(fā)送方重發(fā)時(shí)刻計(jì)算公式如下:
TF1=T+?T+(N-1)*H1+W1+H2+W2;
TFi=TFi-1+(N-1)*H1+W1+H2+W2;
式中,TF1為第1次重發(fā)時(shí)刻,TFi為第i次重發(fā)時(shí)刻,TFi-1為第i-1次重發(fā)時(shí)刻i∈[2,n];n為設(shè)定次數(shù);T為當(dāng)前時(shí)刻;?T為發(fā)送信息在首發(fā)時(shí)的時(shí)間間隔;N為外發(fā)數(shù)據(jù)中子數(shù)據(jù)的總數(shù);H1為發(fā)送頻率,H2為接收方的發(fā)送頻率,W1為在發(fā)送方發(fā)射時(shí)段產(chǎn)生的誤差修正常數(shù),W2為在接收方發(fā)射時(shí)段產(chǎn)生的誤差修正常數(shù);
接收方重接時(shí)刻計(jì)算公式如下:
TJ1=T3+(N-S)*H1+W1;
TJi=TJi-1+(N-1)*H1+W1+H2+W2;
式中,TJ1為第1次重接時(shí)刻,TJi為第i次重接時(shí)刻,TJi-1為第i-1次重接時(shí)刻,i∈[2,n];T3為首次接收到已收信息中子數(shù)據(jù)的時(shí)刻;N為已收信息中子數(shù)據(jù)的總數(shù);S為首次接收到的已收信息中子數(shù)據(jù)對(duì)應(yīng)的序號(hào)。
1.4? 消息狀態(tài)
分為待發(fā)送,發(fā)送中,發(fā)送成功,發(fā)送失敗,預(yù)接收,接收中,接收成功,接收失敗。
1.5? 消息時(shí)間
分為創(chuàng)建時(shí)間,等待時(shí)間和入隊(duì)時(shí)間。
對(duì)于接收消息而言,三個(gè)時(shí)間相等。
對(duì)于發(fā)送消息而言,創(chuàng)建時(shí)間是最初消息進(jìn)入系統(tǒng)的時(shí)間;等待時(shí)間首次發(fā)送時(shí)等于創(chuàng)建時(shí)間,在消息發(fā)送周期失敗后,如需重新發(fā)送時(shí),等待時(shí)間變?yōu)楫?dāng)前時(shí)間;入隊(duì)時(shí)間是守護(hù)線程調(diào)度該消息從待發(fā)送狀態(tài)變?yōu)榘l(fā)送中狀態(tài)時(shí)的時(shí)間。消息回執(zhí)的時(shí)間等于對(duì)應(yīng)接收消息的時(shí)間。
1.6? 消息頭部[4]
包括版本號(hào),日期,序號(hào),當(dāng)前包號(hào),總包號(hào),消息類型。消息類型包括消息回執(zhí),消息,預(yù)操作消息。其中通過日期和序號(hào)可以準(zhǔn)確定位一條消息。消息頭部和所占字節(jié)數(shù)如圖1所示。
1.7消息回執(zhí)
內(nèi)容為OK或者未完成的數(shù)據(jù)包號(hào)數(shù)組。
1.8? 預(yù)操作
由于通過北斗系統(tǒng)進(jìn)行數(shù)據(jù)發(fā)送時(shí),無法做到和傳統(tǒng)網(wǎng)絡(luò)一樣持續(xù)發(fā)送,須按照指定時(shí)間間隔進(jìn)行數(shù)據(jù)發(fā)送,并且存在發(fā)送方和接收方發(fā)送頻率相差較大的情況。
當(dāng)按照每條消息為一個(gè)單元進(jìn)行發(fā)送時(shí),接收方的回執(zhí)時(shí)間延遲將會(huì)導(dǎo)致發(fā)送方存在信道空閑的情況,所以引入預(yù)操作行為。通過優(yōu)先級(jí)進(jìn)行調(diào)度,對(duì)后續(xù)信息進(jìn)行預(yù)發(fā)送或預(yù)回執(zhí),以充分利用發(fā)送信道。
1.9? 重復(fù)回執(zhí)
由于通過北斗系統(tǒng)進(jìn)行數(shù)據(jù)發(fā)送時(shí),無法保證接收方一定會(huì)收到數(shù)據(jù),因此在信道空閑時(shí),會(huì)對(duì)接收成功的消息,進(jìn)行重復(fù)回執(zhí)發(fā)送,確保接收方可以收到消息回執(zhí),以充分利用發(fā)送信道。
1.10? 消息優(yōu)先級(jí)
目前消息分為緊急消息,回執(zhí)消息,一般消息,不緊急消息,預(yù)操作消息。
緊急消息的優(yōu)先級(jí)大于一般消息,一般消息優(yōu)先級(jí)大于不緊急消息,不緊急消息優(yōu)先級(jí)等于預(yù)操作消息。
回執(zhí)消息優(yōu)先級(jí)較為特殊,當(dāng)存在緊急消息時(shí),其優(yōu)先級(jí)等于緊急消息,否則等于一般消息。
預(yù)操作包含預(yù)發(fā)送,預(yù)回執(zhí)和重復(fù)回執(zhí),操作次數(shù)小的優(yōu)先級(jí)高。在操作次數(shù)相同時(shí),預(yù)發(fā)送和預(yù)回執(zhí)優(yōu)先級(jí)相同,預(yù)發(fā)送和預(yù)回執(zhí)優(yōu)先級(jí)高于重復(fù)回執(zhí)。
優(yōu)先級(jí)一樣時(shí),等待時(shí)間早的優(yōu)先級(jí)更高。發(fā)送消息和消息回執(zhí)的等待時(shí)間完全相同時(shí),消息回執(zhí)優(yōu)先級(jí)更高。
2 發(fā)送數(shù)據(jù)模塊
發(fā)送數(shù)據(jù)模塊用來接收外部發(fā)送短報(bào)文數(shù)據(jù)和本方法發(fā)送的回執(zhí)消息。
當(dāng)模塊接收到發(fā)送請(qǐng)求后,會(huì)對(duì)數(shù)據(jù)進(jìn)行北斗協(xié)議的特殊字符進(jìn)行轉(zhuǎn)義處理。
對(duì)于回執(zhí)消息,在回執(zhí)消息隊(duì)列中保留最新的回執(zhí)消息。
對(duì)于正常消息,在待發(fā)送消息隊(duì)列和消息池增加該消息。如果消息長(zhǎng)度超過單次最大長(zhǎng)度減去自定義消息頭部的長(zhǎng)度時(shí),則進(jìn)行數(shù)據(jù)拆包處理后放入拆包消息隊(duì)列,否則直接放入拆包消息隊(duì)列。
發(fā)送數(shù)據(jù)模塊流程如圖2所示:
3 接收數(shù)據(jù)模塊
接收數(shù)據(jù)模塊會(huì)根據(jù)是否存在消息頭部,判斷是否為原始短報(bào)文消息。
對(duì)于自定義短報(bào)文,主要分為回執(zhí)消息和正常消息。
如果是回執(zhí)消息,則根據(jù)消息內(nèi)容,從拆包消息隊(duì)列和發(fā)送消息隊(duì)列中刪除已發(fā)送的消息。如果回執(zhí)消息提示已完成發(fā)送,則更新待發(fā)送消息隊(duì)列狀態(tài),并觸發(fā)定時(shí)器。
如果是正常消息,當(dāng)首次接收時(shí),在接收消息隊(duì)列和消息池增加該消息,并計(jì)算發(fā)送周期,設(shè)定定時(shí)器觸發(fā)時(shí)間。每當(dāng)接收消息時(shí),都會(huì)放入拆包消息隊(duì)列,根據(jù)隊(duì)列中該消息的總個(gè)數(shù)和消息頭部的總包號(hào)判斷是否已完成接收。如果已完成接收,則會(huì)觸發(fā)定時(shí)器。
接收數(shù)據(jù)流程如圖3所示。
4 調(diào)度模塊
4.1 定時(shí)器守護(hù)線程
定時(shí)器觸發(fā)分為立即觸發(fā)和間隔觸發(fā)。立即觸發(fā)操作由方法的模塊觸發(fā),間隔觸發(fā)由方法根據(jù)定時(shí)器觸發(fā)時(shí)間判斷是否觸發(fā)。
4.1.1接收消息隊(duì)列
立即觸發(fā)情況:
(1)消息狀態(tài)為接收成功。從拆包消息隊(duì)列中獲取該消息的所有消息包合并為一條完整的消息,然后進(jìn)行特殊字符轉(zhuǎn)義,得到原始消息內(nèi)容,更新消息池中狀態(tài)為接收成功,發(fā)送消息回執(zhí)。
(2)消息狀態(tài)為接收失敗。更新消息池狀態(tài)為接收失敗。
間隔觸發(fā)情況:
(3)消息狀態(tài)為接收中。如果在發(fā)送周期中,則發(fā)送消息回執(zhí),設(shè)定定時(shí)器觸發(fā)時(shí)間。如果已超出發(fā)送周期,更新接收消息隊(duì)列狀態(tài)為接收失敗并立即觸發(fā)定時(shí)器。
(4)消息狀態(tài)為預(yù)接收:刪除消息池、接收消息隊(duì)列和拆包消息隊(duì)列的該消息數(shù)據(jù)。
4.1.2待發(fā)送消息隊(duì)列
立即觸發(fā)情況:消息狀態(tài)為發(fā)送成功或發(fā)送失敗。更新消息池中狀態(tài)為發(fā)送成功或發(fā)送失敗。
間隔觸發(fā)情況:消息狀態(tài)為發(fā)送中。如果在發(fā)送周期中,將拆包消息隊(duì)列中該消息寫入發(fā)送消息隊(duì)列,設(shè)定定時(shí)器觸發(fā)時(shí)間。如果已超出發(fā)送周期,更新待發(fā)送消息隊(duì)列狀態(tài)為發(fā)送失敗,并立即觸發(fā)定時(shí)器。
4.2 調(diào)度消息守護(hù)線程
當(dāng)發(fā)現(xiàn)發(fā)送消息隊(duì)列無數(shù)據(jù),且接近信道下次允許發(fā)送時(shí)才會(huì)執(zhí)行如下調(diào)度操作,如圖4所示。
檢查待發(fā)送消息隊(duì)列是否存在發(fā)送中的消息
(1)如果不存在:
從待發(fā)送消息隊(duì)列和回執(zhí)消息隊(duì)列獲取一條高優(yōu)先級(jí)消息。如果是待發(fā)送消息,則更新消息池狀態(tài)為發(fā)送中,計(jì)算發(fā)送周期和設(shè)定定時(shí)器觸發(fā)時(shí)間;更新待發(fā)送消息隊(duì)列狀態(tài)為發(fā)送中;將拆包消息隊(duì)列中該消息放入發(fā)送消息隊(duì)列。否則將回執(zhí)消息放入發(fā)送消息隊(duì)列后刪除。
如果均不存在,則從接收消息隊(duì)列獲取一條高優(yōu)先級(jí)且未達(dá)到重復(fù)操作上限的消息進(jìn)行預(yù)回執(zhí)或重復(fù)回執(zhí)操作。
(2)如果存在:
從待發(fā)送消息隊(duì)列和回執(zhí)消息隊(duì)列獲取一條高優(yōu)先級(jí)且未達(dá)到預(yù)操作上限的消息。如果是待發(fā)送消息,從拆包消息隊(duì)列中獲取一個(gè)數(shù)據(jù)包放入發(fā)送消息隊(duì)列,并在預(yù)發(fā)送所有數(shù)據(jù)包后更新預(yù)操作次數(shù)。否則將回執(zhí)消息放入發(fā)送消息隊(duì)列后刪除。
如果不存在回執(zhí)消息,則從待發(fā)送消息隊(duì)列和接收消息隊(duì)列獲取一條高優(yōu)先級(jí)消息進(jìn)行預(yù)發(fā)送或預(yù)回執(zhí)操作。
4.3 發(fā)送消息守護(hù)線程
如果當(dāng)前時(shí)間大于上次發(fā)送時(shí)間加發(fā)送頻率,則從發(fā)送消息隊(duì)列根據(jù)入隊(duì)時(shí)間,獲取最早的一條消息進(jìn)行發(fā)送。
5 實(shí)驗(yàn)測(cè)試
搭建測(cè)試環(huán)境,模擬岸端給6條船舶依次發(fā)送如下報(bào)文,其中重傳的次數(shù)設(shè)置為2,重復(fù)回執(zhí)的次數(shù)設(shè)置為5。
丟包率模擬:在航運(yùn)領(lǐng)域,短報(bào)文收發(fā)經(jīng)常出現(xiàn)船舶的行駛過程中,丟包發(fā)生具有隨機(jī)性,因此丟包率采用了隨機(jī)數(shù)進(jìn)行模擬丟包。每次發(fā)送時(shí),從100以內(nèi)選取一個(gè)隨機(jī)數(shù),如果隨機(jī)數(shù)小于設(shè)定的loss指標(biāo),則認(rèn)為丟包。
發(fā)送頻率:目前岸端設(shè)備發(fā)送頻率為1次/ min,船端設(shè)備發(fā)送頻率為1次/5 min,目前船端發(fā)送的設(shè)計(jì)是預(yù)留定位發(fā)送信道,因此每10 min 發(fā)送短報(bào)文1次。本次實(shí)驗(yàn)按照岸端發(fā)送頻率1次 /min,船端設(shè)備設(shè)定為2 min 和5 min 各1次,即短報(bào)文發(fā)送頻率為4 min 和10 min 各1次。
測(cè)試報(bào)文如圖5所示:
實(shí)驗(yàn)結(jié)果如下表所示:
從實(shí)驗(yàn)結(jié)果中,我們可以得出,隨著loss指標(biāo)不斷增加,當(dāng)loss等于60時(shí),10 min 一次發(fā)送短報(bào)文的情況,仍然可以實(shí)現(xiàn)較高的數(shù)據(jù)包達(dá)到率,證明本傳輸方法的有效性,降低了丟包率。
6 結(jié)束語
本文所提供的基于北斗短報(bào)文通信的數(shù)據(jù)傳輸方法已在某航運(yùn)企業(yè)實(shí)際生產(chǎn)應(yīng)用,取得了良好的通信效果,將北斗2號(hào)短報(bào)文的數(shù)據(jù)長(zhǎng)度增加到原來的16倍左右,同時(shí)增加通信的反饋功能和重傳功能,并且充分利用了北斗的通信信道。
北斗衛(wèi)星導(dǎo)航系統(tǒng)作為國(guó)家戰(zhàn)略,成為生產(chǎn)生活中不可或缺的一部分。其強(qiáng)大的定位精準(zhǔn)性、廣泛的覆蓋面以及安全性的保障為我國(guó)在各行各業(yè)提供了強(qiáng)大的支持和保障。
隨著北斗短報(bào)文通信容量的不斷增強(qiáng),本方法會(huì)幫助北斗短報(bào)文在航運(yùn)領(lǐng)域提供更好的服務(wù)[5]。
參考文獻(xiàn)
[1] 陳忠貴,武向軍.北斗三號(hào)衛(wèi)星系統(tǒng)總體設(shè)計(jì)[J].南京航空航天大學(xué)學(xué)報(bào),2020(6):835-845.
[2] 肖春暉,梁都朝.北斗短報(bào)文在海上安全信息播發(fā)中的應(yīng)用[J].珠江水運(yùn),2017,(23): 79-80.
[3] 王亮,徐開來,馬良荔.基于會(huì)話、隊(duì)列控制的北斗短報(bào)文傳輸協(xié)議設(shè)計(jì)[J].艦船電子工程,2018,(3): 12-16.
[4] 李晨浩,寧蓓,楊淙喜等.北斗短報(bào)文服務(wù)系統(tǒng)與終端接口設(shè)計(jì)[J].船電技術(shù),2023,(2): 9-13.
[5] 毛建峰,季克淮,王玉強(qiáng)等.基于北斗三代數(shù)據(jù)傳輸?shù)暮胶1U蠎?yīng)用研究[J].珠江水運(yùn),2022,(20): 60-62.