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