高振斌,毛 健
(河北工業大學 信息工程學院,天津 300401)
隨著定量遙感技術的發展,人們對遙感數據的準確度提出了更高的要求,除了不斷改進和研制新型遙感器外,還需要對遙感器的測量結果進行精確定標,也就是用現場觀測儀器采集的數據校準遙感器或評價遙感數據[1].作為實現海洋監測的有效手段之一的海洋遙感技術同樣面臨定標檢驗的問題,充足的校驗數據對海洋監測的發展具有重大意義.目前,國際海洋環境監測正在向著高集成度、綜合性、持續性、多平臺、立體化、網絡化和智能化方向發展,如NOAA綜合海洋觀測系統(IOOS)[2].而我國在海洋監測信息數據處理和分析方面相對比較落后,發展比較緩慢,其中一個制約因素就是缺乏區域和局地尺度的連續監測[3],缺少現場海洋數據.現有的一些數據采集系統[4]或是觀測設備種類單一,不能提供多樣化的數據,或者針對性不強[5],不能滿足海洋遙感定標檢驗這一特殊應用.基于這種情況,本文設計了一種多設備的數據采集系統,將多種觀測儀器集成到同一平臺,統一管理,實現長時間的連續監測,完成多種海洋要素的實時采集,可以為海洋遙感定標檢驗提供全面可靠的實驗數據.

圖1 系統組成框圖Fig.1 System block diagram
本系統安裝于海洋石油平臺上,為了便于維護,整個系統采用模塊化設計,共分為現場采集單元、現場控制及數據處理單元、遠程監控及通信單元、電源管理單元4個部分,如圖1所示.
現場采集單元主要包括科研用觀測儀器,如微波散射計、微波輻射計、水上光譜儀、太陽光度計、CCD相機等,除此還有GPS、自動氣象站等輔助設備.其能夠按照控制指令轉換工作狀態并及時向現場監控單元反饋信息,協同完成現場海洋數據的采集任務.
這部分主要由兩臺計算機組成,其中一臺負責控制,通過接口電路,完成本地單元和現場采集單元之間的通信,根據預先設置的觀測方案或按照遠程監控單元的指令對系統進行觀測控制,接收采集的數據并存儲、顯示;另一臺負責數據的進一步處理,將數據備份和負責向遠端傳輸采集的數據.
這個單元負責數據的管理及觀測指令的控制.遠程監控計算機通過通信網絡對平臺觀測活動進行監控,接收平臺傳回的數據.用戶根據權限對數據中心進行操作,獲得所需數據信息.
主要負責對整個系統的電源供給.采用市電為主,UPS電源為輔的方式.工作時采用市電供電,遇到斷電情況自動切換到UPS電源供電模式,以維持系統的短時間運行,完成數據的存儲、系統的正常退出等工作.
本系統軟件基于Windows操作系統編程實現,采用VisualC++語言使用MFC進行設計,完成人機交互和數據的傳輸、存儲、查詢等功能.
由于本系統涉及多個觀測儀器,因此選擇單文檔多視圖結構,利用多視圖把系統中與各個儀器對應的功能模塊表現出來.
2.1.1 主窗口切分
將主窗口設計成3部分,分別對應視圖SysView、ViewN(N=1、2、…)和StateView.通過在CMainFrame類中增加虛函數OnCreateClient,利用其中CMySplitterWnd類型的兩個對象m_wndSplitter和m_wndSplitter2實現主窗口切分,主要代碼如下:

2.1.2 多視圖之間的切換
人機交互操作主要是在 CViewN(N=1、2、…)中完成,當前顯示的總是用戶正在操作的某一個界面.在SysView中添加一個樹形控件,通過鼠標點擊控件的不同節點來發送對應的消息,完成視圖之間的切換.切換過程如圖2所示.
相關代碼如下:




