程巖,馬然,王洪亮,曹煊,曹璐
(山東省科學(xué)院海洋儀器儀表研究所,山東省海洋環(huán)境監(jiān)測技術(shù)重點實驗室,山東 青島 266001)
*海洋科技與裝備專欄*
基于VC++的海水營養(yǎng)鹽測試軟件系統(tǒng)設(shè)計
程巖,馬然,王洪亮,曹煊,曹璐
(山東省科學(xué)院海洋儀器儀表研究所,山東省海洋環(huán)境監(jiān)測技術(shù)重點實驗室,山東 青島 266001)
基于VC++平臺開發(fā)了海水營養(yǎng)鹽測試軟件系統(tǒng),建立了相應(yīng)的系統(tǒng)軟件數(shù)據(jù)結(jié)構(gòu),能夠在軟件的運行過程中,根據(jù)每種營養(yǎng)鹽的具體測試需要重新配置測試過程,系統(tǒng)可以動態(tài)地執(zhí)行營養(yǎng)鹽的測試流程。實驗結(jié)果表明,該設(shè)計提高了系統(tǒng)的適應(yīng)性,使測試更加靈活。
營養(yǎng)鹽;數(shù)據(jù)結(jié)構(gòu);VC++
目前,海水中營養(yǎng)鹽測定主要是根據(jù)海洋監(jiān)測規(guī)范[1],采用基于調(diào)查船的現(xiàn)場采樣-實驗室測定法。該方法存在實時性差,樣品易受污染,浪費人力、物力,耗費時間等缺點。同時,現(xiàn)場采樣-實驗室測定法不能提供連續(xù)數(shù)據(jù),且不易監(jiān)測到降雨、赤潮或綠潮爆發(fā)等水文或生態(tài)事件造成的營養(yǎng)鹽濃度急劇變化的情況。
流動注射分析(Flow injection analysis,F(xiàn)IA)是由丹麥技術(shù)大學(xué)的J.Ruzicka等于1975年提出的,即在熱力學(xué)非平衡條件下,在液流中重現(xiàn)地處理試樣或試劑區(qū)帶的定量流動分析技術(shù)[2-3]。本研究室根據(jù)該原理研發(fā)了一種YYY-001型海水營養(yǎng)鹽測試系統(tǒng),該系統(tǒng)由硬件和軟件系統(tǒng)組成的,硬件部分負責(zé)執(zhí)行軟件的控制操作,采集數(shù)據(jù)并傳輸?shù)杰浖到y(tǒng)中[4]。硬件系統(tǒng)主要包括在線過濾裝置、自動進樣與反應(yīng)裝置和在線排污裝置,光源、微型光纖光譜儀和電子電路板以及海水樣品池、純水池、清洗液池、顯色試劑池和樣品混合池。電路系統(tǒng)三極管放大電路的輸入端接收到單片機的輸出端口的信號,推動小型繼電器,然后用該繼電器的觸點來控制電磁閥。通過電磁閥的開關(guān),以及泵的大小控制樣品、顯色劑和純水等進入樣品池以及排污裝置。單片機通過串口連接計算機,進行程序控制并提取數(shù)據(jù)[5]。
針對目前海水中營養(yǎng)鹽的測量不能根據(jù)測試環(huán)境的不同而改變營養(yǎng)鹽測試的流程的問題,YYY-001型海水營養(yǎng)鹽測試系統(tǒng)的軟件系統(tǒng)基于VC++平臺,建立了相應(yīng)的系統(tǒng)軟件數(shù)據(jù)結(jié)構(gòu),能夠在軟件的運行過程中,根據(jù)每種營養(yǎng)鹽的具體測試需要,重新配置測試過程,系統(tǒng)可以動態(tài)地執(zhí)行營養(yǎng)鹽的測試流程。能夠根據(jù)不同的測試環(huán)境提供連續(xù)的測量數(shù)據(jù),可以降低對環(huán)境的依賴,為營養(yǎng)鹽測試系統(tǒng)的軟件設(shè)計提供了一種新的開發(fā)方法。
海水營養(yǎng)鹽測試系統(tǒng)的主要工作就是配置每種營養(yǎng)鹽的測試流程,并按照該設(shè)定的流程控制各個子系統(tǒng)來完成對海水中營養(yǎng)鹽數(shù)據(jù)的采集分析[6]。配置營養(yǎng)鹽流程模塊,用于配置整個測試過程所要進行測試的營養(yǎng)鹽的種類以及每種營養(yǎng)鹽測試流程的執(zhí)行過程。配置的執(zhí)行過程包括控制電磁閥的開關(guān),設(shè)置數(shù)據(jù)的起始和結(jié)束時刻;通過控制電磁閥的開關(guān)次序、間隔和持續(xù)時間,控制每種營養(yǎng)鹽測試的流程。基于以上功能,且滿足系統(tǒng)穩(wěn)定要求的設(shè)計,其基礎(chǔ)是能夠兼容所有營養(yǎng)鹽控制信息的數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)貫穿整個系統(tǒng),被所有的子系統(tǒng)共用,是各個模塊的統(tǒng)一數(shù)據(jù)接口,可以通過配置模塊更改相應(yīng)的配置信息,并按照已經(jīng)設(shè)定的內(nèi)容進行控制和采集操作[7]。
配置模塊根據(jù)系統(tǒng)的需要進行增刪、改查以及更新操作等配置該數(shù)據(jù)結(jié)構(gòu)的信息。營養(yǎng)鹽的測試就是查找該數(shù)據(jù)結(jié)構(gòu),并執(zhí)行每種營養(yǎng)鹽的測試過程,該測試過程在軟件的運行過程中可以由用戶根據(jù)實際情況的需要進行更改。
營養(yǎng)鹽測試系統(tǒng)通過計算機串口連接測量儀器,達到控制并提取數(shù)據(jù)的目的。通訊的命令依據(jù)協(xié)議,每次包含測試營養(yǎng)鹽類型、控制電磁閥狀態(tài)等信息[8]。該測試系統(tǒng)適用于所有依照本協(xié)議的測試儀器。
該數(shù)據(jù)結(jié)構(gòu)的字段應(yīng)包括的信息為待測試的營養(yǎng)鹽的種類、營養(yǎng)鹽的類別、目前的測試是否需要執(zhí)行以及營養(yǎng)鹽測試所需要的流程。測試所經(jīng)歷的流程包括電磁閥的開關(guān)控制、泵的開關(guān)控制、泵轉(zhuǎn)速的大小和轉(zhuǎn)的方向控制、各種狀態(tài)燈的開關(guān)控制,以及這些操作的先后次序和彼此之間的間隔時間,同時還有采集數(shù)據(jù)時間段的起始點和結(jié)束點。
本系統(tǒng)采用VC++開發(fā),開發(fā)平臺是Windows XP操作系統(tǒng)。VC開發(fā)工具是一種面向?qū)ο蟮木幊滔到y(tǒng),首先根據(jù)客戶需求抽象出業(yè)務(wù)對象;然后對需求進行合理分層,構(gòu)建相對獨立的業(yè)務(wù)模塊;之后設(shè)計業(yè)務(wù)邏輯,利用多態(tài)、繼承、封裝和抽象的編程思想,實現(xiàn)業(yè)務(wù)需求;最后通過整合各模塊,達到高內(nèi)聚、低耦合的效果,從而滿足客戶要求。
2.1 數(shù)據(jù)結(jié)構(gòu)
根據(jù)功能需求,該業(yè)務(wù)主要是記錄每種營養(yǎng)鹽的信息,完成營養(yǎng)鹽測試系統(tǒng)流程中的步驟以及每步所進行的操作。所以該數(shù)據(jù)結(jié)構(gòu)定義為三個,分別用三個類來表述,即流程類、事件類和條件類,見圖1。其中流程類記錄營養(yǎng)鹽的ID號、營養(yǎng)鹽的名字、是否執(zhí)行、以及在整個系統(tǒng)中序號。事件類記錄事件的ID號、事件的類型、觸發(fā)事件需要等待的時間、事件的描述信息以及是否進行測量、測量的個數(shù)和采集數(shù)據(jù)的周期。條件類記錄條件的ID號、控制量位置和控制量的開關(guān)狀態(tài)。一個流程包含一個或若干個事件且這些事件有先后順序。一個事件由一個或若干個條件構(gòu)成,同時控制該事件所需要做的動作[9]。
2.1.1 系統(tǒng)的執(zhí)行過程
系統(tǒng)用一個動態(tài)數(shù)組保存所有測量的營養(yǎng)鹽的測試流程,每個流程是流程類的一個對象,該流程類有三個元素屬性分別為流程ID號、名字和是否執(zhí)行。系統(tǒng)自動測試每種營養(yǎng)鹽的過程,遍歷該動態(tài)數(shù)組的所有元素,如果該元素的是否執(zhí)行屬性為真,對這一流程進行測試,記錄該流程的ID號;執(zhí)行該流程ID對應(yīng)的流程操作,如果該流程執(zhí)行完,系統(tǒng)遍歷該動態(tài)數(shù)組,找到首個比該流程ID號大的流程。

