Electronics > Metrology

WinGPIB - Windows GPIB App (multi-purpose)

(1/109) > >>

App rebranded 2nd Jan. 2022 - UK/USA Trademark.

This app provides reliable Windows GPIB functionality to many brands and types of test instruments.

Written in Visual Studio 2019 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: https://www.codeproject.com/Articles/1166996/Multithreaded-communication-for-GPIB-Visa-Serial-i

99% of instruments with a GPIB inteface will work with this app because it is extremely flexible.
- GBIP:ADlink
- GPIB-488
- COM port

The app primarily works with Keysight IO Libraries and using the Agilent E5810A or the Agilent 82357B etc. Not to say it won't work with other interfaces, your mileage may vary.

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

Win11 - reports in so far that it is ok with Win11.

Release V3.70 (9th June 2022), see ZIP file attached below.
[all files scanned with BitDefender Antivirus prior to upload]

First, make sure you have the Keysight IO Libraries loaded, running and configured. Then,
- Unzip
- Run WinGPIB.msi file.
- A desktop shortcut is created to run the app.
- All user data resides in C:\Users\[username]\Documents\WinGPIBdata

Installation Notes:
1. To update the app use Windows ADD/REMOVE PROGRAMS. When you uninstall, the Data folder will remain intact with any new files you've created in there, but GPIBchannels.txt and Log.csv files will be deleted....so back them up first if you've customized them.
2. The program is installed at: C:\Program Files (x86)\WinGPIB
3. If you accidentally delete your GPIBchannels.txt or base Log.csv file there are copies in the program folder you can copy out.
4. WinGPIB does not use OneDrive for it's data storage.

Moving your device settings etc to a new PC:
On your old PC (I'm using Win10) go to:
and in there is a file called user.config
Copy that file out and put it in the similarly named folder in your new PC. The large folder name will be different.

This app is freeware. It must not be used for commercial purposes.
Please contact me privately for a copy of the source code.....it'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.
Types of commands as follows:-
Query Blocking commands are immediately executed/sent. They are immediately executed on the calling thread (usually GUI thread), this method waits until it gets response from the interface.
Query Async commands are queued. 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 Async  commands queued. These types of commands do NOT expect a reply.

PRE RUN - Initialize your device with a list of SEND ASYNC type commands.
AT RUN - A single QUERY ASYNC type command.
AT STOP - A list of SEND ASYNC type commands you may wish to send when you hit STOP.

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.

After connecting to your device(s) use the comand line interface to send and receive data from your device(s).

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 RAM EXTRACT:
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 (DS1235Y ICs) settings ram (both) 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

Terminator Info:
CR carriage return……..moves to column zero without advancing paper
LF line feed…… advances paper without returning to column zero
CRLF……. does both the above
\r = CR = 0x0D = 13
\n = LF = 0x0A = 10 = newline

MAV not set errors:
Example: "Poll timeout: MAV not set, status byte=4"
Check your device manual to see where the MAV is coded in the status byte and set the MAV mask accordingly.
The standard value is 16 and is set by default in WinGPIB
If it still doesn't work the only option is to disable polling altogether although you then might experience
delays if you have more than one device connected via GPIB.

Have fun.


Screenshots below (not necessarily the latest, and from a mix of versions......but you get the idea!):


--- Quote from: IanJ on November 18, 2018, 09:02:50 pm --- but I do find it a little unreliable. It'll just stop logging minutes or hours in......

--- End quote ---

your plans are really high sophisticated. (with the graphical display).
But how do you get W10 working reliable?
Every time I want to log one of my ADCs via RS232 in a W10 machine it tries to install some software and reboot over night.
I have found no way to stop this behaviour. So I usually use old XP or W7 machines for measurements.

Just one hint:
instead of trying to put all software into one application I use several  small programs.
E.g. one program for temperature sensing and one for sensing the reference voltage.
The easiest way is to log 1 minute averages and combine the results via spread sheet calculations.

Another interesting way is to use a virtual file for data exchange.
So the values of e.g. a NTC-sensor ADC can be used from other software applicatons
and logged together with the readings or could even be used for T.C. corrections.

with best regards


Conrad Hoffman:
I do this with a small PowerBASIC program and an old Prologix adapter that uses an FTDI chip. I can easily call their drivers and have few reliability problems... but I haven't tried it on my Win10 machine. I don't expect any serious problems. The same program, with some minor changes reads my HP3478A, HP3455A and frequency counter (can't remember the model). I suspect similar code could be done with Visual Basic or most any language. I just happen to like Basic and FTDI chips.

Another data point - I have quite a lot of C# GPIB code which runs fine. I have used both and USB<->GPIB adaptors and LAN<->GPIB and both work good. There's a bit of nonsense with the different manufacturers (NI, Keithley, Agilent etc) all trying to be the visa interface on your machine - I'm using the Agilent version right now but I think I've used others in the past. I've found that the different manufacturer's test equipment has its own GPIB idiosyncrasies, timing behaviour etc. A bit of care with good exception handling and dealing with corner cases will pay dividends. The good thing about the Microsoft environment (I'm sure others will list the negatives) is that visual studio is 'grown-up' and has a good built-in debugger. You can even make some code changes within the debugger and it'll do an incremental compile on-the-fly and continue running from where you hit the break point - i.e. without a full re-build, app re-start etc.


C# and before that C has been used for decades for instrument control. According to Wikipedia, LabWindows (the LabVIEW framework with G code replaced by C) started in 1987 (for DOS). So of course there is no reason you couldn't develop something that is at least as good as the Python + PyVISA solution you might use on a Raspberry PI (which should also work on Windows). The only disadvantage compared to the Raspberry PI solution I can see is price and power usage if you want to run it 24/7.

Like Andreas, I would reconsider the monolithic approach, and consider separating data acquisition and analysis / plotting. You can later create something that manages both (e.g. connect to acquisition using a socket and embed the plotting), but this makes it much easier to do unattended logging (e.g. start as service), offline analysis, combining data from multiple instruments, etc. I would also separate logging from the DMM (including its internal temperature if you care) and logging from the environment sensor(s), since the latter data may be used for multiple instruments that are in the same room.


[0] Message Index

[#] Next page

There was an error while thanking
Go to full version