(C++)viScanf读取不到数据的解决办法

我们在开发仪器自动化程序时一般会调用viPrintf来发送命令控制仪器,然后一般性地会想到viScanf来获取仪器返回的数据,然并卵。

最终实验viRead成功读取,原因不详。

另注:viPrintf(vi, "*RST\n"); 每个命令后必须加\n,否则“害人”啊!!!

另一个问题: 这个告诉我,以后如果没有GPIB也许可以用网线连接设备操作?也许可以试试,应该是那些标示具有网络通讯方式的设备才可以.

使用LAN口与安捷伦矢量网络分析仪建立通讯,向网络分析仪发送指令,然后读取返回的数据,但显示的时候总是无法实现,经过验证,感觉 是viscanf函数在读取数据时出了问题,可是又不知道问题在哪,求各位大侠指教!

下面是使用c++编写的程序

#include "visa.h"

#include <stdio.h>

#pragma comment(lib, "visa32.lib")

void main () {

ViSession defaultRM, vi;

char buf[256]={0};

viOpenDefaultRM (&defaultRM);//建立会话通道

viOpen (defaultRM, "TCPIP0::192.168.0.2::5025::SOCKET", VI_NULL,VI_NULL, &vi);

viPrintf (vi, "*IDN?\n");//发送查询指令

viScanf (vi, "%t\n", &buf);//读取结果

printf ("Instrument identification string: %s\n", buf);//打印结果

viClose (vi);//关闭会话通道

viClose (defaultRM);

}

简单程控keithly2400万用表(MFC)

https://blog.csdn.net/weixin_38198630/article/details/78409432

在做测试的过程中,无可避免要使用仪器,有些时候需要速度较快的读数,此时就需要程控这些仪器来实现了。刚开始没有接触的时候觉得这个东西太难了,经过这次的试验之后发现其实程控仪器是有规律可寻的。并不是想象中的那么难。程控仪器主要使用的是SCPI标准语法。可编程仪器标准命令(英语:Standard Commands for Programmable Instruments,缩写:SCPI)定义了一套用于控制可编程测试测量仪器的标准语法和命令。http://blog.sina.com.cn/s/blog_a8b07c9801014o5k.html这个博客简要的介绍SCPI语法,并且有提供例子,这是我找到的比较全面、易懂的的SCPI语法表了。同时,还要给电脑安装仪器的驱动,用来识别仪器,以及和仪器之间的通信。需要下载的可以到这个网站进行下载,绝对安全靠http://www.keysight.com/main/software.jspx?cc=CN&lc=chi&ckey=2175637&nid=-536900526.697048.02&id=2175637&ml=chi。而且这个驱动支持绝大多数的仪器。

程控仪器用到的另一个就是visa库,这个库提供函数来和仪器之间进行通信。我写的程控2400的程序比较简单,其功能就是能够当电流表使用,读出电流值;另外,可以当电压表,设置输出的电压。(2400功能比较全,既可以当万用表,也可以当源表来使用)。程序的开发步骤大致是以下几步:

step1:打开缺省的设备资源,然后再打开2400的设备资源

ViSession m_VisSessionRM;//定义缺省设备资源

ViSession m_ViSessionKeithley;//定义2400设备资源

viOpenDefaultRM(&m_VisSessionRM);//打开缺省资源

viOpen(m_VisSessionRM, "GPIB0::30::INSTR", VI_NULL, VI_NULL, &m_ViSessionKeithley)//打开2400资源

“GPIB0::30::INSTR”中的30表示我使用的2400的GPIB的通道是30,所以不同的仪器可能是不同的。但是是可以通过2400的面板进行设置的。

step2:读取电压表(电流表)读数

char *CurrentValue=new char[255];

viPrintf(dlg->m_ViSessionKeithley, "READ?\n");

viScanf(dlg->m_ViSessionKeithley, "%t", CurrentValue);

“READ?”就是在SCPI的语法表里面读到的。温馨提示,每次发送的命令都必须要以“\n”结尾,比如“READ?\n”,要不然仪器无法识别,我在2400上实验过了。

step3:将2400设置成电压源,并设置输出的电压

char *voltBuf = new char[255];

viPrintf(m_ViSessionKeithley, ":SOUR:VOLT:LEV %d\n",m_voltageValue);//将2400设置成电压源,并设置输出电压