圖1 類的說明和類的關(guān)系圖Fig.1 Class statement andits relation diagram
2.1.2 流程的執(zhí)行過程
找到對應(yīng)該流程的動態(tài)數(shù)組,用該動態(tài)數(shù)組保存所有測量的營養(yǎng)鹽的事件,每個事件是事件類的一個對象,該事件類由事件的ID號、事件的類型、觸發(fā)事件需要等待的時間、事件的內(nèi)容,以及是否進行測量、測量的個數(shù)和采集數(shù)據(jù)的周期組成。這些元素都是根據(jù)系統(tǒng)的需求來定義的,每個流程它們對應(yīng)的過程是不一樣的,根據(jù)它們不同點的特征來定義元素的屬性,屬性的個數(shù)也根據(jù)系統(tǒng)的需求來定義。遍歷該動態(tài)數(shù)組,找到第一個事件,記錄事件的ID號,開啟定時器定時事件需要等待的時間,給儀器發(fā)送事件需要對應(yīng)的命令功能。命令的功能根據(jù)事件的內(nèi)容來定,該內(nèi)容是一個動態(tài)數(shù)組,由一個或多個條件組成。當(dāng)儀器返回該命令的操作后,遍歷事件的動態(tài)數(shù)組,找到下個比該事件ID號大的事件[10]。
2.1.3 事件的執(zhí)行過程
找到事件對應(yīng)的動態(tài)數(shù)組,該動態(tài)數(shù)組的元素是條件類所對應(yīng)的對象,每個條件類的屬性有控制量的位置和對應(yīng)的狀態(tài)。遍歷該動態(tài)數(shù)組,找到所有的元素,并設(shè)置好該事件所有進行的操作,然后執(zhí)行事件。
2.2 數(shù)據(jù)結(jié)構(gòu)的配置

