From f5ea3f0ac423d262aefb71eaf4a7b99cb35c25e4 Mon Sep 17 00:00:00 2001 From: Maximilian Mucha Date: Wed, 13 Nov 2024 16:30:03 +0100 Subject: [PATCH 1/3] ENH: query_identification now supports non standard indentifier queries --- basil/utils/USBBinds.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/basil/utils/USBBinds.py b/basil/utils/USBBinds.py index 85027b97..425167a8 100644 --- a/basil/utils/USBBinds.py +++ b/basil/utils/USBBinds.py @@ -9,7 +9,7 @@ import ruamel.yaml -def query_identification(rm, resource, baud_rate, read_termination=None, write_termination=None, timeout=1000 * 5): +def query_identification(rm, resource, baud_rate, read_termination=None, write_termination=None, timeout=1000 * 5, indentifer_cmd="*IDN?", read_after_query=False): """ Queries the identification of the instrument connected via USB. @@ -31,12 +31,16 @@ def query_identification(rm, resource, baud_rate, read_termination=None, write_t inst.read_termination = read_termination inst.write_termination = write_termination try: - reply = inst.query("*IDN?", delay=0.1) + reply = inst.query(indentifer_cmd, delay=0.1) except pyvisa.VisaIOError: # This retries the query a second time, since some devices do not answer the first time. # If a second exception arrises, it will be handled in calling function. - reply = inst.query("*IDN?", delay=0.1) - return reply + reply = inst.query(indentifer_cmd, delay=0.1) + + if read_after_query: + return inst.read() + else: + return reply def find_usb_binds(rm, log, @@ -105,7 +109,10 @@ def find_usb_binds(rm, log, log.debug(f"Found memorized bind {res}") result = memorized_binds[res] else: - result = query_identification(rm, res, instrument['baud_rate'], instrument['read_termination'], instrument['write_termination'], timeout=timeout) + if instrument["type"].lower() == "iseg_hv": + result = query_identification(rm, res, instrument['baud_rate'], instrument['read_termination'], instrument['write_termination'], timeout=timeout, indentifer_cmd="#", read_after_query=True) + else: + result = query_identification(rm, res, instrument['baud_rate'], instrument['read_termination'], instrument['write_termination'], timeout=timeout) memorized_binds.append({res, result}) @@ -228,6 +235,8 @@ def modify_basil_config(conf, log, skip_binds=[], save_modified=None): port = None instruments.append({ + "name": tf["name"], + "type": "", # Standard instruments with *IQN? command "identification": instrument, "baud_rate": baud_rate, "read_termination": read_termination, @@ -236,6 +245,13 @@ def modify_basil_config(conf, log, skip_binds=[], save_modified=None): }) insts_idx_map[instrument.lower().strip()] = i + + for hw_driver in conf["hw_drivers"]: + interface = hw_driver["interface"] + for instrument in instruments: + if instrument["name"].lower().strip() == interface.lower().strip(): + instrument["type"] = hw_driver["type"].lower() + break found_binds = find_usb_binds(rm, log=log, instruments=instruments, binds_to_skip=skip_binds) From 80ae3d9c59d0c400dc114301faa80743eb0fb12b Mon Sep 17 00:00:00 2001 From: Maximilian Mucha Date: Wed, 13 Nov 2024 16:30:35 +0100 Subject: [PATCH 2/3] FIX: Fixed issue with memorized_binds --- basil/utils/USBBinds.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/basil/utils/USBBinds.py b/basil/utils/USBBinds.py index 425167a8..2956e0c9 100644 --- a/basil/utils/USBBinds.py +++ b/basil/utils/USBBinds.py @@ -46,7 +46,7 @@ def query_identification(rm, resource, baud_rate, read_termination=None, write_t def find_usb_binds(rm, log, instruments, binds_to_skip=[], - memorized_binds=[], + memorized_binds={}, timeout=1000 * 4 ): """ @@ -105,7 +105,7 @@ def find_usb_binds(rm, log, try: log.debug(f"Trying {res} with baud rate {instrument['baud_rate']}") - if any(res in bind for bind in memorized_binds): + if any(res in bind for bind in memorized_binds.keys()): log.debug(f"Found memorized bind {res}") result = memorized_binds[res] else: @@ -114,7 +114,7 @@ def find_usb_binds(rm, log, else: result = query_identification(rm, res, instrument['baud_rate'], instrument['read_termination'], instrument['write_termination'], timeout=timeout) - memorized_binds.append({res, result}) + memorized_binds.update({res: result}) log.debug(f"Found {result.strip()}") From d773b6ab2eaf9e2b51be8fd3b7e56682106bcf35 Mon Sep 17 00:00:00 2001 From: Maximilian Mucha Date: Wed, 13 Nov 2024 16:40:49 +0100 Subject: [PATCH 3/3] PEP8 fixes --- basil/utils/USBBinds.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/basil/utils/USBBinds.py b/basil/utils/USBBinds.py index 2956e0c9..928d3a84 100644 --- a/basil/utils/USBBinds.py +++ b/basil/utils/USBBinds.py @@ -36,7 +36,7 @@ def query_identification(rm, resource, baud_rate, read_termination=None, write_t # This retries the query a second time, since some devices do not answer the first time. # If a second exception arrises, it will be handled in calling function. reply = inst.query(indentifer_cmd, delay=0.1) - + if read_after_query: return inst.read() else: @@ -236,7 +236,7 @@ def modify_basil_config(conf, log, skip_binds=[], save_modified=None): instruments.append({ "name": tf["name"], - "type": "", # Standard instruments with *IQN? command + "type": "", # Standard instruments with *IQN? command "identification": instrument, "baud_rate": baud_rate, "read_termination": read_termination, @@ -245,7 +245,7 @@ def modify_basil_config(conf, log, skip_binds=[], save_modified=None): }) insts_idx_map[instrument.lower().strip()] = i - + for hw_driver in conf["hw_drivers"]: interface = hw_driver["interface"] for instrument in instruments: