国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

位控類(lèi)時(shí)間指令的實(shí)時(shí)處理方法

2022-02-11 08:44
遙測(cè)遙控 2022年1期
關(guān)鍵詞:遙測(cè)多態(tài)性指令

石 峰

位控類(lèi)時(shí)間指令的實(shí)時(shí)處理方法

石 峰

(中國(guó)西安衛(wèi)星測(cè)控中心 西安 710043)

針對(duì)火箭遙測(cè)實(shí)時(shí)處理軟件中不同位跳變指令處理代碼復(fù)用性差的問(wèn)題,通過(guò)分析幾種典型的位跳變指令處理特點(diǎn),抽象出位跳變指令處理的一般步驟,并從軟件角度給出了位跳變指令的定義。根據(jù)C++語(yǔ)言多態(tài)性原理,將位跳變指令的軟件實(shí)現(xiàn)劃分為抽象基類(lèi)和實(shí)現(xiàn)子類(lèi)兩個(gè)部分,規(guī)范了位跳變指令的處理邏輯、體現(xiàn)了不同種類(lèi)位跳變指令處理特點(diǎn)。應(yīng)用實(shí)踐表明,經(jīng)過(guò)重構(gòu)的處理方法代碼量顯著減少,程序處理流程更加清晰,軟件復(fù)用率有很大提高。

位跳變指令;實(shí)時(shí)處理;遙測(cè)

引 言

時(shí)間指令是反映運(yùn)載火箭某一動(dòng)作及控制行為是否發(fā)生及發(fā)生時(shí)刻的關(guān)鍵參數(shù),如火箭起飛觸點(diǎn)接通時(shí)間、爆炸螺栓起爆時(shí)間、發(fā)動(dòng)機(jī)點(diǎn)火指令時(shí)間、星箭分離指令時(shí)間等,是主動(dòng)段對(duì)火箭飛行狀態(tài)評(píng)估的重要信息來(lái)源。位跳變時(shí)間指令是時(shí)間指令應(yīng)用最為廣泛的一種類(lèi)型,文獻(xiàn)[1]對(duì)早期的位跳變時(shí)間指令的處理方法、實(shí)時(shí)處理時(shí)存在的不足及改進(jìn)設(shè)想進(jìn)行了一些探討。近年來(lái),隨著新型號(hào)火箭相繼首飛[2],新的參數(shù)處理方法層出不窮,位跳變時(shí)間指令衍生出高精度型、遙測(cè)字型、總線(xiàn)型、電壓型等多種處理類(lèi)型。關(guān)于此類(lèi)指令的處理方法雖然設(shè)計(jì)思路大致相同,但是由于需求差異、人員安排等因素,其實(shí)現(xiàn)手段均有所不同,軟件復(fù)用性較差。

在每次火箭飛行試驗(yàn)任務(wù)前,雖然型號(hào)研制部門(mén)都要發(fā)布一份關(guān)于飛行試驗(yàn)任務(wù)遙測(cè)數(shù)據(jù)處理要求和方法的技術(shù)文件,但該文件僅給出了處理上的一些原則性要求,以及參數(shù)原碼與物理量之間的轉(zhuǎn)換公式,作為數(shù)據(jù)處理方法是遠(yuǎn)遠(yuǎn)不夠的?;鸺b測(cè)實(shí)時(shí)處理軟件在進(jìn)行位跳變指令處理時(shí)還需要對(duì)遙測(cè)數(shù)據(jù)的連續(xù)性,時(shí)標(biāo)修正的準(zhǔn)確性,發(fā)生時(shí)刻的合法性等諸多方面進(jìn)行綜合處理后,才能計(jì)算出時(shí)間指令發(fā)生的真實(shí)時(shí)間信息,軟件處理過(guò)程比較復(fù)雜。本文發(fā)揮C++語(yǔ)言“多態(tài)性”優(yōu)勢(shì),采用虛函數(shù),研究了各類(lèi)位跳變時(shí)間指令的處理邏輯,提出了位跳變時(shí)間指令的通用化處理方法,同時(shí)在國(guó)產(chǎn)麒麟系統(tǒng)上對(duì)現(xiàn)有的處理方法庫(kù)進(jìn)行重構(gòu),增加了抽象化的處理基類(lèi),明確了位跳變時(shí)間指令的一般處理步驟,在繼承基類(lèi)處理方法的基礎(chǔ)上實(shí)現(xiàn)了各類(lèi)型處理子類(lèi),體現(xiàn)了不同類(lèi)型位跳變指令的處理特點(diǎn)。

1 位跳變指令的種類(lèi)及特點(diǎn)

1.1 經(jīng)典的位跳變指令

