From: <qui...@ic...> - 2025-08-13 04:58:22
|
Hi, hoping I could get some help. I’m using a pi with a GPIB shield. I can query for devices on the GPIB bus, but only once. After that a reboot of the pi is required to get the bus to respond again. import gpib def select_device_with_identity(devices,desired_identity): for address, identity in devices: if desired_identity in identity: return address, identity return None, None # No matching device found def query_hpib_devices(): # List to store device identities device_identities = [] # Assuming GPIB board index 0, adjust if your board index differs board_index = 0 # Loop through GPIB device addresses 0 to 30 for device_address in range(0, 31): try: # Open the device at the given address device = gpib.dev(board_index, device_address) # Set the timeout for operations (e.g., T10s for 10 seconds) gpib.timeout(device, gpib.T10s) # Clear the device gpib.clear(device) # Send the identification query gpib.write(device, "*IDN?") # Read the response response = gpib.read(device, 1024) # If we get a response, add it to our list if response: device_identities.append((device_address, response.strip())) # Close the device gpib.close(device) except gpib.GpibError as e: # An error usually means no device at this address or a communication error print(f"No response from address {device_address} or an error occurred: {e}") return device_identities # Get the list of connected HPIB devices devices = query_hpib_devices() # Print out the list of devices for address, identity in devices: print(f"Device at address {address}: {identity}”) The first run of the code finds the device on the bus as expected (device 7) and returns its correct identity. The second run of the code receives an error when it finds the device - No response from address 0 or an error occurred: write() error: No such device (errno: 19) No response from address 1 or an error occurred: write() error: No such device (errno: 19) No response from address 2 or an error occurred: write() error: No such device (errno: 19) No response from address 3 or an error occurred: write() error: No such device (errno: 19) No response from address 4 or an error occurred: write() error: No such device (errno: 19) No response from address 5 or an error occurred: write() error: No such device (errno: 19) No response from address 6 or an error occurred: write() error: No such device (errno: 19) No response from address 7 or an error occurred: read() failed: A read or write of data bytes has been aborted, possibly due to a timeout or reception of a device clear command. No response from address 8 or an error occurred: write() error: No such device (errno: 19) No response from address 9 or an error occurred: write() error: No such device (errno: 19) No response from address 10 or an error occurred: write() error: No such device (errno: 19) No response from address 11 or an error occurred: write() error: No such device (errno: 19) No response from address 12 or an error occurred: write() error: No such device (errno: 19) ….. This will then persist until the pi is rebooted. Powercycling the GPIB device has no effect. Glib.conf looks like - interface { minor = 0 /* board index, minor = 0 uses /dev/gpib0, minor = 1 uses /dev/gpib1, etc. */ board_type = "gpib_bitbang" /* name of the driver */ name = "raspi_gpio_interface" /* optional name, allows you to get a board descriptor using ibfind() */ pad = 0 /* primary address of interface */ sad = 0 /* secondary address of interface */ eos = 0x0a /* EOS Byte, 0xa is newline and 0xd is carriage return */ set-reos = yes /* Terminate read if EOS */ set-bin = no /* Compare EOS 8-bit */ set-xeos = no /* Assert EOI whenever EOS byte is sent */ set-eot = yes /* Assert EOI with last byte on writes */ timeout = T30s /* settings for boards that lack plug-n-play capability */ base = 0 /* Base io ADDRESS */ irq = 0 /* Interrupt request level */ dma = 0 /* DMA channel (zero disables) */ master = yes /* interface board is system controller */ } Advice appreciated, Thanks, Chris |