图片缩略图

通过标准VISA接口从安捷伦示波器捕获波形

version 1.3.0.1 (3.44 KB) by 维诺德
MATLAB的例子捕捉波形从安捷伦示波器和抓取屏幕截图。
5.0
5的评级

25下载

更新2016年9月01日

视图版本历史

查看许可协议

MATLAB是一种软件环境和编程语言,拥有超过100万用户。MATLAB扩展了安捷伦示波器的功能,使您能够分析和可视化实时或采集的示波器信号,进行特定应用程序的测量,创建和应用您自己的滤波器和均衡方法,并进行自动化测试。
这个例子向您展示了如何使用MATLAB来控制安捷伦示波器,捕获波形并在仪器上抓取屏幕截图。用户可以自定义代码,以允许不同的分段点数,抽样率等。有关用于控制仪器的SCPI命令的更多信息,请参阅仪器的程序员指南。

要执行此示例,请在MATLAB命令窗口中输入' SCPIScope '。注意:在scopcope中更改VISA资源字符串。m文件到仪器的签证地址,如从安捷伦连接专家获得。

这个MATLAB示例已经在Agilent MSO6104A InfiniiVision示波器上进行了测试,但应该在大多数Agilent InfiniiVision 5000, 6000和7000系列示波器上工作。根据您仪器的程序员手册中提供的SCPI命令进行少量修改,它应该可以与Infiniium 9000和90000系列示波器,或安捷伦InfiniiVision 1000系列、2000-X系列、3000-X系列、4000-X系列等一起工作。

请参阅您的仪器的程序员手册,以获得特定型号仪器的SCPI命令的完整列表。如果您在逐步执行代码时仪表屏幕显示错误,请相应地修改此示例。

要了解更多使用或购买MATLAB与安捷伦示波器,请访问:
http://www.agilent.com/find/matlab_oscilloscopes

想要免费试用MATLAB和/或仪器控制工具箱,请访问//www.tatmou.com/agilent/instrument/tryit.html

引用作为

