基于LabVIEW 的植物离子吸收多参数检测系统软件研发
2021-09-03冯小鼎王晓冬
冯小鼎 王晓冬 罗 斌 王 成*
(1.广西大学机械工程学院,南宁 530004;2.北京农业智能装备技术研究中心,北京 100097)
1 引言
农作物养分离子的吸收与产量、品质、抗性密切相关,研究其检测方法对农业科学研究和生产具有重要意义。现阶段基于原子光谱法、质谱法、色谱法[1]等离体检测手段,不能满足科研和生产中对作物活体在线自动检测的需求。离子选择电极因其灵敏、便捷等优点逐步应用在农业及环境监测领域中。基于液态离子选择微电极的扫描离子电极技术(Scan ion electrode technique,SIET)[2],以物理学中能斯特方程[3]和离子/分子扩散定律(Fick 定律)[4]为原理,能够活体检测到作物根系附近的离子流速信息,适用于单个作物或器官组织以及细胞等样本材料,在群体研究或生产监测方面的适用性不高。植物离子吸收动力学方程是用来描述植株吸收养分离子的量和该养分离子在植株生长环境中的浓度之间关系的曲线,大量的植物营养研究人员利用该原理获取植株全根系的实时离子吸收速度(In)、最大吸收速率(Imax)、米氏常数(Km)等动力学特征参数,用来评价作物对某种养分的利用效率情况和适应水平。
本文采用离子选择性微电极为传感器,配合具有支持NI-DAQmx驱动与配置的NI-9205 采集板卡,以修订后的植物离子吸收动力学模型方程[5]为原理,在LabVIEW 编程环境下设计一款植物离子吸收多参数检测系统的应用软件,实现植物离子吸收信息在线活体自动检测。系统软件需要完成多通道的数据采集、转换、浓度耗竭曲线拟合及植物离子吸收动力学特征参数的提取。为了满足系统的准确性和实时性要求,把数据采集和耗时长的数据处理采用多线程并发式的设计模式,运用操作者框架结合LabVIEW 面向对象技术[6]完成模块化设计。同时采用接口隔离思想,降低模块间的耦合性,提高系统可扩展性和可维护性。
2 系统总体结构设计
以水培环境下的农作物或植物为检测对象,配置多种离子混合的待测培养液,在硬件环境下,由电化学传感器检测到的微弱信号,经过放大、调理后,利用NI-9205 的USB 接口与LabVIEW 上位机系统完成数据传输与交互控制。其软件系统主要由用户交互界面、数据驱动采集、数据处理与分析以及SQLite 数据库应用四大主模块组成,如图1所示。
图1 系统整体结构框图Fig.1 System overall structure block diagram
3 软件系统设计
LabVIEW是一种基于数据流的编程语言[7],内置的调度算法具有多线程和并行运算的能力。传统测量系统为了体现并行处理的优势,一般采用生产者-消费者设计模式来进行模块化设计,会使得程序中循环体过多,可维护性和可读性变差。且多个模块占用同一队列通信易使得模块间过度耦合引发资源争用,同时可能产生通信紊乱引发时序问题。基于上述问题本系统采用LabVIEW 中的操作者框架完成系统的模块化设计及层次的搭建。
3.1 操作者模型与框架
操作者模型(Actor Model)起源于1973年提出的一种分布式并发编程模式,可用于处理并发计算,创建其复杂的多任务场景,充分利用工控机多核CPU系统的性能[8]。LabVIEW 操作者框架运用LabVIEW面向对象技术在原先的队列驱动状态机基础上迭代开发而成的软件类库,库中包含有Actor(操作者)类、Message(消息)类群以及Message Queue (消息队列)类群[9]。Actor 类是所有操作者的祖先类,又代表着单独的线程,被提炼成具有独立运行逻辑的模板范式,通过面向对象中的继承实现代码和抽象逻辑的复用,同时也利用面向对象的多态性来扩展新的功能点。Message 类群能够传递不同的数据和控制命令,操作者接受不同类型的消息会响应不同的行为。Message Queue 类群是封装了队列引用的类群,具有消息队列管理、消息入队、消息出队和队列优先级等功能,操作者间的通信与交互是通过特定类型的消息在消息队列中传递而实现的[10]。本文采用面向操作者的设计思想和模块化的设计原则完成软件系统的设计。
3.2 异步通信模式分析与系统层次结构设计
软件系统需要有数据采集、处理、可视化及数据库操作多个功能,每个功能模块为一个操作者,它们即独立运行又相互联系[11]。为满足多任务场景下相互协调,需要对其操作者间的通信方式进行设计。操作者间的组合方式分为独立聚合和嵌套组合,两种不同的模式有着不同的通信线路。如图2 所示,第一种模式为网状型,第二种为树状型。
图2 两种组合模式的通信方式Fig.2 Two combined modes of communication
前者直接高效,易于实现,但在复杂场景下难以维护,可读性差。后者把通信线路限定在嵌套层级之间,保证了消息传递的方向性,易于建立模块化层次体系和嵌套新的操作者。但如果通信线路过长、嵌套过深,又降低了消息传递的实时性,而中间线路的异常也会导致消息丢失,通信中断。基于以上两种模式的分析,本文系统采用第二种的通信模式,并对树状型层级结构限制在两层以内。如图3 所示,启动链中启动的第一个用户交互模块称为根操作者,其余的模块称之为嵌套操作者,操作者间通过嵌套迭代进行问题分解和任务派发。上层操作者可以启动下层的嵌套操作者,其启动方式可分为静态启动和动态启动,静态启动使得层级之间拥有相同生命周期,而动态启动的操作者可根据系统需求由上层操作者决定启动还是停止,从而降低系统的功耗。第四层称为泛化层不属于嵌套层,包含继承上层模块的子类群,其利用面向对象的多态特性实现对父类的扩展。
图3 软件系统的树状通信结构Fig.3 Tree communication structure of software system
3.3 软件模块设计
软件系统由用户界面、数据采集、数据分析处理以及数据库应用四个模块组成,项目视图如图4 所示。各模块主要职责:
图4 项目文档视图Fig.4 Project Document View
1)用户界面模块负责人机交互控制与数据监测,同时该模块在系统结构中作为根操作者,可实现对其他模块的启动和调用。
2)数据采集模块完成数据采集,同步还要对数据进行模块间及控件间的传递。
3)数据分析模块负责对采集到的电压值进行浓度梯度标定、电压转换、特征参数计算以及流速反演等业务逻辑。
4)数据库应用模块主要完成对SQLite 数据库的创建与实验数据的保存。
3.3.1 数据采集模块启停、回传设计
数据采集模块采用有多通道和16 位分辨率的NI-9205 采集卡,配合NI-DAQmx 驱动函数编写,由父类和具有传递功能的子类组成。如图5 所示,父类方法中主要有写入通道数、初始化、读取波形等函数方法,而子类除了复用上述功能外,还通过重写读取波形函数方法,实现不同模块及不同控件类型间的数据传递。设计思想是将父类作为启动函数的入口参数,进而在实际调用中传入不同的子类。为了降低模块间耦合性,都继承于抽象的消息接口[12],使得高层模块不依赖于底层逻辑,仅通过接口实现数据传递。
图5 数据采集模块与系统类图结构Fig.5 Data acquisition module and system class diagram structure
为了降低系统功耗,通过动态启动的方式控制NI 采集卡的读取,其设计思路为:利用条件结构对界面上按钮的响应状态不同来判断是否启动或停止操作者。数据采集的过程是通过父类重写祖先类的操作者核心函数,添加实时循环结构开辟相应的CPU线程,设置循环采样间隔,在循环体实时发送数据读取消息到自身的消息队列中,通过操作者核心函数中的消息处理循环(Message Handle Loop)响应消息,调用消息类相应的行为函数,实现多态方法Read Wave‐form 的回调,读取波形数据后提取波形数据结构簇中的信号幅值,再通过数据消息接口传递到上层模块中,其过程如图6所示。
图6 数据采集模块的启动过程Fig.6 The starting process of the data acquisition module
3.3.2 数据分析模块算法流程设计
该模块承担着离子电压-浓度校准与转换以及获取离子动力学模型特征参数的功能,对实时采集的离子信号进行处理与分析。离子电压浓度校准又称标定,分为两点标定和三点标定,其标定方程如下所示:
2点法:
3点法:
式中:S为斜率;b为截距;V为采集到的电压,mV;C为标定溶液浓度,mM。
标定程序如图7 所示,通过在界面上选定不同标定方式和设置浓度梯度对采集到的离子电压数据进行标定,获得电压-浓度线性方程的斜率和截距。再通过能斯特方程把电压值转换浓度值。为获得离子动力学模型特征参数,依据传统的离子耗竭曲线法[13],设置一定采样间隔对离子浓度值进行采样,并通过反馈节点压把数值压到队列中,当获取一定的采样点数时,根据设定的曲线模型阶数(二阶),对采样数据进行最小二乘拟合,利用奇异值分解算法(Singu‐lar Value Decomposition)计算出最优的模型系数。最后根据特征参数计算公式和离子吸收动力学方程求出特征参数和离子流速,公式与方程如下:
图7 标定算法公式节点Fig.7 Calibration algorithm formula node
式中:a为耗竭曲线二次项系数;b为一次项系数;FRE为植物根系表面积,cm2。In表示在外界养分浓度为C的条件下,植物根系对养分的净吸收速率,单位为nmol•m-2•s-1;Imax表示植物体对养分的最大吸收速率,nmol•m-2•s-1;C被测介质环境中的目标离子浓度,mol•L-1;Cmin表示植物根系对某种离子的净吸收速率等于零时的外界养分浓度,mmol•L-1;Km米氏常数。该模块的参数获取程序如图8 所示,系统的整体算法流程如图9所示。
图8 电压转换与模型参数获取函数Fig.8 Voltage conversion and model parameter acquisition function
图9 植物离子吸收多参数检测流程图Fig.9 Flow chart of multi-parameter determination of plant ion absorption
3.3.3 数据库应用模块
SQLite[14]是基于SQL 结构语句的一款轻量化数据库,适合做嵌入式开发的应用系统。根据本系统应用需求,该数据库设计了两类数据表:一类保存离子电压和标定参数,一类保存离子实时浓度、流速及特征参数。对SQLite 数据库的操作以LabVIEW 为平台,SQLite 库函数为基础,SQL 结构语句为核心进行编程。初次调用时,用户首先创建数据库的文件路径,打开数据库,通过CREATA TABLE语句创建一张标定参数表和八张实时特征参数表,如图10 所示。标定参数可通过手动保存,每次保存最新的数据。模型参数为实时保存,按照采样时间间隔保存到每行中。保存程序首先进入预编译状态,通过INSERT SQL语句按数据类型捆绑到数据表字段的属性节点中,利用For循环不断插入新的一行数据,执行结束后提交命令,释放预编译状态,程序如图11所示。
图10 打开数据库和创建数据表Fig.10 Open the database and create the table
图11 模型参数保存Fig.11 Saving model parameters
4 系统实际测试
为验证该系统是否能够正确稳定的运行,设计实验对各模块功能进行验证测试。
4.1 溶液标定测试
选择作物吸收的三种主要离子K+,NO3-、Ca2+进行标定溶液测试。标定液浓度分别为0.5mM、5mM、50mM,浓度梯度相差10倍,并分别对两点和三点标定算法都进行验证。实验步骤:对不同梯度下的离子溶液进行采样,记录稳定时刻的电位值,点击标定按钮,软件自动计算能斯特方程曲线的斜率与截距,如表1所示,实验结果表明一价离子的斜率基本在(±)55~60的合理范围之间,正负离子斜率相反。而二价的钙离子在(±)23~28 间范围合理[15]。
表1 溶液标定参数Tab.1 Solution calibration parameter
4.2 离子吸收特征参数获取测试
以两对真叶的向日葵水培幼苗为实验对象,检测植物根系离子吸收速率以及特征参数。水培条件为Hoagland营养液,生长环境为光照/黑暗(12 h/12 h)温度范围(25±2℃/22±1℃),光强15000lx。操作过程:设置实验溶液体积与根系面积、采样时间间隔等实验参数,点击开始采集按钮,观测实时流速与模型特征参数。检测6 时间后,获取最后时刻节点的离子吸收特征参数如表2所示。
表2 离子吸收动力学模型特征参数Tab.2 Characteristic parameters of ion absorption ki‐netics model
5 总结与展望
以离子选择微电极为传感器,植物离子吸收动力学方程为原理,采用在线式检测方法,获取植物离子吸收动力学特征参数,构建多通道、多参数、自动化的测量系统,据所查文献,还缺少相关方面的研究。对于软件的开发,摒弃传统的有限状态机和生产者-消费者设计模式,采用操作者框架和面向对象的设计思想,构建了模块化的层次结构,降低模块间的耦合性,提升了软件的可扩展性、健壮性以及可维护性。测试结果表明,该软件能够准确实现植物离子电压到浓度的标定与转换,并能自动获取植物离子吸收动力学模型中的各项参数,能实现养分吸收状况的在线监测,进而辅助农业科学研究决策及生产栽培管理措施制定。
该检测系统及软件在以下几个方面可进一步深入研究:(1)扩展更多的离子种类,并增加温湿度等环境参数的数据采集模块,实现多传感器的数据的融合分析,能全方位监测植物与环境的物质交换信息。(2)利用流体控制或机械控制,减少人工动手环节,实现自标定,自测试,进一步提高自动化程度,为无人智慧农场建设奠定基础。