圖2 視圖切換過程Fig.2 View sw itching process
鑒于觀測設備都帶有RS232/485接口,系統采用串行通信完成本地控制計算機與現場觀測儀器之間的數據傳輸.在Windows環境下實現串行通信常見有3種編程方法:應用MSComm控件、利用API函數編程和使用CSerialPort類.本系統選用第1種方法,以RS485總線將各觀測儀器連成網絡,通過統一通信協議進行控制.CCD相機接口特殊,本文不作討論.
2.2.1 通信協議
本系統采用主從式網絡結構,通信協議中數據包的構成如表1所示.采用ASCII編碼方式,通過包頭和包尾表示數據的起止;為每個設備分配一個唯一的通信地址,通過不同的設備標識尋址通信;命令參數是功能碼;數據段表示數據的具體內容,其結構見表2.

表1 數據包結構Tab.1 Data packet structure
根據實際定義功能碼,功能碼告之被訪問的從設備要執行何種功能,數據段包含了要執行功能的任何附加信息.當從設備回應時,它使用功能碼來指示是正常回應還是異議回應.對正常回應,從設備僅回應相應的功能代碼.對異議回應,從設備對功能碼最高要位置1.例如:發往從設備的數據包要求讀寄存器數據,將產生如下功能代碼:00000011(十六進制03H).對正常回應,從設備僅回應同樣的功能代碼03.對異議回應,它返回:10000011(十六進制83H).這樣,同CRC校驗一起保證通信的可靠性.
2.2.2 對數據包的處理
對數據包的處理一般過程是邊接收邊處理[6],對接收的每一個字符進行判斷,在程序中每當串口緩沖區有一個或一個以上字符時就觸發串口通信事件,該事件驅動串口通信事件處理函數,對接收的數據處理,判斷是否為包頭,再判斷是否為包尾,若是包尾,就對數據進行校驗,校驗正確則將數據拆包,按照規則讀出數據信息.在程序的主線程中完成數據接收,在CSysView類中完成通信事件處理函數OnComm,對串口數據包的處理流程如圖3所示.

表2 數據段結構Tab.2 Data segment structure
本系統的主要目的就是獲取海洋數據,因此數據存儲也是很重要的內容.需要存儲的數據包括兩個方面,一是觀測數據,一是系統工作日志.考慮到以文件的形式保存數據更便于使用,設計了文件結合數據庫的存儲方案.各觀測數據以文件的形式單獨存儲,按年、月設2級存儲目錄,以“設備名+日期”的命名文件,每個儀器每工作一次存儲2個文件,一個頭文件.cfg和一個數據文件.dat.本地數據處理計算機共享采集到的數據并生成一個前兩個文件的壓縮包,以便于網絡傳輸時節約帶寬.在MFC編程中,CFile類提供了對文件的支持,應用CFile類可以很好的實現觀測數據的存儲.可利用CArchive重載的“<<”操作符將數據串行化到對應的文件中,非常方便.
系統的工作日志也需要存儲,如儀器開關機時間、值班人員基本信息、系統的運行模式、數據文件的索引、系統故障信息,這樣便于整個系統的維護、管理,表3舉例列出了幾個需要存儲的信息.
利用ADO訪問ACCESS數據庫方式構建數據中心[7].ADO實際上是一種基于COM的自動化接口技術,并以OLEDB為基礎,在使用時,首先需要導入ADO庫,然后建立和維護與數據庫的連接,對數據庫的操作主要是應用_Connection、_Command和_RecordsetPtr這三個智能指針完成,與此相關聯的3個對象如下:1)Connection對象:用來建立與維護與數據庫的連接.2)Command對象:用來在數據庫中執行命令,如執行SQL語句.3)RecordsetPtr對象:用來更新數據庫,如插入新紀錄.

圖3 數據包處理流程圖Fig.3 Packet processing flow chart