這類(lèi)指令是用編碼信號(hào)中某一位由“0”變“1”(或“1”變“0”)表示指令出現(xiàn),連續(xù)保持3幀以上為有效,以其中第一次出現(xiàn)變化的時(shí)間為準(zhǔn),計(jì)算該指令的發(fā)生時(shí)刻[3]。由于該指令屬于緩變參數(shù),因此通常安排在緩變副幀中進(jìn)行傳輸。以目前常見(jiàn)的火箭遙測(cè)全幀數(shù)據(jù)25 ms的發(fā)送周期計(jì)算,該類(lèi)指令的采樣頻率為40幀/秒。

1.1.1 數(shù)據(jù)連續(xù)性判斷

數(shù)據(jù)的連續(xù)性是火箭遙測(cè)實(shí)時(shí)處理軟件必須考慮的重要指標(biāo)。地面遙測(cè)設(shè)備接收火箭遙測(cè)數(shù)據(jù)時(shí)難免出現(xiàn)誤碼和中斷現(xiàn)象,表現(xiàn)在遙測(cè)數(shù)據(jù)中就是數(shù)據(jù)的不連續(xù)。位跳變指令是一類(lèi)連續(xù)變化的參數(shù),其判斷邏輯必須依靠緩存的歷史數(shù)據(jù),如果數(shù)據(jù)不連續(xù)必然導(dǎo)致后續(xù)判斷過(guò)程無(wú)法進(jìn)行或計(jì)算出錯(cuò)誤的結(jié)果。目前,常用的連續(xù)性判斷方法是利用幀計(jì)數(shù)的連續(xù)計(jì)數(shù)機(jī)制。如某型火箭遙測(cè)數(shù)據(jù)的幀計(jì)數(shù)用兩個(gè)字節(jié)的無(wú)符號(hào)整數(shù)表示,其值的變化范圍是0~65535,如果接收到的遙測(cè)幀的幀計(jì)數(shù)值是在前一幀的基礎(chǔ)上加1,則認(rèn)為目前遙測(cè)數(shù)據(jù)是連續(xù)的,否則是不連續(xù)的。

1.1.2 數(shù)據(jù)時(shí)標(biāo)的計(jì)算

位跳變指令的每一個(gè)采樣點(diǎn)都對(duì)應(yīng)一個(gè)準(zhǔn)確的采樣時(shí)刻,這也是時(shí)間指令判斷的意義所在。當(dāng)?shù)孛孢b測(cè)設(shè)備接收了一個(gè)完整的遙測(cè)幀時(shí),將當(dāng)前時(shí)刻作為幀時(shí)標(biāo)編排在遙測(cè)數(shù)據(jù)中進(jìn)行傳輸,該時(shí)標(biāo)可以作為時(shí)標(biāo)計(jì)算的依據(jù),一般用時(shí)標(biāo)減去火箭起飛時(shí)間,即可得到時(shí)間指令的發(fā)生時(shí)間。

1.1.3 數(shù)據(jù)跳變的判斷

數(shù)據(jù)跳變的判斷可以概括為以下3個(gè)步驟:

步驟1:獲取初值。如某時(shí)間指令編碼信號(hào)某一位為“0”時(shí)表示事件沒(méi)有發(fā)生,當(dāng)變?yōu)椤?”時(shí)表示事件發(fā)生,當(dāng)處理軟件連續(xù)接收到3幀“0”即取到初值,如果沒(méi)有滿(mǎn)足條件則始終處于獲取初值狀態(tài)。

步驟2:判斷跳變。當(dāng)處理軟件連續(xù)收到3幀“1”時(shí)任務(wù)跳變發(fā)生,取第一幀時(shí)間為跳變發(fā)生時(shí)間,如果沒(méi)有滿(mǎn)足條件則重新判斷跳變。

步驟3:判斷時(shí)間合法性。當(dāng)步驟2完成跳變判斷并計(jì)算出發(fā)生時(shí)間時(shí),對(duì)時(shí)間合法性進(jìn)行判斷,如果發(fā)生時(shí)間在理論范圍內(nèi)則判斷完成,否則重新進(jìn)入步驟1。

另外有一種高精度型位跳變指令,其處理方法與經(jīng)典型位跳變指令基本一致,只是采樣頻率更高,得到的時(shí)間指令發(fā)生時(shí)間更精確。

1.2 四位跳變的位跳變指令

這類(lèi)指令是用編碼信號(hào)中的四位由“0”變“1”(或“1”變“0”)表示指令出現(xiàn),主要用來(lái)表示時(shí)序參數(shù)。如某型火箭的關(guān)機(jī)時(shí)間有七次,時(shí)序參數(shù)對(duì)應(yīng)的四位碼每改變一次狀態(tài),即從“0H”變?yōu)椤癋H”,或從“FH”變?yōu)椤?H”,表示一次關(guān)機(jī)事件的發(fā)生。