viPrintf(m_ViSessionKeithley, "OUTP ON\n");//输出设置的电压值

viPrintf(m_ViSessionKeithley, "READ?\n");//发送读数的命令

viScanf(m_ViSessionKeithley, "%t",voltBuf);//把2400读数存储到voltbuf中

“:SOUR:VOLT:LEV %d\n”这条命令中有空格要注意。这条命令并不是SCPI的标准的命令,这是我在2400的产品手册上面看到的。所以如果需要开发其他的功能的话还需要查看参考手册上面提供的指令。

以上就是我开发所使用到的资源和资料了,有需要开发的可以参看参考。另外,如果有写的不对的地方,欢迎批评指正。

原文链接:https://blog.csdn.net/weixin_38198630/article/details/78409432

viPrintf和viRead的区别

viPrintf:

CVI里面的说明如下

Converts, formats, and writes the data designated by the format

string to the instrument. The data to be written is in the

argument(s) specified by the format string. This operation

returns when the transfer terminates.

This operation applies to the VISA INSTR session type.

参数说明

ViSession Instrument_Handle,:仪器句柄

ViString Write_Format_String :格式化串

最后一个参数是需要格式化的内容,如果有多个可以通过分号隔开。

注意:

对于格式化输入类别的函数,类似Printf  viPrint函数中, 对于字符串,必须要增加\n作为结束标志,否则系统不会正常输出,

因此viPrintf(InsHandle,"*IDN?\n");//正确用法

viPrintf(InsHandle,"*IDN?");//错误用法

网上的说明如下:

标准输入输出都是带有缓存的,一般是行缓存。对于标准输出,需要输出的数据并不是直接输出到终端上,而是首先缓存到某个地方,当遇到行刷新标志或者该缓存已满的情况下,才会把缓存的数据显示到终端设备上。ANSI C中定义换行符'\n'可以认为是行刷新标志。所以,printf函数没有带'\n'是不会自动刷新输出流,直至缓存被填满。

VIPrintf的功能包括Converts,、formats和writes三个操作,执行viPrintf(InsHandle,"*IDN?\n"); 从NISPI上监控到的执行过程就是

Formatted viWrite (GPIB0::5::INSTR (0x02316370), "*IDN?.", 6, 6) 。

viWrite:

Writes data to a device. The data to be written is in the specified Buffer. This operation returns when the transfer terminates.

This operation applies to the VISA INSTR session type.

-------------------- Prototype ---------------------

ViStatus viWrite (ViSession Instrument_Handle, ViBuf Buffer,

ViUInt32 Count, ViPUInt32 Return_Count);

viWrite和viPrintf的差异

viPrintf可以一次输入多个指令,viWrite只能写入一个指令。

viPrintf(InsHandle,"%s,%s","*RST\n","*CLS\n");

viPrintF后面其实还是调用了viWrite;

试水VISA编程(1)——对仪器的基本的控制

https://blog.csdn.net/leokingszx/article/details/78796034

由于项目所需,要编写上位机控仪器实现所谓一键读取数据的功能。于是乎不得不学习点VISA编程。研究了一阵子手册,明白了发送命令的方式。使用的仪器是安捷伦的DSO-X 3034A。

1、在https://www.keysight.com/main/techSupport.jspx?cc=CN&lc=chi&nid=-32540.1150200&pid=x201847&pageMode=PL&t=79841.g.1 下载Programmer's Guide for InfiniiVision 3000 X-Series Oscilloscopes。  仔细研究手册可以解决大部分问题。

2、下载IO library后,将仪器和电脑用USB连接,既可以在IO library上找到仪器。

3、打开 Interactive IO,之后就可以输入命令了。以输出VPP为例。其测量命令为:MEASure:VPP? CHANNEL1     (测量一通道的VPP的值)

解释:

测量VPP的语句是    :MEASure:VPP? [<source>]      主要是[<source>]令人困惑。而 <source> ::= {CHANnel<n> | FUNCtion | MATH | WMEMory<r>}

该如何理解呢?

在目录里找到 SynTax Elements,而后理解到  [ ],代表可选的。{ }和 其中 | 的组合,表示可选其中的一个值。又注意到 <n>代表数字,所以,

