zz
This commit is contained in:
@@ -14,6 +14,8 @@ from ..writer import Writer
|
|||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
KEITHLEY_DRIVER_KEYS = {"keithley2000", "keithley_2000"}
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
class PrologixBinding:
|
class PrologixBinding:
|
||||||
@@ -27,7 +29,7 @@ def _driver_class(driver_key: str | None) -> type[Any] | None:
|
|||||||
key = (driver_key or "").strip().lower()
|
key = (driver_key or "").strip().lower()
|
||||||
if not key:
|
if not key:
|
||||||
return None
|
return None
|
||||||
if key in {"keithley2000", "keithley_2000"}:
|
if key in KEITHLEY_DRIVER_KEYS:
|
||||||
from pymeasure.instruments.keithley import Keithley2000 # type: ignore
|
from pymeasure.instruments.keithley import Keithley2000 # type: ignore
|
||||||
|
|
||||||
return Keithley2000
|
return Keithley2000
|
||||||
@@ -67,11 +69,8 @@ class PrologixEndpointLoop:
|
|||||||
":SENS:VOLT:DC:NPLC 10", # slow/low-noise integration
|
":SENS:VOLT:DC:NPLC 10", # slow/low-noise integration
|
||||||
":SENS:VOLT:DC:DIG 7", # max digits
|
":SENS:VOLT:DC:DIG 7", # max digits
|
||||||
# offset drift?
|
# offset drift?
|
||||||
":SYST:AZER ON",
|
":SYST:AZER:STAT ON",
|
||||||
":TRIG:SOUR IMM",
|
":TRIG:SOUR IMM",
|
||||||
":TRIG:COUN 1",
|
|
||||||
":SAMP:COUN 1",
|
|
||||||
":INIT:CONT OFF",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
extra = dev_meta.get("init_cmds")
|
extra = dev_meta.get("init_cmds")
|
||||||
@@ -80,29 +79,32 @@ class PrologixEndpointLoop:
|
|||||||
return default_cmds
|
return default_cmds
|
||||||
|
|
||||||
def _init_device(
|
def _init_device(
|
||||||
self, gpib_addr: int, driver_key: str | None, meta: dict[str, Any]
|
self, gpib_addr: int, driver_key: str, meta: dict[str, Any]
|
||||||
) -> None:
|
) -> None:
|
||||||
dk = (driver_key or "").lower()
|
key = (driver_key or "").strip().lower()
|
||||||
if "keithley" not in dk:
|
|
||||||
|
# Only init if the configured driver is explicitly Keithley2000
|
||||||
|
if key not in KEITHLEY_DRIVER_KEYS:
|
||||||
self._initialized_addrs.add(gpib_addr)
|
self._initialized_addrs.add(gpib_addr)
|
||||||
return
|
return
|
||||||
|
|
||||||
cmds = self._keithley2000_init_cmds(meta)
|
cmds = self._keithley2000_init_cmds(meta)
|
||||||
log.info(f"Initializing Keithley @ {gpib_addr} with {len(cmds)} SCPI cmds")
|
log.info(f"Initializing Keithley @ {gpib_addr} with {len(cmds)} SCPI cmds")
|
||||||
|
|
||||||
if driver_key:
|
inst = self._get_instrument(
|
||||||
inst = self._get_instrument(gpib_addr, driver_key)
|
gpib_addr, driver_key
|
||||||
# make sure prologix is pointed at the right addr
|
) # driver_key is not None here
|
||||||
self._get_adapter().address = gpib_addr
|
self._get_adapter().address = gpib_addr
|
||||||
for cmd in cmds:
|
|
||||||
inst.write(cmd)
|
for cmd in cmds:
|
||||||
time.sleep(0.02)
|
inst.write(cmd)
|
||||||
else:
|
time.sleep(0.02)
|
||||||
ad = self._get_adapter()
|
|
||||||
ad.address = gpib_addr
|
# Read error after each command; stop early if something is wrong
|
||||||
for cmd in cmds:
|
err = str(inst.ask(":SYST:ERR?")).strip()
|
||||||
ad.write(cmd)
|
if not err.startswith("0,") and "No error" not in err:
|
||||||
time.sleep(0.02)
|
log.error(f"Keithley init failed at {cmd}: {err}")
|
||||||
|
break
|
||||||
|
|
||||||
self._initialized_addrs.add(gpib_addr)
|
self._initialized_addrs.add(gpib_addr)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user