维诺德(2021)。通过标准VISA接口从安捷伦示波器捕获波形(//www.tatmou.com/matlabcentral/fileexchange/28887-capturing-a-waveform-from-an-agilent-oscilloscope-over-a-standard-visa-interface), MATLAB中央文件交换。检索

意见及评分(23

迈克尔·安德森

嗨,这个代码允许我最终与我的Keysight infiniiVision 3000x系列示波器通信。
然而,我如何设置自己的参数[preambleBlock]。这是我认为我必须改变的东西,以便以我想要的形式捕捉信号。默认情况下,它只捕获第一个周期,但我需要前20个周期,并且时间基数从0开始。还有,有没有一种方法可以从视野中捕捉FFT。
谢谢。

Bohua张

杰弗里

aqil firdaus

这个代码可以在matlab r2013a运行吗??我真的需要一个答案,我的最后一年项目..如果有任何其他代码或视频奖励回复我!!

那是欣但

这与安捷伦Infiniium示波器工作吗?

Ankit德赛

工作好了!谢谢。

马克西姆Shaysultanov

请帮助我!我正在写类似的程序的代码,我想捕捉信号的实现,在一段时间。我该怎么做呢?

M费萨尔Riyad

我尝试通过USB运行从DSO-X-2014A捕获数据的代码。但它出现了以下一些错误。虽然从图1中得到了确切的图,但在图2中什么都没有。我是第一次使用数据采集工具箱,代码对我来说也是新的。请帮我弄清楚我做错了什么。

使用imbmpinfo>getSignature时出错(第55行)
签名不能为空。

imbmpinfo错误(第20行)
元数据。FormatSignature = getSignature (fid);

读取bmp错误(第14行)
信息= imbmpinfo(文件名);

imread错误(第415行)
[X, map] = feval(fmt_s。读、文件名extraArgs {:});

SCPIScope错误(第140行)
imageMatrix = imread (test1.bmp, bmp);

大卫

很有帮助。然后我可以开始我的工作基于这个脚本。谢谢。

吉尔勒莫L

大家好,我在MSO9254A上测试了这个,经过一些修改后工作正常。
现在…
我正在构建一个完整的matlab GUI套件用于快速测试,但我无法从数字分析仪捕捉数据。
我在网上找过了,但是我没有找到matlab脚本或其他语言来完成这个任务。

有谁知道逻辑分析器捕获的示例代码吗?

谢谢,
吉尔勒莫

鲁伊

我解决了我的问题。不成功的读取是由于数据采集。注意,在DSO1012A中:RUN和:STOP命令用于采集,而在本例中:数字化CHAN1命令用于数据采集。

鲁伊

有人在安捷伦DSO1012A示波器上试过这个m文件吗?

在我的示波器和Matlab连接成功后,我运行了m文件,但是失败了。
我逐步进行了编程,发现问题出现在binblockread函数上。
错误消息是
警告:读不成功:binblock不可读。

根据这些评论
我还试着把第76行改成:
波形。RawData = binblockread (visaObj uint16);从文件中读(visaObj, 1);

波形。RawData = binblockread (visaObj int16);从文件中读(visaObj, 1);
同时也
波形。RawData = binblockread (visaObj);从文件中读(visaObj, 1);
但是错误也会发生。

我不知道这个m文件是否与我的DSO1012A示波器兼容?有人能给我一些解决这个问题的建议吗?提前谢谢。

维诺德

如果您在2000/3000系列范围中尝试这种方法,可能是因为该范围不支持SCPI命令而出现“未定义header”之类的错误。金宝app请参考程序员手册中的示波器的精确SCPI命令,并使用它来替换脚本中的违规命令。

“超出范围的数据”通常是因为您试图设置一个范围无法设置的值,例如timebase。再次—将参数修改为范围支持的值。金宝app

找出哪个命令导致错误的一个简单方法是在“fprintf(visaObj,'*RST;:自动定量的);
然后单步通过代码。当你发送一个不正确/不兼容的命令时,作用域将在它的屏幕上显示一个错误。仔细阅读scope的程序员手册,找到合适的命令(或参数范围),并相应地修改您的代码版本。

保罗

最后要注意的是——为了从多个通道提取数据,您需要依次读取每个通道(因此调用波形CHAN1并读取数据,然后是WAVEFORMCHAN2, u.s.w)——没有同时提取多个通道的例程。

保罗

我刚刚回答了自己的问题

对于3000系列示波器,设置ACQUIRE:COUNT在2到65536之间(不支持1)。金宝app数据也需要是uint16。

要使屏幕截图正常工作,您需要将该行更改为
流(visaObj”:显示:数据?BMP、灰度的);

保罗

你好所有的,

我尝试用3014A系统运行这段代码,我得到了各种仪器错误(典型的113未定义头,222数据超出范围,224非法参数值,410查询中断,420查询未终止)。它最终输出一个方波到图1(我使用示波器演示2系统),但输出是错误的符号(我期望0和2.5 V之间的平方,它从-2.7到0)。

任何建议吗?
谢谢你!
保罗

Florian Jungbold

@Graham

您将代码放置在何处,或者必须在何时执行它?

而不是(在代码的结尾):
%删除并清除对象。
删除(visaObj);清楚visaObj;

格雷厄姆

我在使用安捷伦2014A示波器时也遇到了同样的问题。我联系了客户支持,他说对象可能仍然是锁定的金宝app,并给了我一些代码来修复它。

运行下面的代码修复了这个问题,但我仍然不能让示波器与MATLAB一起工作。

找到所有先前创建的工具对象
newobjs = instrfind;

%如果存在任何已存在的对象
如果(~ isempty (newobjs))
关闭与仪器的连接
文件关闭(newobjs);
%,释放对象资源
删除(newobjs);
结束

从工作区中删除对象列表。
清楚newobjs;

祝你好运。

Florian Jungbold

嘿,

有人用InfiniiVision DSO- x - 3034a(3000系列DSO)试过这个例子吗?
我有点困惑,因为这里没有提到3000系列,在agilent页面的“MATLAB数据分析软件用于agilent InfiniiVision和Infiniium示波器”(http://www.home.agilent.com/agilent/product.jspx?cc=DE&lc=ger&ckey=1559383&nid=-35491.868946.00&id=1559383&cmpid=21300).但是有一个驱动器叫做“2000和3000 InfiniiVision x系列示波器IVI和MATLAB仪器驱动器”(http://www.home.agilent.com/agilent/editorial.jspx?cc=DE&lc=ger&ckey=2019021&nid=-11143.0.00&id=2019021&pselect=SR.GENERAL).

当我运行这个m-File时,我在Matlab中得到测量值的图,但在图2中没有加载bmp-File(截图)。总的来说,我得到了这些信息:
----------------------------
仪器误差:-222,“数据超出量程”

警告:binblock不可读。
警告:VISA:发生超时
???错误使用==> imbmpinfo 27
文件C:\Users\Florian.Jungbold\下载\SCPIScope\test1.bmp为空。

错误在==>读取bmp在15
信息= imbmpinfo(文件名);

在==>错误读在443
[X, map] = feval(fmt_s。读、文件名extraArgs {:});

错误在==> SCPIScope在140
imageMatrix = imread (test1.bmp, bmp);
----------------------------

在写了这么长一段评论后,我问自己把这篇文章发到论坛上是不是更好?
问候

维诺德

注意:某些Agilent固件(例如在54831D上)可能与6000系列的SCPI命令不同。你可能需要改变matlab文件中的行:

流(visaObj WAV: 5000分);

流(visaObj: ACQ:点5000);

维诺德

注意:这已经在安捷伦6000系列示波器上进行了测试。安捷伦6000系列示波器以无符号整数格式返回字数据。其他系列示波器(例如8000系列)以有符号整数格式返回字数据。

如果波形在MATLAB中看起来不正确,请尝试从以下更改第76行:

波形。RawData = binblockread (visaObj uint16);从文件中读(visaObj, 1);

波形。RawData = binblockread (visaObj int16);从文件中读(visaObj, 1);

杰拉尔德

下面的代码也适用于安捷伦无限54831D MSO吗?

也有可能用电流来代替电压吗?
fprintf (oszi, ':CHANnel1:UNITs amere ');

出色的工作和帮助!

MATLAB版本兼容性
创建R2009a
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!