主要功能: 通过源表获取源表的测量数值,控制源表的量程等
使用库:VISA库
下载连接: https://download.ni.com/support/nipkg/products/ni-v/ni-visa/21.5/online/ni-visa_21.5_online.exe (安装之后可以使用IO Strace进行抓包, 方便调试)
连接方式: RS232
参考资料:2600AS-900-01_B-Sep2008_User 下载连接: https://download.tek.com/manual/2600AS-900-01_B-Sep2008_User.pdf
不知为啥源表通过LAN口连接不上,可以ping通,也可以进入设备 *** 作网页,使用IO软件扫不到,遂转用RS232串口控制
使用RS232串口通过VISA库发送指令后,没有返回信息,但使用KeySight IO软件可以正常通信,查找资料后发现可以通过NI 的 IO Strace抓包(必须使用NI的VISA库, 使用Kyesight的Visa库抓不到),在网上找到一个labview的程序,发现可以抓到包,就对比了两个程序抓包后的数据,发现使用的发送函数不一样,刚开始我是通过viWrite函数直接发送数据的,通过抓包看可以发现viWrite是写入成功的,但是发送的指令仪器并没有反应,使用viRead函数也获取不到任何信息,使用 *IDN?命令也获取不到机器信息
查阅Visa库资料后发现还有viPrintf函数可以发送指令数据,遂使用viPrintf测试,发现可以发送,并正常接收数据
发送程序 QString cmd = ui->le_cmd->text();
qDebug() << "Send cmd: " << cmd;
status_ = viPrintf(cur_connect_instr_, "%s\n",cmd.toStdString().data());
if (status_ != VI_SUCCESS)
{
qDebug() << "error occur";
}
接收程序
char read_buf[512];
ViUInt32 recv_len = 1000; //设置读取长度
ViUInt32 recv_ret_len; //实际读取长度
status_ = viRead(cur_connect_instr_, (ViPBuf)read_buf, recv_len, &recv_ret_len);
if (status_ != VI_SUCCESS)
{
qDebug() << "Read error occur!";
return ;
}
qDebug() << "Recv len: " << recv_ret_len;
正常通信之后就是对2612A的控制,刚开始以为使用IEEE488指令就可以获取到仪器的数据,查阅参考手册后发现通过TSP命令控制/获取仪器数据
获取仪器电压测量数据程序:
bool VISA_2612A::getMeasureVoltage(double &_vol)
{
status_ = viPrintf(cur_connect_instr_, "print(smua.measure.v())\n");
if (status_ != VI_SUCCESS)
{
qDebug() << "error occur";
return false;
}
status_ = viRead(cur_connect_instr_, (ViPBuf)read_buf_, recv_len_, &recv_ret_len_);
if (status_ != VI_SUCCESS)
{
qDebug() << "Read error occur!";
return false;
}
qDebug() << "Recv len: " << recv_ret_len_;
read_buf_[recv_ret_len_] = ';'setText
ui->te_recv->()read_buf_;=
QString str_num ; read_buf_bool
= ok false ;=
_vol . str_numtoDouble(&)ok;if
()okreturn
{
true ;}
elsereturn
{
false ;}
}
暂只写一个示例,其他可参考手册
程序下载:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)