這類(lèi)指令除了保持與經(jīng)典位跳變指令相似的處理邏輯外,還具有自身的處理特點(diǎn)。一是在判斷跳變的過(guò)程中,為了防止誤碼的發(fā)生,實(shí)時(shí)處理時(shí)僅要求四位編碼信號(hào)中的三位發(fā)生改變就可以判斷跳變發(fā)生。這需要對(duì)四位編碼信號(hào)分別比對(duì),比經(jīng)典位跳變指令的跳變判斷過(guò)程略微復(fù)雜一些。二是在判斷時(shí)間合法性時(shí),這類(lèi)指令沒(méi)有固定的初值,并且同一波道表示多條指令,只能依靠理論時(shí)間判斷指令發(fā)生時(shí)間合法性;同時(shí)在前后兩條指令之間需要建立關(guān)聯(lián),形成依賴(lài)指令,當(dāng)前一條指令正確判出后,后一條指令才能開(kāi)始判斷。

1.3 遙測(cè)字型位跳變指令

這類(lèi)指令通常由箭上的時(shí)序控制器采集,采用遙測(cè)字的方式傳輸編碼信號(hào)。如某型火箭每組遙測(cè)字長(zhǎng)32位,遙測(cè)字由26~31位組成的特征碼及0~26位組成的若干參數(shù)構(gòu)成。由不同的特征碼表示不同的參數(shù),在一定周期內(nèi)循環(huán)傳送。

這類(lèi)指令與經(jīng)典的位跳變指令的主要區(qū)別在取位方式和數(shù)據(jù)時(shí)標(biāo)的計(jì)算上。當(dāng)處理軟件接收到一組遙測(cè)字時(shí),首先要判斷遙測(cè)字的特征碼是否與位跳變指令所對(duì)應(yīng)的特征碼一致,如果滿(mǎn)足要求才能根據(jù)指令對(duì)應(yīng)的位置取出編碼信號(hào)進(jìn)行判斷。另外,編碼信號(hào)對(duì)應(yīng)的采樣時(shí)間也在一組遙測(cè)字中傳輸,當(dāng)指令判出后,以最近的遙測(cè)字傳輸?shù)臅r(shí)間為指令發(fā)生時(shí)間。

1.4 總線(xiàn)型位跳變指令

總線(xiàn)是近年來(lái)應(yīng)用比較廣泛的數(shù)據(jù)傳輸協(xié)議。它將各類(lèi)采編器產(chǎn)生的不同數(shù)據(jù)采用數(shù)據(jù)包的形式在總線(xiàn)上傳輸,可以在有限的波道資源上傳遞更多的數(shù)據(jù)。采編器產(chǎn)生的時(shí)間指令被封裝在各自的數(shù)據(jù)包中并通過(guò)不同的命令字加以區(qū)分。

這類(lèi)指令的處理依賴(lài)于對(duì)總線(xiàn)協(xié)議的解碼,這類(lèi)工作一般由單獨(dú)的處理軟件完成。當(dāng)時(shí)間指令處理軟件接收到解碼后的包數(shù)據(jù),需要對(duì)數(shù)據(jù)包中的命令字進(jìn)行判斷,如果與待處理的時(shí)間指令的命令字一致,則取出對(duì)應(yīng)的編碼信號(hào)進(jìn)行處理。同時(shí),總線(xiàn)數(shù)據(jù)在進(jìn)行傳輸時(shí)會(huì)定時(shí)發(fā)送時(shí)間戳,即包含時(shí)間的數(shù)據(jù)包,當(dāng)指令判出后,如果所在包中不包含時(shí)標(biāo)信息,可以以最近的時(shí)間戳作為指令的發(fā)送時(shí)間。

1.5 電壓型位跳變指令

電壓型位跳變指令嚴(yán)格意義上說(shuō)不能稱(chēng)之為位跳變指令,因?yàn)樗鼘?shí)際上是箭上測(cè)量設(shè)備輸出的一種脈沖信號(hào)。但我們?nèi)匀豢梢詫⒔?jīng)典的位跳變指令定義進(jìn)行推廣,將電壓型位跳變指令歸入其中。這也是面向?qū)ο笏枷氲镊攘λ凇?/p>

這種指令在處理時(shí)首先要計(jì)算出遙測(cè)電壓值,然后根據(jù)變換器校準(zhǔn)表進(jìn)行差值計(jì)算,得出被測(cè)電壓值。如某型火箭理論輸出為28 V的寬脈沖信號(hào),取20 V作為數(shù)據(jù)處理門(mén)檻,處理信號(hào)開(kāi)始和結(jié)束時(shí)間。當(dāng)指令未發(fā)生時(shí),遙測(cè)電壓保持在0 V左右,指令處于類(lèi)似經(jīng)典位跳變指令的“0”狀態(tài),當(dāng)指令發(fā)生時(shí),遙測(cè)電壓應(yīng)大于20 V,指令處于類(lèi)似經(jīng)典位跳變指令的“1”狀態(tài)。

1.6 小結(jié)

