奚煒弘
(南京熊貓漢達(dá)科技有限公司,江蘇 南京 210014)
航空衛(wèi)星通信具有通信距離遠(yuǎn)、傳輸容量大、覆蓋面積大和性能穩(wěn)定等特點(diǎn),是航空通信的一種重要方式。航空設(shè)備對(duì)尺寸和質(zhì)量都有嚴(yán)格的要求,所以通常使用嵌入式的軟件解決方案來(lái)實(shí)現(xiàn)衛(wèi)星通信功能[1]。
在同一個(gè)衛(wèi)星系統(tǒng)下,航空衛(wèi)通設(shè)備與地面衛(wèi)通設(shè)備相比:航空平臺(tái)接口標(biāo)準(zhǔn)多,功能需求不一致,導(dǎo)致無(wú)法設(shè)計(jì)成通用設(shè)備;裝機(jī)設(shè)備可靠性和安全性要求更加嚴(yán)格,使得項(xiàng)目的研發(fā)測(cè)試周期更長(zhǎng)。
本文從軟件模塊化方法、嵌入式應(yīng)用軟件特點(diǎn)分析和實(shí)際應(yīng)用等方面進(jìn)行研究,提出了一種多型號(hào)航空衛(wèi)通嵌入式應(yīng)用軟件的解決方案,有效地節(jié)約了研發(fā)成本、縮短了研發(fā)周期。
軟件模塊化是指將軟件自頂向下、逐步分解,將一個(gè)較大的程序按照功能分成獨(dú)立命名且可獨(dú)立訪問(wèn)的模塊,不同的模塊通常具有不同的功能與職責(zé),同時(shí)在這些模塊之間建立必要的聯(lián)系,通過(guò)模塊間的相互協(xié)作完成整個(gè)軟件的功能[2]。
軟件模塊化設(shè)計(jì)具有降低程序設(shè)計(jì)的復(fù)雜度、提高代碼的復(fù)用性、易于功能維護(hù)和擴(kuò)展、保證系統(tǒng)穩(wěn)定性、有利于團(tuán)隊(duì)開(kāi)發(fā)等優(yōu)點(diǎn)。軟件模塊化可以分為類封裝、庫(kù)封裝和分布式開(kāi)發(fā)三類。
(1)類封裝。通過(guò)類將模塊定義為一個(gè)對(duì)象,該類里封裝了一個(gè)對(duì)象所有的數(shù)據(jù)和方法。通過(guò)private關(guān)鍵字實(shí)現(xiàn)內(nèi)部實(shí)現(xiàn)細(xì)節(jié)的隱藏,通過(guò)public關(guān)鍵字提供對(duì)外的訪問(wèn)接口。
(2)庫(kù)封裝。將模塊的所有功能封裝成一個(gè)庫(kù),庫(kù)內(nèi)部封裝了用到的所有數(shù)據(jù)和方法,內(nèi)部實(shí)現(xiàn)過(guò)程不可見(jiàn),對(duì)外接口提供調(diào)用的庫(kù)和頭文件。
(3)分布式開(kāi)發(fā)。將每個(gè)模塊設(shè)計(jì)成可以獨(dú)立運(yùn)行的程序。當(dāng)部署在不同的設(shè)備上時(shí),各模塊之間通過(guò)網(wǎng)口或串口等方式建立聯(lián)系;當(dāng)部署在同一個(gè)設(shè)備上時(shí),各模塊之間通過(guò)本地套接字或內(nèi)存共享映射等方式實(shí)現(xiàn)建立聯(lián)系。
嵌入式軟件就是嵌入在硬件中的操作系統(tǒng)和開(kāi)發(fā)工具軟件,其中的嵌入式應(yīng)用軟件是嵌入式操作系統(tǒng)中的上層軟件,實(shí)現(xiàn)嵌入式設(shè)備的主要功能和用途。與非嵌入式應(yīng)用軟件相比,具有以下特點(diǎn)。
(1)軟件規(guī)模較小,開(kāi)發(fā)團(tuán)隊(duì)規(guī)模較小。
(2)開(kāi)發(fā)調(diào)試周期短。嵌入式應(yīng)用軟件通常僅少部分調(diào)試工作可仿真,絕大部分的調(diào)試必須等硬件系統(tǒng)完備后才可以進(jìn)行。
(3)調(diào)試手段少,調(diào)試經(jīng)驗(yàn)要求相對(duì)較高。嵌入式調(diào)試工具部署相對(duì)復(fù)雜,且依賴嵌入式操作系統(tǒng)的支持。同時(shí)受到開(kāi)發(fā)初期硬件或系統(tǒng)不穩(wěn)定性的影響,調(diào)試難度相對(duì)較大。
根據(jù)對(duì)嵌入式應(yīng)用軟件開(kāi)發(fā)特點(diǎn)的分析,得出的結(jié)論是:所選擇的軟件模塊化解決方案對(duì)額外工作量容忍的上限較低;獨(dú)立性要求高,降低了開(kāi)發(fā)門(mén)檻;復(fù)用性要求高,降低了開(kāi)發(fā)調(diào)試周期。下面對(duì)三種軟件模塊方法的嵌入式適應(yīng)性進(jìn)行分析。
(1)類封裝。該解決方案為嵌入式應(yīng)用軟件的常規(guī)方案。當(dāng)項(xiàng)目單一時(shí),該方案無(wú)額外工作量,模塊間的通信采用調(diào)用對(duì)象的方法,無(wú)須額外增加雙向的接口交互代碼。但當(dāng)項(xiàng)目較多時(shí),缺點(diǎn)則十分明顯:
①工作量線性增長(zhǎng)。當(dāng)項(xiàng)目較多時(shí),如果采用每個(gè)項(xiàng)目采用獨(dú)立軟件工程的方法,一旦封裝的類通用需求發(fā)生變化或出現(xiàn)BUG時(shí),需要對(duì)每個(gè)軟件工程進(jìn)行重新修改調(diào)試。
②影響域線性擴(kuò)大。當(dāng)項(xiàng)目較多時(shí),如果采用所有項(xiàng)目共用同一個(gè)軟件工程,通過(guò)宏定義或“if else”的方法加以區(qū)分,一旦某個(gè)項(xiàng)目的需求發(fā)生變化,在修改的過(guò)程中影響域可能會(huì)擴(kuò)大到其他項(xiàng)目。
(2)庫(kù)封裝。該解決方案的優(yōu)點(diǎn)在于每個(gè)模塊之間相對(duì)獨(dú)立,通過(guò)對(duì)外接口提供庫(kù)和頭文件。對(duì)同類型模塊開(kāi)發(fā),制定統(tǒng)一標(biāo)準(zhǔn),需求變更時(shí)只需對(duì)庫(kù)進(jìn)行替換。缺點(diǎn)是增加了少部分對(duì)外調(diào)用接口的工作量。
(3)分布式開(kāi)發(fā)方案。該解決方案的優(yōu)點(diǎn)在于每個(gè)模塊之間都非常獨(dú)立,當(dāng)需求變更時(shí),只需對(duì)獨(dú)立的可執(zhí)行程序進(jìn)行替換,無(wú)須重新編譯和調(diào)試。但是缺點(diǎn)也非常明顯,模塊之間都需要開(kāi)發(fā)一對(duì)或多對(duì)通信接口,增加了大量的工作量,甚至在某些功能較小的模塊中,通信接口的工作量超過(guò)了本身功能的工作量。
綜上所述,庫(kù)封裝的解決方案在嵌入式應(yīng)用軟件開(kāi)發(fā)中明顯優(yōu)于另外兩種。但在實(shí)際的軟件開(kāi)發(fā)中,受開(kāi)發(fā)成本,項(xiàng)目復(fù)雜度等因素的制約,并不能簡(jiǎn)單選擇單一的某種方案,這里提出一種CLD嵌入式應(yīng)用軟件解決方案,將類封裝(C型)、庫(kù)封裝(L型)和分布式(D型)開(kāi)發(fā)方式相結(jié)合。
以S頻段某衛(wèi)星通信系統(tǒng)下航空衛(wèi)通項(xiàng)目中的主控軟件(簡(jiǎn)稱AP軟件)為例。在該系統(tǒng)平臺(tái)下,共有6個(gè)項(xiàng)目,AP軟件運(yùn)行在嵌入式Linux系統(tǒng)中,使用C++語(yǔ)言開(kāi)發(fā),承擔(dān)的主要工作是協(xié)調(diào)衛(wèi)通設(shè)備之間協(xié)同工作,實(shí)現(xiàn)各設(shè)備間的協(xié)議轉(zhuǎn)換,最終完成航空衛(wèi)通的全部功能。設(shè)備連接全集如圖1所示。
圖1 設(shè)備連接全集
圖2 工程架構(gòu)
根據(jù)AP軟件的連接情況,將AP軟件劃分為10個(gè)功能模塊,但這10個(gè)功能模塊并不是所有的項(xiàng)目都使用,且單個(gè)功能模塊也配置好幾種ICD協(xié)議。與傳統(tǒng)的軟件開(kāi)發(fā)方案相比,采用CLD嵌入式應(yīng)用軟件解決方案,將大幅降低工作量,縮短開(kāi)發(fā)周期。下面對(duì)依次對(duì)每個(gè)功能模塊進(jìn)行分析。
(1)本控設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為調(diào)試測(cè)試時(shí)的上位機(jī),主要功能是提供對(duì)外調(diào)試接口,控制航空衛(wèi)通設(shè)備。6個(gè)項(xiàng)目使用,配置ICD協(xié)議1種,復(fù)用的概率較低,采用C型開(kāi)發(fā)方式。
(2)顯控設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為正式使用時(shí)的上位機(jī),主要功能是提供對(duì)外控制接口,控制航空衛(wèi)通設(shè)備。6個(gè)項(xiàng)目使用,配置ICD協(xié)議6種,需求改動(dòng)頻繁,復(fù)用的概率較低。采用D型開(kāi)發(fā)方式,同時(shí)該模塊功能為本控模塊功能的子集,可采用本控設(shè)備的ICD協(xié)議與本控設(shè)備模塊通信,節(jié)約了部分接口開(kāi)發(fā)的工作量。
(3)S頻段CP設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為下位機(jī),主要功能是控制S頻段的衛(wèi)星通信。6個(gè)項(xiàng)目使用,配置ICD協(xié)議1種,復(fù)用的概率中等,受限于開(kāi)發(fā)成本,采用C型開(kāi)發(fā)方式。
(4)U頻段CP設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為下位機(jī),主要功能是控制U頻段的衛(wèi)星通信。2個(gè)項(xiàng)目使用,配置ICD協(xié)議1種,復(fù)用的概率中等,受限于開(kāi)發(fā)成本,采用C型開(kāi)發(fā)方式。
(5)超短波設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為下位機(jī),主要功能是控制超短波通信工作。1個(gè)項(xiàng)目使用,配置ICD協(xié)議1種,復(fù)用的概率低,采用C型開(kāi)發(fā)方式。
(6)北斗設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為下位機(jī),主要功能是控制北斗設(shè)備工作。2個(gè)項(xiàng)目使用,ICD協(xié)議為國(guó)際標(biāo)準(zhǔn),復(fù)用的概率高,采用L型開(kāi)發(fā)方式。
(7)天線設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為下位機(jī),主要功能是控制天線設(shè)備。6個(gè)項(xiàng)目使用,配置ICD協(xié)議2種,復(fù)用的概率一般,采用L型開(kāi)發(fā)方式。
(8)變頻器設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為下位機(jī),主要功能是控制變頻器設(shè)備。6個(gè)項(xiàng)目使用,配置ICD協(xié)議2種,復(fù)用的概率一般,采用L型開(kāi)發(fā)方式。
(9)慣導(dǎo)設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為下位機(jī),主要功能是接收慣導(dǎo)數(shù)據(jù)并轉(zhuǎn)發(fā)給天線。6個(gè)項(xiàng)目使用,ICD協(xié)議6種,復(fù)用的概率一般,對(duì)外接口較少,采用D型開(kāi)發(fā)方式。
(10)聲碼器設(shè)備模塊。該模塊對(duì)應(yīng)的設(shè)備為下位機(jī),主要功能是控制聲碼器實(shí)現(xiàn)語(yǔ)音功能。6個(gè)項(xiàng)目使用,配置ICD協(xié)議2種,復(fù)用的概率高,采用L型開(kāi)發(fā)方式。
根據(jù)對(duì)A P軟件功能模塊的分析,完成A P 和LibModule兩大工程,其中LibModule工程實(shí)現(xiàn)L類模塊的靜態(tài)庫(kù)具體功能,考慮到復(fù)用性,從架構(gòu)上與AP工程平級(jí)。
在AP工程中,根據(jù)每個(gè)D型模塊都是獨(dú)立的可執(zhí)行程序的特點(diǎn),分別完成3個(gè)子工程:Ias工程實(shí)現(xiàn)顯控模塊功能;Ins工程實(shí)現(xiàn)慣導(dǎo)模塊功能;Main工程集成了其余模塊功能。
在LibModule工程中,按照L型模塊的種類進(jìn)行分類,分別建立4個(gè)文件夾;根據(jù)每種不同的ICD協(xié)議分別完成各自的子工程,每個(gè)同類的子工程對(duì)外調(diào)用接口統(tǒng)一標(biāo)準(zhǔn)。
在Main工程中,將每個(gè)項(xiàng)目中功能模塊的通用型分成5個(gè)部分:Ucp文件夾實(shí)現(xiàn)U頻段CP模塊的功能;Usw文件夾實(shí)現(xiàn)超短波模塊的功能;Beidou文件夾實(shí)現(xiàn)了北斗庫(kù)調(diào)用用的功能;Src文件夾實(shí)現(xiàn)本控模塊、S頻段CP模塊、變頻器庫(kù)調(diào)用、聲碼器庫(kù)調(diào)用的功能、天線庫(kù)調(diào)用的功能和慣導(dǎo)模塊內(nèi)部交互的功能;Lib文件夾存放所有的庫(kù)文件。
A P軟件的Makef ile分為內(nèi)部和外部?jī)煞N。內(nèi)部Makefile為6個(gè)項(xiàng)目所共用,通過(guò)ifeq和ifneq判斷項(xiàng)目,選擇項(xiàng)目所需要的功能模塊參并編譯;外部Makefile每個(gè)項(xiàng)目獨(dú)立編制,先將4個(gè)L型功能模塊拷貝到Mai n 工程下,再將項(xiàng)目名稱傳遞到內(nèi)部Makefile,最后調(diào)用內(nèi)部Makefile進(jìn)行編譯。
隨著衛(wèi)星通信技術(shù)的不斷發(fā)展,航空衛(wèi)星通信逐漸成為航空通信的一種重要手段。本文對(duì)一種多型號(hào)航空衛(wèi)通嵌入式應(yīng)用軟件的模塊化解決方案進(jìn)行了研究,包括軟件模塊化介紹、嵌入式應(yīng)用軟件特點(diǎn)分析以及該方案在實(shí)際中的應(yīng)用。通過(guò)研究可以發(fā)現(xiàn),該解決方案在多型號(hào)的航空平臺(tái)上的應(yīng)用確實(shí)可行,同時(shí)可有效地節(jié)約研發(fā)成本,提升軟件的可靠性、穩(wěn)定性和安全性。■