Instrument Control (GPIB, Serial, VISA, IVI)

cancel
Showing results for 
Search instead for 
Did you mean: 

Find all Instruments on GPIB using VBA

Is there a way to find all intruments on a GPIB. I want to basically do what NI max does when you can view each instrument and then put the instuments in a array. I found this example but does not work for me. Any ideas on how I can do this.

 

Dim vs As NationalInstruments.VisaNS.ResourceManager
Dim resources() As String

vs = NationalInstruments.VisaNS.ResourceManager.GetLocalManager
resources = vs.FindResources("GPIB?*INSTR")

  

0 Kudos
Message 1 of 7
(2,477 Views)

1. Reference Library
Added the following libraries (x.x depends on the version of VISA installed.)

  • VISA-COM x.x Type Library

VISACOM.png

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Sample code

 

Public Sub test()
    On Error Resume Next
    Dim resources() As String
    Dim RM_P As VisaComLib.ResourceManager

    Set RM_P = New VisaComLib.ResourceManager
    resources = RM_P.FindRsrc("?*")
    Set RM_P = Nothing

    MsgBox Join(resources, vbLf)

End Sub

 

0 Kudos
Message 2 of 7
(2,443 Views)

Works great. thank you. How do you think I could add an IDN? to identify each intruments information?

0 Kudos
Message 3 of 7
(2,422 Views)
Sub communication_test1()
    Dim RM As VisaComLib.ResourceManager
    Dim VISACOMOBJ As VisaComLib.FormattedIO488
    Dim return_string As String
    Dim timeout As Long: timeout = 5000 '5000msec
    
    Set RM = New VisaComLib.ResourceManager
    Set VISACOMOBJ = New VisaComLib.FormattedIO488
    Set VISACOMOBJ.IO = RM.Open("GPIB0::15::INSTR", NO_LOCK, timeout)
    With VISACOMOBJ
        .IO.timeout = timeout
        .WriteString "*IDN?" & vbLf, True
        return_string = Replace(Replace(.ReadString(), vbCr, ""), vbLf, "")
        .IO.Close
    End With
    
    MsgBox return_string
    
End Sub

Sub communication_test2()
    Dim RM As VisaComLib.ResourceManager
    Dim VISACOMOBJ As VisaComLib.FormattedIO488
    Dim list() As String
    Dim timeout As Long: timeout = 5000 '5000msec
    
    Set RM = New VisaComLib.ResourceManager
    Set VISACOMOBJ = New VisaComLib.FormattedIO488
    Set VISACOMOBJ.IO = RM.Open("GPIB0::15::INSTR", NO_LOCK, timeout)
    With VISACOMOBJ
        .IO.timeout = timeout
        .WriteString "*IDN?" & vbLf, True
        list = .ReadList(ASCIIType_BSTR, ",")
        .IO.Close
    End With

    MsgBox Join(list, vbLf)

End Sub

Sub communication_test3()
    Dim RM As VisaComLib.ResourceManager
    Dim VISACOMOBJ As VisaComLib.FormattedIO488
    Dim igpibDev As VisaComLib.igpib 'GPIB only
    Dim list() As String
    Dim timeout As Long: timeout = 5000 '5000msec
    
    Set RM = New VisaComLib.ResourceManager
    Set VISACOMOBJ = New VisaComLib.FormattedIO488
    Set VISACOMOBJ.IO = RM.Open("GPIB0::15::INSTR", NO_LOCK, timeout)
    Set igpibDev = VISACOMOBJ.IO
    With igpibDev
        .timeout = timeout
        .ControlREN GPIB_REN_ADDRESS_AND_LLO
        MsgBox "The measuring instrument has been locked out." & vbLf & "The instrument should be in a state where it does not accept any button operations other than the power supply." & vbLf & "Try pressing any buttons."
        VISACOMOBJ.WriteString "*IDN?" & vbLf, True
        list = VISACOMOBJ.ReadList(ASCIIType_BSTR, ",")
        .ControlREN GPIB_REN_GTL_AND_DEASSERT
        VISACOMOBJ.IO.Close
        MsgBox "The lockout has been released."
    End With

    MsgBox Join(list, vbLf)

End Sub
0 Kudos
Message 4 of 7
(2,401 Views)

Hi this is really useful - do you have a link to where you find the VisaCom Lib calls and how to use them in VBA? I understand more or less what you are doing but can't progress till I can read more general stuff.  For me this is the simplest and most direct to control my instruments, which costs nothing and doesn't rely on LabVIEW!

0 Kudos
Message 5 of 7
(1,871 Views)

A good reference for using VISA from VBA is Keysight's documentation. (Getting Started with Excel and VISA COM Instrument Control program)
Keysight recommends using it with VBA.
If you search with the keyword "keysight visa vba", you will find various other results, so please try it.
On the other hand, National Instruments does not expect it to be used from VBA.

Therefore, even if you search for it, you won't get many hits, but you can use VISA-COM with NI-VISA as it is by referring to Keysight's documents.

0 Kudos
Message 6 of 7
(1,855 Views)

Thanks very much for your reply. This is the impression I had gained - Keysight positive and supportive, NI prefers to point users towards LabVIEW. I guess this is the corporate solution, and I do not dispute it! As well as the Keysight support I found a 'user Guide' produced by Agilent but this is 20 years old and I guess a bit out of date regarding present VISA status. But I think I can do what I need now, and I hope it will be portable (with a few mods) between most of the data acquisition PCs I use, which vary from XP to W11. Thanks again for your contribution!

0 Kudos
Message 7 of 7
(1,830 Views)