經(jīng)典位跳變指令等6種位跳變指令的概念和處理特點(diǎn)見(jiàn)表1,可以看出其判斷過(guò)程遵循比較一致的處理邏輯,即指令遙測(cè)值從一種狀態(tài)變化為另一種狀態(tài)表示指令發(fā)生。在對(duì)處理方法進(jìn)行獨(dú)立開(kāi)發(fā)時(shí),由于處理邏輯的相似性必然會(huì)導(dǎo)致重復(fù)代碼的存在;又由于不同的開(kāi)發(fā)人員設(shè)計(jì)思路不同,各種中間變量、命名方式不能做到集中統(tǒng)一,導(dǎo)致方法間無(wú)法進(jìn)行代碼復(fù)用。

表1 位跳變指令的處理特點(diǎn)

2 C++多態(tài)性相關(guān)技術(shù)

多態(tài)性是面向?qū)ο缶幊痰奶卣髦?。多態(tài)性使程序具有“一個(gè)接口,多個(gè)版本”的特點(diǎn),同時(shí)也體現(xiàn)了程序由“一般到個(gè)別”的特點(diǎn)。C++提供了兩種多態(tài)性,編譯時(shí)刻的靜態(tài)多態(tài)性和運(yùn)行時(shí)刻的動(dòng)態(tài)多態(tài)性。本文討論的是運(yùn)行時(shí)刻的動(dòng)態(tài)多態(tài)性。動(dòng)態(tài)多態(tài)性與繼承相關(guān),有兩個(gè)方面:子類(lèi)型關(guān)系所實(shí)現(xiàn)的類(lèi)型多態(tài)性和虛函數(shù)所實(shí)現(xiàn)的行為多態(tài)性[4,5]。

2.1 繼承與派生

繼承性是類(lèi)之間的一種關(guān)系,表示一個(gè)比較抽象的類(lèi)與一個(gè)比較具體的類(lèi)之間的關(guān)系。在繼承性關(guān)系中,基類(lèi)表示比較抽象的概念,擁有較少的內(nèi)涵,而具有較大的外延。派生類(lèi)表示比較具體的概念,具有較多的內(nèi)涵,而具有較小的外延。派生類(lèi)擁有基類(lèi)描述的屬性,派生類(lèi)的定義是基于基類(lèi)存在的。派生類(lèi)的對(duì)象也是基類(lèi)的對(duì)象,當(dāng)需要一個(gè)基類(lèi)對(duì)象的地方,而實(shí)際提供了一個(gè)派生類(lèi)對(duì)象,應(yīng)該是無(wú)條件滿(mǎn)足要求的。

2.2 虛函數(shù)與抽象類(lèi)

虛函數(shù)是用vitual關(guān)鍵字修飾的成員函數(shù)。一個(gè)類(lèi)中的虛函數(shù)可以在其派生類(lèi)中重新定義,這就是改寫(xiě)(override)。所謂改寫(xiě)就是派生類(lèi)中對(duì)其基類(lèi)中的虛函數(shù)按相同的基調(diào)(函數(shù)名和形參表)和返回值,進(jìn)行重新定義。當(dāng)通過(guò)基類(lèi)的引用或指針來(lái)調(diào)用虛函數(shù)時(shí),實(shí)際執(zhí)行的是派生類(lèi)改寫(xiě)后的虛函數(shù),而不是基類(lèi)定義的虛函數(shù)。虛函數(shù)的核心思想是將行為規(guī)范與具體實(shí)現(xiàn)方案分離開(kāi)來(lái),將函數(shù)調(diào)用與具體執(zhí)行分離開(kāi)來(lái)。規(guī)范是抽象的,由基類(lèi)說(shuō)明并提供默認(rèn)實(shí)現(xiàn),而實(shí)現(xiàn)是具體的,派生類(lèi)可以繼承也能改寫(xiě)。這樣的好處是靈活性、適應(yīng)性、可擴(kuò)展性而不失規(guī)范性。在定義一個(gè)基類(lèi)時(shí),對(duì)于一個(gè)虛函數(shù)能確定其行為規(guī)范,但往往還不能提供一種具體實(shí)現(xiàn),其具體實(shí)現(xiàn)完全依賴(lài)派生類(lèi)。這時(shí)可以把這個(gè)虛函數(shù)定義為純虛函數(shù)。純虛函數(shù)就是在類(lèi)中只提供行為規(guī)范而沒(méi)有具體實(shí)現(xiàn)的虛函數(shù)。這時(shí)基類(lèi)就成為了抽象類(lèi)。

圖1 偽代碼