MEASure:VPP? CHANNEL1   就代表测量1通道的峰峰值了。那什么时候取Function 和Math等呢?不得而知。。反正项目里应该用不到。

然后就该上硬菜,进行编程了!

————————————————

版权声明:本文为CSDN博主「码破苍穹」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/leokingszx/article/details/78796034

Keysight_Instrument_Control_DVD_10_2019.iso的下载地址 有3.07GB

https://download.keysight.com/AS/Bundle/Keysight_Instrument_Control_DVD_10_2019.iso?id=3077333&dl=1&authparam=1579512216_9d025837fdf7240e861b41e28d551080

更多介绍:

This no cost download includes all three Keysight instrument control software packages. Download this bundle for simple installation and flexible instrument connectivity.

The download bundle includes:

  • IO Libraries Suite: for discovering and connecting instruments.
  • Command Expert: for building instrument control applications.
  • BenchVue Platform: for viewing and capturing instrument data with no programming.

This .iso file can be burned onto a DVD for installation in secure labs or labs without internet connectivity. Includes IO Libraries Suite 2019 Update 1, BenchVue 2019 including Apps, Command Expert 2019 but with offline command sets from 2018.

www.keysight.com 是德科技

Keysight

安捷伦与是德科技关系

来源:电子发烧友网• 2018-03-15 15:29 • 46099次阅读  0

是德科技

是德科技(中国)有限公司于1999-09-02在北京市工商行政管理局登记成立。法定代表人严中毅,公司经营范围包括高技术应用软件产品及其附件、测试测量仪器等。

是德科技公司(NYSE:KEYS)是全球领先的电子测量公司,通过在无线、模块化和软件解决方案等领域的不断创新,为您提供全新的测量体验。是德科技与惠普和安捷伦一脉相承,因此拥有世界一流的测量平台、软件和一致性测量技术,为无线通信、航空航天与国防以及半导体等市场提供最先进的测量解决方案。公司拥有 9,500 名员工,遍及全球 100 多个国家,为客户提供卓越服务。

安捷伦与是德科技关系

是德科技公司的业务起源于美国惠普公司,是惠普公司电子测量集团1999年经重组成为安捷伦科技、2014年再次分拆上市而成立的一家高科技跨国公司。

安捷伦科技

安捷伦科技有限公司是一家多元化的高科技跨国公司,它于1999年从惠普研发有限合伙公司中分离出来,主要致力于通讯和生命科学两个领域内产品的研制开发、生产销售和技术服务等工作。负责安捷伦全方位的业务,市场销售和技术支持;在北京、上海、广州、深圳、成都、沈阳、西安设有办公室。其为中美合资企业。

安捷伦科技(上海)有限公司是安捷伦进入中国市场20多年以来最大的单项投资,主要从事面向全球市场的产品研究、开发和生产制造。其下面有针对生命科学和化学分析市场的制造/研发中心和针对半导体市场的半导体测试应用研发中心。这两个中心在安捷伦产品的研发中都有十分重要的地位。安捷伦科技(上海)有限公司为中美合资企业。

安捷伦与是德科技关系

原链接:http://www.elecfans.com/d/648016.html

安捷伦科技贸易(上海)有限公司是安捷伦的全资子公司,旨在为其在中国的制造业客户发展世界领先的供应链。该贸易公司首先将与安捷伦科技半导体产品业务合作,并预计在晚些时候也将为安捷伦其它业务提供服务。该公司位于上海市外高桥保税区。

安捷伦与是德科技关系

安捷伦科技公司于2013 年9 月19 日宣布将公司拆分为两家公开上市的企业,原安捷伦电子测量事业部成立为全新的是德科技有限公司(Keysight Technologies, Inc)。是德科技自2014 年8 月1 日起作为安捷伦的全资子公司进入试运营。预计2014 年11 月初,是德科技将完全独立运营。是德科技计划在纽约证券交易所挂牌上市,股票交易代码为KEYS。

安捷伦已经更名为是德科技

