Update 2015 June: additions for Ubuntu 14.04LTS (where a symbolic link is required), and for the NI-USB-B dongle (which needs firmware loading). See also: Using the National Instruments GPIB-USB-B on linux
Notes on how to use GPIB from python on Ubuntu 12.04LTS. Tested with National Instruments USB-GPIB device and a recently bought NI GPIB PCI-E card.
- Get linux-gpib source from http://sourceforge.net/projects/linux-gpib/
- Building the python bindings requires libboost-python (and maybe libboost-python-dev)
- build linux-gpib by running: ./configure, make, sudo make install
- edit /etc/gpib.conf to fit your hardware. The default config board_type = "ni_pci" seems to work with the NI PCI-E card. For the USB-GPIB device we need board_type = "ni_usb_b"
- load the kernel module, for the PCI-E card this is sudo modprobe tnt4882, for the USB-dongle this is sudo modprobe ni_usb_gpib
- On Ubuntu 14.04LTS the library that gpib_config is linked against is installed in a location where the binary doesn't find it. The fix is to add a symbolic link in /lib/
/lib$ sudo ln -s /usr/local/lib/libgpib.so.0 libgpib.so.0 - configure: sudo gpib_config --minor 0 this reads and parses /etc/gpib.conf so it needs to be re-done if something is changed in gpib.conf
- If gpib_config fails, and you have the older/slower NI-USB-B dongle, then you need to first load the firmware. This seems to not be required with the newer NI-USB-HS (to be confirmed?). Firmware loading requires fxload and the firmware from http://linux-gpib.sourceforge.net/firmware/. Find out where your USB-dongle is with lsusb and then load the firmware with something like:
fxload -D /proc/bus/usb/001/002 -I niusbb_firmware.hex -s niusbb_loader.hex where you replace /001/002 with the numbers for your USB device. Now gpib_config should work. - By default only members of the gpib-group can use gpib, and only root has access to /etc/gpib0. If we want normal users to use gpib, add them to the gpib group (on Ubuntu the graphical user&group editor is gnome-system-tools)
- Test!
note: If "import gpib" fails in python you might have forgotten to install libboost-python before building linux-gpib. Python bindings will not be built&installed unless you have libboost-python.
I have two devices, so I've configured them like this in gpib.conf
/* agilent mux/dmm */ device { minor = 0 /* first gpib-card/usb-dongle */ name = "dmm" pad = 8 /* primary address, configure on instrument front-panel*/ sad = 0 /* secondary address, always zero? */ } /* kikusui psu controller */ device { minor = 0 name = "kikusui" pad = 1 sad = 0 } |
And now we can try some python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import gpib import time dmm= gpib.find("dmm") # define in /etc/gpib.conf kik= gpib.find("kikusui") def query(handle, command, numbytes=100): gpib.write(handle,command) time.sleep(0.1) response = gpib.read(handle,numbytes) return response print query(dmm,"*IDN?") print query(kik,"*IDN?") gpib.close(dmm) gpib.close(kik) # output: # HEWLETT-PACKARD,34970A,0,13-2-2 # KIKUSUI ELECTRONICS CORP.,PIA4830,0,2.20 |