李 洋,李路程
(中國電子科技集團(tuán)公司第二十研究所,西安 710068)
衛(wèi)星導(dǎo)航系統(tǒng)通常由空間段、地面控制段和用戶段三大部分組成。地面控制段是衛(wèi)星導(dǎo)航系統(tǒng)的中心紐帶和重要組成部分,主要任務(wù)是對在軌衛(wèi)星進(jìn)行信號收發(fā)與觀測。地面控制段由管控中心、地面天線、監(jiān)測站和通信系統(tǒng)組成。其中監(jiān)測站是衛(wèi)星導(dǎo)航系統(tǒng)地面控制段的重要組成部分[1-2]。監(jiān)測站的主要任務(wù)是跟蹤監(jiān)測導(dǎo)航信號,接收導(dǎo)航衛(wèi)星電文,測量監(jiān)測站相對導(dǎo)航衛(wèi)星的偽距、載波相位和多普勒等觀測數(shù)據(jù)、導(dǎo)航電文數(shù)據(jù)和采集監(jiān)測站周圍的氣象數(shù)據(jù)等[3]。監(jiān)測站將采集到的數(shù)據(jù)按一定的文件格式進(jìn)行記錄并發(fā)送至管控中心,為系統(tǒng)精密定軌、衛(wèi)星導(dǎo)航信號完好性判斷、電離層和對流層修正等導(dǎo)航相關(guān)產(chǎn)品的研發(fā)提供基礎(chǔ)數(shù)據(jù)。
本文從衛(wèi)星導(dǎo)航系統(tǒng)監(jiān)測站的需求出發(fā),提出了監(jiān)測站軟件主備機(jī)切換的設(shè)計(jì)方案,從軟件可靠性和實(shí)時(shí)性的角度論述了主備機(jī)切換采用的策略,并詳細(xì)討論了其具體實(shí)現(xiàn)。
衛(wèi)星導(dǎo)航系統(tǒng)監(jiān)測站軟件與各設(shè)備連接關(guān)系如圖1所示。監(jiān)測站軟件采用相應(yīng)網(wǎng)絡(luò)通信協(xié)議與站內(nèi)監(jiān)測接收機(jī)、氣象設(shè)備、銣原子鐘和UPS 等設(shè)備進(jìn)行數(shù)據(jù)通信,后通過衛(wèi)星通信和互聯(lián)網(wǎng)絡(luò)兩種方式進(jìn)行數(shù)據(jù)傳輸。
圖1 監(jiān)測站軟件與各設(shè)備連接關(guān)系示意圖
監(jiān)測站軟件的設(shè)計(jì)采用多部件組合方式,單元部件依序?qū)崿F(xiàn)各自的功能,便于前期的軟件開發(fā)和后期的維護(hù)升級,各部件功能詳細(xì)如下:
(1)控制指令處理部件對控制指令進(jìn)行處理,對相應(yīng)的設(shè)備進(jìn)行控制,并將指令執(zhí)行結(jié)果數(shù)據(jù)傳送至其它部件。
(2)數(shù)據(jù)預(yù)處理部件對各設(shè)備發(fā)送過來的原始數(shù)據(jù)進(jìn)行預(yù)處理,包括原始觀測數(shù)據(jù)格式轉(zhuǎn)換、觀測數(shù)據(jù)合理性檢驗(yàn)、信號質(zhì)量監(jiān)測、數(shù)據(jù)質(zhì)量監(jiān)測、定位精度監(jiān)視及評估等。
(3)站間數(shù)據(jù)發(fā)送部件將各設(shè)備解析后數(shù)據(jù)、預(yù)處理數(shù)據(jù)和指令執(zhí)行結(jié)果等數(shù)據(jù)按照站間數(shù)據(jù)傳輸格式進(jìn)行打包發(fā)送至管控站。
(4)站間數(shù)據(jù)接收部件實(shí)時(shí)接收管控站發(fā)送的控制指令和參數(shù),并將這些數(shù)據(jù)進(jìn)行解析處理,將解析后數(shù)據(jù)送往控制指令處理部件進(jìn)行指令的執(zhí)行。
(5)站內(nèi)數(shù)據(jù)發(fā)送部件將各設(shè)備原始工況數(shù)據(jù)、解析后數(shù)據(jù)和預(yù)處理數(shù)據(jù)等數(shù)據(jù)按照站內(nèi)數(shù)據(jù)傳輸格式進(jìn)行打包發(fā)送至存儲(chǔ)服務(wù)器[4];將本機(jī)主備機(jī)狀態(tài)數(shù)據(jù)和本機(jī)工作參數(shù)數(shù)據(jù)發(fā)送至另一臺業(yè)務(wù)處理機(jī);將設(shè)備控制指令發(fā)送至相應(yīng)設(shè)備。
(6)站內(nèi)數(shù)據(jù)接收部件主要完成接收各設(shè)備數(shù)據(jù)。并將這些原始數(shù)據(jù)進(jìn)行解析處理,供其它部件使用。
(7)主備機(jī)管理部件對軟件的主機(jī)備機(jī)狀態(tài)進(jìn)行管理,包括主備機(jī)的判斷和切換。
(8)狀態(tài)顯示與參數(shù)配置部件對軟件的參數(shù)進(jìn)行顯示并通過配置文件進(jìn)行管理。
衛(wèi)星導(dǎo)航系統(tǒng)監(jiān)測站需每天24 小時(shí)不間斷向管控站發(fā)送原始測量數(shù)據(jù)、導(dǎo)航電文數(shù)據(jù)以及氣象數(shù)據(jù)等,因此監(jiān)測站軟件運(yùn)行的可靠性和實(shí)時(shí)性是系統(tǒng)設(shè)計(jì)時(shí)需要解決的關(guān)鍵技術(shù)問題,也是監(jiān)測站數(shù)據(jù)穩(wěn)定傳輸?shù)谋U稀?/p>
監(jiān)測站軟件采用主備機(jī)冗余方式[5],運(yùn)行在2臺服務(wù)器上,軟件通過串口和網(wǎng)絡(luò)與另一個(gè)軟件互發(fā)主備機(jī)狀態(tài)信息,通過主備判定策略,動(dòng)態(tài)確定一個(gè)軟件為主機(jī),另一個(gè)為備機(jī)。主備機(jī)切換圖如圖2所示。
圖2 主備機(jī)切換圖
(1)可靠性方面:軟件設(shè)計(jì)采用面向?qū)ο蟮脑O(shè)計(jì)方法。首先根據(jù)主備機(jī)切換需求完成模型的建立,然后根據(jù)模型建立三種類型的對象:基于底層應(yīng)用的類對象、基于用戶接口的類對象和基于控制的類對象。類對象之間的數(shù)據(jù)接口采用統(tǒng)一的數(shù)據(jù)元素管理,對于公用的如網(wǎng)絡(luò)通信功能則建立公用類對象,向所有調(diào)用者提供統(tǒng)一的接口形式。針對監(jiān)測站對外接口比較復(fù)雜和易變的具體特點(diǎn),專門抽象出接口類對象,該對象主要處理同外部數(shù)據(jù)格式的交換。另外,采用對象繼承的方式,使所有對象都具備了對自身狀態(tài)的監(jiān)視以及工作狀態(tài)日志的記錄功能。通過上述設(shè)計(jì),極大地降低了軟件功能類對象之間的耦合度,提高了類對象自身的診斷能力,提高了系統(tǒng)的可靠性。
(2)實(shí)時(shí)性方面:根據(jù)主備機(jī)切換所需時(shí)延指標(biāo)優(yōu)化軟件多線程之間的優(yōu)先級順序以及消息通知機(jī)制。首先根據(jù)軟件各模塊的復(fù)雜度和處理時(shí)間的要求,將監(jiān)測站的系統(tǒng)時(shí)延指標(biāo)進(jìn)行分解,確定各處理功能模塊的時(shí)延指標(biāo)。根據(jù)該時(shí)延指標(biāo)以及數(shù)據(jù)流的方向,確定各線程的優(yōu)先級順序,在數(shù)據(jù)準(zhǔn)備好后采用消息通知機(jī)制立即喚醒相關(guān)處理線程,從而減少線程的等待時(shí)延。
監(jiān)測站軟件采用主備機(jī)的設(shè)計(jì)方案,主備機(jī)的切換過程由軟件實(shí)現(xiàn)。系統(tǒng)啟動(dòng)后,由于沒有事先策略對主備機(jī)的切換進(jìn)行控制,切換需由運(yùn)行于主備機(jī)的軟件自行確定,因此主備機(jī)切換采用算法是決定其是否能滿足系統(tǒng)要求的關(guān)鍵。
監(jiān)測站軟件工作狀態(tài)中有三種狀態(tài):未知狀態(tài)、主機(jī)狀態(tài)和備機(jī)狀態(tài)。未知狀態(tài)是指應(yīng)用軟件沒有獲知自身身份;主機(jī)狀態(tài)與備機(jī)狀態(tài)的功能區(qū)別是主機(jī)負(fù)責(zé)向管控站發(fā)送預(yù)處理結(jié)果數(shù)據(jù),備機(jī)不發(fā)送預(yù)處理結(jié)果數(shù)據(jù)。狀態(tài)轉(zhuǎn)換如圖3所示。
圖3 準(zhǔn)備狀態(tài)調(diào)度圖
主備機(jī)競爭是指在雙機(jī)冗余情況下,確定系統(tǒng)的處理主機(jī)。考慮到監(jiān)測站系統(tǒng)使用的主備服務(wù)器的型號標(biāo)準(zhǔn)和資源配置上是完全一致的,軟件環(huán)境也是相同的,因此采用主備心跳身份競爭的方法進(jìn)行主備機(jī)的選擇。所謂心跳身份競爭就是通過心跳數(shù)據(jù)包預(yù)定給定自己身份后,由程序按照預(yù)定的規(guī)則算法確定主機(jī)與備機(jī)。這樣可以節(jié)省主備機(jī)切換的時(shí)間,有利于系統(tǒng)快速恢復(fù)正常運(yùn)行狀態(tài)。
心跳數(shù)據(jù)塊[6]采用監(jiān)測站內(nèi)部格式打包后統(tǒng)一發(fā)送,格式如表1所示。數(shù)據(jù)塊內(nèi)容由本機(jī)編號、本機(jī)主備機(jī)身份標(biāo)識、本機(jī)狀態(tài)、請求切換標(biāo)識和站設(shè)備狀態(tài)組成。
表1 監(jiān)測站內(nèi)部格式
主備機(jī)切換流程如圖4所示。系統(tǒng)啟動(dòng)后,軟件首先將自身身份暫定為未知,通過向?qū)Φ缺O(jiān)測站軟件發(fā)送主備機(jī)心跳數(shù)據(jù)通知本機(jī)已啟動(dòng),并等待收取對等軟件發(fā)送的狀態(tài)信息。如果收到信息并確信對等軟件已經(jīng)處于主機(jī)狀態(tài),則設(shè)置本機(jī)為備機(jī)狀態(tài);如果在一定時(shí)延內(nèi)沒有收到對等軟件的主備機(jī)心跳數(shù)據(jù),則認(rèn)為對等處理機(jī)軟件身份未知,設(shè)置本機(jī)為主機(jī)狀態(tài);當(dāng)主備機(jī)的狀態(tài)確定后,主備機(jī)之間仍然通過互發(fā)信息以維持主備機(jī)狀態(tài);當(dāng)主機(jī)軟件故障后,備機(jī)軟件在一定時(shí)延內(nèi)沒有收到主機(jī)軟件的心跳包數(shù)據(jù),則認(rèn)為主機(jī)軟件故障,本機(jī)軟件設(shè)置為主機(jī)狀態(tài),故障的主機(jī)軟件故障修復(fù)并重新啟動(dòng)后,經(jīng)歷未知狀態(tài)變?yōu)閭錂C(jī)狀態(tài);當(dāng)備機(jī)軟件故障后,主機(jī)軟件身份不變,故障的備機(jī)軟件故障修復(fù)并重新啟動(dòng)后,經(jīng)歷未知狀態(tài)變?yōu)閭錂C(jī)狀態(tài)。
圖4 主備機(jī)切換流程圖
確定后主備機(jī)軟件后,再通過主備機(jī)工作參數(shù)進(jìn)行數(shù)據(jù)同步。具體內(nèi)容見2.3 節(jié)。
在軟件運(yùn)行過程中,亦可以通過強(qiáng)行切換主備機(jī)命令滿足特定需求。備機(jī)軟件更改心跳數(shù)據(jù)內(nèi)容中的請求切換標(biāo)識,主機(jī)軟件解析數(shù)據(jù)包后,立即將自身狀態(tài)更改為備機(jī),同時(shí)將變更后的心跳包數(shù)據(jù)發(fā)送,備機(jī)軟件收到后可立即更改為主機(jī),如圖5所示。
圖5 主備機(jī)強(qiáng)制切換示意圖
主備機(jī)競爭算法的過程如下:
(1)主備機(jī)相互連續(xù)發(fā)送心跳數(shù)據(jù);
(2)兩臺服務(wù)器軟件同時(shí)啟動(dòng),且正常運(yùn)行后,在身份不明時(shí)暫定身份均為未知,基于服務(wù)器硬件運(yùn)行差異性,軟件在啟動(dòng)過程中存在隨機(jī)差異,因此兩臺服務(wù)器心跳數(shù)據(jù)發(fā)送時(shí)間延遲,存在競爭關(guān)系,先收到心跳包的服務(wù)器一方將自身身份設(shè)置為主機(jī),另一方服務(wù)器為備機(jī);
(3)當(dāng)備機(jī)收到主機(jī)的狀態(tài)異常信息或者是連續(xù)多次接收不到主機(jī)的心跳數(shù)據(jù)時(shí),備機(jī)切換為主機(jī),接管主機(jī)的工作,原主機(jī)修復(fù)后設(shè)置為備機(jī);
(4)當(dāng)主機(jī)收到備機(jī)的狀態(tài)異常信息或者是連續(xù)多次接收不到本機(jī)的心跳數(shù)據(jù)時(shí),仍然繼續(xù)正常工作,備機(jī)修復(fù)后保持備機(jī)不變。
為保證兩臺服務(wù)器的軟件運(yùn)行狀態(tài)一致性,需對主備機(jī)的工作參數(shù)保持同步。主機(jī)按照設(shè)定頻率向備機(jī)發(fā)送工作參數(shù),當(dāng)備機(jī)與主機(jī)工作參數(shù)不一致時(shí),需將工作參數(shù)進(jìn)行更新,使備機(jī)工作狀態(tài)與主機(jī)一致。當(dāng)主機(jī)進(jìn)行參數(shù)設(shè)置時(shí),主機(jī)需向備機(jī)追加一次參數(shù)同步,使備機(jī)的工作參數(shù)與主機(jī)保持一致,流程圖如圖6所示。
圖6 主備機(jī)工作參數(shù)同步流程圖
監(jiān)測站軟件主備切換測試平臺采用華為RH2288 服務(wù)器,操作系統(tǒng)采用國產(chǎn)中標(biāo)麒麟系統(tǒng),軟件開發(fā)采用Qt5.8.0 版本。
測試結(jié)果按照主備軟件同時(shí)啟動(dòng),分別啟動(dòng),一方故障和故障恢復(fù)對主備切換的時(shí)延性和正確性進(jìn)行100 次測試,測試結(jié)果如圖7所示。
圖7 監(jiān)測站軟件主備切換測試結(jié)果
本文論述了衛(wèi)星導(dǎo)航系統(tǒng)監(jiān)測站軟件的組成,并針對主備切換技術(shù)問題的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析和討論,通過主備機(jī)競爭算法完成主備機(jī)動(dòng)態(tài)切換,經(jīng)測試準(zhǔn)確可行,切換時(shí)延滿足要求,可作為監(jiān)測站衛(wèi)星導(dǎo)航系統(tǒng)相關(guān)領(lǐng)域進(jìn)一步研究和應(yīng)用的參考。