吧里面有用vb玩过ni-visa和GPIB接口设备的高人么?请教一个问题
vb吧
全部回复
仅看楼主
level 1
海天墨雪 楼主
    在调用visa设备之前,需要运行一条语句 Call viOpenDefaultRM(DeFrm)
说明文档中大致意思是这条语句用于初始化ni-visa设备管理器,之后通过这条语句所得到的DeFrm(long型)进行visa设备的连接操作,如Call viOpen(DeFrm, "GPIB0::" + Select_DevNO.Text + "::" + Me.Controls("Select_SubDev" & CStr(Temp_I) & "NO").Text + "::INSTR", 0, 0, DeVi),语句中“gpib::”开始的字符串就是设备地址和类型信息,并将通过信息建立的连接保存为一个Devi(long型),两者都类似于数字指针,在运行时检测这两个变量会发现得到随机的8位long型数字用于设备操作,当对设备操作完之后分别运行Viclose(Devi)和Viclose(DeFrm)关闭连接和visa的资源管理(要求此时关闭的devi 和defrm数字与打开时的数字相同,就是说如果我们建立连接的时候得到的defrm为00000001的话,那么当我们关闭defrm的时候 viclose(defrm)语句中的defrm数值也为00000001,否则关闭语句是无效的。)。
目前正在做一个GPIB接口设备的测试程序,遇到的问题就是:
    在同一次运行程序的时候我运行Call viOpenDefaultRM(DeFrm)语句时,得到的defrm数值是一定的,不会更改,只有在程序完全退出然后重新运行程序的时候再次运行该语句才能得到一个新的随机且有效的defrm来进行设别管理和连接,此时如果将所需操作的设备关机掉电然后再开机,那么如果不重新启动程序的话,之前的defrm是无法再次连接到所需操作的设备的,只有重启程序,得到新的defrm之后运行才能得到
正确的
defrm参数。这样带来的问题就是,程序必须不断地重启,才能对设备进行操作。
    我不太熟悉visa的特性,在看资料的时候也没有好的解决办法。所以请大家帮我想想,有没有比较方便快捷的让测试程序不关闭而重新启动并重建所有程序环境的办法,我曾经试过建立一个空的窗体,当窗体跳转的时候卸载所有其他的窗体并重新加载的办法,但是似乎不奏效。
   当然,如果哪位前辈有不重启而直接能得到新的defrm参数的办法也请告知一二,这个问题困扰了我好几个月了。

2010年09月26日 01点09分 1
level 7
visa的是通过USB线连接的吧,可以按照地址类似USB**匹配一次,就可以重新连接上,我之前做过一个,设备有厂家提供的开发示例,你参考了吗
2020年10月24日 02点10分 2
level 7
Dim strRes As String * 200
Dim list As Long
Dim nmatches As Long
Dim matches As String * 200 '保留获取设备号
Dim s32Disp As Integer
' 获得 visa 的 usb 资源
Call viOpenDefaultRM(defrm)
Call viFindRsrc(defrm, "USB0::0x1A?*", list, nmatches, matches)
' 打开设备
MsgBox matches, , "示波器地址"
'MsgBox Len(matches)
Call viOpen(defrm, matches, 0, 0, vi)
' 发送询问 CH1 状态命令
'MsgBox defrm
'MsgBox vi
If matches Like "USB0::0x1A*" Then
Label4.Caption = "示波器已连接"
Else
MsgBox "示波器连接失败", , "提示"
'Timer2.Enabled = True
End If
2020年10月24日 12点10分 4
1