表3 系統工作日志Tab.3 Directory of system log
由于數據接收存儲和顯示是在不同的視圖里,所以需要在不同視圖之間的進行數據傳遞,本文使用全局變量達到這一目的,這樣不同視圖在訪問同一變量時非常方便.UpdateA llViews函數會通知視圖刷新,在CView1、CView2、…各自的OnUpdate函數中完成數據的更新顯示.OnDraw函數一般是用來響應畫圖的,但是考慮到數據曲線的繪制比較費時,可另開一個線程用來繪制數據曲線.
以文件的形式存儲數據,非常便于檢索.通過數據庫表中的文件索引字段查找到文件位置,利用CArchive重載的“>>”操作符直接將數據從對應的文件中讀取出來,通過查詢界面顯示.
采集的數據主要是海洋要素,或者說是氣象數據,這些數據變化連續,在極短的時間內不會驟變,即使丟掉個別數據也不會對結果造成重要影響,因此本文選擇使用最常用的Windows定時器來設置采集周期,在CSysView中添加WM_TIMER消息.為每個需要定時采集的設備分配一個定時器,在回調函數OnTimer中根據定時器ID分別發送采集命令.
網絡通信負責兩個工作,一是遠程監控單元向現場發送控制指令;二是遠程監控單元接收現場傳回的觀測數據文件.實現第一個內容的方法是遠程發送自定義簡單協議,現場解析,根據協議具體內容完成遠程監控.傳輸文件的思路是讀取文件到buffer中,發送buffer中的數據流,接收方將接收的數據流再重新存儲成文件.傳回的觀測數據相對控制指令數據量是比較大的,應選用合適的通信網絡.首選海底光纜,通過石油系統內部網絡,實現簡單,傳輸速度快,安全可靠,而且成本比較低.也可選擇無線傳輸,借助INMARSAT海事衛星通信,這種通信方式費用相對比較高.我國自主研發的北斗系統也逐漸被應用到實際工作中[8].考慮到對數據使用的時效性要求不高,所以人工攜帶移動存儲設備將現場數據拷貝到遠程數據中心可作為一種輔助的手段,這種方法尤其是針對CCD相機采集的圖像數據.
網絡部分可以采用socket編程,CSocket類派生于CAsyncSocket,可配合CSocketFile和CArchive完成數據的發送和接收.遠程計算機發出請求,待平臺應答后數據開始傳遞,系統能夠自動從上一次數據傳遞的節點繼續傳遞,也可人為選擇所需的數據傳遞.如果傳遞成功則標記此信息已傳輸.通信的可靠性由底層的TCP/IP協議進行保障.
在軟件調試的過程中,以3m in為采樣周期,按照前面的自定義通信協議對4個溫度傳感器進行定時采集實驗,收到的數據包內容如下:##01,03,ST=26,CN=2011,MN=120100LDGDZ001,CP=&& Temp-Rtd=18.40,&&,EEC9,
通過表4可以看到,Windows定時器能夠完成采集工作,且數據接收正常,未出現丟幀現象,系統工作穩定.

圖4 軟件運行界面Fig.4 Software interface
本文給出了海洋要素數據采集系統的設計方案,針對主要功能,詳細地說明了實現方法,編寫了系統應用軟件.設計的自定義串行通信協議將各觀測設備集中控制,基于文件和ADO技術的存儲方案符合系統實際需要.本系統依托海洋石油平臺,保證了試驗場環境的真實性,整體設計能夠滿足海洋遙感定標檢驗平臺對多設備集成的要求,能夠為定標檢驗提供可靠的科研數據.

表4 數據文件列表Tab.4 Data list
[1]陳清蓮,唐軍武,王項南.海洋光學遙感器的輻射定標與數據真實性檢驗綜述 [J].海洋技術,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]靳熙芳,王碩.海洋環境數據智能化監控的現狀與關鍵技術 [J].海洋預報,2009,26(2):95-102.
[4]楊躍忠,孫兆華,曹文熙,等.海洋光學浮標的設計及應用試驗 [J].光譜學與光譜分析,2009,29(2):565-569.
[5]姜靜波,李思忍,龔德俊,等.海洋要素多通道實時采集系統的設計 [J].測控自動化,2009,25(4):91-92.
[6]龔建偉,熊光明.Visual C++/Turbo C串口通信編程實踐 [M].北京:電子工業出版社,2004.10.
[7]李立剛,趙彩云,秦明慧,等.海洋觀測數據管理系統的設計與實現 [J].海洋預報,2010,27(2):53-57.
[8]彭偉,徐俊臣,杜玉杰,等.基于北斗系統的海洋環境監測數據傳輸系統設計 [J].海洋技術,2009,28(3):13-15.