下面,通過(guò)一段偽代碼來(lái)說(shuō)明虛函數(shù)的調(diào)用過(guò)程,如圖1所示。設(shè)計(jì)位跳變指令的處理基類(lèi)CJFtmBitBase,其中包含一個(gè)采集時(shí)標(biāo)的純虛函數(shù)save_time_mark()和一個(gè)用來(lái)存儲(chǔ)時(shí)標(biāo)的浮點(diǎn)型變量time_mark。經(jīng)典位跳變指令處理子類(lèi)CJFtmBitCls、總線(xiàn)型位跳變指令處理子類(lèi)CJFtmBitBus繼承自基類(lèi)CJFtmBitBase。在兩個(gè)子類(lèi)中分別對(duì)純虛函數(shù)save_time_mark()進(jìn)行改寫(xiě)。在主函數(shù)main中,將子類(lèi)對(duì)象地址分別賦予基類(lèi)對(duì)象指針,并以基類(lèi)對(duì)象指針調(diào)用采集時(shí)標(biāo)的純虛函數(shù)save_time_mark()。運(yùn)行此程序可得結(jié)果:

①經(jīng)典位跳變指令采集時(shí)標(biāo);

②總線(xiàn)型位跳變指令采集時(shí)標(biāo)。

2.3 多態(tài)性實(shí)現(xiàn)機(jī)制與原理

必須使用基類(lèi)的指針或引用來(lái)調(diào)用虛函數(shù)才能實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性。當(dāng)一個(gè)類(lèi)中含有虛函數(shù)聲明時(shí),編譯器就會(huì)為該類(lèi)加上一個(gè)成員變量,是一個(gè)指向該類(lèi)虛函數(shù)表的指針(VPTR)。而虛函數(shù)表是一個(gè)存放指向類(lèi)中虛函數(shù)的函數(shù)指針的線(xiàn)性表。在子類(lèi)中如果改寫(xiě)了虛函數(shù),則表中的函數(shù)指針就會(huì)被改寫(xiě)。這種在運(yùn)行時(shí)根據(jù)不同的數(shù)據(jù)類(lèi)型匹配正確的處理函數(shù)的能力在C++語(yǔ)言中稱(chēng)之為運(yùn)行時(shí)類(lèi)型識(shí)別(RTTI)。對(duì)象的內(nèi)存布局如圖2所示。

圖2 對(duì)象的內(nèi)存布局

每一個(gè)對(duì)象開(kāi)始的4個(gè)字節(jié),存放的是一個(gè)虛表指針,這個(gè)指針指向一個(gè)虛函數(shù)指針數(shù)組。子類(lèi)CJFtmBitCls、CJFtmBitBus分別復(fù)制繼承了基類(lèi)CJFtmBitBase的虛表,由于各子類(lèi)重新定義了虛函數(shù)save_time_mark(),所以在虛表中對(duì)應(yīng)函數(shù)的地址也相應(yīng)地改為子類(lèi)改寫(xiě)后的虛函數(shù)地址。

3 位跳變指令的實(shí)時(shí)處理方法設(shè)計(jì)

目前,常見(jiàn)的幀格式有兩種:一種是原始跳點(diǎn)數(shù)據(jù)格式,如圖3所示,是一種定長(zhǎng)數(shù)據(jù)。該格式將1秒內(nèi)收到的全幀數(shù)據(jù)根據(jù)跳點(diǎn)要求循環(huán)跳點(diǎn)并組幀發(fā)送。循環(huán)數(shù)據(jù)區(qū)長(zhǎng)度和循環(huán)次數(shù)是固定的,每一幀帶有時(shí)標(biāo),循環(huán)數(shù)據(jù)區(qū)的采樣時(shí)間可以根據(jù)全幀周期計(jì)算出來(lái),循環(huán)數(shù)據(jù)區(qū)的幀計(jì)數(shù)作為數(shù)據(jù)連續(xù)性的判斷依據(jù)。經(jīng)典型、四位跳變型、遙測(cè)字型、電壓型位跳變指令采用這種格式。另一種是總線(xiàn)包數(shù)據(jù)格式,如圖4所示,是一種變長(zhǎng)數(shù)據(jù)。該格式將1秒內(nèi)解出的總線(xiàn)包按不同命令字分別組包,每幀數(shù)據(jù)包含的數(shù)據(jù)包由包個(gè)數(shù)表示。該數(shù)據(jù)幀頭不包含時(shí)標(biāo),時(shí)標(biāo)包含在數(shù)據(jù)包內(nèi)。該數(shù)據(jù)幀也不包含幀計(jì)數(shù),因此在處理時(shí)對(duì)包數(shù)據(jù)的連續(xù)性判斷不作要求。

圖3 原始跳點(diǎn)數(shù)據(jù)格式

圖4 總線(xiàn)包數(shù)據(jù)格式

從圖3、圖4中可以看出,各類(lèi)位跳變指令均處于所在幀的循環(huán)數(shù)據(jù)區(qū),因此,遍歷每個(gè)循環(huán)數(shù)據(jù)區(qū),對(duì)包含的位跳變指令進(jìn)行處理,判斷出時(shí)間指令的發(fā)生時(shí)間是各類(lèi)處理方法都要遵循的一般處理步驟。按照這個(gè)思路,以經(jīng)典型位跳變指令為模板,可以設(shè)計(jì)出位跳變指令的處理方法。將其他位跳變指令處理過(guò)程代入其中,對(duì)處理方法進(jìn)行迭代,梳理出適應(yīng)各類(lèi)處理方法的一般處理步驟,如圖5、圖6所示。

