diff --git a/slic/core/adjustable/pvadjustable.py b/slic/core/adjustable/pvadjustable.py index 8cebb7297..d929e0fb7 100644 --- a/slic/core/adjustable/pvadjustable.py +++ b/slic/core/adjustable/pvadjustable.py @@ -74,7 +74,8 @@ class PVAdjustable(Adjustable): tname = typename(self) raise AdjustableError(f"waiting for {tname} \"{self.name}\" to be ready for change to {value} {self.units} timed out") - self.pvs.setvalue.put(value, wait=True, use_complete=True) # use_complete=True enables status in PV.put_complete + ret = self.pvs.setvalue.put(value, wait=True, use_complete=True) # use_complete=True enables status in PV.put_complete + handle_put_return_value(ret) time.sleep(self.process_time) # wait for done @@ -140,4 +141,18 @@ def make_pcm(pvname_done_moving, pvname_moving): return PVChangeMonitor(pvname_done_moving, inverted=True) +def handle_put_return_value(ret): + if ret == 1: # success + return + + if ret == -1: + error = "time out" + elif ret is None: + error = "disconnected PV" + else: + error = f"unknown error (return code: {ret})" + + raise AdjustableError(f"changing {tname} \"{self.name}\" to {value} {self.units} failed due to {error}") + +