历史上的今天
今天是:2025年02月12日(星期三)
2020年02月12日 | 关于示波器远程控制之VB编程的介绍分析和介绍
2020-02-12 来源:elecfans
本文基于VBA环境介绍如何实现示波器远程图片保存的程序编程,同时还提供编程源代码。
大家好!我是Keysight的应用工程师陈宏毅,今天我跟大家分享下如何基于Excel的VBA环境进行仪表的自动化控制。
基本的仪表控制分为三个步骤:
1、确保控制接口的物理连接与正确配置
2、利用Keysight的IO工具找到仪表
3、编程控制与验证
首先确保网口的物理连接, 这里我们将控制PC与示波器通过网线直接连接, 并且将仪表与PC的地址修改到同一网段,通过是德科技的IO工具, 我们可以验证连接是否成功。
首先打开IO工具, 输入示波器的IP地址,通过下方的IDN查询按钮,验证连接情况,可以看到,连接成功,我们点击OK将连接成功的仪表加入IO软件的仪表列表中,如下图所示,我们可以通过IO工具中的命令交互对话框与仪表进行简单的控制验证,例如我们输入重启命令*RST,可以看到,示波器已经恢复默认设置,我们还可以输入*IDN?查询示波器的序列号,型号等信息。

接下来我们基于VBA环境来进行仪表控制的开发,我们希望程序能够实现仪表的截图保存的功能,首先打开一个空白的Excel表格,通过alt+f11进入VBA的开发环境,如下图,我们通过Tools—>References…在VBA环境中添加VISA的引用,方便我们在当前环境中使用VISA中的IO库。根据IO工具版本的差异,其自带的VISA库版本也会不同,这里我们添加的是VISA COM 5.9 Type Library。

我们定义两个函数,第一个是仪表的连接函数。

这段函数完成了仪表的连接与IDN的询问,我们将IDN的返回值拉出来做一个监视,可以看到,变量成功接到了IDN的返回值。
现在我们来定义第二个函数,仪表截图函数。
这个函数的开发,我们来结合官网的示波器编程指南来进行,我们要进行的是仪表的截图,我们在文档中敲入关键字Display,可以看到这里呈现了与显示有关的各种命令。如下图,我们看到,下方有一段仪表截图的示例程序,我们直接将这段代码复制进我们的环境中,将仪表对象改成我们刚才定义的名称,将路径改为我们PC已有的。

定义完之后,我们定义过程调用刚刚定义的两个函数,等待仪表指示操作完成,我们就可以查看刚刚的截图文件了。
如下图,可以看到,在我们定义的路径里多了一个图像文件,里面正是我们示波器的屏幕截图。

具体源代码分享如下,适当修改就可以在您的电脑上实现示波器波形的远程读取。
Public rm As VisaComLib.ResourceManager
Public fmio As New VisaComLib.FormattedIO488
'' connect scope
Public Sub ConnectInstrument(ByVal instrumentAddr As String)
Dim idn As String
Set rm = New VisaComLib.ResourceManager '定义资源管理对象,每个资源管理对象对应一台仪表
Set fmio.IO = rm.Open(instrumentAddr) '定义接口对象,用来做指令的传递和读取
fmio.IO.Timeout = 5000 '定义超时时间
fmio.WriteString "*IDN?" '通过IDN命令查询仪表的名称,序列号等信息
idn = fmio.ReadString() '回读
End Sub
Public Sub Getscreen()
fmio.IO.Timeout = 20000 '因为图像数据量较大, 所以我们增加IO口的超时时间
Dim byteData() As Byte
fmio.WriteString "DATA? BMP, COLOR" '送入获取图像数据的指令
byteData = fmio.ReadIEEEBlock(BinaryType_UI1) '通过VISAcom中的ReadIEEEBlock函数读取图像数据
' Output display data to a file:
Dim strPath As String: strPath = "c:Testscopescreen.bmp?imageView2/2/w/550"
If Len(Dir(strPath)) Then '判断如果文件存在, 先删除
Kill strPath
End If
Close #1 ' If #1 is open, close it.
Open strPath For Binary Access Write Lock Write As #1 ' Open file for output. 将文件以二进制写入的形式打开
Put #1, , byteData ' Write data. 写入之前获取的二进制图像数据
Close #1 ' Close file. 关闭
fmio.IO.Timeout = 5000 '还原超时时间
End Sub
Public Sub exe()
Call ConnectInstrument("TCPIP0::INSTR")
Call Getscreen
史海拾趣
|
WinCE下显示驱动中有DDGPE::SetMode (int modeId, HPALETTE *palette)函数 modeId:用来设置当前显示模式如:640*480,800*480等 请问下wince下是如何调用SetMode 函数的,这个modeId的值是如何指定的。… 查看全部问答> |
|
NAND FLASH从K9F1208修改成K9F1G08要跳电阻?为什么?不是完全兼容吗?难道操作的周期数不一样? NAND FLASH从K9F1208修改成K9F1G08要跳电阻?为什么?不是完全兼容吗?难道操作的周期数不一样?… 查看全部问答> |
|
高科技大型上市公司招聘: 嵌入式系统设计工程师 /通信产品设计工程师 / 系统软件设计工程师 工作地点 深圳 本公司是深圳一家高科技大型上市公司,主要经营电力系统产品生产研发,微电子产品生产研发,光磁设备,公司内有员工高层公寓,食堂,文体活动中心,员工家属楼多处,座落于美丽的深圳市福田区笔架山与莲花山之间,公司目前有员工6000多人,工程师及 ...… 查看全部问答> |
|
wince 内核 C/C++ 代码在什么目录? 我的wince跑不起来(可能是运行中 出错了)? wince 内核 C/C++ 代码在什么目录? 我的wince跑不起来(可能是运行中 出错了)? 我想在内核代码上加输出信息,看看运行到了哪一步了. 怎么加?… 查看全部问答> |
|
刚接触MSP430F5438,请教各位大侠,这款单片机初始化需要做哪些工作啊???谢啦!!! [ 本帖最后由 雨西关 于 2011-10-5 11:03 编辑 ]… 查看全部问答> |
|
又到了次就迎新的时候了,大家还记得去年的“挖宝”吗?没错就是挖宝,你敢挖,我敢送,挖宝活动将会成为EEWORLD的常驻活动,每年辞旧迎新的时候都会举办,但是大家要记住,以后每年的形式都会不一样哦,新来的筒子们可以去搜索一下以前的挖宝帖子 ...… 查看全部问答> |
|
在我的电路板上使用的芯片是TMS320F28335 IO电压为:3.35V 内核电压为1.81V。 首先电路焊接是没 的,电压供给也是没问题的。然后程序也是没有问题的。 但是现在的错误是SCI B口工作的时候输出幅度是错误的,输出高电平为3.5V, ...… 查看全部问答> |




