phytron: next fix

Change-Id: I72debb43b02f07cf9ff79286293105f052314a35
This commit is contained in:
zolliker 2023-05-15 09:03:58 +02:00
parent 84d0d44f38
commit 6697462f15

View File

@ -168,10 +168,9 @@ class Motor(HasOffset, HasStates, PersistentMixin, HasIO, Drivable):
def write_target(self, value):
self.read_alive_time()
if self._reset_needed:
self.status = ERROR, 'reset needed after power up (probably position lost)'
if not self.status[1].startswith('reset needed'):
self.status = ERROR, 'reset needed after ' + self.status[1]
raise HardwareError(self.status[1])
if self.status[0] == ERROR:
raise HardwareError('need reset')
self.saveParameters()
if self.backlash:
# drive first to target + backlash
@ -191,6 +190,7 @@ class Motor(HasOffset, HasStates, PersistentMixin, HasIO, Drivable):
sysstatus = sysstatus[2:4] if self.axis == 'X' else sysstatus[6:8]
status = self.STATUS_MAP.get(sysstatus) or (ERROR, f'unknown error {sysstatus}')
if status[0] == ERROR:
self._reset_needed = True
return status
return super().read_status() # status from state machine
@ -212,6 +212,7 @@ class Motor(HasOffset, HasStates, PersistentMixin, HasIO, Drivable):
self.value, e1, e2)
self.get('S') # stop
self.saveParameters()
self._reset_needed = True
raise HardwareError('encoder lag error')
@status_code(BUSY)
@ -242,6 +243,7 @@ class Motor(HasOffset, HasStates, PersistentMixin, HasIO, Drivable):
if sm.mismatch_count > 2:
self.log.error('encoder mismatch: abs(%g - %g) < %g',
enc, pos, self.encoder_tolerance)
self._reset_needed = True
raise HardwareError('encoder does not match pos')
sm.mismatch_count += 1
return Retry
@ -255,7 +257,7 @@ class Motor(HasOffset, HasStates, PersistentMixin, HasIO, Drivable):
def reset_error(self):
"""Reset error, set position to encoder"""
self.read_value()
if self.status[0] == ERROR or self._reset_needed:
if self._reset_needed:
newenc = enc = self.read_encoder()
pos = self.value
if abs(enc - pos) > self.encoder_tolerance or self.encoder_mode == 'NO':