qt 光谱仪连接设置

主要完成功能:从光谱仪中,读取数据。

开始前准备:一:导入.h和lib文件到编译中,并且将dll文件放到生成的exe同名文件夹下

                      二:在.pro文件中声明lib的位置:

DISTFILES += \
    HYUVA6000.lib
LIBS+=-L$$PWD/./ -lHYUVA6000  //最主要是这个的添加  —L hou后面是文件所在目录$$PWD/代表当前目录,-l代表是文件名称  

 

主要分为两部:一:初始化,设置相关的参数。二:进行数据刷新读取

直接上代码

#include "connectspectrograph.h"
#include <HyCCDInterface.h>
#include <QDir>
#include <QFile>
#include <QDebug>
#include<QTimer>
#include<QObject>
#include<QMessageBox>
#include<QDialog>

/*
*  名称:     connectSpecttrograph
*   功能:     初始化,得到数据,开启定时器,设置定时时间
*   input:    frome_id
*   output:     null
*/
ConnectSpectrograph::ConnectSpectrograph(QObject *parent) : QObject(parent)
{
    Init();
    GetData();
    time->start(ConnectSpectrograph::flushtime);
    connect(time,SIGNAL(timeout()),this,SLOT(GetData()));
}
/*
*   名称:     connectSpecttrograph
*   功能:     将传入的参数传给对应的值,并开启定时器,设置定时时间
*   input:    frome_id
*   output:     null
*/
 ConnectSpectrograph::ConnectSpectrograph(UCHAR from_id){
    SetId(from_id);
    Init();
    GetData();
    time->start(ConnectSpectrograph::flushtime);
    connect(time,SIGNAL(timeout()),this,SLOT(GetData()));
}

/*************************************************************
名称:       Init
功能:       设置光谱仪。一:检查是否存在空间文件夹,并设置工作空间。
                        二:光谱仪以及光谱仪应用层初始化。
                        三:设置积分时间
                        四:得到像素点,给数据data开辟空间
input:null
output: null
**************************************************************/
void ConnectSpectrograph::Init(){//初始化光谱仪,设置工作区间,连接类型,判断是否连接

      //第一步,创建工作文件夹
    QDir dir;
    QFile file(path);
    if(!file.exists()){//判断如果文件夹不存在
        dir.mkdir(path);
        if(!dir.exists()){qDebug()<<"创建文件夹失败";}else{qDebug()<<"创建文件成功";}//  判断创建文件夹是否成功,不成功退出
    }else{qDebug()<<"文件已经存在";}

    //第二步,设置工作空间
    char *path2="workspace";
    qDebug()<< "设置工作空间"<<HYCCD_SetWorkDir(id,path2);

    //第三部,设置连接类型
    qDebug()<< "设置连接类型"<<HYCCD_SetDriverType(id,0);

    //查看连接的光谱仪个数
    qDebug()<<"连接的光谱仪个数"<<HYCCD_GetExistCCDNums();


    //调用光谱仪初始化函数
    if(HYCCD_CheckConnect(id)){                                                     //判断光谱仪连接状态
        if(HYCCD_Init(id)){qDebug()<<"光谱仪初始化成功";};
        if(HYCCD_App_Init(id)){
            qDebug()<<"应用层初始化成功";

        }else{qDebug()<<"应用层初始化失败";}
    }else{
        qDebug()<<"光谱仪连接有问题";
    }

              qDebug()<<"设置时间积分状态:"<<HYCCD_SetIntegrateTime(id,integratetime);//设置积分时间
              mens=HYCCD_GetMens(id);                                               //获取光谱像素点个数
              data=new float[mens];                                                 //为像素点的光强数据开设堆空间
              pointdata=new PointData[mens];
}


/*************************************************************
 *  名称:       GetData
 *  功能        获取数据
 *              一:将所有像素点的数据传给data
 *              二:取出想要提取波长段内的值,赋值给light  和wave
 *              三:提取每个像素点的波长以及其对应的光强,赋值给pointdata
 *              四:比较波长段内,记录最大光强的像素点位置 (注意,这里的这个位置,指的是在data中的位置)
 *  input        null
 *  output       null
 */

void ConnectSpectrograph::GetData(){//用来获取数据,同时把数据存到类的的light 和wave中
    emit update_data();                                                  //发出数据更新的信号
    HYCCD_App_UpdateData(id);                                            //每次获取数据时,更新应用层数据
    light.clear();                                                       //每次得到数据前 先格式化
    wave.clear();
    memset(pointdata,0,mens);
    qDebug()<<mens;
    HYCCD_GetData(id,data);
    for(int i=0;i<mens;i++){                                             //每个像素点的光强数据本来是存在data中,将波长以及光强导入light和wave中
        if(HYCCD_CalMenToWave(id,i)>=800&&HYCCD_CalMenToWave(id,i)<=1100){
            light.append((double)data[i]);
            wave.append((double)HYCCD_CalMenToWave(id,i));
            if(data[i]>data[max_light_men]){//判断当前的光强值是否大于记录光速点的光强值,如果大,则将当前的men像素点值赋值
                max_light_men=i;}
        }
        pointdata[i].light=data[i];
        pointdata[i].wave=HYCCD_CalMenToWave(id,i);
        qDebug()<<HYCCD_CalMenToWave(id,i)<<"波长的光强为:"<<*(data+i)<<"     当前的积分为:"<<integratetime;           //打出所有的数据

    }

}


/*********************
*   名称:                   SetIntegrateTime
*   功能                     设置积分时间
*                       一:更改类中记录积分时间的Integratetime值
*                       二:发出update_arguments的信号
*   input:            null
*   output:           null
*/

void ConnectSpectrograph::SetIntegrateTime(int It){//设置积分时间
    this->integratetime=It;
    HYCCD_SetIntegrateTime(id,integratetime);
    emit update_arguments();
}
/************************************************
*   名称:            SetFlushTime
*   功能              更改数据刷新时间
*   input:         null
*   output:         null
*
**************************************************/
void ConnectSpectrograph::SetFlushTime(int Ft){
    this->flushtime=Ft;
}

/***************
*   名称:             ConnectSpectrograph
*   功能:             设置连接光谱仪的id
*   input:            unsigned  from_id
*   output             null
*
*
*
*****/
void ConnectSpectrograph::SetId(UCHAR from_id){
    this->id=from_id;
}

动态库地址:光谱仪动态库

展开阅读全文

没有更多推荐了,返回首页