圖5 函數(shù)流程圖1

圖6 函數(shù)流程圖2

3.1 定義

根據(jù)位跳變指令的處理特點(diǎn)給出一般定義:位跳變指令包含兩個(gè)狀態(tài),當(dāng)指令未發(fā)生時(shí)為初態(tài),指令發(fā)生時(shí)為終態(tài),當(dāng)指令由初態(tài)變?yōu)榻K態(tài)時(shí)即表示指令發(fā)生,取當(dāng)前時(shí)刻為時(shí)間指令的發(fā)生時(shí)間。為了描述方便,對(duì)待處理的遙測(cè)數(shù)據(jù)做如下假定:

①遙測(cè)數(shù)據(jù)頻率為1幀/秒,其中包含的指令波道按一定步長(zhǎng)循環(huán)存儲(chǔ);

②循環(huán)數(shù)據(jù)區(qū)的長(zhǎng)度和循環(huán)次數(shù)是已知的或方便得到的;

③循環(huán)數(shù)據(jù)區(qū)包含幀計(jì)數(shù);

④遙測(cè)數(shù)據(jù)包含時(shí)標(biāo)。

3.2 抽象基類(lèi)設(shè)計(jì)

設(shè)計(jì)位跳變指令的抽象基類(lèi)CJFtmBitBase。該基類(lèi)包含非虛函數(shù)和虛函數(shù)兩個(gè)部分。其中非虛函數(shù)process()設(shè)置為public屬性,對(duì)外可見(jiàn),是位跳變指令處理方法的調(diào)用接口。該函數(shù)是根據(jù)位跳變指令的定義,抽象出的一般處理步驟,各類(lèi)位跳變指令都遵從相同的處理步驟,從而達(dá)到“一個(gè)接口”的目的。

為了保證程序代碼的邏輯清晰、層次清楚,將圖1中獲取初值、比較跳變、跳變時(shí)間合法性判斷等三個(gè)步驟提煉為非虛函數(shù)get_org_value()、cmp_org_value()、chk_time(),設(shè)置為private屬性,對(duì)外不可見(jiàn)。函數(shù)中封裝了對(duì)應(yīng)步驟的具體實(shí)現(xiàn),流程圖如圖6所示。以上函數(shù)封裝了位跳變指令的一般處理邏輯,子類(lèi)中不需要實(shí)現(xiàn)。

抽象基類(lèi)CJFtmBitBase包含六個(gè)虛函數(shù),分別是:sav_frm_count(),對(duì)應(yīng)于圖5的記錄幀計(jì)數(shù)步驟;chk_frm_count(),對(duì)應(yīng)于圖6的幀計(jì)數(shù)是否連續(xù)步驟;sav_time_mark(),對(duì)應(yīng)于圖5的記錄時(shí)標(biāo)步驟;cal_time_bit(),對(duì)應(yīng)于圖6的緩存跳變時(shí)間步驟;get_bit(),對(duì)應(yīng)于圖6的取位步驟,chk_rely(),對(duì)應(yīng)于圖5依賴(lài)指令是否發(fā)生步驟,該步驟僅針對(duì)波道復(fù)用的指令,如四位跳變型,其他類(lèi)型直接返回即可。這六個(gè)虛函數(shù)屬性為protected,僅對(duì)子類(lèi)可見(jiàn),涵蓋了不同位跳變指令之間的差異部分,在基類(lèi)設(shè)計(jì)時(shí)僅保留調(diào)用接口,具體的實(shí)現(xiàn)步驟由子類(lèi)根據(jù)具體需求進(jìn)行代碼編寫(xiě),從而體現(xiàn)了“多個(gè)版本”的特點(diǎn)。

3.3 子類(lèi)設(shè)計(jì)

子類(lèi)的設(shè)計(jì)集中在對(duì)基類(lèi)聲明的六個(gè)虛函數(shù)進(jìn)行改寫(xiě)上。每種位跳變指令可以根據(jù)自身的處理特點(diǎn),在相應(yīng)的虛函數(shù)中編寫(xiě)處理方法,完成具體的處理任務(wù)。由于位跳變指令處理方法的設(shè)計(jì)是以經(jīng)典型位跳變指令為設(shè)計(jì)原型,考慮到大部分火箭實(shí)時(shí)遙測(cè)數(shù)據(jù)格式基本一致,因此在基類(lèi)中保留了虛函數(shù)的默認(rèn)實(shí)現(xiàn)方式,沒(méi)有改寫(xiě)的虛函數(shù)調(diào)用基類(lèi)提供的默認(rèn)處理方法。以遙測(cè)字型位跳變指令為例,由于它與經(jīng)典位跳變指令僅在取位方式和數(shù)據(jù)時(shí)標(biāo)計(jì)算上存在不同。因此需要改寫(xiě)sav_time_mark()、cal_time_bit()、get_bit()三個(gè)函數(shù),其余函數(shù)繼承基類(lèi)處理方法即可。從圖7中可以看出,經(jīng)典型、四位跳變型、電壓型的處理方法最為相似,僅在取位方法上有所不同,高精度型由于采樣精度更高,因此時(shí)標(biāo)計(jì)算方法與其他的不同。遙測(cè)字型和總線(xiàn)型由于輸入數(shù)據(jù)的組合方式不同,與其他處理方法差異較大,需要改寫(xiě)更多的處理方法。

