现在市场上有很多中USB-GPIB 控制器,或叫 USB 转GPIB链接线。 每种GPIB控制器都有它的 函数库(dll库)。各种GPIB 控制器的价钱插别很大。这里以一种价钱较便宜的USB-GPIB 控制器UGSimple USB-GPIB 控制器为例,看它的VBA编程时怎么用的。UGSimple USB-GPIB 控制器在淘宝上有卖。
用EXCEL内嵌的VBA编程的好处是 仪器测试读取的数据可以同时放入EXCEL表格里,并同时进行数据处理。并且VBA 相对其它编程语言来讲,容易好学。这里用一个Office 2003的EXCEL 来说明。
拿到UGSimple 以后,首先是安装 。现将UGSimple插入电脑的USB接口。然后启动UGSimple_setup.exe,按照它的安装过程安装好UGSimple 软件。
这里用一台 安捷伦的 6位半万用表 34401A为例。安装好UGSimple 软件后,将UGSimple 的GPIB 接头 (GPIB host)插入34401A的GPIB设备接口 (GPIB device),GPIB接头插好后,硬件就连接好了。然后,打开 34401A的电源, 设置 34401A的GPIB 地址为 22。
下来该做软件的工作了。我们先看一下UGSimple是否连接正确。点电脑上的Start->All Programs->LQ Electronics->UGSimple->UGSimple (不好意思,我的电脑是用的英文界面),打开UGSimple 的主控板。在Address栏输入22,在GPIB command 栏 写入 *IDN?,然后点击 主控板上的Command Write键,这时,*IDN?指令就送到34401A里去了。然后再点击 主控板上的Data Read键, 如果读回HEWLETT-PACKARD,34401A,0,11-5-2,则所有连接正确, 见下图。
打开Office2003 的 EXCEL,在 (2, “B”) 单元格写入 “直流电压”,在(2, “D”)单元格写入“交流电压”。之后,我们将会把读到的数据写入相应的直流或交流电压下面。点击菜单 Tools->Macro->Visual Basic. 如果右边是灰色,点击左边的Sheet1(Sheet1),右边的VBA编辑器就出现了。
首先在最上面写上 UGSimple 的GPIB 指令 发送函数 Gwrite 和 读取指令Gread的函数声明, 以及用于延时的函数Sleep的函数声明。
Private Declare Function Gwrite Lib "C:\Program Files\LQElectronics\UGSimple\UGSimpleAPI\LQUGSimple_s.dll" Alias "#100" (ByVal address As Integer, ByVal SCPI As String) As Integer
Private Declare Function Gread Lib "C:\Program Files\LQElectronics\UGSimple\UGSimpleAPI\LQUGSimple_s.dll" Alias "#101" (ByVal address As Integer) As String
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
然后在开始VBA 编程。其程序如下,
Private Sub sendread()
Dim command, data As String
Dim success, r As Integer
For r = 3 To 7 '设循环
success = Gwrite(22, "MEAS:VOLT:DC?") '发送直流电压读取指令
If success <> "0" Then '判断发送指令是否成功,
MsgBox ("Something Wrong!") '显示出错
GoTo out '退出
End If '判断结束
Sleep (200) '延时0.2秒,等34401A准备数据
data = Gread(22) '读取数据
Worksheets("Sheet1").Cells(r, "B") = CDbl(data) '将数据写入相应栏里
success = Gwrite(22, "MEAS:VOLT:AC?") '发送交流电压读取指令
If success <> "0" Then '判断发送指令是否成功
MsgBox ("Something Wrong!") '显示出错
GoTo out '退出
End If '判断结束
Sleep (800) '延时0.8秒,等34401A准备数据
data = Gread(22) '读取数据
Worksheets("Sheet1").Cells(r, "D") = CDbl(data) '将数据写入相应栏里
Next r '下一个循环
out: '退出
End Sub
安装好的程序里也有EXCEL的例子。