电源测试visa基本函数操作
1.viOpenDefaultRM();//建立资源管理器
2.viOpen();//根据GPIB地址—与之建立唯一的通讯描述符
3.viSetAttribute();//将描述符解析–不然无法在后面建立通讯
4.viWrite();//对仪器进行写命令—仪器的控制有特殊的字段–主要看什么仪器
5.viRead();//从仪器回读数据–一般是传出函数实现
6.viClose();//关通道----释放些数据–先关描述符–再关资源管理器
QT项目导入visa库的操作
工程下面写入:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = untitled1
TEMPLATE = app
SOURCES += main.cpp\
oi.cpp
HEADERS += oi.h \
visa.h
FORMS += oi.ui
win32{
INCLUDEPATH += "C:\Program Files\IVI Foundation\VISA\WinNT\Include"
LIBS += "C:\Program Files\IVI Foundation\VISA\WinNT\lib\msc\visa32.lib"
}
实例
int oi::DCsour(ViSession rmSession,QString dz,QString dop){
ViStatus nReturnStatus=0;
ViSession poi;
QString st1="GPIB0::";
st1=st1+dz+"::INSTR";
QByteArray sdd=st1.toLatin1();
char *stt1=sdd.data();
nReturnStatus=viOpen(rmSession,(ViRsrc)stt1,VI_NULL,VI_NULL,&poi);
QString dd="sour:volt ";
//字符串拼接
dd=dd+dop;
QByteArray ser=dd.toLatin1();
//长度
char *oopp=ser.data();
int strlen=dd.length();
ViBuf vibuff=(ViBuf)oopp;
nReturnStatus=viSetAttribute(poi,VI_ATTR_TMO_VALUE,VI_TRUE);
viWrite(poi,(ViBuf)"SOUR:CURR:LIM 50",17,VI_NULL);
viWrite(poi,(ViBuf)"source:current 50.",18,VI_NULL);
viWrite(poi,(ViBuf)"SOUR:VOLT:PROT 100.",20,VI_NULL);
viWrite(poi,vibuff,strlen,VI_NULL);
viWrite(poi,(ViBuf)"OUTP:STAT ON.",13,VI_NULL);
viWrite(poi,(ViBuf)"MEAS:VOLT?.",11,VI_NULL);
viClose(poi);
return 0;
}
//获取数据
void Widget::tim(){
QString dz=ui->comboBox->currentText();
QString st1="GPIB0::";
st1=st1+dz+"::INSTR";
QByteArray sdd=st1.toLatin1();
char *stta1=sdd.data();
ViStatus nReturnStatus=0;
ViSession rmSession,poi;
nReturnStatus=viOpenDefaultRM(&rmSession);
nReturnStatus=viOpen(rmSession,(ViRsrc)stta1,VI_NULL,VI_NULL,&poi);
nReturnStatus=viSetAttribute(poi,VI_ATTR_TMO_VALUE,VI_TRUE);
viWrite(poi,(ViBuf)"MEAS:VOLT?",(ViUInt32)strlen("MEAS:VOLT?"),VI_NULL);
viRead(poi,(ViBuf)output,1024,VI_NULL);
viWrite(poi,(ViBuf)"MEASure:Current?",(ViUInt32)strlen("MEASure:Current?"),VI_NULL);
viRead(poi,(ViBuf)outputcc,1024,VI_NULL);
viClose(poi);
viClose(rmSession);
//float pp=((QString)output)*(outputcc);
//char*{char数组}--转float---先转QString再toFloat
QString i1=(QString)output;
QString i2=(QString)outputcc;
float pp1=i1.toFloat()*i2.toFloat();
//QString能直接进行字符串拼接
//float转QString
QString pp= QString("%1").arg(pp1);
ui->label->setText((QString)output);
ui->label_4->setText((QString)outputcc);
ui->label_8->setText((QString)pp);
}
QT静态编译
1.将可执exe拷到一个空文件夹下面
2.执行Qt 5.3 for Desktop (MinGW 4.8 32 bit),不同版本名字稍有不同
3.在打开的执行窗口下,cd到你刚才文件夹的目录下
4.执行windeployqt untitled.exe