基于QT的全自动化学发光免疫分析仪上位机系统
2018-10-23赵五明张欣欣马松松高凯轩孙钦东
赵五明 张欣欣 翟 炯 马松松 高凯轩 孙钦东
(1.煤炭科学技术研究院有限公司 北京 100013)(2.西安理工大学计算机科学与工程学院 西安 710048)
1 引言
近年来,层出不穷的各类食品安全事件已经对人们的身体健康造成了深深的伤害,食品安全也越来越受到人们的重视和关注。因此,食品生产企业、食品检测监管部门等相关机构急需一种高效率、全自动化方式[1]的食品检测仪器来确定食品中各种成分的定量。全自动化学发光免疫分析仪是通过检测食品样品而对食品中的某种成分进行检测的食品检测仪器,在食品安全检测领域具有至关重要的作用[2]。全自动化学发光免疫分析仪是一种自动化程度比较高的仪器,具有特异性强、灵敏度高等特点[3],可以快速处理样品并大大提高操作的准确性和可靠性,可以快速减少人工干预,具有手工操作无法比拟的优点[4],其检测时间可以缩小到20min左右,有效地提高了检测效率,越来越受到人们的重视和青睐。
目前,全自动化学发光免疫分析仪在国内的研究仍然处于探索阶段,这主要是因为它涉及到多方面的技术问题。系统结构复杂、运行控制以及测量精度要求较高。近年来,随着国内自动控制技术、机电技术、化学发光分析和检测[5]等技术的发展,为了打破国外对于全自动化学发光免疫分析仪的垄断局面,国内的各大高校研究机构已经逐渐开展了全自动化学发光免疫分析仪的研究工作。
全自动化学发光免疫分析仪系统是用户和全自动化学发光免疫分析仪进行交互的媒介,对于系统的稳定性、可靠性、易操作性具有较高的要求。国外的上位机系统基本上采用的是Windows系列的操作系统,本文在自主研发全自动化学发光免疫分析仪的基础上提出了一种采用Ubuntu系统下的Qt平台研究设计一套上位机系统,相对于Windows平台而言,采用Ubuntu系统下的Qt平台开发的上位机系统易于操作、拥有简单直观的人机交互界面[6]、强大的网络连接功能以及可跨平台[7]的特性。
2 系统总体结构
全自动化学发光免疫分析仪从总体上来看,分为PC端(全自动化学发光免疫分析仪上位机系统)、云平台检测系统和全自动化学发光免疫分析仪。云平台检测系统负责测试数据的实时保存和仪器的状态监控工作;全自动化学发光免疫分析仪负责具体的项目测试工作;全自动化学发光免疫分析仪上位机系统是实验员和化学发光免疫分析仪交互的中间平台,用来控制、监控下位机并分别于下位机和远程服务器进行数据交换。本文主要研究全自动化学发光免疫分析仪系统的设计与实现。图1为全自动化学发光免疫分析仪上位机系统的总体结构,总体结构由三部分构成,即数据库层、应用层以及通信层。
图1 系统总体设计
数据库层是系统的数据库模块,指的是系统本地数据库,将全自动化学发光免疫分析仪系统中的试剂、标品、测试结果等数据进行存储,应用层通过相应的SQLite数据库[8]API对这些数据进行操作,通过通信层获取到下位机的最新状态信息以及测试结果信息并及时更新数据库中的数据。
应用层包括人机交互界面、状态监控、流程控制、数据处理、系统管理等部分。通过人机交互界面用户可以登录软件系统、添加任务信息进行新增测试工作、测试过程实时监控、观察仪器各部分状态、进行参数设置、查询结果信息、查询结果样条曲线、打印或导出数据报告、系统管理等操作。
通信层分为RS232异步串口通信[9]和基于USB的HID扫码通信[10],RS232异步串口通信负责全自动化学发光免疫分析仪系统和下位机主控板的通信以及数据交换工作。HID扫码通信负责全自动化学发光免疫分析仪系统和条码扫描枪之间的通信工作。
全自动化学发光免疫分析仪系统是在Qt平台下进行开发,Qt是一个跨平台的C++图形用户界面应用程序框架[11],支持Windows、Mac、Linux等操作系统。它是完全面向对象的,其良好的封装机制使得Qt的模块化程度非常高,可重用性较好,并且允许真正的组件编程。Qt提供了一种称为signals/slots(信号和槽)的安全类型的机制来代替callback(回调),使得各个元件之间的协同工作变得非常简单[12]。支持2D/3D图形渲染和OpenGL;具有大量的开发文档和丰富的C++类库,多线程支持良好。Qt库在国际化和本地化方面比较突出,使用其开发的软件在实现多语言版本的软件时相当方便。
对于本系统来说,使用Qt还具有以下有利于系统功能实现的特性:
1)Qt良好的多线程特性,使得系统实现多任务协调变得方便;
2)利用Qt提供的混合编程技术,UI设计和逻辑设计完全分开。界面描述代码和程序逻辑代码以及计算部分的分开,有利于团队开发以及后期的维护工作,提高了开发效率。
3 功能实现
3.1 基于USB的HID通信
3.1.1 基于RS232的串口通信
串口是PC机上一种非常通用的设备通信接口,串口通信是PC机与外部设备进行数据交换的重要渠道,因为其成本较低、稳定性较高、传输容量大[13],因而本系统通过PC机的RS232异步串行接口与下位机进行通信。RS232串口通讯数据帧以单字节(8bit)为基本单位,最长不超过256字节,如表1所示,通讯数据帧由以下4部分组成。
表1 数据帧组成
起始的第一个字节为地址码,地址分配为0xA0,表示上位机通过RS232总线和下位机主控板进行通信;第2字节为功能码(function-code),对应的是主设备给从设备发送的命令字,如正常从设备返回该功能码,如异常则返回一个字节func⁃tion-code+0x80,接着是一个字节的异常码(excep⁃tion-code)。第3到N+2字节为数据(data),对应主设备给从设备发送的命令字参数,或者从设备返回给主设备的状态和结果。最后2字节为CRC校验(低字节在前,高字节在后)。
3.1.2 串口通信的实现
Qt平台下有多种串口通信类库,例如QextSeri⁃alPort、QSerialPort、libserial。 而 QSerialPort是 Qt5中已经集成的串口通信类库,该上位机系统的串口通信使用QSerialPort类库。首先配置串口通信参数(波特率、数据位、停止位、奇偶校验、流控等)[14],然后打开串口,确保通信连接正常。通信处理模块的应答指令包括设备信息上传指令、下发测试数据指令、读取测试结果指令、故障信息指令、添加试剂耗材指令。
本系统中存在大量数据接收、发送的情况,为了确保上位机和下位机通信的实时性,系统开启了独立的接收数据线程m_workThread,并设置了接收数据缓冲区m_readData。在通信中我们依赖readAll()函数获取串口数据,但readAll()由ready⁃Read()信号触发。所以我们使用connect(m_pSeri⁃alPort,SIGNAL(readyRead()),SLOT(handleReady⁃Read())方法把信号readRead()和槽handleReady⁃Read()连接起来,当信号readRead()触发时,槽函数 handleReadyRead()被执行。在 handleReady⁃Read()函数中通过readAll()读取串口数据并将接收到的数据放置在接收数据缓冲区m_readData中。在本系统中,我们需要不断地监听下位机发送的心跳包,在接收心跳包的过程中可能会出现无法识别的垃圾数据包,所以需要根据协议中规定的有效标志位来判断数据包是否合法,如果数据包无法识别,视作无效数据包,做丢弃处理。否则,解析该数据包,然后封装成QML可以识别的数据类型,在QML中接收处理。
3.1.3 基于USB的HID通信
基于USB的HID扫码枪通信最大的优势在于能够快速输入所需要的数据,相较于其键盘模式,USB模式在实现上可能稍微复杂些。USB模式需要使用HIDAPI库,该库将对设备的底层操作封装成了一些API,使用上更加简单方便。由于扫码枪扫码从操作开始到操作完成可能需要的时间较长,因此,需要使用创建一个独立的线程来接收数据,避免阻塞主进程。打开扫码设备,需要使用hid_open_path()函数。如果扫描数据较多,数据会被分为多个数据包进行多次传输,每个数据包都需要调用一次hid_read_timeout()函数来接收数据,数据包大小为65byte,而且每个数据包的头部和尾部都为一些标识信息,因此在接收数据之后,需要进行数据的截取和拼接,并根据数据包判断是否传输完成,如果未完成,则需要再次调用hid_read_timeout()函数来接收数据;如果完成,使用hid_close()函数关闭设备,并将数据填充到所需的位置即可。
3.2 系统主界面的实现
主界面分为三个部分:导航区、实时状态显示区、功能显示区,如图2所示。导航区右上角的7个圆形按钮用来显示试剂、耗材的状态信息以及设备故障信息,根据不同的剩余量使用不同的颜色提示用户,正常(黑颜色)、提醒(黄颜色)、警告(红颜色)。首页左上侧的半圆形箭头图标是开始按钮,当用户配置完成测试项目需要的试剂、标准品和样本时,单击开始按钮,软件系统给下位机发送测试数据后,下位机开始进行测试工作并向软件系统返回响应信息。然后上位机系统就可以解析到下位机返回的信息,对测试过程进行实时监控。实时状态显示区是下位机的试剂区、样本区和孵育区的状态显示,绿颜色表示孔位上存在试剂或者样本,暗黄色表示不存在试剂和样本。在底部功能显示区可以进入相应的功能模块。
图2 系统首页
3.3 新增测试模块的实现
新增测试部分包括两个部分,如图3所示。分别是试剂区孔位和样本区孔位,对应于下位机的试剂区模块和样本区模块。在试剂区和样本区用不同的颜色区分孔位的状态信息。在样本区的每一列预留了两个样本孔位,用来做后期的扩展。用户在试剂区的孔位中配置完成试剂,然后在样本区的孔位中添加需要检测的样本和相关的标准品之后即可点击开始下发测试任务。
图3 新增测试
3.4 定标设置模块的实现
以该系统对于检测样品中的三聚氰胺含量的测试项目为例,全自动化学发光免疫分析仪系统配置了了6个孔位的样本以及6个孔位的标准品,样本和标准品的复管次数都是两次,下发测试数据到下位机并获得最终的测试结果相对光单位。对本组测量结果进行四参数Logistic曲线拟合的最终结果如图4所示。本组测量结果的详细表格信息如表2所示。
图4 测试项目三聚氰胺的四参数Logistic曲线
表2 测试项目三聚氰胺拟合曲线的详细信息
4 结语
本文基于QT集成开发环境提出了一个新型全自动化学发光免疫分析仪的上位机系统,该系统的开发采用混合编程的方式,具有界面描述代码和程序逻辑代码等分开的特点,保证了开发效率,有利于后期维护。系统包含数据采集、数据通信、实验测试、数据可视化等多种功能,能够有合理、有效控制全自动化学发光免疫分析仪对食品进行检测工作。测试结果显示本系统具有良好的人机交互性以及稳定的性能。