安捷伦科技公司(纽约证交所:A)公布新的电子测量公司名称——“Keysight Technologies”,中文名为“是德科技”。新公司于2014年11月初正式独立运营。 新公司名称“Keysight Technologies(是德科技)”表达了公司对测量科技深入独到的认知,为不断变化的技术领域带来敏锐洞察力,帮助客户 、公司和员工取得成功。新公司的品牌标语为“传承75年创新史,开启测量新视野”。1939年成立的惠普公司起源于电子测量,“Keysight Technologies(是德科技)”将这一业务传承至今,并将继续发扬光大。 是德科技公司总裁兼首席执行官Ron Nersesian解释说:“Keysight Technologies(是德科技)体现了我们的丰厚底蕴,既沿袭了‘惠普之道’ 的正直与创新,又代表了安捷伦世界领先的测量业务。新公司名称秉承了公 司文化精髓,即创新、洞察和远见。是德科技自诞生之日起,就已 经拥有众多‘业界第一’,这些‘业界第一’可追溯至硅谷建立之初。我们将全力帮助客户实现更 多‘业界第一’,为客户开启测量新视野, 助力其将新一代技术推广到世界各地。” 新公司中文名“是德科技”,带有浓厚的中国文化气息,也彰显出公司长期植根中国的底蕴。以“是”命名,体现测量科技对于自然世界的本 质规律、基准的不断探索;以“德”命名,体现对高尚行为规范、诚实正直等原则的追求与承诺。 是德科技将完全专注于电子测量行业,潜心服务该行业测试测量领域的客户。目前,作为安捷伦业务的重要组成部分,电子测量业务在测试测 量行业保持全球 领先地位,并在无线通信系统、航空与国防、工业、计算机及半导体等行业市场独占鳌头。是德科技将拥有安捷伦的全线电子 测量产品,同时拥有测试测量行业最大 的销售和支持团队。 是德科技预计将于2014年11月初成为独立公司,总部将设在加利福尼亚州的圣罗莎市,并将在全球运营,员工总数约9500人。

是德科技是全球电子测量技术和市场的领导者,致力于推动无线通信、模块化和软件解决方案的持续创新,专注于为客户提供卓越的测量体验。是德科技提供电子测量仪器、系统和相关软件,以及软件设计工具和服务,广泛应用于电子设备的设计、研发、制造、安装、部署和运营。

agilent是Keysight的前身。是德科技/Keysight,最早是惠普公司,大概在1998年与民用设备分家,更名安捷伦/Agilent。

问: 今天在用VC调aglient示波器时,有一个示例中的语句ViScanf没有看懂,求指教

viScanf(vi, "%#b\n", &data_length, ieeeblock_data);

%#b是什么意思?

&data_length, ieeeblock_data这两个是干什么的?看了好几遍,也查了相关文档,还是不知所云,求指点!

该语句来自安捷伦示波器的官方文档E8251-90355.pdf的程序示例部分,该段程序如下:

/* Query for an IEEE definite-length block result.

* --------------------------------------------------------------- */

int do_query_ieeeblock(query)

char *query;

{

char message[80];

int data_length;

strcpy(message, query);

strcat(message, "\n");

err = viPrintf(vi, message);

if (err != VI_SUCCESS) error_handler();

data_length = IEEEBLOCK_SPACE;

err = viScanf(vi, "%#b\n", &data_length, ieeeblock_data);

if (err != VI_SUCCESS) error_handler();

if (data_length == IEEEBLOCK_SPACE )

{

printf("IEEE block buffer full: ");

printf("May not have received all data.\n");

}

check_instrument_errors();

return(data_length);

}

既然看到了就解释一下吧,权当参考

正是因为这个%#b中的“#”,所以决定了后面两个变量(必须是两个)的类型。%b与%s功能类似,只不过这个地方是aglient某种特定数据类型数组的引用而已。

1、因数组涉及到大小,所以后面这个data_length定义的就是这个数组的最大长度,只不过因为“#”的原因,这里需要的是一个整形的引用,即&data_length

2、ieeeblock_data就是用来保存visanf()操作后的数据

