diff --git a/secop/modules.py b/secop/modules.py index 31fa80c..1367bac 100644 --- a/secop/modules.py +++ b/secop/modules.py @@ -547,60 +547,6 @@ class Module(HasAccessibles): """ mkthread(self.writeInitParams, started_callback) - def loadParameters(self): - """load persistent parameters - - :return: persistent parameters which have to be written - - is called upon startup and may be called from a module - when a hardware powerdown is detected - """ - if any(pobj.persistent for pobj in self.parameters.values()): - persistentdir = os.path.join(getGeneralConfig()['logdir'], 'persistent') - self.persistentFile = os.path.join(persistentdir, '%s.%s.json' % (self.DISPATCHER.equipment_id, self.name)) - else: - self.persistentFile = None - return {} - try: - with open(self.persistentFile, 'r') as f: - self.persistentData = json.load(f) - except FileNotFoundError: - self.persistentData = {} - writeDict = {} - for pname, pobj in self.parameters.items(): - if pobj.persistent and pname in self.persistentData: - value = pobj.datatype.import_value(self.persistentData[pname]) - try: - pobj.value = value - if not pobj.readonly: - writeDict[pname] = value - except Exception as e: - self.log.warning('can not restore %r to %r (%r)' % (pname, value, e)) - return writeDict - - def saveParameters(self): - """save persistent parameters - - to be called regularely explicitly by the module - """ - data = {k: v.export_value() for k, v in self.parameters.items() if v.persistent} - if data != self.persistentData: - self.persistentData = data - persistentdir = os.path.basename(self.persistentFile) - tmpfile = self.persistentFile + '.tmp' - if not os.path.isdir(persistentdir): - os.makedirs(persistentdir, exist_ok=True) - try: - with open(tmpfile, 'w') as f: - json.dump(self.persistentData, f, indent=2) - f.write('\n') - os.rename(tmpfile, self.persistentFile) - finally: - try: - os.remove(tmpfile) - except FileNotFoundError: - pass - class Readable(Module): """basic readable module""" diff --git a/secop_psi/trinamic.py b/secop_psi/trinamic.py index f4ad309..a0ad2ef 100644 --- a/secop_psi/trinamic.py +++ b/secop_psi/trinamic.py @@ -127,9 +127,7 @@ class Motor(PersistentMixin, HasIodev, Drivable): fast_pollfactor = 0.001 # poll as fast as possible when busy _started = 0 _calcTimeout = True - _need_reset = False - _save_filename = None - # _try_count = 0 + _need_reset = None def comm(self, cmd, adr, value=0, bank=0): """set or get a parameter @@ -229,13 +227,18 @@ class Motor(PersistentMixin, HasIodev, Drivable): writeDict = self.loadParameters() self.log.info('set to previous saved values %r', writeDict) # self.encoder now contains the last known (persistent) value - self.fix_encoder(encoder) + if self._need_reset is None: + if self.status[0] == self.Status.IDLE: + # server started, power cycled and encoder value matches last one + self.reset() + else: + self.fix_encoder(encoder) + self._need_reset = True + self.status = self.Status.ERROR, 'power loss' + # or should we just fix instead of error status? + # self.set('steppos', self.steppos - self.zero, check=False) self.comm(SET_GLOB_PAR, 255, 1, bank=2) # set initialized flag self._started = 0 - self._need_reset = True - self.status = self.Status.ERROR, 'power loss' - # or should we just fix instead of error status? - # self.set('steppos', self.steppos - self.zero, check=False) return encoder if abs(encoder - steppos) > self.tolerance else steppos