From 9e6699dd1ee7e21c52cc132bc0665e37d523d53d Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Fri, 15 Dec 2023 16:00:26 +0100 Subject: [PATCH] more robust calculation for heater resistivity and check is is in the allowed range 10 .. 100 Ohm Change-Id: If485480c0974d953165c37f7354dc2818f68b30b --- frappy_psi/mercury.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/frappy_psi/mercury.py b/frappy_psi/mercury.py index 5a8294b..6698bd8 100644 --- a/frappy_psi/mercury.py +++ b/frappy_psi/mercury.py @@ -294,6 +294,7 @@ class HeaterOutput(HasInput, Writable): volt = 0.0 # target voltage _last_target = None _volt_target = None + _resistivity = 10 def read_limit(self): return self.query('DEV::HTR:VLIM') ** 2 / self.resistivity @@ -329,10 +330,15 @@ class HeaterOutput(HasInput, Writable): res = volt / current tol = res * max(max(0.0003, abs(volt - self._volt_target)) / volt, 0.0001 / current, 0.0001) if abs(res - self.resistivity) > tol + 0.07 and self._last_target: - self.write_resistivity(round(res, 1)) - if self.controlled_by == 0: - self._volt_target = math.sqrt(self._last_target * self.resistivity) - self.change('DEV::HTR:SIG:VOLT', self._volt_target, tolerance=2e-4) + res = round(res, 1) + if self._resistivity != res and 10 <= res <= 100: + # we want twice the same value before changing + self._resistivity = res + else: + self.write_resistivity(res) + if self.controlled_by == 0: + self._volt_target = math.sqrt(self._last_target * self.resistivity) + self.change('DEV::HTR:SIG:VOLT', self._volt_target, tolerance=2e-4) return volt * current def read_target(self):