摘要:采用Labview作为开发工具,研制了一套功能齐全的伽玛能谱仪系统,实现多道脉冲幅度分析、谱分析的纯软件一体化。介绍了伽玛能谱仪系统软件的实现过程,讨论了设计的关键技术,实现了仪器仪表设计的计算机化。
关键词:伽玛能谱仪;计算机化;多道分析器
引言
伽玛射线能谱测量是一种重要的核地球物理方法,是解决地球科学、环境科学等有关问题的主要手段之一。随着科技的不断发展,伽玛能谱仪的研究技术不断趋于成熟,其设计朝着多道便携式、微机化、多功能的方向发展。先后出现了AMPTEK公司生产的GAMMA-8000(512道)[1]、Terraplus公司生产的GR320(可选道数256/512)[2]及北京核仪器厂生产的BH1936A(1024道)[3]。此类仪器设计均采用:伽玛能谱探测器、专用多道脉冲幅度分析器和计算机软件系统组成。因此,目前出现的能谱仪产品均是采用核探测器加上独立的多道脉冲幅度分析器,价格昂贵,缺乏灵活性和可扩充性。
虚拟仪器技术(VI)将计算机技术应用在仪器领域,改变传统仪器的应用方式,实现测量信息远程共享、综合分析、评估等功能。本文利用“软件就是仪器”的思想,结合软件工程设计原理完成虚拟仪器开发。其特色是在伽玛能谱仪的开发过程中引入了虚拟仪器技术,使开发出来的仪器不管是硬件还是软件都具有开放性、模块化、可重复互换性的特点。
1 硬件组成
能谱仪由伽玛能谱探头、通用数据采集卡和计算机系统组成。伽玛能谱探测器采用通用NaI 探头:信号幅度0.05-3.5V,输出信号幅度范围为0-6.8V,信号脉冲宽度1-5 μs,能量分辨率≤12%。通用数据采集卡采用Measurement Computing 公司的PCI-DAS4020/12,该卡为四道PCI 总线插卡,其模拟输入分辨率为12bits,采样速率可达20MHz [4]。计算机为普通台式计算机。组成伽玛能谱仪的硬件都是通用组件,开发者不需进行硬件电路设计。
2 软件设计
2.1 设计方案概述
本设计利用LabVIEW平台强大的开发功能进行前面板和测试功能程序设计。系统设计主要包含数据流管理、采集控制、多道幅度分析和谱分析等功能模块。
其工作过程可大致描述如下:通过数据采集模块完成数据采集,利用采集控制模块对数据进行有效地处理、传输及存储,然后将数据送入多道幅度分析模块完成谱数据的计算机化,与此同时,调用实时显示模块将谱数据以图形的形式进行显示。系统还提供了谱分析功能模块,根据用户的不同需要完成对谱数据的各种性能处理。
2.2 伽玛能谱仪面板设计
前面板设计采用符合Windows界面编制准则的菜单编辑器实现,菜单功能主要通过Event Structure结构完成[5-6],为用户提供简洁、友好的编辑环境。前面板主要包括:菜单、谱线显示窗口、采集控制、采集卡配置、含量信息显示等功能模块。
2.3 关键技术分析
在以软件为核心的虚拟仪器系统中,软件不但要完成对采集卡的控制,还要承担数据处理、显示、响应用户指令等一系列任务,有时还要完成远程数据传输;因此,系统开销很大,对实时性要求很高。以数据采集控制模块为例,在采集模块中要进行数据采集控制的同时,还要进行数据处理和显示。在尽可能的提高运行效率的同时,还要避免各个进程之间的速度不匹配,如:当数据采集模块运行速度快于数据分析模块运行速度,就会使某些数据得不到分析,反之,会使同一次采集到的数据进行多次分析,数据显示和数据分析模块速度不匹配的话,也会产生这种现象。
为满足实时性要求,并保证数据的完整性,系统设计了“Queue缓存多任务运行机制”:该机制采用先进先出(FIFO)的结构作为公共数据域,为各个功能模块提供独立又相互制约的数据通道。“Queue缓存多任务运行机制”利用队列缓存技术为三个进程提供数据缓存,进而制约了三个独立的进程之间的调用,从而解决了速度匹配问题。具体代码如图1所示:
程序中三个任务在独立的while循环线程中运行,程序开始时由Create Queue.vi创建了原始数据与分析数据两个队列,然后把采集到的数据由Insert Queue Element.vi插入到原始数据队列中,在第二个while中,由Remove Queue Element.vi把数据移出队列进行数据处理。通过队列Queue起到了约束、补偿的缓存作用,制约了三个线程的数据调用,使得三个独立的线程相互联系,避免了数据遗漏或是重复分析的情况。
图1 采用Queue技术的多线程采集程序
Fig.1 The multithreading gathering program using the Queue technology
2.4 功能模块设计
2.4.1 数据流管理
数据流操作与管理是测试系统软件开发的重要组成部分,根据能谱仪的实际需求,系统设计了以下几种文件类型:
(1)谱数据文件(.spe):文本文件类型,包含数据:2048道谱数据、采集时间、总峰数、U\Th\K含量。可在其他文本编辑器(如记事本)或电子表格(如EXCEL)中打开。谱文件读取对话框如图2所示。
图2 谱数据读取对话框
Fig.2 The dialog box about opening spectrum data
(2)加亮区文件(.roi):只包含0和1两种数值的数据,共2048个,其中道数值为’0’表示该道数据未选中,不属于加亮区;反之,值为’1’。用户可通过键盘左右方向键进行左、右选择加亮某道,加亮的某道数据以红色表示;可通过Del键来逐道删除所选加区。选定加亮区后,可根据需要保存加亮区。同时也可以直接打开已保存的加亮区文件。
(3)谱图文件 (.jpg):保存为jpg格式。用户只要单击“文件管理”à“谱图保存”菜单即可实现保存。谱图保存源码如图3所示:
图3 谱图保存LabVIEW源码
Fig.3 LabVIEW source code about saving spectrum show window as picture
(4)配置文件(.config):把用户常用的配置保存起来,想用的时候可以直接调用,以免重复设置。格式为:日期与时间+采样率+外触发+触发阈值+采集时间+谱数据存储地址+连续采集。采用LabVIEW提供的Open Config Data.vi、Write Key.vi等可完成配置文件的写入与读取操作。
2.4.2 多道脉冲幅度分析模块
系统通过数据采集模块将采样值读入内存缓冲区,完成从采集卡到系统之间的数据传输。虚拟多道脉冲幅度分析程序的功能就是针对内存缓冲区的数据进行寻峰,找出脉冲幅度值,然后对每个脉冲幅度进行分析,在幅度大小相应的道址上作加1计数。
LabVIEW库函数中提供了寻峰模块Peak Detector.vi,可直接对采样数据进行寻峰,得到峰位、幅度及方差等信息。但由于其通用性,降低了它的运行速度[7]。为了提高性能,系统利用运行速度更快的C语言自定义了寻峰模块的动态链接库,具体代码如下:
_deteSpec(dllexport) long PeakCheck(unsigned short int buffernum[], long size,
unsigned long peakdata[],unsigned short int threshold )
{long k, temp, count=0;
for(k=2;k