圖2 流程配置界面Fig.2 Process configuration interface
數(shù)據(jù)結(jié)構(gòu)的配置界面如圖2所示,通過該界面實現(xiàn)對流程、事件和條件三級數(shù)據(jù)的增刪改查。
(1)通過增加和刪除條件更新臨時條件類的對象的動態(tài)數(shù)組。
(2)通過增加事件功能將臨時條件類的對象的動態(tài)數(shù)組,組織成事件類對象,添加到臨時事件類對象的臨時數(shù)組中。(3)通過復(fù)制、剪切、刪除和保存事件,更改相應(yīng)的臨時事件對象的動態(tài)數(shù)組,并顯示在事件列表框中。(4)通過編輯事件把當(dāng)前選中的事件,復(fù)制到臨時條件對象的動態(tài)數(shù)組中,并顯示在條件列表框中。對條件的相關(guān)操作后,通過保存事件,更新到臨時事件類的對象的動態(tài)數(shù)組中。
(5)通過復(fù)制、剪切、刪除和保存流程,更改所有流程類的對象的動態(tài)數(shù)組,并更新流程下拉列表框中的內(nèi)容。
(6)通過編輯流程,把當(dāng)前選中的流程復(fù)制到臨時事件對象的動態(tài)數(shù)組中,并顯示在事件列表框中。對事件的相關(guān)操作后,通過保存流程,更新到所有流程類的對象的動態(tài)數(shù)組中。
(7)通過增加流程和保存流程功能將臨時事件類的對象的動態(tài)數(shù)組,組織成流程類對象,添加到臨時流程類的對象的臨時數(shù)組中。
2.3 營養(yǎng)鹽系統(tǒng)的自動檢測

