APP下载

基于微信小程序的发酵过程在线监测系统设计∗

2020-11-02

计算机与数字工程 2020年9期
关键词:轮询页面光谱

胡 斌

(江南大学物联网工程学院 无锡 214000)

1 引言

近红外光(Near Infrared,NIR)是一种波长范围在780nm~2526nm 的电磁波。近红外光谱分析技术可以将有机物质的含氢基团化学键的倍频和合频吸收转换为光谱信息,从而探测出物质的成分或者成分含量[1]。在20 世纪80 年代期间,由于工业技术的落后,无论是行业竞争,还是环保要求,都迫使工业生产寻求新技术。为此,经过长久的投入和发展,近红外光谱技术结合化学计量学走进研究殿堂。近红外光谱技术以快速、安全和准确的特点在物质检测中发挥着重要作用,在发酵过程监控的研究也取得了显著进展[2~6]。

国际上,对光谱技术的应用越来越成熟。美国尼高力仪器公司开发的OMNIC 光谱分析软件[7]、Bruker 公司开发的OPUS 软件[8]和赛默飞世尔科技公司(Thermo Fisher Scientific)的TQ Analyst 软件[9]都在各行各业取得了良好的效果。通过上述光谱分析软件建立定量分析模型,进而应用在实时监测系统中。与此同时,国内外研究者也开发出基于Matlab 语言的工具箱,用于建立定量和定性分析模型,如Lars Nørgaard 开 发 的iToolbox 工 具 箱 和Hong-Dong Li 近期开发的libPLS_1.98 工具箱[10~11]。上述公司和研究者对近红外光谱分析技术的发展起到的很大的促进作用,为近红外光谱技术应用到实际生产中奠定了坚实的基础。

本文借鉴国际上通用的光谱数据分析和监测平台,如RESULT和OPUS等,设计出一种新型的实时监测系统。在系统实现中,利用libPLS_1.98 工具箱建立定量模型,采用轮询方式对光谱采集软件的输出的CSV格式光谱数据文件进行读取,采用微信小程序技术进行客户端页面设计,利用Java语言进行服务器端开发,采用Websocket 技术实现客户端和服务端的全双工通信,从而实现对发酵过程参数的远程、在线监测。

2 关键技术

2.1 近红外光谱检测基础

近红外光谱分析技术的物理基础是光与物质之间的相互作用,当光入射到物质时,会发生反射、透射或者吸收。从光源入射到物质表面后,经过与物质中微粒的一系列作用后出射,其中入射与出射的光强比就是我们需要的信息。近红外光谱分析技术的化学基础来自物质内部的分子振动和能级吸收。由波尔频率方程计算出的振动量子数v 从0到1 得到的振动频率f 称之为基频。那么,一级倍频和二级倍频分别为v 从0 变化到2 和3 获得的振动频率,而合频指的是不同基频之间的和或差获得的振动频率[12~13]。

2.2 微信小程序技术

微信小程序技术(Mini Program),是一种介于B/S(Brower/Server)结构和C/S(Client/Server)结构之间的系统。对于客户来说,客户不需要像安卓或者IOS 一样下载应用程序,只需要在微信软件上打开小程序功能搜索即可。有着即开即用的效果。对于开发人员来说,这又是一种快速开发平台[14]。在微信小程序的编码中,已经封装好了页面的结构、生命周期以及数据渲染。目前,已经有150 万开发人员推动着微信小程序的发展,涉及到了200多个行业,并带动了一个新行业的发展。

2.3 Websocket技术

Websocket 技术诞生之前,客户端和服务器通常使用的技术有:轮询和长连接等。但是,长时间的通信会导致一些问题:

1)多个客户端同时请求服务器时,服务器必须为每个客户端建立Tcp 连接。频繁的连接和断开容易造成系统崩溃。

2)频繁的Http 协议请求具有很高的开销,Http请求头存储了很多信息,重复的连接也会传递重复的信息。

Websocke 技术是解决上述问题的简单方案。如图1 所示Websocke 技术建立连接的原理图。TCP 协议传输数据时,每次发送数据都要建立复杂的“三次握手,四次挥手”。而在Websocket 协议的传输中,只需要建立一次连接就可以一直通信[15]。

图1 Websocket原理图

3 系统总体结构

实时监测系统的总体结构图如图2 所示,包括发酵罐、光纤探头、光谱仪、厂商配套的光谱采集软件、实时监测软件系统和用户终端。在整个系统中,光谱仪器采用了赛默飞品牌的傅立叶近红外过程分析仪Antaris MX,此仪器可以检测波数范围在10000cm-1~4000cm-1的近红外光谱。服务器采用了Windows7 操作系统,并安装厂商配置光谱采集软件。厂商配置的光谱采集软件为RESULT 平台下的RESULT-Integration 软件,可以设置参数将实时采集的光谱数据以CSV格式输出到指定文件夹中。

图2 系统总体结构图

