From 8aadf3849e3069a7b0e87a204474bfbb6dd5a9d5 Mon Sep 17 00:00:00 2001 From: Thomas Lemon Date: Mon, 29 Sep 2025 16:23:00 -0700 Subject: [PATCH 1/4] Add blocking during temperature ramp --- .../QuantumDesign/DynaCoolPPMS/DynaCool.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py b/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py index 657f15af54bd..5770e045facb 100644 --- a/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py +++ b/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py @@ -410,6 +410,12 @@ def _temp_setter( values[self.temp_params.index(param)] = value self.write(f"TEMP {values[0]}, {values[1]}, {values[2]}") + self._block_on_temperature_ramp() + + def _block_on_temperature_ramp(self) -> None: + """Block all instrument interactions until temperature stabilizes.""" + while self.temperature_state() != "stable": + sleep(1) def write(self, cmd: str) -> None: """ From 3de59529fc05557b6a9fd4c9f13ca877cb6b522d Mon Sep 17 00:00:00 2001 From: Thomas Lemon Date: Mon, 29 Sep 2025 16:39:43 -0700 Subject: [PATCH 2/4] Update newsfragment for DynaCool PPMS driver improvement --- docs/changes/newsfragments/7534.improved_driver | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/changes/newsfragments/7534.improved_driver diff --git a/docs/changes/newsfragments/7534.improved_driver b/docs/changes/newsfragments/7534.improved_driver new file mode 100644 index 000000000000..00505ea20703 --- /dev/null +++ b/docs/changes/newsfragments/7534.improved_driver @@ -0,0 +1,3 @@ +Added blocking function to DynaCool PPMS driver that waits for temperature +state to be stable before allowing other functions to be called when +setting the temperature. From 433c77fbc27f46b3abcd2df6c9f48146378b0bde Mon Sep 17 00:00:00 2001 From: Thomas Lemon Date: Mon, 27 Oct 2025 08:23:46 -0700 Subject: [PATCH 3/4] Add optional bool to _temp_setter to control blocking_t function to prevent breaking current implementations. --- .../QuantumDesign/DynaCoolPPMS/DynaCool.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py b/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py index 5770e045facb..2b2a29a97355 100644 --- a/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py +++ b/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py @@ -83,6 +83,15 @@ def __init__( ) """Parameter temperature_setpoint""" + self.blocking_t: Parameter = self.add_parameter( + "blocking_t", + label="Block instrument while ramping temp", + unit="K", + vals=vals.Numbers(1.6, 400), + set_cmd=partial(self._temp_setter, "temperature_setpoint", True), + ) + """Parameter blocking_t will block instrument interaction while temperature is ramping to setpoint.""" + self.temperature_rate: Parameter = self.add_parameter( "temperature_rate", label="Temperature settle rate", @@ -400,6 +409,7 @@ def _temp_setter( "temperature_setpoint", "temperature_rate", "temperature_settling" ], value: float, + block_while_ramping: bool = False, ) -> None: """ The setter function for the temperature parameters. All three are set @@ -410,12 +420,10 @@ def _temp_setter( values[self.temp_params.index(param)] = value self.write(f"TEMP {values[0]}, {values[1]}, {values[2]}") - self._block_on_temperature_ramp() - def _block_on_temperature_ramp(self) -> None: - """Block all instrument interactions until temperature stabilizes.""" - while self.temperature_state() != "stable": - sleep(1) + if block_while_ramping: + while self.temperature_state() != "stable": + sleep(self._ramp_time_resolution) def write(self, cmd: str) -> None: """ From ce37e3c6b99c3b63f94bc37413dcff1f56d4f1ff Mon Sep 17 00:00:00 2001 From: Thomas Lemon Date: Mon, 27 Oct 2025 13:28:59 -0700 Subject: [PATCH 4/4] Use new attribute for blocking_t sleep --- .../instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py b/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py index 2b2a29a97355..f0ca54b47a99 100644 --- a/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py +++ b/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py @@ -44,6 +44,7 @@ class DynaCool(VisaInstrument): # the ramp time resolution is in (s) and is used in the # _do_blocking_ramp method _ramp_time_resolution = 0.1 + _blocking_t_sleep = 0.5 temp_params = ("temperature_setpoint", "temperature_rate", "temperature_settling") field_params = ("field_target", "field_rate", "field_approach") @@ -423,7 +424,7 @@ def _temp_setter( if block_while_ramping: while self.temperature_state() != "stable": - sleep(self._ramp_time_resolution) + sleep(self._blocking_t_sleep) def write(self, cmd: str) -> None: """