毕业论文——微型近红外光谱检测仪图谱显示程序_第1页
毕业论文——微型近红外光谱检测仪图谱显示程序_第2页
毕业论文——微型近红外光谱检测仪图谱显示程序_第3页
毕业论文——微型近红外光谱检测仪图谱显示程序_第4页
毕业论文——微型近红外光谱检测仪图谱显示程序_第5页
免费预览已结束,剩余25页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中南民族大学毕业论文(设计)学院: 电子信息工程学院 专业: 电子信息工程 年级: 题目:微型近红外光谱检测仪图谱显示程序 学生姓名: 学号: 指导教师姓名: 职称: 20XX年X月XX日目录摘要:1Abstract11 绪论21.1 研究背景21.2 国内外研究现状21.3 研究意义41.4 本文组织结构42 QT开发环境的搭建52.1 linux下QT-Creator安装52.1.1 QT开发环境交叉编译器安装52.1.2 配置QT-Creator使其支持交叉编译62.1.3 QTcreator 版本设置62.2 移植tslib使开发板支持触屏操作72.3 linux下QT库的安装编译72.3.1 设置linux系统环境变量82.3.2 配置qt-everywhere-opensource82.3.3 编译安装qt-everywhere-opensource82.3.4 测试ARM版的qt库是否编译安装成功92.3.5 移植 qt4.8.5到开发板92.3.6导出QT环境变量102.3.7 开发板上测试QT程序是否可以运行103 微型近红外光谱检测仪图谱显示程序软件设计113.1 微型近红外光谱检测仪图谱显示程序软件设计流程图113.2 微型近红外光谱检测仪图谱显示程序代码结构133.2.1 微型近红外光谱检测仪图谱显示程序源代码文件133.2.2 微型近红外光谱检测仪图谱显示程序头文件143.2.3 微型近红外光谱检测仪图谱显示程序界面文件153.3 微型近红外光谱检测仪图谱显示程序界面设计153.3.1 微型近红外光谱检测仪图谱显示程序网格主界面设计163.3.2 微型近红外光谱检测仪图谱显示程序标签绘制173.4 光谱数据网络传输TCP数据包格式设计173.4.1 QDataStream 传递自定义结构体类型光谱数据173.5 qt_socket编程光谱数据传输C/S架构设计183.5.1 TCP协议连接特性183.5.2 微型近红外光谱检测仪图谱显示程序客户端设计193.5.3微型近红外光谱检测仪图谱显示程序客户端代码分析204 微型近红外光谱检测仪图谱显示程序光谱显示测试224.1 水果检测葡萄反射光谱波长与吸光度关系测试数据224.2 水果检测葡萄反射光谱波长与吸光度关系曲线图235 总结展望235.1 全文总结235.2 展望24致谢24参考文献25附录25微型近红外光谱检测仪图谱显示程序摘要:微型近红外光谱检测仪图谱显示程序用于显示光电探测设备采集的光电信号,通过前端光电探头采集光信号,经过光电转换电路设备转换为模拟电信号,将电信号经过滤波、除噪声以直观的曲线图形式呈现,在光谱分析技术领域给科研人员提供了直观、准确的数据。本文采用QTCreator图形界面集成开发环境设计微型近红外光谱检测仪图谱显示程序,以ARM 开发板、安卓手机等平台作为显示程序硬件平台,光信号转换的电信号数据来自前端采集设备经3G网络传输到远程服务器,服务器将经过滤波、除噪声处理的光谱数据发送到终端显示程序并显示。关键词:近红外光、光电转换、QT、光谱曲线Tiny near infrared spectrum monitor map display programAbstract: Tiny near infrared spectrum monitor map display program is used to display photoelectric signal of the photoelectric detection equipment acquisition, through collecting front-end photoelectric detector light signal, through the photoelectric conversion circuit devices converted into analog signal, will signal after filtering, in addition to the noise present in the form of intuitive graphs, in the field of spectral analysis technique provides researchers with intuitive, accurate data.Integrated development environment based on the QT Creator a graphical interface design tiny near infrared spectrum monitor map display program, to ARM development board, the android mobile phone platform for displaying program hardware platform, such as optical signal convert electrical signals from the front data acquisition equipment by the 3 g network transmission to the remote server, the server will through filtering, noise processing of spectrum and display the data sent to the terminal display program.Keywords: near-infrared light, photoelectric conversion, QT, spectral curve1 绪论1.1 研究背景红外光谱可分为近红外(7802500nm)、中红外(250025000nm)和远红外(250001000000nm)3个谱区。从20世纪50年代起就有近红外光谱分析仪器应用于农副产品的成分分析,但是由于当时的信息处理技术的限制,没有得到长足的进步。在进入20世纪80年代以后,计算机技术迅猛发展,使得化学计量方法通过计算机能够良好解决近红外光谱多元信息的处理和提取,并且在消除背景干扰方面也取得了良好的效果,人们真正认识到近红外光谱分析仪的价值,欧美发达国家相继进入广泛的研究开发阶段。近红外光谱检测仪在20世纪90年代初开始商品化,近年来,已经深入应用到许多领域,对生产技术和科学研究的发展起到了巨大的作用,在经济上产生了巨大的效益。本课题结合国内外相关研究,以水果成分的定性、定量检测为试验样本,采用前端红外光探测器扫描,将采集到的光谱经过光电转换电路和前置放大电路将光谱信号转换为电信号,并在服务器网站和手机终端上显示水果的成分光谱分析图,微型近红外光谱检测仪图谱显示程序主要实现食品成分光谱分析图的显示功能,终端程序主要应用平台为安卓手机、ARM+linux电子设备等一系列平台。1.2 国内外研究现状从上世纪80年代中期,人类已经开始对近红外光谱检测技术有一定的研究。到目前为止,近红外光谱技术已经走过了将近50多年的发展历程。国内外已经有30多家厂家生产不同用途的近红外光谱仪,仪器的设计方式、性能、测量方法都有很多变化。 光谱仪的主要技术指标慢慢趋于稳定,理论框架和制造技术也已趋成熟。国外近红外光谱技术在大型流程工业的应用越来越广泛和成熟,由于涉及商业机密、企业经济利益(如化工、石化、食品等领域)等原因,很多实际应用都没有得到推广。比如石化行业,据统计全球仅汽油调合装置只有几百套安装在线近红外光谱仪,其它主要炼油装置如催化重整和催化裂化也都以在线近红外光谱分析技术为基础实现优化控制操作。在农产品的现场收购环节,便携式、在线和台式近红外光谱被广泛用于按质论价的分析手段,比如,在日本就有 550 家果品等级分拣企业安装 2000 多台在线近红外分析仪。在制药领域,近红外光谱分析技术正在由可选方法(Alternative method)向一次方法(Primary method)进行革命性的转变。近红外技术的应用为上述行业带来丰厚的经济效益,已成为提高企业科学管理一种重要手段。美国、法国、 德国、丹麦、瑞士、加拿大和澳大利亚等官方机构为了解决模型维护问题,已经建立粮食、甘蔗和果品分析的近红外网络体系,这些网络主要由国家相关管理部门(国家网络中心)牵头, 由行业检验机构、研究机构、仪器厂家和用户组成。丹麦在1991年建立最早的近红外网络,目前最大的是法国的 Agroreso 近红外网络,包含1000多台仪器。实践证明,网络化技术是将近红外优势在实际应用中发挥到最大程度的一个重要途径。例如,法国、德国和丹麦等国家的近红外网络已覆盖几乎所有的粮食收购点,较好地解决收购现场粮食快速检测问题,真正实现谷物的优质优价及按质分类储存。近年来,国际近红外光谱技术应用的热点主要集中在能源领域(如燃料乙醇和生物柴油等)、精细化工(如农药合成以及高聚物合成等)、制药领域的原料品质检测、生产过程控制分析、以及产品质量的快速分析等。此外,近红外光谱成像技术作为传统近红外光谱分析技术的一种补充,也越来越多地被用于制药和化工等领域。我国从上世纪 80 年代中期在近红外光谱仪的研发方面做过大量的工作,曾研制出傅立叶变换型、滤光片型、阵列检测和光栅扫描型型仪器,并在农业和石化等领域得到应用。可是与国外同类先进产品相比,国产近红外光谱仪的性能指标(波长准确性和重复性、信噪比、光谱一致性等)与国外尚存在一定差距,测量设备也不够完善,有待提高。我国在近红外光谱技术的应用研究领域,已几乎涉及所有可能的领域,但大多数工作还处在尝试性研究阶段,离实际应用要求还有一定距离,需在建模采样数量、种类、稳健性、影响因素、和规范化操作等方面做系统性的研发工作。尽管在我国一些领域(例如炼油装置的在线分析、流通领域药品的真伪鉴别、烟草品质的快速分析等),近红外光谱技术正在发挥着重要的作用。 例如, 我国炼油企业已有近百套在线近红外光谱分析仪,我国的地方药监部门也配备几百台以近红外光谱仪为核心技术的药品检测车。但客观地讲,大多数在实际应用还是有一定距离。 这与我国当前的经济状况和科技发展有直接的关系,以炼油行业为例,国外一个炼厂的原油储量与其年加工量相当, 这意味着该炼厂一年的原油原料可以保持不变,柴油和汽油等产品性质的变化仅由加工装置较小的操作参数改变引起的,因此,在较长的时期内可以不必担心分析模型的适用性,模型几乎不需要扩充维护,可以长期稳定使用。而在我国,尤其是沿海炼厂,原油的储量仅为半个月或更短的加工量,且原油种类变换频繁,使汽油和柴油等产品的组成波动较大,分析模型也必须随之进行频繁的扩充更新,这在很大程度上限制近红外光谱技术优势的发挥。随着我国企业管理水平的不断提高, 例如通过原油调合技术保证原油进料的相对稳定,可使后续炼油产品品质在较小的范围内波动,这时近红外光谱技术就会发挥其本应有的作用。 1.3 研究意义本文结合国内外针对近红外光谱在石油、化工、食品检测等领域的应用研究为背景,提出终端节点采集光谱、服务器进行光谱滤波、转化处理、终端显示光谱曲线图为一体的系统架构,以3G网和以太网为数据传输渠道,实现光谱数据的远程实时传输;终端设备采用目前流行的安卓手机、ARM+Linux系统架构的电子设备为硬件平台,以QT应用程序为软件平台实现光谱数据的采样处理、数据传输,以及光谱曲线图的显示功能;设备简易轻巧,便于携带,为科研人员对近红外光谱检测技术的研究提供了方便实时检测、数据实时更新的便利。随着近红外光谱分析技术的快速发展,特别是微型化近红外光谱仪显现的独特优势,使微型化近红外光谱仪成为近年来世界各国研究的一个新兴发展方向。近红外光谱技术在食品有效成份定量、无损、快速、现场在线检测等领域的应用有着广阔的前景,在国外,近红外光谱检测仪的研究已经走过了50多年的发展历程,并且在不断完善中;我国的近红外光谱检测仪的研究仅仅经历20年的时间,目前还处于起步试验阶段;因此,进行微型近红外光谱仪系统的研究,应用背景迫切,具有重要的科学意义和实际应用价值。1.4 本文组织结构本文的结构如下,共分为五章:第一章:绪论,简要介绍红外光谱检测技术的应用背景、现状和意义。第二章:介绍微型红外光谱显示程序QT开发环境的搭建过程和QT移植到开发板平台的制作过程。第三章:介绍微型红外光谱显示程序界面设计、光谱数据网络传输数据格式设计、光谱曲线绘制程序实现等。第四章:介绍微型红外光谱显示程序对各类水果植物等光谱显示测试分析。第五章:对全文所做关于微型红外光谱显示程序设计与实现的工作进行总结,并阐述将来进一步的研究方向。2 QT开发环境的搭建2.1 linux下QT-Creator安装微型近红外光谱显示程序采用QT图形界面开发环境,如图1。QT图形界面开发环境相比较传统的VB、MFC图形界面开发环境,它具备跨平台开发的优势。它既可以开发GUI程序,也可以开发非GUI程序,比如控制台工具和服务器。正是基于QT可以跨平台开发的特性,结合项目中采用的OK335xS-II开发板平台,故采用QT图形开发环境设计近红外光谱波形显示程序。鉴于设计的微型近红外光图谱显示程序的运行平台为OK335xS-IIARM开发板的CPU内核,配套交叉编译器为arm-linux-gcc-4.4.3版本。图1 QT-creator开发环境2.1.1 QT开发环境交叉编译器安装将交叉编译器安装包拷贝到linux系统的/opt目录下,解压交叉编译器安装包。编辑/etc/profile配置文件,将export PATH=/opt/arm-linux-4.4.3/bin:$PATH添加到/etc/profile中去,设置好环境变量后,使用 source /etc/profile命令更新这个配置文件,然后使用arm-linux-gcc -v命令查看交叉编译器安装是否成功!如图2是交叉编译器安装成功的输出信息:图2 安装交叉编译器2.1.2 配置QT-Creator使其支持交叉编译项目使用的Qt Creator版本为2.7.1,Qt Creator安装比较简单,解压安装包之后按照安装提示一直点击下一步,直到安装完毕即可,安装完毕之后,还需要对Qt Creator进行相关的配置。点击Qt Creator的Tools 菜单下的 Options, 点击 Add 添加 GCC,然后点击 编译器路径添加交叉编译器(/opt/arm-linux-4.4.3/bin/arm-linux-g+)的路径,如图3:图3 QTcreator交叉编译器设置2.1.3 QTcreator 版本设置点击 Add 添加/usr/bin/qmake 文件添加进去之后,点击应用即配置完成,如图4:图4 QTcreator 版本设置2.2 移植tslib使开发板支持触屏操作tslib 是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。因此这里先编译安装 tslib,这样在后面编译 Qt 的时候才能打包编译进去。编译安装tslib前,需要先安装 autoconf、automake、libtool 包,Linux系统下执行以下命令安装autoconf、automake、libtool 包: skyyangCentos6 tslib-1.4$ sudo yum install autoconf skyyangCentos6 tslib-1.4$ sudo yum install automake skyyangCentos6 tslib-1.4$ sudo yum install libtool skyyangCentos6 tslib-1.4$ sudo yum install g+然后解压tslib-1.4.tar.bz2安装包,执行安装脚本./tslib.sh: skyyangCentos6 tslib-1.4$ tar -xvf tslib-1.4.tar.bz2 skyyangCentos6 tslib-1.4$ cd tslib skyyangCentos6 tslib-1.4$ sudo ./tslib.sh安装完成之后,默认安装到/usr/local/arm/tslib/下: skyyangCentos6 tslib$ ls /usr/local/arm/tslib/ bin etc include lib 将编译好的tslib库移植到开发板的/usr/lib目录下,文中采用的是使用tftp服务器将tslib下的库拷贝到开发板的指定目录下,需要保证开发板能上网 skyyangCentos6 tslib$ cp -arf lib/ /tftp bin etc include lib rootok335x:/home/forlinx/work/qt# tftp -gr lib.zip 72.3 linux下QT库的安装编译下载qt-everywhere-opensource-src-4.8.5.tar.gz到Linux系统的指定目录下,然后解压安装包: skyyangcentos6Qt-SDK$tar-xzf qt-opensource.tar.bz2 skyyangcentos6 Qt-SDK$ ls qt-everywhere-opensource-src-4.8.5 2.3.1 设置linux系统环境变量解压完成之后,需要进行系统环境变量的配置工作,进行QT库安装路径的配置、QT程序执行路径配置、QT程序运行依赖库路径配置以及QT使用帮助手册的配置,修改/etc/profile配置文件,将指定的QT配置添加到/etc/profile文件中,然后使用source /etc/profile文件更新配置文件,便可以查看到/etc/profile配置文件下添加了QT的配置信息,如图5:图5 QT库配置信息2.3.2 配置qt-everywhere-opensource首先指定交叉编译的路径/opt/arm-linux-gcc-4.4.3,设置QT库的安装路径/usr/local/arm/qt-4.8.5,添加开发板支持触屏操作的tslib头文件和库路径/usr/local/arm/tslib/include/和usr/local/arm/tslib/lib: ./configure -prefix /usr/local/arm/qt-4.8.5 -xplatform /opt/arm-linux-gcc-4.4.3 -I /usr/local/arm/tslib/include -L /usr/local/arm/tslib/lib2.3.3 编译安装qt-everywhere-opensource编译qt-everywhere-opensource-src-4.8.5过程需要一定的时间,正常电脑的配置需要1个小时左右的时间: skyyangCentos6qt-everywhere-opensource-src-4.8.5$ sudo ./qteverywhere.sh 2.3.4 测试ARM版的qt库是否编译安装成功查看qt编译程序qmake,出现以下信息,说明qt-everywhere-opensource安装成功: skyyangCentos6qt-everywhere-opensource-src-4.8.5$ /usr/local/arm/qt4.8.5/bin/qmake -v QMake version 2.01a Using Qt version 4.8.5 in /usr/local/arm/qt4.8.5/lib然后将/usr/local/arm/qt4.8.5/bin/下的qmake复制到/usr/bin/目录下,并修改为arm-qmake: skyyangCentos6 qt-everywhere-opensource-src-4.8.5$ sudo cp /usr/local/arm/qt4.8.5/bin/qmake /usr/bin/arm-qmake2.3.5 移植 qt4.8.5到开发板在PC的Linux系统上编译好qt库之后,我们需要将qt库拷贝到开发板上,使开发板支持运行QT程序。将qt-everywhere-opensource-src-4.8.5目录下的lib目录拷贝到开发板的指定目录下: skyyangCentos6 qt-everywhere-opensource-src-4.8.5$ cp -ar lib/libQt* lib/fonts/ ./qtlib/通过secureCRT串口终端程序将qt库经过tftfp服务器程序发送到开发板指定目录下,然后测试开发板和主机是否ping通,确定开发板可以连接主机就进行文件的传输: skyyangCentos6 qt-everywhere-opensource-src-4.8.5$ sz qtlib.zip rootok335x:/home/forlinx/work/qt# ping 7 PING 7 (7): 56 data bytes 64 bytes from 7: seq=0 ttl=128 time=1.686 ms 64 bytes from 7: seq=1 ttl=128 time=0.396 ms 64 bytes from 7: seq=2 ttl=128 time=0.431 ms rootok335x:/home/forlinx/work/qt# tftp -gr qtlib.zip 7 解压qtlib.tar.bz2到开发板的/usr/lib目录下: rootok335x:/home/forlinx/work/qt# unzip qtlib.zip -d /usr/lib rootok335x:/home/forlinx/work/qt# ls /usr/lib/qtlib/fonts libQtMultimedia.so.4.8.5 libQtSql.so.4.8.5libQt3Support.la libQtNetwork.la libQtSvg.la。拷贝qt-everywhere-opensource-src-4.8.5/demos/embeddeddialogs/这个目录下的embeddeddialogs到开发板上,并将embeddeddialogs放到/usr/bin下: skyyangCentos6 embeddeddialogs$ sz embeddeddialogs rootok335x:/home/forlinx/work/qt# tftp -gr embeddeddialogs 7 rootok335x:/home/forlinx/work/qt# mv embeddeddialogs /usr/bin/2.3.6导出QT环境变量QT环境变量的路径导出,要根据你自己将QT库放在哪个路径下的实际情况进行配置,Qt 环境变量说明如下:LD_LIBRARY_PATH:指定 qt 的共享库具体路径QT_QWS_FONTDIR:指定 qt 的 font 具体路径QWS_SIZE:设定在屏幕尺寸QWS_DISPLAY:指定的显示类型和帧缓冲区QWS_MOUSE_PROTO:指定触摸设备 rootok335x:/home/forlinx/work/qt# vi /etc/profile # qteverywhere config export QTDIR=/usr/lib/qtlib export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export QT_QWS_FONTDIR=$QTDIR/lib/fonts export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen02.3.7 开发板上测试QT程序是否可以运行修改embeddeddialogs的权限,然后执行embeddeddialogs程序,当你执行./embeddeddialogs -qws&,出现如图6现象,说明QT库移植开发板成功。 rootok335x:/usr/bin# cd /usr/bin/ rootok335x:/usr/bin# chmod 755 embeddeddialogs rootok335x:/usr/bin# ./embeddeddialogs -qws&图6 测试QT到此,微型近红外光谱图谱显示程序的软件设计的QT开发环境搭建完毕,显示程序硬件平台OK335X-II型号的ARM开发板支持QT显示程序运行的QT库也移植完毕,第3章之后将具体介绍微型近红外光图谱显示程序的软件设计与实现,以及微型近红外光图谱显示程序对不同水果的反射光谱的吸光度测试。3 微型近红外光谱检测仪图谱显示程序软件设计3.1 微型近红外光谱检测仪图谱显示程序软件设计流程图图7 红外光谱显示程序设计流程图3.2 微型近红外光谱检测仪图谱显示程序代码结构3.2.1 微型近红外光谱检测仪图谱显示程序源代码文件图8 光谱显示程序代码工程架构微型近红外光谱检测仪图谱显示程序的C+源码文件如图8所示,功能实现C+文件有三个:main.cpp、curve.cpp、smartcomlab_light.cpp,这三个文件分别实现以下功能:1. mian.cpp:主函数文件,代码实现的入口地址;2.curve.cpp:光谱曲线图绘制算法实现部分,用于将接收的光谱数据绘制成光谱曲线图;3.smartcomlab_light.cpp:微型近红外光谱显示程序界面设计函数实现、基于TCP协议传输光谱数据函数实现;3.2.2 微型近红外光谱检测仪图谱显示程序头文件图9 光谱显示程序代码工程架构微型近红外光谱检测仪图谱显示程序头文件如图9所示有:curve.h 、dialog.h 、Queue.h这三个文件主要声明以下变量:1. Curve.h:光谱曲线图绘制算法实现部分的函数、变量声明;2.smartcomlab_light.h微型近红外光谱显示程序界面设计函数、qt-socket编程等变量声明;3.Queue.h:微型近红外光谱显示程序界面尺寸、坐标位置等变量声明;3.2.3 微型近红外光谱检测仪图谱显示程序界面文件图3.4 光谱显示程序代码工程架构微型近红外光谱检测仪图谱显示程序界面文件如图9所示,用于设计微型近红外光谱检测仪图谱显示程序的界面:1.Smartcomlab.ui:界面文件主要用来设计界面的,根据微型近红外光谱检测仪图谱显示程序的设计要求,本文采用二维坐标显示光谱曲线图形式设计。3.3 微型近红外光谱检测仪图谱显示程序界面设计微型近红外光谱图谱显示程序的界面设计采用用QPainter类,界面设计的设备通常是主部件,也可以是QLabel部件或QTextEdit部件。绘图时首先都要定义一个QPainter类对象,绘图可以选择的工具主要有Qpen(画笔)、QBrush(画刷),使用Qpen写文本的时候,还可以指定字体。在进行QT绘图时,还需要重载QWidget类的paintEvent(QpaintEvent *)函数,该函数是受保护的虚函数,是绘制事件的函数,可以在派生类中被重新实现来接受绘图事件。微型近红外光谱检测仪图谱显示程序界面采用QT二维坐标形式设计,横坐标为采集光谱的波长范围,纵坐标为光谱波长对应的反射率,如图10。红外光照射下,不同的植物会反射出不同波长的光,不同波长的光对应着不同的反射率。正是根据这一特性,微型近红外光谱检测仪图谱显示程序采用多点坐标绘制曲线的思路进行设计。当点击接收按钮时,显示程序创建socket套接字,并向服务器发出接收光谱数据包的请求,服务响应客户端的请求后向客户端发送光谱数据包,显示程序接收到数据包之后进行解析,最终以光谱曲线图形式显示,为光学科研人员提供直观、准确的科学数据。图10 微型近红外光谱显示程序界面3.3.1 微型近红外光谱检测仪图谱显示程序网格主界面设计微型近红外光谱检测仪图谱显示程序网格主界面的设计主要调用QPainter类中的setpen成员函数和drawline成员函数进行网格线的绘制,调用setBrush成员函数和drawRect成员函数进行背景黑色框图的绘制。以下介绍网格主界面的具体函数实现: 1.Curve.h中定义QPainter类对象和画图句柄: QImage* m_pImage; / 曲线图句柄 QPainter* m_pPainter; / 画曲线图的Painter句柄 2.初始化网格主界面的大小、位置、背景颜色: int Curve:init(int gridSize, int xGridNum, int yGridNum, int min, int max)gridSize:每一个小网格的边长;xGridNum:横坐标网格数;yGridNum:纵坐标网格数;min:坐标最小值,为0;max:坐标最大值; 3.设置画笔、调用drawline()函数画网格: m_pPainter-setPen(Qt:darkGreen); /设置QT画笔颜色为黑绿色 / 画垂直坐标(竖着画网格线) for (int x = 0; x drawLine(x, 0, x, m_viewHeight); drawLine函数的实现原理是两点绘制一条直线,在画竖直网格线的时候,纵坐标y为两个固定值,一个为0,一个为y轴最大值,横坐标每隔一个小网格大小绘制一条直线。 / 画水平坐标(横着画网格线) for (int y = 0; y drawLine(0, y, m_viewWidth, y); 同理,横着画网格线的时候,横坐标x为两个固定值,一个为0,一个为x轴最大值,纵坐标每隔一个小网格大小绘制一条直线。红外光谱检测仪图谱显示程序网格主界面框架绘制: m_pPainter-drawRect(0, 0, m_viewWidth, m_viewHeight); /绘制背景框架3.3.2 微型近红外光谱检测仪图谱显示程序标签绘制 标签绘制代码的实现在smartcomlab_light.cpp文件中: label_3= new QLabel(this); /初始化标签 QFont lab_font; lab_font.setPointSize(10); /设置标签尺寸 label_3-setFont(lab_font); label_3-setText(智光-近红外光谱图); /写入标签文本 label_3-setGeometry(QRect(240,10,180,30); /设置标签坐标位置、大小 label_3-setFrameStyle(QFrame:Panel | QFrame:Sunken); /设置外观3.4 光谱数据网络传输TCP数据包格式设计3.4.1 QDataStream 传递自定义结构体类型光谱数据在QT开发中,QDataStream是侧重于数据格式和类型,QDataStream不仅可以操纵文本数据,还可以对QT规定的数据类型和开发者自己定义的数据类型进行操作、解析和传输。QDataStream将数据序列化,根据开发者定义的数据类型选择相应的操作进行解析传输数据。由于光谱数据采用的是二维坐标形式进行光谱曲线的绘制,因此光谱曲线上的每一个点必须有两个元素来表示,一个是横坐标x,代表采集光谱的波长,一个是纵坐标y,代表采集光谱的吸光度;为此,作者采用的是结构体类型的数据代表光谱数据的横坐标、纵坐标,考虑到光谱数据包的每次发送是连续的,所以采用结构体数组形式来存放一次发送的光谱数据,最后将打包封装好的光谱数据包通过TCP协议传输到客户端。光谱数据格式程序设计如下所示:#define MAX 100struct messge_test float x; /横坐标x:波长 float y; /纵坐标y:吸光度 message_rev; message_rev recv_dataMAX; /定义每次发送的光谱数据包为MAX个光谱数据点定义一个结构体message_rev用来代表光谱数据的每一个坐标点,x为横坐标光谱的波长,由于我们的光谱波长范围为7001700nm,因此用float型的数据表示足够,y代表吸光度,然后定义一个 recv_data类型的结构体数组用于存放一次发送的100个光谱坐标数据。3.5 qt_socket编程光谱数据传输C/S架构设计3.5.1 TCP协议连接特性TCP协议连接特性:TCP提供一种面向连接的、全双工的、可靠的字节流服务;在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP;TCP的接收端必须丢弃重复的数据;TCP对字节流的内容不作任何解释,对字节流的解释由TCP连接双方的应用层解释;TCP通过下列方式来提供可靠性:应用数据被分割成TCP认为最适合发送的数据块,称为报文段或段;TCP协议中采用自适应的超时及重传策略;TCP可以对收到的数据进行重新排序,然后将收到的数据以正确的顺序交给应用层;TCP的接收端必须丢弃重复的数据;TCP还能提供流量控制;TCP协议数据包传输原理如图11:图11 TCP协议连接结构图3.5.2 微型近红外光谱检测仪图谱显示程序客户端设计根据TCP协议连接的特性,为了保证服务器和客户端可以无差错的连接并及时显示光谱数据,微型近红外光谱检测仪图谱显示程序的光谱数据接收传输协议采用TCP协议与远程服务器进行连接,当客户端显示程序发出请求时建立一个socket连接,服务器时刻监听着客服端的请求,当有客户端显示程序发来请求时,服务器收到请求后发出应答信号,等待客户端确认回复,当再次收到客户端的确认回复信号之后,socket连接建立成功,服务器将处理好的光谱数据以TCP数据的形式发送给客户端显示程序,如图12:图12 TCP协议C/S架构图TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,我们可以关联这个信号到我们自己的槽函数,进行数据的发送。而在客户端,一旦有数据到来就会发出readyRead()信号,我们可以关联此信号,进行数据的接收。3.5.3微型近红外光谱检测仪图谱显示程序客户端代码分析在工程文件中添加如下代码使光谱检测仪图谱显示程序支持网络传输,由于作者使用的Qt Creator版本没有添加模块一项,我们就需要在工程文件中添加支持网络协议的模块,如图13:图13 QT支持网络模块添加在smartcomlab.h头文件中添加qt-socket编程的变量和私有槽函数,newConnect( )函数用于连接远程服务器,readMessage()函数用于读取服务器发送的数据,displayError()用于显示连接错误信息,如图14:图14 私有槽函数声明在smartcomlab.cpp中的构造函数中添加如下代码,如图15:图15 关联tcpSocket信号这里关联了tcpSocket的两个信号,当有数据到来时发出readyRead()信号,我们执行读取数据的readMessage()函数。当出现错误时发出error()信号,我们执行displayError()槽函数。newConnect函数的实现如下,tcpSocket-abort()用于取消已有的TCP连接,tcpSocket-connectToHost()用于连接服务器,获取服务器IP地址和端口号,如图16:图16 newConnect()函数实现readMessage()函数用于读取TCP数据传输过程中接收服务器发送过来的数据包,首先,开辟一段内存缓冲区recv_block用于存储socket数据,然后设置QT版本为4.6版本,在接收数据包的设计上,需要根据服务器发送的数据包长度和格式进行设计,由于服务器采用的是结构体数组形式进行光谱坐标数据的发送,所以客户端接收的数据格式也相应采用一个结构体数组进行接收,如图17:图17 readMessage()函数实现连接错误显示函数的设计比较简单,调用QT编程中的qDebug函数显示错误信息,如图18:图18 连接错误显示函数实现接收事件槽函数实现向服务器发送请求连接和数据的功能,当点击红外光谱检测仪图谱显示程序的接收按钮时,发送连接服务器信号,建立一个TCP连接,如图19:图19 连接服务器函数实现4 微型近红外光谱检测仪图谱显示程序光谱显示测试4.1 水果检测葡萄反射光谱波长与吸光度关系测试数据表1 葡萄反射光谱测试数据波长(nm)反射率(%)吸光度(%)7009.41572010.18574012.73476013.03278015.35480015.71282017.83784018.22286018.95988020.02690019.39992024.04194027.51896030.57698034.066100035.202102032.757104034.513106035.026108031.968110030.158112026.373114023.816116024.048118024.228120026.774122023.116124028.468126027.138128026.056注:由于光谱数据点数过多,本文只是截取部分数据予以展示,波长范围为700nm1700nm。4.2 水果检测葡萄反射光谱波长与吸光度关系曲线图葡萄反射光谱波长与吸光度关系曲线如图20:图20 葡萄反射光谱数据曲线图数据来源:湖北省武汉市洪山区中南民族大学电子信息工程学院智能光通信 实验室服务器。测试人员:曾宪炀、贾欣、蒋明伟、江维、完颜成立、刘爽。测试时间:2015年4月3日。5 总结展望5.1 全文总结微型近红外光谱检测仪图谱显示程序,用于近红外光在石油、化工、食品检测当中对采集的光谱数据以光谱曲线形式显示的方式,为科研人员在近红外光谱检测分析领域的研究提供了科学、准确的数据,本文着重讲述微型近红外光谱检测仪图谱显示程序的开发过程以及适用平台,主要工作内容如下:(1) 阐述本文的研究背景及意义,分析了国内外关于近红外光谱检测分析技术的发展现状。(2)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论