周雅芳 范玉娜 張耀寰 相金明
(沈陽(yáng)理工大學(xué),遼寧 沈陽(yáng)110159)
在AOS 建議中,CCSDS 包是合路過(guò)程的協(xié)議數(shù)據(jù)單元,為了使非CCSDS 結(jié)構(gòu)的數(shù)據(jù)單元同樣能復(fù)用在虛擬信道內(nèi), 包裝業(yè)務(wù)把非CCSDS 格式的包化成了CCSDS 格式的包,也稱為CPPDU。 包信道復(fù)用過(guò)程就是把這些來(lái)自多個(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)過(guò)程圖
在本仿真中,根據(jù)包信道復(fù)用原理,并借助Visual C++[3]中的雙向隊(duì)列容器,對(duì)包信道復(fù)用模塊進(jìn)行設(shè)計(jì)。 在包信道復(fù)用模塊內(nèi)部功能的設(shè)計(jì)中,主要分三個(gè)大部分來(lái)實(shí)現(xiàn):
第一,從FileDlg.GetPathname()函數(shù)中獲得某個(gè)其他模塊發(fā)送過(guò)來(lái)的文件賦給容器一(此模塊的容器一名為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)過(guò)程如圖3 所示,基本過(guò)程如下:
① 容 器 一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)過(guò)程中在文本文件中輸入了一串二進(jìn)制碼元“01010011 00001100 11010000 11101000 11100110 11001101 01100101 11100010 00001111 01001111 00101010 11111001 11011000 00000101 00010001”,經(jīng)過(guò)包信道復(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.