圖7 類(lèi)圖

4 重構(gòu)后的代碼特點(diǎn)

4.1 代碼行數(shù)顯著減少

在Linux服務(wù)器上,采用Magic C++開(kāi)發(fā)環(huán)境,根據(jù)以上設(shè)計(jì)原則,對(duì)現(xiàn)有的六種位跳變指令方法庫(kù)重構(gòu)后的結(jié)果列于表2中。由于主要的處理方法被封裝在基類(lèi)CJFtmBitBase中,各子類(lèi)的代碼行數(shù)顯著減少。

表2 重構(gòu)前后代碼統(tǒng)計(jì)

4.2 開(kāi)發(fā)過(guò)程更加優(yōu)化

代碼重構(gòu)前,對(duì)于位跳變時(shí)間指令的需求分析采用的是面向過(guò)程的編程思路,即將處理過(guò)程分為不同的處理步驟,然后對(duì)處理步驟進(jìn)行細(xì)化形成不同處理方法,再進(jìn)行代碼編寫(xiě)。軟件編寫(xiě)完成后要對(duì)所編寫(xiě)的所有函數(shù)進(jìn)行單元測(cè)試,最后還要對(duì)方法庫(kù)進(jìn)行系統(tǒng)測(cè)試。整個(gè)過(guò)程費(fèi)時(shí)、費(fèi)力。采用面向?qū)ο蟮脑O(shè)計(jì)思想后,對(duì)需要開(kāi)發(fā)的位跳變指令首先進(jìn)行類(lèi)型識(shí)別,即判斷處理需求是否滿(mǎn)足位跳變指令一般定義要求,如果確認(rèn)此次開(kāi)發(fā)是位跳變指令的一種相似處理方法,則只需識(shí)別出處理差異,并針對(duì)差異改寫(xiě)相應(yīng)的處理方法。采用這種方法,需求分析和代碼編寫(xiě)測(cè)試階段工作量大大減輕,開(kāi)發(fā)效率顯著提高。

4.3 編碼風(fēng)格更加統(tǒng)一

采用面向?qū)ο箝_(kāi)發(fā)方法后,從軟件實(shí)現(xiàn)角度對(duì)位跳變指令的處理方法提出了統(tǒng)一的處理定義。采用抽象基類(lèi)的設(shè)計(jì),對(duì)位跳變指令的處理流程進(jìn)行了規(guī)范,并對(duì)不同的處理步驟提供了一致的調(diào)用接口,解決了由于開(kāi)發(fā)人員不同,編碼風(fēng)格差異,造成代碼維護(hù)困難的問(wèn)題。同時(shí)由于采用了子類(lèi)設(shè)計(jì),位跳變指令的處理種類(lèi)一目了然,方便從宏觀角度準(zhǔn)確掌握現(xiàn)有處理方法底數(shù),對(duì)箭遙處理軟件的規(guī)范化管理和確定任務(wù)的繼承基線(xiàn)都有較大的幫助。

5 結(jié)束語(yǔ)

本文通過(guò)梳理幾種位跳變指令的處理方法,總結(jié)出位跳變指令的主要處理邏輯,給出了位跳變指令的一般化處理定義,設(shè)計(jì)了位跳變指令抽象基類(lèi)及實(shí)現(xiàn)子類(lèi)。采用基類(lèi)指針作為位跳變指令處理方法的調(diào)用接口,保證了處理方法的規(guī)范統(tǒng)一,同時(shí)使軟件具有較好的可擴(kuò)展性。通過(guò)虛函數(shù)機(jī)制在實(shí)現(xiàn)子類(lèi)中改寫(xiě)指定函數(shù)的實(shí)現(xiàn)代碼,體現(xiàn)了不同指令類(lèi)型的處理特點(diǎn)。使用該編碼方法使處理流程更加清晰,方便不同開(kāi)發(fā)人員熟悉掌握,同時(shí)較好的代碼復(fù)用使開(kāi)發(fā)工作量大幅減少,提高了編碼效率和規(guī)范性。

[1] 茅永興, 朱偉康, 劉冰, 等. 箭遙時(shí)間指令參數(shù)實(shí)時(shí)處理方法研究[J]. 遙測(cè)遙控, 2013, 34(3):72–75.