搜集到的visa几个文章资料相关推荐

  1. 美赛经验分享(2020):个人经验/参考文章/资料分享/参赛注意事项/17-19年o奖论文阅读总结分享

    美赛经验汇总 因为参加了2020年美赛(2月份那一场),所以在这里共享一下所有过程中的经验和文件,算是一种记录,也希望能对大家有所帮助(ง •_•)ง 主要内容是: 比赛前 个人准备过程中的经验.准备 ...

  2. Asp.net 文章资料整理

    如何在数据层分页以提高性能 为gridview添加删除提示. 解决ASP 2.0中GridView控件的删除.插入.编辑命令操作客户端确认问题的另一方法 基于.net开发平台项目案例集锦 EnterP ...

  3. 一些文章资料地址记录

    采购提前期与工作日历的矛盾 http://www.itpub.net/500986,2.html 采购提前期的总结 http://www.itpub.net/714131.html BI.数据仓库.E ...

  4. Shiro相关文章资料

    http://www.tuicool.com/articles/AFFBre 转载于:https://www.cnblogs.com/daxin/p/5086279.html

  5. 收集各种文章资料的URL 不断更新

    10. 9.机器学习 链接 转自http://www.cnblogs.com/kshenf/archive/2012/06/14/2548708.html 1.机器学习开源软件网(收录了各种机器学习的 ...

  6. 大数据信息资料采集:文化公众号槽边往事历史文章搜集评论爬取

    大数据信息资料采集:文化公众号槽边往事历史文章搜集评论爬取 大数据信息资料采集 公众号历史文章采集 公众号评论爬取 微信公众号历史文章导出 抓取微信公众号所有文章. 公众号文章抓取工具 抓取公众号所有 ...

  7. 搜集一些折纸首饰的资料

    为了搜集折纸首饰的资料,您可以尝试以下方法: 浏览网站:您可以在艺术和手工艺类网站上搜索关于折纸首饰的信息. 查看书籍:有关折纸首饰的书籍和杂志可以在图书馆或当地书店购买. 观看视频:您可以在视频分享 ...

  8. “CTO嫌弃我读书太少!” 假期里如何更高效的阅读?老K的3张专辑文章,读个痛快!...

    作者| Mr.K  来源| 技术领导力(ID:jishulingdaoli) 许多读者向老K请教,如何高效阅读? 学习是一辈子的事情,时间告诉我们,无理取闹的年龄过了,到了该装逼的时候了. 谈谈自己对 ...

  9. 中国HBase技术社区第一届Meetup资料大合集

    2018年6月6号,由中国HBase技术社区组织,阿里云主办的中国第一次HBase Meetup在北京望京阿里中心举行,来自阿里.小米.滴滴.360等公司的各位HBase的PMC.committer共 ...

最新文章

  1. 【数论基础】有关素数的基础算法(内含三种筛法,低至O(N^(2/3))!)
  2. JVM 性能调优之定位问题
  3. ScribeFireBlog 发的一篇在Cnblogs的日志
  4. linux 死锁分析
  5. Windows PE 第十二章 PE变形技术
  6. java找出两个字符串中所有共同的子串_【Java笔记】
  7. Rk3288运行linux,查看“Firefly-rk3288 build linux”的源代码
  8. 牛客网 在线编程 猫狗收容所
  9. OpenJudge NOI 1.2 05:填空:类型转换2
  10. 自然语言处理-LDA建模代码
  11. 微信小程序------媒体组件(视频,音乐,图片)
  12. Android Activity防劫持方案
  13. 质量名人简介——朱兰(Joseph H.Juran)(转载)
  14. Servlet容器与Web容器详解
  15. linux:tcgetattr 函数功能和使用场景
  16. 软硬一体的算法实践,阿里云如何以算法实现场景 “再创新”?
  17. 闲话复数(2)——欧拉公式
  18. 笨方法学python 习题34
  19. 怎么理解TPS、QPS、RT、吞吐量这些性能指标?
  20. java学习体会论文_关于学习java的心得体会

热门文章

  1. 容器云系列之Docker容器资源隔离
  2. 使用MongoShake实现MongoDB数据实时导入Kafka
  3. Mybatis入门练手
  4. 港科夜闻|香港特别行政区候任行政长官李家超先生于6月6日上午会见香港科大(广州)倪明选校长一行...
  5. utorrent linux安装路径,debian下uTorrent的安装及配置方法
  6. fcitx4.2.0自定义中文标点符号
  7. 常见的Web攻击方式有哪些?黑客:28种总有一款适合你
  8. 今日份《可复制的领导力》朗读分享会
  9. 快速入门openldap
  10. 双非计算机研究生怎么提升自己,3篇EI超速背景提升,双非的我终于可以冲击名校啦!...