Google Ad

Project #025 - GPIB Windows Software

DISCLAIMER: This video is educational only, so if you decide to do the same yourself then you are on your own, I can't be held responsible for any problems/issues/damage/injury that may occur if you decide to follow this blog and try it yourself.


Some time ago I messed with an Excel spreadsheet and some VBA macros to enable my Win10 PC to gather GPIB data from my HP3458A and present it on a worked, but it is a little unreliable. It'll just stop logging minutes or hours in......and the Excel VBA graphs are real slow even on a fast PC. Thread here:

So, I finally found some time to look into this subject again, I dug out the RaspPi 3 but gave up after a couple of hours.....I know very little about linux and get frustrated that although there is much info out there, it's a bit here and a bit there since articles get outdated, solutions are by cobbling apps and scripts from many different places.Not to mention, this is 2018, so surely we should be a long way from this sort of thing!
What I need a proper Windows solution, but again, there is not a lot out there...........

So, I went hunting and stumbled on Pawel Wzietek's CodeProject 2017 thread and after downloading his VB source I finally got it to compile in Visual Studio 2015 (thanks for the tips Pawel) and after playing with it and my 3458A it looks extremely reliable, not to mention I've written a few VS VB apps. With Pawel's code you can hammer the QUERY button and it simply queues the commands and gets the messages back. Not only that but it's also configurable for a number of different interfaces, such as VISA, GBIP:ADlink, GPIB-488 and COM port......and can run two devices at the same time. Looks like I had the shell of a useful home brewed app in sight.


See the EEVBlog thread here for discussion & screenshots etc.

Temperature/Humidity device compatibility:
USB-TnH SHT10 V2.00 (Usb serial comms) - Link here.

Download the app here. Current version = V3.11

Written in Visual Studio 2015 VB and using Pawel Wzietek's awesome GPIB library code (Multi-threaded GPIB communication), I extended the basic functionality to what you see below.
The app can interface using VISA, GBIP:ADlink, GPIB-488 and COM port......and can run two devices at the same time.
Pawel's original project:

VISA (Tested by me - HP3458A, Keithley 2015THD, Fluke 8842A, Keysight 34461A, HP3457A, Agilent 34405A, EEZ-BB3 Psu, Racal-Dana 1991, Agilent Psu)
COM port (Tested by me - EEZ-BB3 Psu USB mode)

The app works with Keysight IO Libraries and using the Agilent E5810A or the Agilent 82357B etc.

USB-TnH SHT10 V2.00 & USB-TnH SHT30 (Usb serial comms)


First, make sure you have the Keysight IO Libraries loaded, running and configured. Then,
Unzip and run setup.exe
Once installed copy the following files from the zip to the same folder as PDVS2_GPIB.exe
After installation, start the app by double clicking PDVS2_GPIB.exe

To upgrade from a previous version then download V**** and unzip the two files there (PDVS2_GPIB.exe & IODevice.dll) to your program folder.
After installation, start the app by double clicking PDVS2_GPIB.exe (may have a different name to the previous EXE).

This app is freeware. It must not be used for commercial purposes.
Please contact me privately for a copy of the source's too big to attach to this forum now.
- Unzip the folder.
- Open the .vbproj in VS (folders will be created).
- From the installation zip file (separate download), copy files IODevice.dll & Microsoft.VisualBasic.PowerPacks.dll, Log.csv & GPIBchannels.txt to the new /bin/debug folder.

Assumes that you have loaded the current version of Keysight IO Libraries Suite and have it configured.

Set up your NAME and ADDRESS of the device(s) you want to connect to, and pick the INTERFACE type (I have tested Visa only).
The defaults shown when you install are my own as an example.
Hit the CREATE DEVICE button (you choose). An pop-up box will appear that lists the connected device. This box will remain visible at all times and will let you see the commands being sent and any queued commands.

