Error[8]: Undefined offset: 177, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

Source Meter源表 (KEITHEY)2600系列,2612A程控开发(C++) 基本介绍

主要功能: 通过源表获取源表的测量数值,控制源表的量程等
使用库: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 ;}
    }
[+++]

暂只写一个示例,其他可参考手册
程序下载:

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
吉时利2600系列,2612A程控开发(C++)_C_内存溢出

吉时利2600系列,2612A程控开发(C++)

吉时利2600系列,2612A程控开发(C++),第1张

Source Meter源表 (KEITHEY)2600系列,2612A程控开发(C++) 基本介绍

主要功能: 通过源表获取源表的测量数值,控制源表的量程等
使用库: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 ;}
    }

暂只写一个示例,其他可参考手册
程序下载:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/867443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-12
下一篇 2022-05-12

发表评论

登录后才能评论

评论列表(0条)

保存