MAO Yongxing, ZHU Weikang, LIU Bing, et al. A fusion method of real-time and delay telemetry data[J]. Journal of Telemetry,Tracking and Command, 2013, 34(3): 72–75.

[2] 周彬, 郭亮杰, 田鴻瀛, 等. 我國(guó)箭載遙測(cè)傳輸設(shè)備發(fā)展現(xiàn)狀及展望[J]. 遙測(cè)遙控, 2017, 38(6):7–9.

ZHOU Bin, GUO Liangjie, TIAN Hongying, et al. Development status and prospect of chinese telemetry transmission equipments on rockets[J]. Journal of Telemetry,Tracking and Command, 2017, 38(6): 7–9.

[3] 陳以恩, 張俊剛, 袁嗣杰, 等 .遙測(cè)數(shù)據(jù)處理[M]. . 北京: 國(guó)防工業(yè)出版社, 2002年.

[4] 羅糧. C++中通過(guò)VTABLE實(shí)現(xiàn)多態(tài)性機(jī)制的分析[J]. 電腦編程技巧與維護(hù), 2014(11): 46–47, 93.

LUO Liang. Analysis of polymorphism mechanism through VTABLE in C++[J]. Computer Programming Skills and Maintenance, 2014(11): 46–47, 93.

[5] 謝云博.多態(tài)性實(shí)現(xiàn)機(jī)制在C++與JAVA中的比較分析[J]. 軟件導(dǎo)刊, 2014, 13(6): 47–49.

XIE Yunbo. Comparative analysis of polymorphism implementation mechanism in C++ and Java[J]. Software Guide, 2014, 13(6): 47–49.

Real-time processing method of bit control instruction

SHI Feng

(Xi’an Satellite Control Center, Xi’an 710043, China)

In aiming at the problem of poor reusing of different bit control instruction processing codes in rocket telemetry real-time processing software, the general steps of bit control instruction processing are abstracted by analyzing the processing characteristics of several typical bit control instructions, and the definition of bit control instruction is given from the point of view of software. According to the principle of C++ language polymorphism, the software implementation of the bit control instruction is divided into abstract base class and implementation subclass, the processing logic of the bit control instruction is standardized, and the processing characteristics of different bit control instructions are presented. The application practice shows that the amount of code is significantly reduced, the process flow is more clearer, and the software reuse rate is greatly improved.

Bit conversion instruction; Real-time processing; Telemetry

TP311.1

A

CN11-1780(2022)01-0082-09

10.12347/j.ycyk.20210606001

石峰.位跳變時(shí)間指令的實(shí)時(shí)處理方法[J]. 遙測(cè)遙控, 2022, 43(1): 82–90.

DOI:10.12347/j.ycyk.20210606001

: SHI Feng. Real-time processing method of bit control instruction[J]. Journal of Telemetry, Tracking and Command, 2022, 43(1): 82–90.

石 峰 1977年生,本科,高級(jí)工程師,主要研究方向?yàn)榛鸺b測(cè)實(shí)時(shí)處理。

2021-06-06

2021-07-08

Website: ycyk.brit.com.cn Email: ycyk704@163.com

(本文編輯:潘三英)

猜你喜歡
遙測(cè)多態(tài)性指令
單核苷酸多態(tài)性與中醫(yī)證候相關(guān)性研究進(jìn)展
護(hù)骨素基因啟動(dòng)子區(qū)T950C多態(tài)性與2型糖尿病合并骨質(zhì)疏松癥的關(guān)系
MTHFR C677T基因多態(tài)性與頸動(dòng)脈狹窄及其側(cè)支循環(huán)形成的關(guān)系
妊娠期女性MTHFR 677C>T基因多態(tài)性分布特征及其與妊娠高血壓疾病的相關(guān)性
《單一形狀固定循環(huán)指令G90車(chē)外圓仿真》教案設(shè)計(jì)
新機(jī)研制中總裝裝配指令策劃研究
遠(yuǎn)程控制式遙測(cè)地面站關(guān)鍵技術(shù)研究
基于WPF的遙測(cè)CAS信息實(shí)時(shí)監(jiān)控系統(tǒng)設(shè)計(jì)開(kāi)發(fā)
自適應(yīng)模糊PID控制的遙測(cè)方艙溫度調(diào)節(jié)方法
關(guān)于ARM+FPGA組建PLC高速指令控制器的研究
花莲市| 揭阳市| 平山县| 镶黄旗| 错那县| 信阳市| 河北区| 周口市| 酒泉市| 六安市| 策勒县| 铁岭市| 漳州市| 台山市| 固原市| 桦甸市| 永福县| 昭觉县| 渝北区| 雅江县| 南岸区| 新泰市| 新昌县| 阿瓦提县| 出国| 贡觉县| 都江堰市| 水城县| 通州市| 故城县| 巴中市| 南平市| 镇雄县| 大新县| 顺平县| 南城县| 毕节市| 南开区| 阿克陶县| 赤峰市| 芜湖市|