馬榮庭,劉 飛,鄧 輝,王 鋒,3,季凱帆
(1. 昆明理工大學(xué)云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650051;2. 中國(guó)科學(xué)院國(guó)家天文臺(tái),北京 100012;3. 中國(guó)科學(xué)院云南天文臺(tái),云南 昆明 650011)
CSRH-I觀測(cè)數(shù)據(jù)接收子系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)*
馬榮庭1,劉 飛2,鄧 輝1,王 鋒1,3,季凱帆1
(1. 昆明理工大學(xué)云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650051;2. 中國(guó)科學(xué)院國(guó)家天文臺(tái),北京 100012;3. 中國(guó)科學(xué)院云南天文臺(tái),云南 昆明 650011)
中國(guó)新一代厘米-分米波射電日像儀(Chinese Spectral Radio Heliograph, CSRH)項(xiàng)目已經(jīng)完成了硬件建設(shè)。為了實(shí)現(xiàn)從數(shù)字接收機(jī)中讀取觀測(cè)數(shù)據(jù),并將最新的可用數(shù)據(jù)狀態(tài)通知其他子系統(tǒng)如監(jiān)控系統(tǒng)和實(shí)時(shí)展現(xiàn)系統(tǒng)等,迫切需要一個(gè)穩(wěn)定可靠的數(shù)據(jù)接收子系統(tǒng)。針對(duì)CSRH-I的特點(diǎn)及要求,在分析數(shù)字接收機(jī)原始數(shù)據(jù)格式的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了CSRH-I觀測(cè)數(shù)據(jù)接收子系統(tǒng)。系統(tǒng)基于Linux環(huán)境,采用Boost軟件包作為底層開(kāi)發(fā)庫(kù),實(shí)現(xiàn)了基于TCP協(xié)議的網(wǎng)絡(luò)套接服務(wù)器,能夠異步接收、過(guò)濾數(shù)字接收機(jī)發(fā)送來(lái)的數(shù)據(jù),經(jīng)過(guò)相應(yīng)的分析處理后最終以文件方式存儲(chǔ)數(shù)據(jù),進(jìn)而采用UDP報(bào)文方式通知其它子系統(tǒng)觀測(cè)數(shù)據(jù)的更新?tīng)顟B(tài)。本系統(tǒng)充分考慮了通信過(guò)程中可能的異常情況并采取了相應(yīng)的對(duì)策。測(cè)試表明,CSRH-I觀測(cè)數(shù)據(jù)接收子系統(tǒng)工作穩(wěn)定可靠,容錯(cuò)能力強(qiáng),可以滿足CSRH-I的應(yīng)用需求。
CSRH-I;數(shù)據(jù)接收;Boost
中國(guó)新一代厘米-分米波射電日像儀(CSRH)位于中國(guó)內(nèi)蒙古錫林郭勒盟正鑲白旗明安圖鎮(zhèn),用于觀測(cè)日冕大氣和監(jiān)測(cè)太陽(yáng)活動(dòng)[1]。CSRH的觀測(cè)量是太陽(yáng)的射電寬帶頻譜,分為高、低頻段兩套設(shè)備。CSRH-I是項(xiàng)目的低頻部分,工作的射頻頻率范圍為0.4 GHz~2.0 GHz,主要硬件由天線、傳輸、模擬接收機(jī)、數(shù)字接收機(jī)和后續(xù)的處理及控制設(shè)備等部分組成。天線接收的射電噪聲信號(hào)經(jīng)過(guò)低噪聲放大器放大后,再進(jìn)行電/光轉(zhuǎn)換,將電信號(hào)轉(zhuǎn)換為光信號(hào)并通過(guò)光纖傳至機(jī)房[2]。經(jīng)過(guò)模擬接收機(jī)和數(shù)字接收機(jī)的處理后,最終生成約定格式的數(shù)據(jù)并以文件的方式進(jìn)行存儲(chǔ)[3]。
為了實(shí)現(xiàn)在線實(shí)時(shí)狀態(tài)監(jiān)控等功能,數(shù)字接收機(jī)在保存觀測(cè)數(shù)據(jù)文件的同時(shí),也可以將部分觀測(cè)數(shù)據(jù)通過(guò)網(wǎng)絡(luò)發(fā)送到指定地址,供實(shí)時(shí)數(shù)據(jù)分析使用,目前發(fā)送頻率為5 s一次,每次的數(shù)據(jù)量約1.6 MB。
CSRH-I數(shù)據(jù)接收子系統(tǒng)就是在這一基礎(chǔ)上設(shè)計(jì)的。子系統(tǒng)在數(shù)字接收機(jī)和后續(xù)監(jiān)控、發(fā)布等系統(tǒng)之間建立數(shù)據(jù)通道,將數(shù)字接收機(jī)發(fā)送的數(shù)據(jù)傳輸給后續(xù)多個(gè)處理系統(tǒng)使用,實(shí)現(xiàn)觀測(cè)與后續(xù)處理的聯(lián)動(dòng)。子系統(tǒng)通過(guò)創(chuàng)建套接端點(diǎn),與發(fā)送端建立連接,接收從數(shù)字接收機(jī)發(fā)送的數(shù)據(jù),并根據(jù)數(shù)據(jù)格式對(duì)數(shù)據(jù)進(jìn)行拆分、檢驗(yàn)和組合,得到正確的觀測(cè)數(shù)據(jù)并以文件的方式存儲(chǔ),進(jìn)而通過(guò)報(bào)文通知后續(xù)其它子系統(tǒng)當(dāng)前觀測(cè)數(shù)據(jù)的更新?tīng)顟B(tài)。圖1給出了CSRH-I系統(tǒng)數(shù)據(jù)流圖,圖中虛線框內(nèi)為CSRH-I觀測(cè)數(shù)據(jù)接收子系統(tǒng)的定位與前后關(guān)系。
CSRH-I使用的數(shù)字接收機(jī)采用一種自定義數(shù)據(jù)格式進(jìn)行數(shù)據(jù)傳輸與存儲(chǔ),以下簡(jiǎn)稱為裸格式。裸格式以幀為單位,包括系統(tǒng)參數(shù)和相關(guān)處理結(jié)果。圖2為幀格式示意圖,幀的起始位置坐標(biāo)為0,以字節(jié)為單位,圖中表格內(nèi)數(shù)據(jù)均為十六進(jìn)制。觀測(cè)系統(tǒng)每3 ms生成一幀數(shù)據(jù),每幀數(shù)據(jù)由幀頭部分和數(shù)據(jù)部分組成,總數(shù)據(jù)量為100 000字節(jié)。幀頭的長(zhǎng)度為192字節(jié),其中包含了幀起始引導(dǎo)標(biāo)志、系統(tǒng)時(shí)間、信號(hào)帶寬、工作模式等信息。CSRH-I數(shù)據(jù)接收系統(tǒng)需要對(duì)幀的引導(dǎo)標(biāo)志、極化方式、工作模式以及射頻頻率進(jìn)行判別,實(shí)現(xiàn)對(duì)接收的幀進(jìn)行選擇。
圖1 CSRH-I數(shù)據(jù)流圖,虛線框內(nèi)是數(shù)據(jù)接收子系統(tǒng)涉及范圍
Fig.1 A flowchart of the CSRH-I. Our data-receiving subsystem is marked as the region enclosed by dotted lines
圖2 幀格式示意圖
Fig.2 The format of a data frame of the CSRH-I
CSRH-I觀測(cè)設(shè)備可以在循環(huán)工作模式和非循環(huán)工作模式兩種模式下工作。在非循環(huán)工作模式下,設(shè)備以固定的射頻頻率和極化方式工作;而在循環(huán)工作模式下,設(shè)備在0.4 GHz~0.8 GHz、0.8 GHz~1.2 GHz、1.2 GHz~1.6 GHz和1.6 GHz~2.0 GHz 4個(gè)頻段上循環(huán)進(jìn)行工作,同時(shí)極化方式采取在一個(gè)頻率上先左旋極化再右旋極化的方式進(jìn)行循環(huán)。循環(huán)工作模式下,先改變極化方式,然后改變射頻頻率。兩種工作模式得到的數(shù)據(jù)幀排列如圖3。由圖3知,循環(huán)模式下設(shè)備完成一次完整觀測(cè)得到的觀測(cè)數(shù)據(jù)是由8個(gè)3 ms觀測(cè)得到的幀組成。
圖3 數(shù)據(jù)幀排列圖
Fig.3 The arrangements of data frames under two working modes of the CSRH-I, respectively
2.1 Linux環(huán)境下的網(wǎng)絡(luò)套接編程
CSRH-I觀測(cè)數(shù)據(jù)接收子系統(tǒng)是以Linux環(huán)境下的套接字(Socket)為基礎(chǔ)實(shí)現(xiàn)。子系統(tǒng)作為T(mén)CP服務(wù)器端,對(duì)外提供面向連接的可靠服務(wù),有序、無(wú)差錯(cuò)、無(wú)重復(fù)的完成數(shù)據(jù)傳輸[4]。數(shù)字接收機(jī)在需要進(jìn)行數(shù)據(jù)傳輸時(shí),作為T(mén)CP客戶機(jī)連接本系統(tǒng)的TCP端口建立相應(yīng)的連接,進(jìn)行數(shù)據(jù)傳輸。
2.2 Boost庫(kù)
Linux環(huán)境下服務(wù)器端套接字創(chuàng)建的基本步驟為:創(chuàng)建套接,綁定地址,啟動(dòng)監(jiān)聽(tīng),接受連接,數(shù)據(jù)交換,連接斷開(kāi)[5]。近幾年來(lái),為簡(jiǎn)化Linux環(huán)境下套接字編程,越來(lái)越多的軟件開(kāi)發(fā)人員采用了Boost軟件庫(kù)。Boost是一個(gè)功能強(qiáng)大、構(gòu)造精巧、跨平臺(tái)、開(kāi)源的C++程序庫(kù),Boost庫(kù)為用戶提供了線程安全的異步套接編程[6]。在異步模式下,Boost庫(kù)提供異步回調(diào)機(jī)制,開(kāi)發(fā)人員可以通過(guò)調(diào)用“boost∷bind()”函數(shù)將后續(xù)要調(diào)用的函數(shù)作為當(dāng)前執(zhí)行函數(shù)的一個(gè)參數(shù)使用。另外,Boost庫(kù)還為開(kāi)發(fā)人員提供了智能指針,方便解決C++編程中的內(nèi)存管理問(wèn)題。Boost下的ASIO庫(kù)是一個(gè)針對(duì)低端I/O編程和網(wǎng)絡(luò)編程的庫(kù),對(duì)網(wǎng)絡(luò)編程和計(jì)算機(jī)底層I/O編程做了較好的接口。應(yīng)用程序可以通過(guò)“io_service”對(duì)象獲得操作系統(tǒng)的I/O服務(wù),“io_service”調(diào)用操作系統(tǒng)功能執(zhí)行連接操作,操作系統(tǒng)向“io_service”返回執(zhí)行結(jié)果,無(wú)需再考慮程序的底層構(gòu)建,為開(kāi)發(fā)者進(jìn)行C++套接編程提供了穩(wěn)定的異步模型[7]。
2.3 基于Boost庫(kù)的接收服務(wù)器實(shí)現(xiàn)
該數(shù)據(jù)接收子系統(tǒng)主要分為數(shù)據(jù)接收、數(shù)據(jù)檢驗(yàn)、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)共享幾部分。數(shù)據(jù)接收部分的主要任務(wù)是創(chuàng)建服務(wù)器端套接字,與發(fā)送端建立連接,接收所有發(fā)送來(lái)的數(shù)據(jù)并暫存于緩沖區(qū)數(shù)組中;數(shù)據(jù)檢驗(yàn)部分檢驗(yàn)接收過(guò)程中是否發(fā)生數(shù)據(jù)丟失、數(shù)據(jù)錯(cuò)傳等傳輸錯(cuò)誤,從接收的數(shù)據(jù)中獲得后續(xù)系統(tǒng)需要的數(shù)據(jù),拋棄錯(cuò)誤或者不需要的數(shù)據(jù);數(shù)據(jù)存儲(chǔ)部分實(shí)現(xiàn)將經(jīng)過(guò)正確性檢驗(yàn)確認(rèn)無(wú)誤的數(shù)據(jù)依照一定的存儲(chǔ)方法進(jìn)行存盤(pán);數(shù)據(jù)共享部分實(shí)現(xiàn)后續(xù)多個(gè)處理系統(tǒng)及時(shí)地獲取最新數(shù)據(jù),并行地使用存盤(pán)數(shù)據(jù)。
2.3.1 數(shù)據(jù)接收
使用Boost庫(kù)可以快速地完成服務(wù)器端套接字的創(chuàng)建并啟動(dòng)監(jiān)聽(tīng),實(shí)現(xiàn)與發(fā)送端建立連接后并行地接收數(shù)據(jù)。調(diào)用“io_service”生成“io_service”對(duì)象,調(diào)用“ip∷tcp∷endpoint()”生成套接字節(jié)點(diǎn),綁定指定機(jī)器的IP地址以及5260端口,在此基礎(chǔ)上創(chuàng)建一個(gè)“acceptor”對(duì)象,通過(guò)調(diào)用“async_accept”函數(shù)在指定端口開(kāi)啟監(jiān)聽(tīng),等待連接。當(dāng)有多個(gè)連接請(qǐng)求時(shí),服務(wù)器端為每一個(gè)連接創(chuàng)建一個(gè)線程,避免客戶端的長(zhǎng)時(shí)間等待。創(chuàng)建服務(wù)器端套接字并啟動(dòng)監(jiān)聽(tīng)的部分代碼如表1。
溫泉水電站壩址河谷呈V形,河流縱坡6.9‰。谷底高程870 m左右,兩岸山頂高程1 182~1 600 m,右岸自然坡角多在70°~80°之間,局部近于直立。壩址分布下石炭統(tǒng)東圖精河組和第四系地層,巖體呈厚層狀—塊狀。壩址基巖強(qiáng)風(fēng)化層厚2~5 m,弱風(fēng)化層厚10~15 m。左岸卸荷帶水平寬度 3~15 m,順河長(zhǎng) 95 m,垂直深度約65 m;右岸卸荷帶水平寬度2~5 m。壩址區(qū)地震基本烈度Ⅷ度,大壩抗震設(shè)防烈度Ⅷ度。
服務(wù)器端監(jiān)聽(tīng)到請(qǐng)求,接受請(qǐng)求建立連接后便立即進(jìn)行數(shù)據(jù)的接收。調(diào)用“async_read()”函數(shù)進(jìn)行數(shù)據(jù)的異步接收,返回條件是完成從套接緩沖區(qū)中讀取指定字節(jié)的數(shù)據(jù)或者數(shù)據(jù)接收過(guò)程中發(fā)生錯(cuò)誤。通過(guò)回調(diào)函數(shù)調(diào)用“async_read()”函數(shù),開(kāi)啟多個(gè)線程并行地接收數(shù)據(jù)?;卣{(diào)函數(shù)返回兩個(gè)默認(rèn)的參數(shù):函數(shù)執(zhí)行結(jié)果“boost∷asio∷placeholders∷error”和本次接收最終接收的字節(jié)數(shù)“boost∷asio∷placeholders∷bytes_transferred”。通過(guò)這兩個(gè)參數(shù)可知本次數(shù)據(jù)的接收是否成功以及接收的數(shù)據(jù)量。如果發(fā)生錯(cuò)誤,則返回已接收的數(shù)據(jù)量和錯(cuò)誤信息。接收的數(shù)據(jù)暫存于系統(tǒng)緩沖區(qū)數(shù)組中,等待對(duì)其進(jìn)行拆分和選擇,以節(jié)省系統(tǒng)I/O資源。
表1 創(chuàng)建服務(wù)器端套接并啟動(dòng)監(jiān)聽(tīng)代碼Table 1 The codes for setting connections to a TCP server and initiating monitoring
在異步模式下接收數(shù)據(jù)時(shí)系統(tǒng)可利用空閑資源為接收任務(wù)創(chuàng)建多個(gè)線程,從而并行地接收數(shù)據(jù),提高系統(tǒng)資源利用率,加快數(shù)據(jù)接收速度,減少因?yàn)轭l繁的接收超時(shí)帶來(lái)的損失。
2.3.2 數(shù)據(jù)檢驗(yàn)
在當(dāng)前的CSRH-I中,數(shù)字接收機(jī)所發(fā)送的數(shù)據(jù)沒(méi)有提供數(shù)據(jù)校驗(yàn)位。為了避免錯(cuò)誤的數(shù)據(jù)給后續(xù)處理帶來(lái)不可預(yù)料的后果,需要對(duì)接收的數(shù)據(jù)進(jìn)行檢驗(yàn)。另外,由上文裸數(shù)據(jù)格式的分析可知,在不同的設(shè)備工作模式下,后續(xù)處理對(duì)數(shù)據(jù)的可處理性要求不同。非循環(huán)模式下得到的觀測(cè)數(shù)據(jù)幀,每一幀都可以進(jìn)行單獨(dú)處理,而對(duì)于循環(huán)模式下得到的數(shù)據(jù)幀,連續(xù)且有規(guī)律排列的8個(gè)幀組成的一個(gè)完整數(shù)據(jù)才能對(duì)其進(jìn)行后續(xù)處理。數(shù)據(jù)檢驗(yàn)根據(jù)裸數(shù)據(jù)格式和不同模式下數(shù)據(jù)的可處理性完成對(duì)接收緩沖區(qū)數(shù)組中的數(shù)據(jù)進(jìn)行拆分、檢驗(yàn)和組合。另外,數(shù)字接收機(jī)隨機(jī)選取某一幀作為發(fā)送數(shù)據(jù)的第一幀進(jìn)行發(fā)送,幀對(duì)應(yīng)的設(shè)備射頻頻率以及極化方式未知。為了避免存盤(pán)數(shù)據(jù)混亂,方便后續(xù)系統(tǒng)使用數(shù)據(jù),傳輸過(guò)程中,約定頻率為0.4 GHz~0.8 GHz的左旋極化數(shù)據(jù)幀作為接收系統(tǒng)存盤(pán)的第1幀。
數(shù)據(jù)檢驗(yàn)流程如圖4,在暫存接收數(shù)據(jù)的緩沖區(qū)數(shù)組中遍歷查找32字節(jié)十六進(jìn)制的“55”,確定幀起始位置,然后跳轉(zhuǎn)相應(yīng)的偏移量,判斷幀尾位置是否為16字節(jié)十六進(jìn)制的“aa”。判斷成功后,循環(huán)檢驗(yàn)后續(xù)8幀的幀頭和幀尾位置數(shù)據(jù)是否正確,以此判斷數(shù)組中是否存在8個(gè)完整的幀。如果判斷成功,則從幀起始位置跳轉(zhuǎn)190字節(jié)到模式判別字段,判斷該幀數(shù)據(jù)對(duì)應(yīng)的設(shè)備工作模式。若是非循環(huán)模式,則直接存儲(chǔ)該幀,該次數(shù)據(jù)檢驗(yàn)完成,若是循環(huán)模式,則進(jìn)行后續(xù)的檢驗(yàn)。
對(duì)于判定為循環(huán)模式的幀,從幀起始位置向后跳轉(zhuǎn)99 264字節(jié),讀取幀的跳頻碼字段。判斷跳頻碼字段的值是否為十六進(jìn)制的“0000”,判定失敗,則向后滑動(dòng)重新查找?guī)^,進(jìn)行下一次檢驗(yàn)。否則,假設(shè)當(dāng)前幀為第1幀,后續(xù)相鄰的幀為第2幀,以此類(lèi)推,判斷第1幀和第2幀,第3幀和第4幀,第5幀和第6幀,第7幀和第8幀的跳頻碼字段的值是否相等。相等則說(shuō)明傳輸過(guò)程中沒(méi)有發(fā)生幀丟失,存儲(chǔ)這8幀,進(jìn)行下一次接收。否則,丟棄該次接收的所有數(shù)據(jù),該次數(shù)據(jù)檢驗(yàn)完畢,進(jìn)行下一次接收。
2.3.3 數(shù)據(jù)保存和共享
系統(tǒng)的數(shù)據(jù)保存和共享實(shí)現(xiàn)了對(duì)文件的并行讀寫(xiě)。同時(shí),采用UDP報(bào)文發(fā)送的方法,可以有效防止接收系統(tǒng)寫(xiě)文件與后續(xù)多個(gè)系統(tǒng)讀文件引發(fā)的文件互鎖問(wèn)題,以此避免文件互鎖導(dǎo)致整個(gè)系統(tǒng)無(wú)法正常工作。
圖4 數(shù)據(jù)檢驗(yàn)流程圖
Fig.4 The flowchart of checking data
CSRH-I系統(tǒng)對(duì)數(shù)據(jù)的正確性有嚴(yán)格的要求。為了保證傳輸過(guò)程中數(shù)據(jù)的正確性,系統(tǒng)根據(jù)TCP協(xié)議套接數(shù)據(jù)傳輸過(guò)程中的常見(jiàn)問(wèn)題分別考慮了相應(yīng)的異常處理方法,以應(yīng)對(duì)系統(tǒng)運(yùn)行過(guò)程中可能出現(xiàn)的異常事件,提高系統(tǒng)的可靠性和穩(wěn)定性。系統(tǒng)針對(duì)連接中斷、數(shù)據(jù)錯(cuò)傳、傳輸超時(shí)等異常設(shè)定了相關(guān)處理辦法,具體說(shuō)明如下。
3.1 連接中斷
系統(tǒng)實(shí)現(xiàn)了在客戶端斷開(kāi)連接后及時(shí)提醒用戶,避免系統(tǒng)做無(wú)謂的等待。當(dāng)網(wǎng)絡(luò)故障或者其他短暫故障導(dǎo)致發(fā)送數(shù)據(jù)的客戶端與系統(tǒng)斷開(kāi)連接時(shí),接收端根據(jù)數(shù)據(jù)接收函數(shù)返回的“boost∷asio∷placeholders∷error”參數(shù)值對(duì)此進(jìn)行識(shí)別,確認(rèn)客戶端失去連接后系統(tǒng)將主動(dòng)斷開(kāi)原有TCP連接,同時(shí)將當(dāng)前正在接收但未能接收完成的數(shù)據(jù)丟棄,并跳過(guò)此次接收,等待客戶端重新連接。
3.2 數(shù)據(jù)錯(cuò)傳
系統(tǒng)根據(jù)接收的數(shù)據(jù)量實(shí)現(xiàn)對(duì)數(shù)據(jù)傳輸過(guò)程的錯(cuò)誤檢驗(yàn)。數(shù)據(jù)接收機(jī)發(fā)送數(shù)據(jù)量是已知的,同時(shí),在Boost的異步通信方式下,數(shù)據(jù)接收端每次接收的數(shù)據(jù)量可以由接收函數(shù)的返回參數(shù)“boost∷asio∷placeholders∷bytes_transferred”記錄,通過(guò)統(tǒng)計(jì)該參數(shù)的值知道在特定時(shí)間段內(nèi)接收系統(tǒng)接收的數(shù)據(jù)總量。如果接收的數(shù)據(jù)總量與發(fā)送端發(fā)送的數(shù)據(jù)量不同,則認(rèn)為傳輸過(guò)程中發(fā)生了錯(cuò)誤,選擇丟棄該次已經(jīng)接收的數(shù)據(jù),并開(kāi)始下一次接收,從而保證接收數(shù)據(jù)的正確性。
3.3 傳輸超時(shí)
本系統(tǒng)利用傳輸超時(shí)解決網(wǎng)絡(luò)擁堵或系統(tǒng)I/O繁忙等異常情況。超出系統(tǒng)設(shè)定時(shí)間的接收動(dòng)作或者處于等待狀態(tài)的存儲(chǔ)動(dòng)作將被終止,同時(shí)丟棄已經(jīng)接收的數(shù)據(jù)。
Boost庫(kù)提供了一個(gè)“timer”庫(kù),這個(gè)庫(kù)擁有簡(jiǎn)易的度量時(shí)間的功能。該子庫(kù)中封裝有“timer”類(lèi),這是一個(gè)小型的計(jì)時(shí)器,提供毫秒級(jí)的計(jì)時(shí)精度。因此,可以通過(guò)這個(gè)類(lèi)統(tǒng)計(jì)每一次數(shù)據(jù)接收完成的時(shí)間,如果該時(shí)間大于300 ms(暫定,考慮后續(xù)處理時(shí)間)則認(rèn)為系統(tǒng)接收超時(shí)。
為了驗(yàn)證系統(tǒng)的可靠性與穩(wěn)定性,根據(jù)系統(tǒng)的實(shí)際工作環(huán)境,分別對(duì)系統(tǒng)進(jìn)行了實(shí)驗(yàn)室環(huán)境下的測(cè)試以及實(shí)際工作現(xiàn)場(chǎng)的測(cè)試,并結(jié)合測(cè)試結(jié)果以及系統(tǒng)的應(yīng)用要求對(duì)系統(tǒng)做了進(jìn)一步的完善。
實(shí)驗(yàn)室環(huán)境下的測(cè)試以兩臺(tái)裝有Centos 6.4版本64位操作系統(tǒng)的計(jì)算機(jī)作為試驗(yàn)平臺(tái)。兩臺(tái)機(jī)器通過(guò)百兆以太網(wǎng)連接,分別運(yùn)行發(fā)送端測(cè)試程序和待測(cè)試的系統(tǒng)。測(cè)試分為兩部分進(jìn)行,正常工作狀態(tài)測(cè)試和異常發(fā)生處理測(cè)試,分別對(duì)系統(tǒng)能否在正常工作狀態(tài)下完成數(shù)據(jù)傳輸任務(wù)以及異常發(fā)生時(shí)能否進(jìn)行相應(yīng)異常處理進(jìn)行了有效測(cè)試。
(1)單次測(cè)試:發(fā)送端持續(xù)循環(huán)發(fā)送觀測(cè)數(shù)據(jù)文件起始位置的1.6 M數(shù)據(jù),兩次發(fā)送之間延時(shí)5 s,系統(tǒng)對(duì)其進(jìn)行接收、處理。經(jīng)過(guò)多次測(cè)試,系統(tǒng)完成單次接收和處理需要200 ms左右的時(shí)間。每次接收和處理完成后,系統(tǒng)生成一個(gè)大小為0.8 M的二進(jìn)制數(shù)據(jù)文件,同時(shí) “Recvlog.txt” 文件正確更新,后續(xù)的模擬發(fā)布系統(tǒng)收到含有文件名的UDP報(bào)文。
(2)連續(xù)測(cè)試:發(fā)送端不間斷發(fā)送觀測(cè)數(shù)據(jù),測(cè)試數(shù)據(jù)量為1.92 G。發(fā)送間隔為5 s,每次發(fā)送1.6 MB數(shù)據(jù),累計(jì)發(fā)送1 200次。系統(tǒng)對(duì)其進(jìn)行接收處理,實(shí)驗(yàn)得到的結(jié)果無(wú)錯(cuò)誤,說(shuō)明系統(tǒng)可以完成持續(xù)性的數(shù)據(jù)傳輸任務(wù)。
(3)針對(duì)系統(tǒng)的異常處理方法,在系統(tǒng)運(yùn)行過(guò)程中人為制造網(wǎng)絡(luò)斷開(kāi)、發(fā)錯(cuò)數(shù)據(jù)、設(shè)定延時(shí)等異常,測(cè)試結(jié)果證明系統(tǒng)可以對(duì)這些異常進(jìn)行正常處理,解除異常后,系統(tǒng)可以正常工作。
在實(shí)驗(yàn)室測(cè)試完成后,系統(tǒng)部署在內(nèi)蒙古明安圖觀測(cè)站現(xiàn)場(chǎng)服務(wù)器上進(jìn)行了真實(shí)環(huán)境測(cè)試。系統(tǒng)實(shí)現(xiàn)了與發(fā)送端建立連接和數(shù)據(jù)的接收、存儲(chǔ),并能穩(wěn)定工作。同時(shí),系統(tǒng)完成單次接收和處理同樣需要200 ms左右的時(shí)間,與實(shí)驗(yàn)室測(cè)試結(jié)果吻合。經(jīng)過(guò)近3個(gè)月的試運(yùn)行,CSRH-I觀測(cè)數(shù)據(jù)接收子系統(tǒng)穩(wěn)定運(yùn)行,實(shí)現(xiàn)了在數(shù)字接收機(jī)和后續(xù)實(shí)時(shí)監(jiān)控,展現(xiàn)系統(tǒng)間的數(shù)據(jù)通道,保證了數(shù)據(jù)的可靠傳輸,滿足項(xiàng)目需求。
本文針對(duì)CSRH-I的特點(diǎn)和任務(wù)要求進(jìn)行了深入的調(diào)研分析,實(shí)現(xiàn)了一個(gè)在Linux平臺(tái)下基于C++編程庫(kù)Boost的CSRH-I觀測(cè)數(shù)據(jù)接收子系統(tǒng)。系統(tǒng)細(xì)致考慮了可能出現(xiàn)的異常錯(cuò)誤和對(duì)應(yīng)的異常處理方法,確保了系統(tǒng)的穩(wěn)定性以及數(shù)據(jù)的正確性。測(cè)試結(jié)果表明系統(tǒng)具有較好的魯棒性,能夠滿足CSRH-I應(yīng)用需求。但當(dāng)前系統(tǒng)中實(shí)現(xiàn)的數(shù)據(jù)錯(cuò)誤檢驗(yàn)辦法仍有較大的局限性,根本的解決方法仍需要在數(shù)字接收機(jī)中增加校驗(yàn)數(shù)據(jù)解決。
致謝:衷心感謝中國(guó)科學(xué)院國(guó)家天文臺(tái)的顏毅華老師、王威老師和劉東浩老師的指導(dǎo)。
[1] Yan Y, Zhang J, Wang W. The Chinese Spectral Radioheliograph—CSRH[J]. Earth, Moon, and Planets, 2009, 104(1-4): 97-100.
[2] 王威, 陳志軍, 姬國(guó)樞, 等. CSRH 光纖傳輸方案探討[J]. 天文研究與技術(shù)——國(guó)家天文臺(tái)臺(tái)刊, 2006, 3(2): 143-147. Wang Wei, Chen Zhijun, Ji Guoshu, et al. Optical fiber transmission analysis for CSRH[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2006, 3(2): 143-147.
[3] 姬國(guó)樞, 竇玉江, 王威, 等. CSRH 模擬接收機(jī)設(shè)計(jì)[J]. 天文研究與技術(shù)——國(guó)家天文臺(tái)臺(tái)刊, 2006, 3(2): 135-142. Ji Guoshu, Dou Yujiang, Wang Wei, et al. RF receiver design for CSRH[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2006, 3(2): 135-142.
[4] 張潤(rùn)華. UNIX環(huán)境下基于socket網(wǎng)絡(luò)通信的實(shí)現(xiàn)[J]. 科技信息(科學(xué)教研), 2008(9): 74+85.
[5] 張斌, 高波. Linux網(wǎng)絡(luò)編程[M]. 北京: 清華大學(xué)出版社, 2000.
[6] 羅劍鋒. Boost 程序庫(kù)完全開(kāi)發(fā)指南[M]. 北京: 電子工業(yè)出版社, 2010.
[7] Torjo J. Boost. Asio C++ network programming[M]. America: Packt Publishing Ltd, 2013.
CN 53-1189/P ISSN 1672-7673
The Design and Implementation of a Data-Receiving Subsystem of the CSRH-I
Ma Rongting1, Liu Fei2, Deng Hui1, Wang Feng1,3, Ji Kaifan1
(1. Key Labarotory of Applications of Computer Technologies of the Yunnan Province, Kunming University of Science and Technology, Kunming 650051, China, Email: ma_rt@foxmail.com; 2. National Astronomical Observatories, Chinese Academy of Sciences, Beijing 100012, China; 3. Yunnan Observatories, Chinese Academy of Sciences, Kunming 650011, China)
The construction of the hardware systems of the Chinese Spectral Radio Heliograph (CSRH) has been completed. It is urgent to design and implement a robust data-receiving subsystem to read observational data from the digital receiver of the CSRH. Such a subsystem also needs to have the capability to inform other subsystems that are further along the data flows, including the supervision subsystem and visualization subsystem, about the status of available data. In this paper we first analyze the format of raw data received by the CSRH-I. Based on the analysis we have designed a data-receiving subsystem for the CSRH-I. The subsystem is to work under a LINUX environment and is based on the BOOST software package as its development library. By incorporating a network server of the TCP protocol the subsystem can read and check data from the digital receiver asynchronously. After being pre-processed observed data are saved by the subsystem in a file set; meanwhile, through a UDP message the subsystem will further inform other subsystems to update the current status of available data. Our design of the subsystem fully considers the issues of handling errors/exceptions in TCP communications. Our test results show that the subsystem can work steadily and reliably, meeting the requirements of applications in the CSRH-I.
CSRH-I; Data-receiving; BOOST
中國(guó)科學(xué)院-國(guó)家自然科學(xué)基金委員會(huì)天文聯(lián)合基金重點(diǎn)項(xiàng)目 (U1231205);國(guó)家自然科學(xué)基金 (11103005);云南省應(yīng)用基礎(chǔ)基金重點(diǎn)項(xiàng)目 (2013FA013, 2013FA032) 資助.
2014-04-08;修定日期:2014-04-30
馬榮庭,男,碩士. 研究方向:計(jì)算機(jī)應(yīng)用. Email: ma_rt@foxmail.com
鄧 輝,女,教授. 研究方向:科學(xué)數(shù)據(jù)處理. Email: denghui@cnlab.net
TP311
A
1672-7673(2015)01-0063-07