高振斌,毛 健
(河北工業(yè)大學(xué) 信息工程學(xué)院,天津 300401)
隨著定量遙感技術(shù)的發(fā)展,人們對(duì)遙感數(shù)據(jù)的準(zhǔn)確度提出了更高的要求,除了不斷改進(jìn)和研制新型遙感器外,還需要對(duì)遙感器的測(cè)量結(jié)果進(jìn)行精確定標(biāo),也就是用現(xiàn)場(chǎng)觀測(cè)儀器采集的數(shù)據(jù)校準(zhǔn)遙感器或評(píng)價(jià)遙感數(shù)據(jù)[1].作為實(shí)現(xiàn)海洋監(jiān)測(cè)的有效手段之一的海洋遙感技術(shù)同樣面臨定標(biāo)檢驗(yàn)的問(wèn)題,充足的校驗(yàn)數(shù)據(jù)對(duì)海洋監(jiān)測(cè)的發(fā)展具有重大意義.目前,國(guó)際海洋環(huán)境監(jiān)測(cè)正在向著高集成度、綜合性、持續(xù)性、多平臺(tái)、立體化、網(wǎng)絡(luò)化和智能化方向發(fā)展,如NOAA綜合海洋觀測(cè)系統(tǒng)(IOOS)[2].而我國(guó)在海洋監(jiān)測(cè)信息數(shù)據(jù)處理和分析方面相對(duì)比較落后,發(fā)展比較緩慢,其中一個(gè)制約因素就是缺乏區(qū)域和局地尺度的連續(xù)監(jiān)測(cè)[3],缺少現(xiàn)場(chǎng)海洋數(shù)據(jù).現(xiàn)有的一些數(shù)據(jù)采集系統(tǒng)[4]或是觀測(cè)設(shè)備種類單一,不能提供多樣化的數(shù)據(jù),或者針對(duì)性不強(qiáng)[5],不能滿足海洋遙感定標(biāo)檢驗(yàn)這一特殊應(yīng)用.基于這種情況,本文設(shè)計(jì)了一種多設(shè)備的數(shù)據(jù)采集系統(tǒng),將多種觀測(cè)儀器集成到同一平臺(tái),統(tǒng)一管理,實(shí)現(xiàn)長(zhǎng)時(shí)間的連續(xù)監(jiān)測(cè),完成多種海洋要素的實(shí)時(shí)采集,可以為海洋遙感定標(biāo)檢驗(yàn)提供全面可靠的實(shí)驗(yàn)數(shù)據(jù).
圖1 系統(tǒng)組成框圖Fig.1 System block diagram
本系統(tǒng)安裝于海洋石油平臺(tái)上,為了便于維護(hù),整個(gè)系統(tǒng)采用模塊化設(shè)計(jì),共分為現(xiàn)場(chǎng)采集單元、現(xiàn)場(chǎng)控制及數(shù)據(jù)處理單元、遠(yuǎn)程監(jiān)控及通信單元、電源管理單元4個(gè)部分,如圖1所示.
現(xiàn)場(chǎng)采集單元主要包括科研用觀測(cè)儀器,如微波散射計(jì)、微波輻射計(jì)、水上光譜儀、太陽(yáng)光度計(jì)、CCD相機(jī)等,除此還有GPS、自動(dòng)氣象站等輔助設(shè)備.其能夠按照控制指令轉(zhuǎn)換工作狀態(tài)并及時(shí)向現(xiàn)場(chǎng)監(jiān)控單元反饋信息,協(xié)同完成現(xiàn)場(chǎng)海洋數(shù)據(jù)的采集任務(wù).
這部分主要由兩臺(tái)計(jì)算機(jī)組成,其中一臺(tái)負(fù)責(zé)控制,通過(guò)接口電路,完成本地單元和現(xiàn)場(chǎng)采集單元之間的通信,根據(jù)預(yù)先設(shè)置的觀測(cè)方案或按照遠(yuǎn)程監(jiān)控單元的指令對(duì)系統(tǒng)進(jìn)行觀測(cè)控制,接收采集的數(shù)據(jù)并存儲(chǔ)、顯示;另一臺(tái)負(fù)責(zé)數(shù)據(jù)的進(jìn)一步處理,將數(shù)據(jù)備份和負(fù)責(zé)向遠(yuǎn)端傳輸采集的數(shù)據(jù).
這個(gè)單元負(fù)責(zé)數(shù)據(jù)的管理及觀測(cè)指令的控制.遠(yuǎn)程監(jiān)控計(jì)算機(jī)通過(guò)通信網(wǎng)絡(luò)對(duì)平臺(tái)觀測(cè)活動(dòng)進(jìn)行監(jiān)控,接收平臺(tái)傳回的數(shù)據(jù).用戶根據(jù)權(quán)限對(duì)數(shù)據(jù)中心進(jìn)行操作,獲得所需數(shù)據(jù)信息.
主要負(fù)責(zé)對(duì)整個(gè)系統(tǒng)的電源供給.采用市電為主,UPS電源為輔的方式.工作時(shí)采用市電供電,遇到斷電情況自動(dòng)切換到UPS電源供電模式,以維持系統(tǒng)的短時(shí)間運(yùn)行,完成數(shù)據(jù)的存儲(chǔ)、系統(tǒng)的正常退出等工作.
本系統(tǒng)軟件基于Windows操作系統(tǒng)編程實(shí)現(xiàn),采用VisualC++語(yǔ)言使用MFC進(jìn)行設(shè)計(jì),完成人機(jī)交互和數(shù)據(jù)的傳輸、存儲(chǔ)、查詢等功能.
由于本系統(tǒng)涉及多個(gè)觀測(cè)儀器,因此選擇單文檔多視圖結(jié)構(gòu),利用多視圖把系統(tǒng)中與各個(gè)儀器對(duì)應(yīng)的功能模塊表現(xiàn)出來(lái).
2.1.1 主窗口切分
將主窗口設(shè)計(jì)成3部分,分別對(duì)應(yīng)視圖SysView、ViewN(N=1、2、…)和StateView.通過(guò)在CMainFrame類中增加虛函數(shù)OnCreateClient,利用其中CMySplitterWnd類型的兩個(gè)對(duì)象m_wndSplitter和m_wndSplitter2實(shí)現(xiàn)主窗口切分,主要代碼如下:
2.1.2 多視圖之間的切換
人機(jī)交互操作主要是在 CViewN(N=1、2、…)中完成,當(dāng)前顯示的總是用戶正在操作的某一個(gè)界面.在SysView中添加一個(gè)樹(shù)形控件,通過(guò)鼠標(biāo)點(diǎn)擊控件的不同節(jié)點(diǎn)來(lái)發(fā)送對(duì)應(yīng)的消息,完成視圖之間的切換.切換過(guò)程如圖2所示.
相關(guān)代碼如下:
圖2 視圖切換過(guò)程Fig.2 View sw itching process
鑒于觀測(cè)設(shè)備都帶有RS232/485接口,系統(tǒng)采用串行通信完成本地控制計(jì)算機(jī)與現(xiàn)場(chǎng)觀測(cè)儀器之間的數(shù)據(jù)傳輸.在Windows環(huán)境下實(shí)現(xiàn)串行通信常見(jiàn)有3種編程方法:應(yīng)用MSComm控件、利用API函數(shù)編程和使用CSerialPort類.本系統(tǒng)選用第1種方法,以RS485總線將各觀測(cè)儀器連成網(wǎng)絡(luò),通過(guò)統(tǒng)一通信協(xié)議進(jìn)行控制.CCD相機(jī)接口特殊,本文不作討論.
2.2.1 通信協(xié)議
本系統(tǒng)采用主從式網(wǎng)絡(luò)結(jié)構(gòu),通信協(xié)議中數(shù)據(jù)包的構(gòu)成如表1所示.采用ASCII編碼方式,通過(guò)包頭和包尾表示數(shù)據(jù)的起止;為每個(gè)設(shè)備分配一個(gè)唯一的通信地址,通過(guò)不同的設(shè)備標(biāo)識(shí)尋址通信;命令參數(shù)是功能碼;數(shù)據(jù)段表示數(shù)據(jù)的具體內(nèi)容,其結(jié)構(gòu)見(jiàn)表2.
表1 數(shù)據(jù)包結(jié)構(gòu)Tab.1 Data packet structure
根據(jù)實(shí)際定義功能碼,功能碼告之被訪問(wèn)的從設(shè)備要執(zhí)行何種功能,數(shù)據(jù)段包含了要執(zhí)行功能的任何附加信息.當(dāng)從設(shè)備回應(yīng)時(shí),它使用功能碼來(lái)指示是正常回應(yīng)還是異議回應(yīng).對(duì)正?;貞?yīng),從設(shè)備僅回應(yīng)相應(yīng)的功能代碼.對(duì)異議回應(yīng),從設(shè)備對(duì)功能碼最高要位置1.例如:發(fā)往從設(shè)備的數(shù)據(jù)包要求讀寄存器數(shù)據(jù),將產(chǎn)生如下功能代碼:00000011(十六進(jìn)制03H).對(duì)正?;貞?yīng),從設(shè)備僅回應(yīng)同樣的功能代碼03.對(duì)異議回應(yīng),它返回:10000011(十六進(jìn)制83H).這樣,同CRC校驗(yàn)一起保證通信的可靠性.
2.2.2 對(duì)數(shù)據(jù)包的處理
對(duì)數(shù)據(jù)包的處理一般過(guò)程是邊接收邊處理[6],對(duì)接收的每一個(gè)字符進(jìn)行判斷,在程序中每當(dāng)串口緩沖區(qū)有一個(gè)或一個(gè)以上字符時(shí)就觸發(fā)串口通信事件,該事件驅(qū)動(dòng)串口通信事件處理函數(shù),對(duì)接收的數(shù)據(jù)處理,判斷是否為包頭,再判斷是否為包尾,若是包尾,就對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),校驗(yàn)正確則將數(shù)據(jù)拆包,按照規(guī)則讀出數(shù)據(jù)信息.在程序的主線程中完成數(shù)據(jù)接收,在CSysView類中完成通信事件處理函數(shù)OnComm,對(duì)串口數(shù)據(jù)包的處理流程如圖3所示.
表2 數(shù)據(jù)段結(jié)構(gòu)Tab.2 Data segment structure
本系統(tǒng)的主要目的就是獲取海洋數(shù)據(jù),因此數(shù)據(jù)存儲(chǔ)也是很重要的內(nèi)容.需要存儲(chǔ)的數(shù)據(jù)包括兩個(gè)方面,一是觀測(cè)數(shù)據(jù),一是系統(tǒng)工作日志.考慮到以文件的形式保存數(shù)據(jù)更便于使用,設(shè)計(jì)了文件結(jié)合數(shù)據(jù)庫(kù)的存儲(chǔ)方案.各觀測(cè)數(shù)據(jù)以文件的形式單獨(dú)存儲(chǔ),按年、月設(shè)2級(jí)存儲(chǔ)目錄,以“設(shè)備名+日期”的命名文件,每個(gè)儀器每工作一次存儲(chǔ)2個(gè)文件,一個(gè)頭文件.cfg和一個(gè)數(shù)據(jù)文件.dat.本地?cái)?shù)據(jù)處理計(jì)算機(jī)共享采集到的數(shù)據(jù)并生成一個(gè)前兩個(gè)文件的壓縮包,以便于網(wǎng)絡(luò)傳輸時(shí)節(jié)約帶寬.在MFC編程中,CFile類提供了對(duì)文件的支持,應(yīng)用CFile類可以很好的實(shí)現(xiàn)觀測(cè)數(shù)據(jù)的存儲(chǔ).可利用CArchive重載的“<<”操作符將數(shù)據(jù)串行化到對(duì)應(yīng)的文件中,非常方便.
系統(tǒng)的工作日志也需要存儲(chǔ),如儀器開(kāi)關(guān)機(jī)時(shí)間、值班人員基本信息、系統(tǒng)的運(yùn)行模式、數(shù)據(jù)文件的索引、系統(tǒng)故障信息,這樣便于整個(gè)系統(tǒng)的維護(hù)、管理,表3舉例列出了幾個(gè)需要存儲(chǔ)的信息.
利用ADO訪問(wèn)ACCESS數(shù)據(jù)庫(kù)方式構(gòu)建數(shù)據(jù)中心[7].ADO實(shí)際上是一種基于COM的自動(dòng)化接口技術(shù),并以O(shè)LEDB為基礎(chǔ),在使用時(shí),首先需要導(dǎo)入ADO庫(kù),然后建立和維護(hù)與數(shù)據(jù)庫(kù)的連接,對(duì)數(shù)據(jù)庫(kù)的操作主要是應(yīng)用_Connection、_Command和_RecordsetPtr這三個(gè)智能指針完成,與此相關(guān)聯(lián)的3個(gè)對(duì)象如下:1)Connection對(duì)象:用來(lái)建立與維護(hù)與數(shù)據(jù)庫(kù)的連接.2)Command對(duì)象:用來(lái)在數(shù)據(jù)庫(kù)中執(zhí)行命令,如執(zhí)行SQL語(yǔ)句.3)RecordsetPtr對(duì)象:用來(lái)更新數(shù)據(jù)庫(kù),如插入新紀(jì)錄.
圖3 數(shù)據(jù)包處理流程圖Fig.3 Packet processing flow chart
表3 系統(tǒng)工作日志Tab.3 Directory of system log
由于數(shù)據(jù)接收存儲(chǔ)和顯示是在不同的視圖里,所以需要在不同視圖之間的進(jìn)行數(shù)據(jù)傳遞,本文使用全局變量達(dá)到這一目的,這樣不同視圖在訪問(wèn)同一變量時(shí)非常方便.UpdateA llViews函數(shù)會(huì)通知視圖刷新,在CView1、CView2、…各自的OnUpdate函數(shù)中完成數(shù)據(jù)的更新顯示.OnDraw函數(shù)一般是用來(lái)響應(yīng)畫圖的,但是考慮到數(shù)據(jù)曲線的繪制比較費(fèi)時(shí),可另開(kāi)一個(gè)線程用來(lái)繪制數(shù)據(jù)曲線.
以文件的形式存儲(chǔ)數(shù)據(jù),非常便于檢索.通過(guò)數(shù)據(jù)庫(kù)表中的文件索引字段查找到文件位置,利用CArchive重載的“>>”操作符直接將數(shù)據(jù)從對(duì)應(yīng)的文件中讀取出來(lái),通過(guò)查詢界面顯示.
采集的數(shù)據(jù)主要是海洋要素,或者說(shuō)是氣象數(shù)據(jù),這些數(shù)據(jù)變化連續(xù),在極短的時(shí)間內(nèi)不會(huì)驟變,即使丟掉個(gè)別數(shù)據(jù)也不會(huì)對(duì)結(jié)果造成重要影響,因此本文選擇使用最常用的Windows定時(shí)器來(lái)設(shè)置采集周期,在CSysView中添加WM_TIMER消息.為每個(gè)需要定時(shí)采集的設(shè)備分配一個(gè)定時(shí)器,在回調(diào)函數(shù)OnTimer中根據(jù)定時(shí)器ID分別發(fā)送采集命令.
網(wǎng)絡(luò)通信負(fù)責(zé)兩個(gè)工作,一是遠(yuǎn)程監(jiān)控單元向現(xiàn)場(chǎng)發(fā)送控制指令;二是遠(yuǎn)程監(jiān)控單元接收現(xiàn)場(chǎng)傳回的觀測(cè)數(shù)據(jù)文件.實(shí)現(xiàn)第一個(gè)內(nèi)容的方法是遠(yuǎn)程發(fā)送自定義簡(jiǎn)單協(xié)議,現(xiàn)場(chǎng)解析,根據(jù)協(xié)議具體內(nèi)容完成遠(yuǎn)程監(jiān)控.傳輸文件的思路是讀取文件到buffer中,發(fā)送buffer中的數(shù)據(jù)流,接收方將接收的數(shù)據(jù)流再重新存儲(chǔ)成文件.傳回的觀測(cè)數(shù)據(jù)相對(duì)控制指令數(shù)據(jù)量是比較大的,應(yīng)選用合適的通信網(wǎng)絡(luò).首選海底光纜,通過(guò)石油系統(tǒng)內(nèi)部網(wǎng)絡(luò),實(shí)現(xiàn)簡(jiǎn)單,傳輸速度快,安全可靠,而且成本比較低.也可選擇無(wú)線傳輸,借助INMARSAT海事衛(wèi)星通信,這種通信方式費(fèi)用相對(duì)比較高.我國(guó)自主研發(fā)的北斗系統(tǒng)也逐漸被應(yīng)用到實(shí)際工作中[8].考慮到對(duì)數(shù)據(jù)使用的時(shí)效性要求不高,所以人工攜帶移動(dòng)存儲(chǔ)設(shè)備將現(xiàn)場(chǎng)數(shù)據(jù)拷貝到遠(yuǎn)程數(shù)據(jù)中心可作為一種輔助的手段,這種方法尤其是針對(duì)CCD相機(jī)采集的圖像數(shù)據(jù).
網(wǎng)絡(luò)部分可以采用socket編程,CSocket類派生于CAsyncSocket,可配合CSocketFile和CArchive完成數(shù)據(jù)的發(fā)送和接收.遠(yuǎn)程計(jì)算機(jī)發(fā)出請(qǐng)求,待平臺(tái)應(yīng)答后數(shù)據(jù)開(kāi)始傳遞,系統(tǒng)能夠自動(dòng)從上一次數(shù)據(jù)傳遞的節(jié)點(diǎn)繼續(xù)傳遞,也可人為選擇所需的數(shù)據(jù)傳遞.如果傳遞成功則標(biāo)記此信息已傳輸.通信的可靠性由底層的TCP/IP協(xié)議進(jìn)行保障.
在軟件調(diào)試的過(guò)程中,以3m in為采樣周期,按照前面的自定義通信協(xié)議對(duì)4個(gè)溫度傳感器進(jìn)行定時(shí)采集實(shí)驗(yàn),收到的數(shù)據(jù)包內(nèi)容如下:##01,03,ST=26,CN=2011,MN=120100LDGDZ001,CP=&& Temp-Rtd=18.40,&&,EEC9,
通過(guò)表4可以看到,Windows定時(shí)器能夠完成采集工作,且數(shù)據(jù)接收正常,未出現(xiàn)丟幀現(xiàn)象,系統(tǒng)工作穩(wěn)定.
圖4 軟件運(yùn)行界面Fig.4 Software interface
本文給出了海洋要素?cái)?shù)據(jù)采集系統(tǒng)的設(shè)計(jì)方案,針對(duì)主要功能,詳細(xì)地說(shuō)明了實(shí)現(xiàn)方法,編寫了系統(tǒng)應(yīng)用軟件.設(shè)計(jì)的自定義串行通信協(xié)議將各觀測(cè)設(shè)備集中控制,基于文件和ADO技術(shù)的存儲(chǔ)方案符合系統(tǒng)實(shí)際需要.本系統(tǒng)依托海洋石油平臺(tái),保證了試驗(yàn)場(chǎng)環(huán)境的真實(shí)性,整體設(shè)計(jì)能夠滿足海洋遙感定標(biāo)檢驗(yàn)平臺(tái)對(duì)多設(shè)備集成的要求,能夠?yàn)槎?biāo)檢驗(yàn)提供可靠的科研數(shù)據(jù).
表4 數(shù)據(jù)文件列表Tab.4 Data list
[1]陳清蓮,唐軍武,王項(xiàng)南.海洋光學(xué)遙感器的輻射定標(biāo)與數(shù)據(jù)真實(shí)性檢驗(yàn)綜述 [J].海洋技術(shù),1998,17(3):13-26.
[2]NOAA integrated ocean observing system(IOOS)program[R].The united states national oceanic and atmospheric adm inistration.2007.
[3]靳熙芳,王碩.海洋環(huán)境數(shù)據(jù)智能化監(jiān)控的現(xiàn)狀與關(guān)鍵技術(shù) [J].海洋預(yù)報(bào),2009,26(2):95-102.
[4]楊躍忠,孫兆華,曹文熙,等.海洋光學(xué)浮標(biāo)的設(shè)計(jì)及應(yīng)用試驗(yàn) [J].光譜學(xué)與光譜分析,2009,29(2):565-569.
[5]姜靜波,李思忍,龔德俊,等.海洋要素多通道實(shí)時(shí)采集系統(tǒng)的設(shè)計(jì) [J].測(cè)控自動(dòng)化,2009,25(4):91-92.
[6]龔建偉,熊光明.Visual C++/Turbo C串口通信編程實(shí)踐 [M].北京:電子工業(yè)出版社,2004.10.
[7]李立剛,趙彩云,秦明慧,等.海洋觀測(cè)數(shù)據(jù)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [J].海洋預(yù)報(bào),2010,27(2):53-57.
[8]彭偉,徐俊臣,杜玉杰,等.基于北斗系統(tǒng)的海洋環(huán)境監(jiān)測(cè)數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì) [J].海洋技術(shù),2009,28(3):13-15.
河北工業(yè)大學(xué)學(xué)報(bào)2011年2期