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. diff --git a/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py b/src/qcodes/instrument_drivers/QuantumDesign/DynaCoolPPMS/DynaCool.py index 657f15af54bd..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") @@ -83,6 +84,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 +410,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 @@ -411,6 +422,10 @@ def _temp_setter( self.write(f"TEMP {values[0]}, {values[1]}, {values[2]}") + if block_while_ramping: + while self.temperature_state() != "stable": + sleep(self._blocking_t_sleep) + def write(self, cmd: str) -> None: """ Since the error code is always returned, we must read it back