由总体结构图可以看出,在系统运作之前,利用Lars Nørgaard开发的iToolbox工具箱中的联合区间偏最小二乘法,对发酵过程数据建立糖含量的定量分析模型,并将模型数据存储为CSV格式的模型文件(如图2 中NIR 模型)。其中,NIR 模型的第一行数据为特征区间,第二行数据为波数权重。

系统运作的流程如下:1)在发酵过程中,近红外光谱仪通过光纤探头采集发酵罐的发酵过程数据,并通过厂商配备的光谱采集软件将采集到的物质信息转换成光谱信息,进入输出为CSV格式的光谱数据文件;2)在采集软件不断输出实时光谱数据的过程中,实时监测系统利用轮询监测功能获取CSV 格式光谱数据文件,并利用文件处理功能解析数据文件和模型文件,将解析到的实时数据和模型数据以全局变量的形式存储;3)利用模型预测功能将当前实时光谱数据和模型数据结合,并计算出实时预测结果;4)在用户开启Websocket连接后,系统服务端利用数据推送功能将预测结果推送给在线用户。

4 功能流程设计

4.1 轮询监测功能设计

轮询监测功能是对光谱采集软件输出文件的变化进行监测。近红外光谱仪将采集的样品经过光谱采集软件的处理后得到了光谱图像,进一步通过设置相关参数可以将光谱数据转换成CSV格式,并存储在指定文件夹中。利用Java 语言对指定文件夹进行轮询监测的关键点有:

1)文件夹每次轮询扫描前,需要对已存在文件进行缓存,并在下一次轮询扫描中对已有文件对比,以确定是否有新文件。

2)为避免大量的数据对比,应该优选判断文件数量。如果文件数量上排除了新文件的产生,可以直接进行下次轮询。

3)考虑到在近红外光谱数据的业务处理中,如果时间过长或者其他环境异常会导致的扫描时间阻塞。系统使用子线程的方式将扫描到的新文件交给子线程解决,而不会干扰扫描任务,由子线程去继续执行后续业务。

在上述关键点下,对系统的轮询监测功能进行设计,如图3所示轮询监测功能流程图。

图3 轮询监测流程图

从图中可以看出轮询监测的主要流程如下:1)系统开启监控,使用Java 语言的Properties 类扫描并解析properties 类型的配置文件以获取目标路径。其中,配置文件的目的是便于将来因业务或者环境调整而导致的文件夹更改;2)使用Java语言的Map 对象将目标路径的所有文件加入到缓存变量中,其中Map 的key 值为文件的最后修改时间,Map的value 值为文件对象;3)计算当前目标路径的文件数量,并与缓存变量的数量进行对比,如果没有新文件直接进入延迟状态,如果有新文件,利用文件最后修改时间找出新文件;4)开辟线程对新文件进行后续的功能处理,包括文件解析功能、数值计算功能和信息推送功能。

4.2 文件处理功能

在实时监测系统有两种类型的文件需要处理,包括实时光谱数据文件和模型文件。采集软件所输出的CSV 格式光谱数据具备“只读”。在光谱数据的内容中,第一列为波数值,第二列为光谱吸收度值,实时监测系统只需要获取第二列的吸收度信息。模型文件是通过基于Matlab 的iToolbox 工具建立定量模型,并将模型数据的特征区间和权重信息写入到CSV格式文件中。

使用Java 语言对上述文件进行处理的主要任务有:获取文件夹中的文件列表、获取文件格式、获取文件的最终修改时间和获取文件内容。其中,Java 语言获取文件的外部属性可以通过File 类获得,具体方法如表1 所示。Java 语言读取文件的内容信息则需要字节流FileInputStream 或者字符流Reader以及相关类。

表1 File类部分方法

通过表中的具体文件操作方法,对实时数据文件和模型文件进行读取。从图4 所示文件读取流程图中,可以看出文件处理的流程为1)由于文件处理是通用程序,需要先判断文件的类型,以进入不同的文件读取过程;2)在光谱数据文件的读取中,由于文件夹可能混杂其他文件,因此需要采用表1中的getName方法判断是否为CSV格式以及文件名内容,排除非光谱数据文件;3)通过字节流FileInputStream 的readLine 方法逐行读取文件的内容;4)使用Java 语言的splite 方法对每行数据进行逗号分隔符截取,从而读取到的光谱吸收度信息进行拼接并存储;5)在模型文件的读取中,读取第一行存储的区间信息,并使用Java 语言的splite 方法辨识多个区间信息;6)读取第二行存储的权重信息,其中权重信息以逗号分割,依旧使用splite方法进行截取,并保存为模型对象。

图4 文件处理流程图

4.3 信息推送功能

信息推送功能是在服务端将预测的数据主动推送给当前在线用户。首先需要利用Websocke 技术建立客户端和服务端的连接。在微信小程序客户端,微信小程序使用wx.connectSocket(Object ob⁃ject)函数建立连接,其中Object所表示的信息有后端服务器wss 的地址url 和Http Header 请求头。在服务端,Java 语言通过ServerEndpoint 注解来自定义Websocket类,并指定生命周期函数onOpen 建立连接。每个客户端与服务端建立连接后,将用户对象存储到CopyOnWriteArraySet<MyWebSocket>中,其中MyWebSocket为自定的连接对象。

