波浪是海洋監(jiān)測(cè)中的重要監(jiān)測(cè)參數(shù)。SZF型波浪浮標(biāo)通過(guò)GSM通信將監(jiān)測(cè)的海浪參數(shù)上傳到岸站接收系統(tǒng),通過(guò)上位機(jī)軟件進(jìn)行數(shù)據(jù)的存儲(chǔ)、顯示、二次處理來(lái)進(jìn)行預(yù)定海域的海浪參數(shù)監(jiān)測(cè)。本文正是基于Microsoft Visual C++強(qiáng)大的可視化編程環(huán)境來(lái)開(kāi)發(fā)接收系統(tǒng),完成友好的人機(jī)交互操作界面。
1 SZF型波浪浮標(biāo)簡(jiǎn)介
SZF型波浪浮標(biāo)是國(guó)家863計(jì)劃海洋監(jiān)測(cè)技術(shù)成果標(biāo)準(zhǔn)化定型產(chǎn)品,自定型以來(lái)已在我國(guó)海洋臺(tái)站、海洋工程、海洋調(diào)查等領(lǐng)域應(yīng)用。
SZF型波浪浮標(biāo)采用重力加速度原理進(jìn)行波浪測(cè)量,當(dāng)波浪浮標(biāo)隨波面變化作升沉運(yùn)動(dòng)時(shí),安裝在浮標(biāo)內(nèi)的垂直加速度計(jì)輸出一個(gè)反映波面升沉運(yùn)動(dòng)加速度的變化信號(hào),對(duì)該信號(hào)做二次積分處理后,即可得到對(duì)應(yīng)于波面升沉運(yùn)動(dòng)高度變化的電壓信號(hào),將該信號(hào)做模/數(shù)轉(zhuǎn)換和計(jì)算處理后可以得到波高的各種特征值及其對(duì)應(yīng)的波周期。利用波高傾斜一體化傳感器、方位傳感器除可以測(cè)得波高的各種特征值和對(duì)應(yīng)的波周期外,還可以測(cè)得浮標(biāo)隨波面縱傾、橫傾和浮標(biāo)方位的三組參數(shù),通過(guò)計(jì)算處理,得到波浪的傳播方向。浮標(biāo)測(cè)得的波浪各特征值,由浮標(biāo)上的通信機(jī)實(shí)現(xiàn)測(cè)量數(shù)據(jù)的發(fā)送傳遞,并對(duì)測(cè)量數(shù)據(jù)進(jìn)行存貯。
原本的數(shù)據(jù)接收處理機(jī)外型為一臺(tái)式機(jī)箱,尺寸不大于400 mm×400 mm×160 mm,重量不大于15 kg。起著接收、處理浮標(biāo)發(fā)送數(shù)據(jù)的作用。其中安裝了數(shù)據(jù)處理和控制板、數(shù)據(jù)接收機(jī)、接收天線(xiàn)、微型打印機(jī)和數(shù)據(jù)存儲(chǔ)器。另外具備與計(jì)算機(jī)通信的RS 232接口,可將數(shù)據(jù)實(shí)時(shí)傳送給計(jì)算機(jī)。由于體積小重量輕攜帶方便,可以適合野外等場(chǎng)合作業(yè)。但在岸站接收數(shù)據(jù)的情況下,需要配備一臺(tái)PC機(jī)以進(jìn)行上傳數(shù)據(jù)給上一級(jí)數(shù)據(jù)中心。在此基礎(chǔ)上,使用PC機(jī)來(lái)進(jìn)行數(shù)據(jù)接收,就可以實(shí)現(xiàn)數(shù)據(jù)接收和上傳兩種功能,節(jié)省了不必要的開(kāi)支。
2 GSM通信接口設(shè)計(jì)
GSM是全球性標(biāo)準(zhǔn)的蜂窩無(wú)線(xiàn)電通信系統(tǒng),具有防盜拷能力佳、網(wǎng)絡(luò)容量大、手機(jī)號(hào)碼資源豐富、穩(wěn)定性強(qiáng)不易受干擾、信息靈敏等特點(diǎn)。適合作為近海海域通信系統(tǒng)媒介。
SZF型波浪浮標(biāo)通過(guò)GSM模塊來(lái)進(jìn)行數(shù)據(jù)通信。數(shù)據(jù)以短信形式發(fā)送至短信中心,短信中心再轉(zhuǎn)發(fā)給岸站接收模塊。由于網(wǎng)絡(luò)原因,網(wǎng)絡(luò)中心短信可能出現(xiàn)延發(fā)現(xiàn)象,接收模塊可能同時(shí)接收到多包數(shù)據(jù),數(shù)據(jù)包中數(shù)據(jù)信息包含浮標(biāo)處理器時(shí)鐘的發(fā)送時(shí)間,這樣接收包中解析數(shù)據(jù)不會(huì)造成數(shù)據(jù)的混亂。
本文采用的GSM模塊接口為五芯TTL電平,上位機(jī)接口為RS 232接口,在模塊和上位機(jī)之間使用電平轉(zhuǎn)換線(xiàn)連接以適應(yīng)上位機(jī)的接口電平。接口設(shè)計(jì)如圖1,圖2所示。電源使用10 V直流電源。
3 接收系統(tǒng)設(shè)計(jì)
SZF型波浪浮標(biāo)通過(guò)發(fā)射模塊發(fā)送數(shù)據(jù)包,上位機(jī)通過(guò)接收模塊接收數(shù)據(jù)包,再通過(guò)串口連接到PC機(jī)上,在PC機(jī)上進(jìn)行數(shù)據(jù)的二次處理。上位機(jī)接收軟件使用可視化開(kāi)發(fā)環(huán)境VC++進(jìn)行開(kāi)發(fā)。數(shù)據(jù)處理流程如圖3所示。
3.1 數(shù)據(jù)接收
由于是通過(guò)串口與PC機(jī)進(jìn)行通信,所以在程序設(shè)計(jì)時(shí)選用了Windows下的MSComm控件來(lái)進(jìn)行串口數(shù)據(jù)接收處理。MSComm控件通過(guò)串口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能,MSComm控件在串口編程時(shí)非常方便,本文使用其事件驅(qū)動(dòng)方法,接收串口數(shù)據(jù)。為事件添加驅(qū)動(dòng)函數(shù)程序如下:
ON_EVENT(CSZFRevSysDlg,IDC_MSCOMM1,1,CSZFRevSysDlg::OnCommMscomml,VTS_NONE)
對(duì)串口進(jìn)行初始化設(shè)置程序如下:
m_mscom.put_RThreshold(1);
m_mscom.put_InputMode(1);
其中特別注意的是:第一條設(shè)置表示串口接收到一個(gè)字符就觸發(fā)處理函數(shù),第二條設(shè)置表示設(shè)置輸入方式為二進(jìn)制,這樣才能對(duì)COle Sa leArray變量進(jìn)行操作,否則COleSafeArray默認(rèn)為test格式,不方便后面對(duì)數(shù)據(jù)進(jìn)行解析。
由于本系統(tǒng)Windows開(kāi)發(fā)環(huán)境為Vista,所以為了保證在其他Windows環(huán)境下也可以運(yùn)行程序,需要為MSComm添加注冊(cè),注冊(cè)過(guò)程如圖4所示。
3.2 實(shí)時(shí)顯示
系統(tǒng)根據(jù)浮標(biāo)不同工作方式(定時(shí)測(cè)量方式,連續(xù)測(cè)量方式和檢測(cè)工作方式),以不同方式啟動(dòng)/關(guān)閉串口。
浮標(biāo)一般工作在定時(shí)測(cè)量狀態(tài),串口是接收整點(diǎn)前6 min打開(kāi),準(zhǔn)備接收數(shù)據(jù),接收到數(shù)據(jù)包后,根據(jù)通信協(xié)議對(duì)數(shù)據(jù)包進(jìn)行解析,再分別顯示在界面相應(yīng)位置,如圖5所示,可供監(jiān)測(cè)人員實(shí)時(shí)的檢測(cè)數(shù)據(jù)。接收整點(diǎn)后10 min關(guān)閉串口,進(jìn)入休眠狀態(tài),如果關(guān)閉串口時(shí)有數(shù)據(jù)接收中,延時(shí)10 s再關(guān)閉串口。
此外,顯示界面還提供了加密門(mén)限值和安全距離設(shè)置操作。加密門(mén)限值以“十分之一大波波高”特征值作為比較參數(shù),當(dāng)標(biāo)準(zhǔn)測(cè)量測(cè)得的十分之一大波波高大于加密門(mén)限值時(shí),自動(dòng)轉(zhuǎn)為加密狀態(tài);安全距離設(shè)置可以選擇5種報(bào)警距離,一旦浮標(biāo)相鄰2次測(cè)量時(shí)間內(nèi),浮標(biāo)移動(dòng)距離超過(guò)設(shè)置距離,超位報(bào)警燈會(huì)顯示紅色以示報(bào)警。
3.3 數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)接收后存儲(chǔ)選擇Windows的access數(shù)據(jù)庫(kù),access數(shù)據(jù)庫(kù)是一種桌面數(shù)據(jù)庫(kù),適合中小型數(shù)據(jù)量的處理,在處理中小量數(shù)據(jù)時(shí)效率很高,而且簡(jiǎn)潔方便。考慮到SZF型波浪浮標(biāo)作為一種小型海洋監(jiān)測(cè)儀器,數(shù)據(jù)量比較小,所以選用access數(shù)據(jù)庫(kù)能更好更快的存儲(chǔ)/查詢(xún)數(shù)據(jù)。
本文采用ADO方式方式訪(fǎng)問(wèn)access數(shù)據(jù)庫(kù),ADO使用存取數(shù)據(jù)源的COM組件,它提供了編程語(yǔ)言和統(tǒng)一數(shù)據(jù)訪(fǎng)問(wèn)方式OLEDB的一個(gè)中間層。允許開(kāi)發(fā)人員直接編寫(xiě)訪(fǎng)問(wèn)數(shù)據(jù)的代碼,降低了開(kāi)發(fā)難度。
為了使用COM組件,必須在CWinAPP::InitInstance()函數(shù)中初始化COM庫(kù):
CWinApp::InitInstance()
{
…
AfxOleInit();
…
}
然后需要引入ADO類(lèi)型庫(kù),需要在stdafx.h文件中加入:
# import”c:\program files\common files\system\ado\msado15.dll”
no_namespace rename(“EOF”,“adoEOF”)
這樣就可以連接數(shù)據(jù)源了,再對(duì)access數(shù)據(jù)庫(kù)使用SQL語(yǔ)言操作來(lái)進(jìn)行存儲(chǔ)數(shù)據(jù)。
3.4 數(shù)據(jù)查詢(xún)
本系統(tǒng)提供月查詢(xún),在實(shí)時(shí)顯示界面點(diǎn)擊“數(shù)據(jù)查詢(xún)”,會(huì)出現(xiàn)數(shù)據(jù)查詢(xún)對(duì)話(huà)框,可選擇一個(gè)月份進(jìn)行數(shù)據(jù)查詢(xún),包含所有的檢測(cè)數(shù)據(jù),界面如圖6所示。
4 結(jié)語(yǔ)
本系統(tǒng)經(jīng)過(guò)實(shí)踐測(cè)試證明,MSComm控件能良好的接收模塊發(fā)送的串行口數(shù)據(jù),通信信號(hào)良好,存儲(chǔ)數(shù)據(jù)完整。使用VC++編寫(xiě)的上位機(jī)接收界面友好,方便監(jiān)測(cè)人員實(shí)時(shí)觀測(cè)數(shù)據(jù)和查詢(xún)歷史數(shù)據(jù)。通過(guò)一段時(shí)間的運(yùn)行使用,很好的達(dá)到浮標(biāo)岸站接收系統(tǒng)要求,并預(yù)留了上傳通信接口,以后可以方便的擴(kuò)展數(shù)據(jù)向高一級(jí)數(shù)據(jù)中心傳輸?shù)墓δ,提高了系統(tǒng)的使用壽命。
作者:唐原廣 胡斌 來(lái)源:現(xiàn)代電子技術(shù)