周雅芳 范玉娜 張耀寰 相金明
(沈陽理工大學(xué),遼寧 沈陽110159)
在AOS 建議中,CCSDS 包是合路過程的協(xié)議數(shù)據(jù)單元,為了使非CCSDS 結(jié)構(gòu)的數(shù)據(jù)單元同樣能復(fù)用在虛擬信道內(nèi), 包裝業(yè)務(wù)把非CCSDS 格式的包化成了CCSDS 格式的包,也稱為CPPDU。 包信道復(fù)用過程就是把這些來自多個(gè)用戶的具有相同或者相似服務(wù)質(zhì)量要求的CCSDS 包合成在一個(gè)公共的數(shù)據(jù)結(jié)構(gòu)內(nèi),形成一個(gè)MPDU,再分別加入幀頭、幀尾,從而生成一幀VCDU,把幾個(gè)不同的包信道級(jí)連在一個(gè)虛擬信道上,實(shí)現(xiàn)在一個(gè)虛擬信道上多路傳輸用戶間的各自通信[1-2]。 其中,CCSDS 包、多路復(fù)用MPDU、虛擬信道傳輸幀VCDU 的數(shù)據(jù)單元格式詳見參考文獻(xiàn)[1]。

圖1 包信道復(fù)用模塊的內(nèi)部實(shí)現(xiàn)過程圖
在本仿真中,根據(jù)包信道復(fù)用原理,并借助Visual C++[3]中的雙向隊(duì)列容器,對(duì)包信道復(fù)用模塊進(jìn)行設(shè)計(jì)。 在包信道復(fù)用模塊內(nèi)部功能的設(shè)計(jì)中,主要分三個(gè)大部分來實(shí)現(xiàn):
第一,從FileDlg.GetPathname()函數(shù)中獲得某個(gè)其他模塊發(fā)送過來的文件賦給容器一(此模塊的容器一名為SOURCE,定義為deque<int>SOURCE),然后進(jìn)入第二部分的操作。
第二, 在第二部分中, 主要用到四個(gè)容器, 分別定義為map<unsigned long、deque<int >>CPPDU_POOL、map<unsigned long,deque<int>>MPDU_POOL、map <unsigned long,deque < int >>VCDU_POOL、map<unsigned long int,deque<int> > DISPATCH_POOL,它們將對(duì)信源進(jìn)行包信道復(fù)用操作。實(shí)現(xiàn)過程如圖3 所示,基本過程如下:
① 容 器 一SOURCE 中夠20 個(gè)字節(jié) 則 封 成 一 個(gè)CPPDU, 如此循環(huán),然后把封好的CPPDU 都放 到 CPPDU_POOL中, 即對(duì)信源進(jìn)行CPPDU 封 裝 。 當(dāng)CPPDU_POOL 中夠10個(gè)CPPDU 時(shí)則封成一個(gè)MPDU,如此循環(huán),然后把封好的MPDU 都放到MPDU_POOL 中,即在CPP

圖2 包信道復(fù)用仿真結(jié)果示意圖
DU_POOL 中進(jìn)行MPDU 封裝。
②MPDU_POOL 中達(dá)到1 個(gè)MPDU 時(shí)則封成1 個(gè)VCDU,如此循環(huán),然后把封好的VCDU 放在VCDU_POOL 中,即在MPDU_POOL 中進(jìn)行VCDU 封裝。
③然后把VCDU_POOL 中的數(shù)據(jù)都放到DISPATCH_POOL 中,再把CPPDU_POOL、MPDU_POOL 和VCDU_POOL 中的內(nèi)容都擦除,準(zhǔn)備下一次的封包。
第三, 把上述操作得到的最后封包結(jié)果的內(nèi)容保存到新文件中,操作結(jié)束。
基于上述方法,試驗(yàn)過程中在文本文件中輸入了一串二進(jìn)制碼元“01010011 00001100 11010000 11101000 11100110 11001101 01100101 11100010 00001111 01001111 00101010 11111001 11011000 00000101 00010001”,經(jīng)過包信道復(fù)用模塊,把輸入的二進(jìn)制碼中每16 比特的數(shù)據(jù)信息封為1 個(gè)CPPDU,5 個(gè)CPPDU 封為1 個(gè)MPDU,1 個(gè)MPDU 封為1 個(gè)VCDU,得到的仿真結(jié)果如圖2 所示。
由圖2 可以看出, 輸入的二進(jìn)制碼元最終被封成了3 個(gè)VCDU,圖中前8 行數(shù)據(jù)為第一個(gè)VCDU,在第一個(gè)VCDU 中,第③行是1 個(gè)完整的CPPDU,其中第③行的后16 比特是原二進(jìn)制碼,同理,第④行、第⑤行、第⑥行和第⑦行也與第③行的結(jié)構(gòu)相同,這5 行的數(shù)據(jù)就組成了5 個(gè)CPPDU。然后第②行與第③、④、⑤、⑥、⑦這5 行組成了1個(gè)MPDU,其中第②行是MPDU 的主導(dǎo)頭。 最后第①行、第⑧行與第②、③、④、⑤、⑥、⑦行組成了1 個(gè)VCDU,其中第①行是VCDU 的幀頭、第⑧行是VCDU 的幀尾,即前8 行數(shù)據(jù)組成了一個(gè)完整的VCDU,包信道復(fù)用結(jié)果正確。 同理,可驗(yàn)證剩下的兩個(gè)VCDU 仿真結(jié)果全部正確。
[1]田野,馮永新,馬玉峰,劉桂君.高級(jí)在軌系統(tǒng)中的多路復(fù)用與差錯(cuò)控制技術(shù)研究[M].北京:科學(xué)出版社,2014,4.
[2]Tian ye,Li Qingfan,F(xiàn)eng yongxin,Gao xiaoling.A virtual channels scheduling algorithm with broad applicability based on movable boundary[J].Mathematical Problems in Engineering,2013,9:1-8.
[3] 謝賢芬.21 天學(xué)通Visual C++[M].2 版.北京:電子工業(yè)出版社,2001,2.