uniax, version 7.10.2021
- driving with a generator - 3 phases 1) find active range (low current, far movement until force over hysteresis) 2) release force until well below target 3) adjusting using pid_p. (this is in fact an integral factor)
This commit is contained in:
@ -495,15 +495,15 @@ class Module(HasAccessibles):
|
||||
for pname in self.parameters:
|
||||
errfunc = getattr(modobj, 'error_update_' + pname, None)
|
||||
if errfunc:
|
||||
def errcb(err, p=pname, efunc=errfunc):
|
||||
def errcb(err, p=pname, m=modobj, efunc=errfunc):
|
||||
try:
|
||||
efunc(err)
|
||||
except Exception as e:
|
||||
modobj.announceUpdate(p, err=e)
|
||||
m.announceUpdate(p, err=e)
|
||||
self.errorCallbacks[pname].append(errcb)
|
||||
else:
|
||||
def errcb(err, p=pname):
|
||||
modobj.announceUpdate(p, err=err)
|
||||
def errcb(err, p=pname, m=modobj):
|
||||
m.announceUpdate(p, err=err)
|
||||
if pname in autoupdate:
|
||||
self.errorCallbacks[pname].append(errcb)
|
||||
|
||||
@ -516,8 +516,8 @@ class Module(HasAccessibles):
|
||||
efunc(e)
|
||||
self.valueCallbacks[pname].append(cb)
|
||||
elif pname in autoupdate:
|
||||
def cb(value, p=pname):
|
||||
modobj.announceUpdate(p, value)
|
||||
def cb(value, p=pname, m=modobj):
|
||||
m.announceUpdate(p, value)
|
||||
self.valueCallbacks[pname].append(cb)
|
||||
|
||||
def isBusy(self, status=None):
|
||||
@ -642,7 +642,7 @@ class Writable(Readable):
|
||||
"""basic writable module"""
|
||||
|
||||
target = Parameter('target value of the module',
|
||||
default=0, readonly=False, datatype=FloatRange())
|
||||
default=0, readonly=False, datatype=FloatRange(unit='$'))
|
||||
|
||||
|
||||
class Drivable(Writable):
|
||||
|
@ -56,12 +56,14 @@ import os
|
||||
import json
|
||||
|
||||
from secop.lib import getGeneralConfig
|
||||
from secop.datatypes import EnumType
|
||||
from secop.params import Parameter, Property, BoolType, Command
|
||||
from secop.modules import HasAccessibles
|
||||
|
||||
|
||||
class PersistentParam(Parameter):
|
||||
persistent = Property('persistence flag', BoolType(), default=True)
|
||||
persistent = Property('persistence flag (auto means: save automatically on any change)',
|
||||
EnumType(off=0, on=1, auto=2), default=1)
|
||||
|
||||
|
||||
class PersistentMixin(HasAccessibles):
|
||||
@ -73,8 +75,12 @@ class PersistentMixin(HasAccessibles):
|
||||
self.initData = {}
|
||||
for pname in self.parameters:
|
||||
pobj = self.parameters[pname]
|
||||
if not pobj.readonly and getattr(pobj, 'persistent', False):
|
||||
if not pobj.readonly and getattr(pobj, 'persistent', 0):
|
||||
self.initData[pname] = pobj.value
|
||||
if pobj.persistent == 'auto':
|
||||
def cb(value, m=self):
|
||||
m.saveParameters()
|
||||
self.valueCallbacks[pname].append(cb)
|
||||
self.writeDict.update(self.loadParameters(write=False))
|
||||
|
||||
def loadParameters(self, write=True):
|
||||
|
Reference in New Issue
Block a user