You can effectively batch commands using the PRE RUN, AT RUN and AT STOP boxes and using the RUN/STOP button at the bottom.
PRE RUN commandsare used to set up your device.
AT RUN command is the command that is repeated at the SAMPLE RATE.
Command types are as follows:

Enter single commands in the COMMAND boxes and hit QUERY and you'll get a RESPONSE back (if it's a command that returns a query).
Types of commands as follows:-
Blocking commands - Are immediately executed on the calling thread (usually GUI thread), this method waits until it gets response from the interface.
Query Asynchronous commands - Queries are queued and the queue is processed on a different thread (producer-consumer model). The call appends the query to the queue and returns immediately.

Send Asynchronous commands - Sent via AT RUN, and are sent similar to the Query Async commands except do not expect a reply, i.e. "fire and forget" manner.
Note: my GUI should really have a separate single command send for SendSync but I have not implemented this at the can just use the QueryAsync single query send and the reply will just time-out gracefully.

When the CREATE DEVICE buttons are pressed a pop-up box will appear that lists the connected device(s).
This box will remain visible at all times and will let you see the commands being sent and any queued commands.
Note that you can close this window without any effect on the app. You can use the button "Show Device List" to show it again if needed.
Please note that there are some issues in this regard, i.e. you may see some errors appear and the queue grow, but in the case of my 3458A and Keithley 2015THD everything usually settles down until you just see one line for your devices as it communicates.

There is only a couple of Temperature/Humidity sensor I have tested and that are available from DOGRATIAN seller here:-
They are serial USB type sensor and does not require any drivers except what Win7/Win10 loads automatically as you insert it. You should see a COM port which you can pick from the list on the app.
The SHT30 gives 2dp's whereas the SHT10 1dp.

For CSV generation, per the defaults, set up your filename and path to where you want the CSV to be saved. At the moment there is not file generated if it doesn't exist so make sure you have an empty .CSV text file at the path specified.
The check box ENABLE CSV will start saving data to the .CSV file.
The EXPORT CSV file will copy the active .CSV file to the same folder and append the current date & time as the filename.
EXPLORER will launch Windows Explorer and pointing to the path folder.
You can clear the current CSV file with the RESET CSV button, there's a check box next to it which must be set before the reset will work.
ENABLE LOG check box will activate the log file display window.
E NOTATION TO DECIMAL check box will convert ########E-02 to the decimal equivalent. This is for the CSV and well as the log window.

Enable either or both device charts via the check boxes.
With the boxes un-checked you can hit the CLEAR CHART to reset the chart windows and remove the data.
You can change the resolution of the chart with the X-AXIS SCALE POINTS entry. Once the chart display reaches the set number of data points on it the chart will start to scroll off to the left as new data appears at the right.
The range of the Y-axis is adjustable via the SCALE MIN AND SCALE MAX enries. You can manually set them or hit AUTO SCALE and the chart will look at the existing trace and from it's highest and lowest position will centre and scale the chart.
The UP and DN buttons allow the current set scale to be adjusted in 10% steps.

For offline display of the generated .CSV files. The user can select the Device to be displayed on the graph (since there are 2 devices available), and also zoom in/out and scroll back/forward through the graph.

3458A & 3457A CAL RAM:
Utility to extract the battery backed up (DS1220Y IC) cal ram on the 3458A down to a .bin file.
Utility to extract the battery backed up cal ram (2 versions) on the 3457A down to a .bin file.

Most of the entries are saved off so when you restart the app they will be there.

1. Power up E5810A and make sure it gets an IP assigned (DHCP), i.e.
2. Go to and "Find & Query Instruments". Make sure you can communicate with your device.
3. Go to Keysight Connection Expert and ADD Remote GPIB Interface.
    Change SICL Interface ID to the one that finds the IP of the E5810A. Hit OK.
4. Now a device will be listed on the "My Instruments" panel. The GPIB address will be displaye i.e. GPIB1::22:INSTR

Have fun.