圖3 自動檢測流程圖Fig.3 Flowchart of automatic detection
系統(tǒng)根據(jù)用戶設(shè)定好的數(shù)據(jù)結(jié)構(gòu),自動檢測所有的待檢測的營養(yǎng)鹽,根據(jù)每種營養(yǎng)鹽設(shè)定的流程,通過串口控制儀器進行操作,見圖3,具體操作如下。
(1)遍歷當(dāng)前配置動態(tài)數(shù)組的每一個元素,如果該流程的執(zhí)行為真,遍歷該流程所有的事件,直到當(dāng)前配置動態(tài)數(shù)組的最后一個元素為止。
(2)遍歷流程中某一個事件的所有條件,直到流程中最后一個事件為止。
(3)解析條件所需要進行的操作,并執(zhí)行該操作。
(4)如果是時間間隔,啟動定時器控制相應(yīng)等待的時間;如果是電磁閥和其他輔助電子元器件的控制,通過通訊端口發(fā)送相應(yīng)的命令;如果是采集數(shù)據(jù),通過通訊端口發(fā)送命令,并接收相應(yīng)的數(shù)據(jù)。
(5)待所有流程都檢測完畢,計算所有營養(yǎng)鹽的濃度。
2014年上半年,應(yīng)用該系統(tǒng)測試海水中不同種類營養(yǎng)鹽的含量,連續(xù)測試3個月,在實驗室和岸邊試驗站分別實現(xiàn)了對連續(xù)數(shù)據(jù)的采集。根據(jù)實驗現(xiàn)場環(huán)境的不同,通過設(shè)置采集數(shù)據(jù)的起始和結(jié)束時間點、泵速控制進樣的速度以及在整個流程不同時間節(jié)點、不同電磁閥的狀態(tài)來改變指示劑添加的量以及對樣品池沖洗、進樣的時間,確定是添加的哪種樣品。如在實驗室的環(huán)境下,泵速設(shè)置10~20 min-1,在岸邊試驗站,泵速設(shè)置在70~80 min-1之間等。在測試的過程中,分別只添加1~10種營養(yǎng)鹽進行實驗,重新設(shè)置了以上的配置信息,達到了根據(jù)系統(tǒng)的要求來動態(tài)改變測試的流程的目的,方便了系統(tǒng)的調(diào)試。經(jīng)過實驗證明,系統(tǒng)可以自動檢測最多9種海水中的營養(yǎng)鹽,每種營養(yǎng)鹽可以根據(jù)不同的原理,設(shè)置不同的流程進行儀器的調(diào)試,如泵速、取樣時間段等。可以通過改變軟件系統(tǒng)中的配置來測試不同環(huán)境海水中的營養(yǎng)鹽含量,每種測試方法可以根據(jù)實際情況任意更改。在連續(xù)測試的3個月內(nèi),反復(fù)地設(shè)置每種營養(yǎng)鹽的測量參數(shù),均未造成系統(tǒng)的錯誤,證明該數(shù)據(jù)結(jié)構(gòu)滿足營養(yǎng)鹽的參數(shù)設(shè)置需求,并能夠輔助系統(tǒng)完成營養(yǎng)鹽的測試。
實驗結(jié)果表明,應(yīng)用本文設(shè)計的數(shù)據(jù)結(jié)構(gòu)的海水中營養(yǎng)鹽測定系統(tǒng)可在不同環(huán)境下動態(tài)地更改營養(yǎng)鹽的測試流程,通過串口數(shù)據(jù)線連續(xù)地采集數(shù)據(jù)。系統(tǒng)能夠靈活、安全可靠地工作,滿足了設(shè)計要求。
本文根據(jù)海水營養(yǎng)鹽測試系統(tǒng)的需求建立了一種數(shù)據(jù)結(jié)構(gòu),并根據(jù)該數(shù)據(jù)結(jié)構(gòu)實現(xiàn)了系統(tǒng)的功能[11]。該數(shù)據(jù)結(jié)構(gòu)的優(yōu)點是根據(jù)系統(tǒng)的需求建立了不同層次的類,類彼此之間的關(guān)系用動態(tài)數(shù)組進行關(guān)聯(lián),使用戶可以在系統(tǒng)運行的過程中,動態(tài)改變營養(yǎng)鹽測試的執(zhí)行過程,解決了營養(yǎng)鹽測試環(huán)境的不同或加入輔助試劑的不同,測試過程不一樣的問題,從而提高了系統(tǒng)的靈活性,是解決系統(tǒng)運行過程中更改某些功能的一種方法。該方法能夠在不改變儀器水路或電路的前提下,通過靈活地更改營養(yǎng)鹽的配置,達到檢測的目的。經(jīng)過反復(fù)地對每種營養(yǎng)鹽的流程的更改,以及每個流程中事件或條件的更改,驗證了該數(shù)據(jù)結(jié)構(gòu)是合理的,系統(tǒng)具有穩(wěn)定性。該方案存在的問題在于程序僅作為普通的應(yīng)用程序運行在計算機操作系統(tǒng)上,導(dǎo)致為完成整個測試,需要另外提供一臺計算機。下一步可以考慮采用嵌入式的開發(fā)環(huán)境,以節(jié)省測試的硬件成本。
[1]GB 17378-2007,海洋監(jiān)測規(guī)范第4部分:海水分析[S].
[2]卜照蓬,劉巖.FZF321型海洋資料浮標系統(tǒng)[J].海洋技術(shù),2003,22(2):59-65.
[3]張毅,孫思萍,齊爾麥,等.海床基自動監(jiān)測系統(tǒng)中央控制單元設(shè)計與實驗[J].海洋技術(shù),2007,26(4):1-3.
[4]武東生,張齊.海洋站數(shù)據(jù)采集器的設(shè)計要點[J].海洋技術(shù),2001,20(1):59-61.
[5]周曉林,焦仁育.水質(zhì)自動監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2001(5):30-32.
[6]唐原廣,王金平.SZF型波浪浮標系統(tǒng)[J].海洋技術(shù),2008,27(2):31-33.
[7]梁英,尹翠玲,馮力霞,等.微藻營養(yǎng)鹽限制的檢測方法[J].中國水產(chǎn)科學(xué),2005,12(5):661-667.
[8]J.茹奇卡,E.H.漢森.流動注射分析[M].北京:科學(xué)出版社,1986:140-153.
[9]杜軍蘭,鄒常勝,袁仲才,等.船用營養(yǎng)鹽現(xiàn)場自動分析儀的研制[C]//中國海洋學(xué)會2005年學(xué)術(shù)年會論文匯編.2005.
[10]韓永輝,王智麗,杜振輝,等.基于PROFIBUS-DP現(xiàn)場總線的海水營養(yǎng)鹽自動分析系統(tǒng)[J].制造業(yè)自動化,2004,26(7);40-42.
[11]杜軍蘭,鄒常勝,袁鐘才,等.海水營養(yǎng)鹽現(xiàn)場自動分析技術(shù)[J].海洋技術(shù),2003,22(3):37-42.
Design of VC++based seawater nutrient salt test software system
CHENG Yan,MA Ran,WANG Hong-Iiang,CAO Xuan,CAO Lu
(Shandong Provincial Key Labo rato ry of Ocean Environmental Monitoring Technology;Institu te of Oceanographic Instrumen tation,Shandong Academy of Sciences,Qingdao 266001,China)
We developeda VC++plat for mbasedseawater nutrient salt test software system.We also construc tedthe data struc ture of its systemsoftware.It couldreconfigure the test process basedon the specific test requirement of each nutrient salt,so the systemcoulddynamically performtest process.Experimental results show that the systemcan improve adap tability,and make the test process more flexible.
nutrient salt;data struc ture;Visual C++
P734.4+4;TP311
A
1002-4026(2014)05-0088-05
10.3976/j.issn.1002-4026.2014.05.016
2014-05-29
國家國際科技合作專項(2013DFR90220);國家自然科學(xué)基金(41206076);山東省博士基金(BS2013ZZ012);科技成果轉(zhuǎn)化引導(dǎo)計劃(青年專項)(14-2-4-94-jch)
程巖(1979-),男,助理研究員,碩士,研究方向為海洋儀器。