基于VC++的海水营养盐测试软件系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于VC++的海水营养盐测试软件系统设计
程岩;马然;王洪亮;曹煊;曹璐
【摘要】基于VC++平台开发了海水营养盐测试软件系统,建立了相应的系统软件数据结构,能够在软件的运行过程中,根据每种营养盐的具体测试需要重新配置测试过程,系统可以动态地执行营养盐的测试流程.实验结果表明,该设计提高了系统的适应性,使测试更加灵活.
【期刊名称】《山东科学》
【年(卷),期】2014(027)005
【总页数】6页(P88-92,102)
【关键词】营养盐;数据结构;VC++
【作者】程岩;马然;王洪亮;曹煊;曹璐
【作者单位】山东省科学院海洋仪器仪表研究所,山东省海洋环境监测技术重点实验室,山东青岛266001;山东省科学院海洋仪器仪表研究所,山东省海洋环境监测技术重点实验室,山东青岛266001;山东省科学院海洋仪器仪表研究所,山东省海洋环境监测技术重点实验室,山东青岛266001;山东省科学院海洋仪器仪表研究所,山东省海洋环境监测技术重点实验室,山东青岛266001;山东省科学院海洋仪器仪表研究所,山东省海洋环境监测技术重点实验室,山东青岛266001
【正文语种】中文
【中图分类】P734.4+4;TP311
目前,海水中营养盐测定主要是根据海洋监测规范[1],采用基于调查船的现场采样-实验室测定法。
该方法存在实时性差,样品易受污染,浪费人力、物力,耗费时间等缺点。
同时,现场采样-实验室测定法不能提供连续数据,且不易监测到降雨、赤潮或绿潮爆发等水文或生态事件造成的营养盐浓度急剧变化的情况。
流动注射分析(Flow injection analysis,FIA)是由丹麦技术大学的J.Ruzicka等于1975年提出的,即在热力学非平衡条件下,在液流中重现地处理试样或试剂区带的定量流动分析技术[2-3]。
本研究室根据该原理研发了一种YYY-001型海水营养盐测试系统,该系统由硬件和软件系统组成的,硬件部分负责执行软件的控制操作,采集数据并传输到软件系统中[4]。
硬件系统主要包括在线过滤装置、自动进样与反应装置和在线排污装置,光源、微型光纤光谱仪和电子电路板以及海水样品池、纯水池、清洗液池、显色试剂池和样品混合池。
电路系统三极管放大电路的输入端接收到单片机的输出端口的信号,推动小型继电器,然后用该继电器的触点来控制电磁阀。
通过电磁阀的开关,以及泵的大小控制样品、显色剂和纯水等进入样品池以及排污装置。
单片机通过串口连接计算机,进行程序控制并提取数据[5]。
针对目前海水中营养盐的测量不能根据测试环境的不同而改变营养盐测试的流程的问题,YYY-001型海水营养盐测试系统的软件系统基于VC++平台,建立了相应的系统软件数据结构,能够在软件的运行过程中,根据每种营养盐的具体测试需要,重新配置测试过程,系统可以动态地执行营养盐的测试流程。
能够根据不同的测试环境提供连续的测量数据,可以降低对环境的依赖,为营养盐测试系统的软件设计提供了一种新的开发方法。
海水营养盐测试系统的主要工作就是配置每种营养盐的测试流程,并按照该设定的流程控制各个子系统来完成对海水中营养盐数据的采集分析[6]。
配置营养盐流程模块,用于配置整个测试过程所要进行测试的营养盐的种类以及每种营养盐测试
流程的执行过程。
配置的执行过程包括控制电磁阀的开关,设置数据的起始和结束时刻;通过控制电磁阀的开关次序、间隔和持续时间,控制每种营养盐测试的流程。
基于以上功能,且满足系统稳定要求的设计,其基础是能够兼容所有营养盐控制信息的数据结构。
该数据结构贯穿整个系统,被所有的子系统共用,是各个模块的统一数据接口,可以通过配置模块更改相应的配置信息,并按照已经设定的内容进行控制和采集操作[7]。
配置模块根据系统的需要进行增删、改查以及更新操作等配置该数据结构的信息。
营养盐的测试就是查找该数据结构,并执行每种营养盐的测试过程,该测试过程在软件的运行过程中可以由用户根据实际情况的需要进行更改。
营养盐测试系统通过计算机串口连接测量仪器,达到控制并提取数据的目的。
通讯的命令依据协议,每次包含测试营养盐类型、控制电磁阀状态等信息[8]。
该测试系统适用于所有依照本协议的测试仪器。
该数据结构的字段应包括的信息为待测试的营养盐的种类、营养盐的类别、目前的测试是否需要执行以及营养盐测试所需要的流程。
测试所经历的流程包括电磁阀的开关控制、泵的开关控制、泵转速的大小和转的方向控制、各种状态灯的开关控制,以及这些操作的先后次序和彼此之间的间隔时间,同时还有采集数据时间段的起始点和结束点。
本系统采用VC++开发,开发平台是Windows XP操作系统。
VC开发工具是一种面向对象的编程系统,首先根据客户需求抽象出业务对象;然后对需求进行合理分层,构建相对独立的业务模块;之后设计业务逻辑,利用多态、继承、封装和抽象的编程思想,实现业务需求;最后通过整合各模块,达到高内聚、低耦合的效果,从而满足客户要求。
2.1 数据结构
根据功能需求,该业务主要是记录每种营养盐的信息,完成营养盐测试系统流程中
的步骤以及每步所进行的操作。
所以该数据结构定义为三个,分别用三个类来表述,即流程类、事件类和条件类,见图1。
其中流程类记录营养盐的ID号、营养盐的
名字、是否执行、以及在整个系统中序号。
事件类记录事件的ID号、事件的类型、触发事件需要等待的时间、事件的描述信息以及是否进行测量、测量的个数和采集数据的周期。
条件类记录条件的ID号、控制量位置和控制量的开关状态。
一个流程包含一个或若干个事件且这些事件有先后顺序。
一个事件由一个或若干个条件构成,同时控制该事件所需要做的动作[9]。
2.1.1 系统的执行过程
系统用一个动态数组保存所有测量的营养盐的测试流程,每个流程是流程类的一个对象,该流程类有三个元素属性分别为流程ID号、名字和是否执行。
系统自动测试每种营养盐的过程,遍历该动态数组的所有元素,如果该元素的是否执行属性为真,对这一流程进行测试,记录该流程的ID号;执行该流程ID对应的流程操作,如果该流程执行完,系统遍历该动态数组,找到首个比该流程ID号大的流程。
2.1.2 流程的执行过程
找到对应该流程的动态数组,用该动态数组保存所有测量的营养盐的事件,每个事件是事件类的一个对象,该事件类由事件的ID号、事件的类型、触发事件需要等待的时间、事件的内容,以及是否进行测量、测量的个数和采集数据的周期组成。
这些元素都是根据系统的需求来定义的,每个流程它们对应的过程是不一样的,根据它们不同点的特征来定义元素的属性,属性的个数也根据系统的需求来定义。
遍历该动态数组,找到第一个事件,记录事件的ID号,开启定时器定时事件需要等待的时间,给仪器发送事件需要对应的命令功能。
命令的功能根据事件的内容来定,该内容是一个动态数组,由一个或多个条件组成。
当仪器返回该命令的操作后,遍历事件的动态数组,找到下个比该事件ID号大的事件[10]。
2.1.3 事件的执行过程
找到事件对应的动态数组,该动态数组的元素是条件类所对应的对象,每个条件类的属性有控制量的位置和对应的状态。
遍历该动态数组,找到所有的元素,并设置好该事件所有进行的操作,然后执行事件。
2.2 数据结构的配置
数据结构的配置界面如图2所示,通过该界面实现对流程、事件和条件三级数据的增删改查。
(1)通过增加和删除条件更新临时条件类的对象的动态数组。
(2)通过增加事件功能将临时条件类的对象的动态数组,组织成事件类对象,添加到临时事件类对象的临时数组中。
(3)通过复制、剪切、删除和保存事件,更改相应的临时事件对象的动态数组,并显示在事件列表框中。
(4)通过编辑事件把当前选中的事件,复制到临时条件对象的动态数组中,并显示在条件列表框中。
对条件的相关操作后,通过保存事件,更新到临时事件类的对象的动态数组中。
(5)通过复制、剪切、删除和保存流程,更改所有流程类的对象的动态数组,并更新流程下拉列表框中的内容。
(6)通过编辑流程,把当前选中的流程复制到临时事件对象的动态数组中,并显示在事件列表框中。
对事件的相关操作后,通过保存流程,更新到所有流程类的对象的动态数组中。
(7)通过增加流程和保存流程功能将临时事件类的对象的动态数组,组织成流程类对象,添加到临时流程类的对象的临时数组中。
2.3 营养盐系统的自动检测
系统根据用户设定好的数据结构,自动检测所有的待检测的营养盐,根据每种营养盐设定的流程,通过串口控制仪器进行操作,见图3,具体操作如下。
(1)遍历当前配置动态数组的每一个元素,如果该流程的执行为真,遍历该流程所有的事件,直到当前配置动态数组的最后一个元素为止。
(2)遍历流程中某一个事件的所有条件,直到流程中最后一个事件为止。
(3)解析条件所需要进行的操作,并执行该操作。
(4)如果是时间间隔,启动定时器控制相应等待的时间;如果是电磁阀和其他辅助电子元器件的控制,通过通讯端口发送相应的命令;如果是采集数据,通过通讯端口发送命令,并接收相应的数据。
(5)待所有流程都检测完毕,计算所有营养盐的浓度。
2014年上半年,应用该系统测试海水中不同种类营养盐的含量,连续测试3个月,在实验室和岸边试验站分别实现了对连续数据的采集。
根据实验现场环境的不同,通过设置采集数据的起始和结束时间点、泵速控制进样的速度以及在整个流程不同时间节点、不同电磁阀的状态来改变指示剂添加的量以及对样品池冲洗、进样的时间,确定是添加的哪种样品。
如在实验室的环境下,泵速设置10~20 min-1,
在岸边试验站,泵速设置在70~80 min-1之间等。
在测试的过程中,分别只添加1~10种营养盐进行实验,重新设置了以上的配置信息,达到了根据系统的要
求来动态改变测试的流程的目的,方便了系统的调试。
经过实验证明,系统可以自动检测最多9种海水中的营养盐,每种营养盐可以根据不同的原理,设置不同的
流程进行仪器的调试,如泵速、取样时间段等。
可以通过改变软件系统中的配置来测试不同环境海水中的营养盐含量,每种测试方法可以根据实际情况任意更改。
在连续测试的3个月内,反复地设置每种营养盐的测量参数,均未造成系统的错误,证明该数据结构满足营养盐的参数设置需求,并能够辅助系统完成营养盐的测试。
实验结果表明,应用本文设计的数据结构的海水中营养盐测定系统可在不同环境下动态地更改营养盐的测试流程,通过串口数据线连续地采集数据。
系统能够灵活、安全可靠地工作,满足了设计要求。
本文根据海水营养盐测试系统的需求建立了一种数据结构,并根据该数据结构实现了系统的功能[11]。
该数据结构的优点是根据系统的需求建立了不同层次的类,
类彼此之间的关系用动态数组进行关联,使用户可以在系统运行的过程中,动态改变营养盐测试的执行过程,解决了营养盐测试环境的不同或加入辅助试剂的不同,测试过程不一样的问题,从而提高了系统的灵活性,是解决系统运行过程中更改某些功能的一种方法。
该方法能够在不改变仪器水路或电路的前提下,通过灵活地更改营养盐的配置,达到检测的目的。
经过反复地对每种营养盐的流程的更改,以及每个流程中事件或条件的更改,验证了该数据结构是合理的,系统具有稳定性。
该方案存在的问题在于程序仅作为普通的应用程序运行在计算机操作系统上,导致为完成整个测试,需要另外提供一台计算机。
下一步可以考虑采用嵌入式的开发环境,以节省测试的硬件成本。
【相关文献】
[1]GB 17378-2007,海洋监测规范第4部分:海水分析[S].
[2]卜照蓬,刘岩.FZF321型海洋资料浮标系统[J].海洋技术,2003,22(2):59-65. [3]张毅,孙思萍,齐尔麦,等.海床基自动监测系统中央控制单元设计与实验[J].海洋技术,2007,26(4):1-3.
[4]武东生,张齐.海洋站数据采集器的设计要点[J].海洋技术,2001,20(1):59-61. [5]周晓林,焦仁育.水质自动监控系统的设计与实现[J].电子技术应用,2001(5):30-32. [6]唐原广,王金平.SZF型波浪浮标系统[J].海洋技术,2008,27(2):31-33.
[7]梁英,尹翠玲,冯力霞,等.微藻营养盐限制的检测方法[J].中国水产科学,2005,12(5):661-667.
[8]J.茹奇卡,E.H.汉森.流动注射分析[M].北京:科学出版社,1986:140-153.
[9]杜军兰,邹常胜,袁仲才,等.船用营养盐现场自动分析仪的研制[C]//中国海洋学会2005年学术年会论文汇编.2005.
[10]韩永辉,王智丽,杜振辉,等.基于PROFIBUS-DP现场总线的海水营养盐自动分析系统[J].制造业自动化,2004,26(7);40-42.
[11]杜军兰,邹常胜,袁钟才,等.海水营养盐现场自动分析技术[J].海洋技术,2003,22(3):37-42.。