连接建立成功后,对实时数据进行计算,并将预测结果推送,如图5所示的信息推送流程图。

从信息推送流程图可以看出,信息推送的过程为1)获取轮询监测功能得到的实时数据和文件处理后的模型数据;2)使用Java 语言的Math 类计算预测结果;3)在获取到的当前用户对象集合中,对存储了用户对象的CopyOnWriteArraySet 集合进行遍历;4)以Json 格式封装预测结果,并包含光谱文件的最后修改时间、近红外光谱的数据;5)Java 语言将待发送的Json格式数据字符串化,并使用自定义连接对象MyWebSocket 类的sendMessage 方法推送信息。

图5 信息推送流程图

5 编码实现与测试

5.1 页面布局设计

实时监测系统的微信小程序端共有三个页面,包括数据预测的置顶式刷新页面、预测结果的详情页面以及预测结果的历史走势页面。其中,置顶式刷新页面是由表格构成的数据预测页面,预测结果从上到下按照时间倒序排列。预测的详情页面除了预测时间和预测结果外,还包含了光谱的曲线信息。预测结果的历时曲线页面是将开启在线监控到当前时刻的所有预测结果通过折线图的形式展示。

如图6 所示是微信小程序的界面设计图。其中,标题为“置顶式”所在界面是系统进入的首页。在首页的最上方是监测系统开启监测功能的按钮。首页的最下方是导航栏,包括了当前置顶式页面和历史曲线页面的选项卡。在监测按钮和导航栏之间是数据预测的表格数据,其排列顺序按照时间倒序的结果展示在表格中。详情页面作为置顶式刷新页面的二级页面,是通过点击表格预测结果的单个条目进入。详情页面更详细的介绍预测信息和光谱的曲线图。通过点击首页的导航2 按钮,可以进入到历史光谱数据的预测走势页面。预测走势页面展示了从开启监测功能到当前数据预测的所有数据预测走势图。

图6 微信小程序界面设计图

5.2 实时数据预测页面测试

根据图6 的页面布局,首先设计置顶式刷新页面和详情页面。如图7(a)所示的置顶式刷新页面中,通过点击首页上方的在线监测状态栏,可以向后端服务器发送Websocket 连接请求,在等待连接的时间内如果连接失败按钮直接跳到关闭状态,状态显示“未开启”,如果连接成功显示“已开启”。状态栏的下方是数据列表,从上至下按照时间倒序排列。当新的预测结果推送到微信小程序页面时,数据将置顶到最上方位置,其他预测结果下移。通过点击单个预测条目,可以进入到图7(b)的预测结果详情页面中。详情页面以更加美观的排版展示预测结果,并且新增光谱数据曲线图。

图7 数据预测页面测试

5.3 预测数据的历史曲线页面测试

通过点击图7 中导航栏的“过程”选择卡进入如图8 所示的预测结果的历史曲线页面。历史曲线是通过微信小程序端进行收集,具体过程为1)在线用户开启监测功能后,记录每次的预测结果,为了让数据在页面间传递,微信小程序将数据存储在app.js文件的全局变量globaldata中;2)当用户进入历史数据曲线页面后,获取globaldata 的全部数据,并使用Echarts 插件绘制历史预测结果的折线图。

图8 历史数据曲线页面测试

在微信小程序的数据传递中,服务端通过发送Json 格式的字符串传递到微信小程序端。微信小程序通过JSON.parse 方法将Json 字符串转换成Json 对象,并通过this.setData 方法渲染到页面数据Data中。当进入到历史数据页面后,通过生命周期函数onLoad 读取全局变量,进而使用Echarts 绘制图表完成折线图渲染。当新数据传递到微信小程序端,微信小程序将新预测结果拼接到数组末端,重新绘制历史曲线,完成数据的动态变化。

6 结语

长久以来,近红外光谱技术在发酵过程监测的应用大多为桌面端系统。本文在经典监控系统的基础上,结合当前快速发展的互联网技术,设计并实现了一套基于微信小程序技术的实时监测系统。系统采用微信小程序技术作为客户端进行快速开发和快速应用,采用Websocket 技术进行客户端与服务端的高效数据推送,采用Java语言开发服务端应用程序,以提高系统的跨平台能力。经过最后的编码与测试表明,系统可以满足发酵过程参数的远程实时监测,为近红外光谱技术的远程监测应用提供完整的软件系统和具体的解决方案。

猜你喜欢

轮询页面光谱
基于三维Saab变换的高光谱图像压缩方法
刷新生活的页面
基于等概率的ASON业务授权设计∗
依托站点状态的两级轮询控制系统时延特性分析
利用时间轮询方式操作DDR3实现多模式下数据重排
星载近红外高光谱CO2遥感进展
苦味酸与牛血清蛋白相互作用的光谱研究
铽(Ⅲ)与PvdA作用的光谱研究
同一Word文档 纵横页面并存
浅析ASP.NET页面导航技术