Skip to main content

pylint PyPI PyPI - Python Version PyPI - Status License: GPL v3 code style

prologix_gpib_async

Python3 AsyncIO Prologix GPIB Driver. This library requires Python asyncio. In contrast to a synchronous implementation, this library makes it possible to control multiple GPIB controllers at once and work with large setups.

The library is fully type-hinted.

Supported Hardware

Device Supported Tested Comments
GPIB-ETHERNET Controller 1.2 :heavy_check_mark: :heavy_check_mark:
GPIB-USB Controller 6.0 :x: :x: Need hardware

Tested using Linux, should work for Mac OSX, Windows and any OS with Python support.

Setup

To install the library in a virtual environment (always use venvs with every project):

python3 -m venv env  # virtual environment, optional
source env/bin/activate
pip install prologix-gpib-async

Usage

This library makes use of asynchronous context managers to hide all connection related stuff and also handle cleanup. By the way: Context managers are great!

Initialize the GPIB adapter

from prologix_gpib_async import AsyncPrologixGpibEthernetController

# Create a controller and talk to device address 22
async with AsyncPrologixGpibEthernetController("127.0.0.1", pad=22) as gpib_device:
    # Add your code here
    ...

Sending a "my command" command to address 22 (as set up previously). Do note that strings have to be sent as bytes literals.

await gpib_device.write(b"my command")

Reading data from address 22

data = await gpib_device.read()

Example program, that queries the version string as can be found at examples/example.py

import asyncio

# Devices
from prologix_gpib_async import AsyncPrologixGpibEthernetController


async def main():
    try:
        async with AsyncPrologixGpibEthernetController("127.0.0.1", pad=22) as gpib_device:
            version = await gpib_device.version()
            print("Controller version:", version)
    except (ConnectionError, ConnectionRefusedError):
        print("Could not connect to remote target. Is the device connected?")


asyncio.run(main())

See examples/ for more working examples.

Support for Multiple Devices

The Prologix GPIB adapter supports talking to multiple devices, but there are (theoretical) hardware limits. The Prologix adapters do not have line drivers, so only a limited number of devices can be driven using one controller.

On the software side, there is full support for multiple devices and the driver will switch between different addresses transparently. The driver internally manages the connection and keeps track of the GPIB controller state and manages the state for each gpib object. It is important, that the driver is the only client editing the state of the GPIB controller. Otherwise, the driver state and the controller state may get out of sync.

:warning: Concurrency with multiple devices: Note, that when using a single adapter to control multiple devices, there is no concurrency on the GPIB bus. Whenever reading or writing to a remote device, the driver will lock the GPIB controller to ensure that reading from a controller is synchronous. This means, there is no speed increase, when making asynchronous reads from multiple devices on the bus. Using a GPIB Group Execute Trigger (GET) by invoking the trigger() function, concurrent measurements can be triggered though. Some devices also allow asynchronous function calls, that signal status updates via the srq register.

Example:

import asyncio

# Devices
from prologix_gpib_async import AsyncPrologixGpibEthernetController

ip_address = "127.0.0.1"


async def main():
    """This example will print the IDs of the two different SCPI devices"""
    try:
        async with AsyncPrologixGpibEthernetController(
            ip_address, pad=22
        ) as gpib_device1, AsyncPrologixGpibEthernetController(ip_address, pad=10) as gpib_device2:
            await gpib_device1.write(b"*IDN?")  # Automatically changes address to device 22
            print(await gpib_device1.read())
            await gpib_device2.write(b"*IDN?")  # Automatically changes address to device 10
            print(await gpib_device2.read())
    except (ConnectionError, ConnectionRefusedError):
        print("Could not connect to remote target. Is the device connected?")


asyncio.run(main())

Versioning

I use SemVer for versioning. For the versions available, see the tags on this repository.

Documentation

I use the Numpydoc style for documentation.

Authors

License

This project is licensed under the GPL v3 license - see the LICENSE file for details

Release files for prologix-gpib-async 1.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for prologix-gpib-async 1.5.0
File Size Uploaded
prologix_gpib_async-1.5.0.tar.gz 31.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for prologix-gpib-async 1.5.0
File Interpreter ABI Platform
prologix_gpib_async-1.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 62.9 kB

Release files / prologix_gpib_async-1.5.0.tar.gz

Download URL prologix_gpib_async-1.5.0.tar.gz
Size 31.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e742bbadf3138865198998a5b6541a201b92da81710bfe5709f6baefe7780ea7
BLAKE2b-256 checksum
How to use checksums
26d639a01287a2a3bedbd6bb2a1355e08ffface6cfee5f2efb0687b7acd6b483
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / prologix_gpib_async-1.5.0-py3-none-any.whl

Download URL prologix_gpib_async-1.5.0-py3-none-any.whl
Size 31.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b525e44dfc639967148f2a2fb2957f7e3b6addaf83db973d6818280561de9223
BLAKE2b-256 checksum
How to use checksums
c3943b3b0468c7ac0b53698d59024c0e2ca955057ded65cdfc0639d92a3f7fd4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

1.5.0 This release

2 release files

1.4.14

2 release files

1.4.12

2 release files

1.4.9

2 release files

1.4.8

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page