rename Param -> Parameter

Change-Id: Idcbc440b76219282a888172890673a4d74935dfd
Reviewed-on: https://forge.frm2.tum.de/review/18210
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
This commit is contained in:
Enrico Faulhaber 2018-06-19 13:53:04 +02:00
parent 82caa33a5e
commit 22645b449b
11 changed files with 157 additions and 151 deletions

View File

@ -45,11 +45,11 @@ class ParameterView(QWidget):
self._propWidgets = {} # widget cache do avoid garbage collection
self.paramNameLabel.setText("%s:%s" % (module, parameter))
self._initParamWidgets()
self._initParameterWidgets()
# self._node.newData.connect(self._updateValue)
def _initParamWidgets(self):
def _initParameterWidgets(self):
# initValues = self._node.queryCache(self._module) #? mix live data?
row = 0

View File

@ -59,7 +59,7 @@ from secop.datatypes import DataType, EnumType, TupleOf, StringType, FloatRange,
EVENT_ONLY_ON_CHANGED_VALUES = False
class Param(object):
class Parameter(object):
"""storage for Parameter settings + value + qualifiers
if readonly is False, the value can be changed (by code, or remote)
@ -85,7 +85,9 @@ class Param(object):
group='',
poll=False,
value=unset_value,
timestamp=0):
timestamp=0,
optional=False,
ctr=None):
if not isinstance(datatype, DataType):
if issubclass(datatype, DataType):
# goodie: make an instance from a class (forgotten ()???)
@ -100,6 +102,7 @@ class Param(object):
self.readonly = readonly
self.export = export
self.group = group
self.optional = optional
# note: auto-converts True/False to 1/0 which yield the expected
# behaviour...
@ -114,7 +117,7 @@ class Param(object):
def copy(self):
# return a copy of ourselfs
return Param(**self.__dict__)
return Parameter(**self.__dict__)
def for_export(self):
# used for serialisation only
@ -134,7 +137,7 @@ class Param(object):
class Override(object):
"""Stores the overrides to ba applied to a Param
"""Stores the overrides to ba applied to a Parameter
note: overrides are applied by the metaclass during class creating
"""
@ -142,7 +145,7 @@ class Override(object):
self.kwds = kwds
def apply(self, paramobj):
if isinstance(paramobj, Param):
if isinstance(paramobj, Parameter):
for k, v in self.kwds.items():
if hasattr(paramobj, k):
setattr(paramobj, k, v)
@ -153,20 +156,22 @@ class Override(object):
(k, v, paramobj))
else:
raise ProgrammingError(
"Overrides can only be applied to Param's, %r is none!" %
"Overrides can only be applied to Parameter's, %r is none!" %
paramobj)
class Command(object):
"""storage for Commands settings (description + call signature...)
"""
def __init__(self, description, arguments=None, result=None):
def __init__(self, description, arguments=None, result=None, optional=False):
# descriptive text for humans
self.description = description
# list of datatypes for arguments
self.arguments = arguments or []
# datatype for result
self.resulttype = result
# whether implementation is optional
self.optional = optional
def __repr__(self):
return '%s(%s)' % (self.__class__.__name__, ', '.join(
@ -198,7 +203,7 @@ class ModuleMeta(type):
if '__constructed__' in attrs:
return newtype
# merge properties, Param and commands from all sub-classes
# merge properties, Parameter and commands from all sub-classes
for entry in ['properties', 'parameters', 'commands']:
newentry = {}
for base in reversed(bases):
@ -221,12 +226,12 @@ class ModuleMeta(type):
if isinstance(v.datatype, EnumType) and not v.datatype._enum.name:
v.datatype._enum.name = k
# check validity of Param entries
# check validity of Parameter entries
for pname, pobj in newtype.parameters.items():
# XXX: allow dicts for overriding certain aspects only.
if not isinstance(pobj, Param):
raise ProgrammingError('%r: Params entry %r should be a '
'Param object!' % (name, pname))
if not isinstance(pobj, Parameter):
raise ProgrammingError('%r: Parameters entry %r should be a '
'Parameter object!' % (name, pname))
# XXX: create getters for the units of params ??
@ -409,7 +414,7 @@ class Module(object):
'not unterstood! (use one of %s)' %
(self.name, k, ', '.join(self.parameters)))
# complain if a Param entry has no default value and
# complain if a Parameter entry has no default value and
# is not specified in cfgdict
for k, v in self.parameters.items():
if k not in cfgdict:
@ -421,7 +426,7 @@ class Module(object):
# assume default value was given
cfgdict[k] = v.default
# replace CLASS level Param objects with INSTANCE level ones
# replace CLASS level Parameter objects with INSTANCE level ones
# self.parameters[k] = self.parameters[k].copy() # already done above...
# now 'apply' config:
@ -468,14 +473,19 @@ class Readable(Module):
UNKNOWN = 900,
)
parameters = {
'value': Param('current value of the Module', readonly=True, default=0.,
datatype=FloatRange(), unit='', poll=True),
'pollinterval': Param('sleeptime between polls', default=5,
readonly=False, datatype=FloatRange(0.1, 120), ),
'status': Param('current status of the Module',
'value': Parameter('current value of the Module', readonly=True,
default=0., datatype=FloatRange(),
unit='', poll=True,
),
'pollinterval': Parameter('sleeptime between polls', default=5,
readonly=False,
datatype=FloatRange(0.1, 120),
),
'status': Parameter('current status of the Module',
default=(Status.IDLE, ''),
datatype=TupleOf(EnumType(Status), StringType()),
readonly=True, poll=True),
readonly=True, poll=True,
),
}
def init(self):
@ -522,14 +532,10 @@ class Writable(Readable):
providing a settable 'target' parameter to those of a Readable
"""
parameters = {
'target': Param(
'target value of the Module',
default=0.,
readonly=False,
datatype=FloatRange(),
'target': Parameter('target value of the Module',
default=0., readonly=False, datatype=FloatRange(),
),
}
# XXX: commands ???? auto deriving working well enough?
class Drivable(Writable):

View File

@ -43,7 +43,7 @@ import threading
from secop.protocol.messages import Message, EVENTREPLY, IDENTREQUEST
from secop.protocol.errors import SECOPError, NoSuchModuleError, \
NoSuchCommandError, NoSuchParamError, BadValueError, ReadonlyError
NoSuchCommandError, NoSuchParameterError, BadValueError, ReadonlyError
from secop.lib import formatExtendedStack, formatException
try:
@ -223,14 +223,14 @@ class Dispatcher(object):
res = func(*arguments)
return res, dict(t=currenttime())
def _setParamValue(self, modulename, pname, value):
def _setParameterValue(self, modulename, pname, value):
moduleobj = self.get_module(modulename)
if moduleobj is None:
raise NoSuchModuleError(module=modulename)
pobj = moduleobj.parameters.get(pname, None)
if pobj is None:
raise NoSuchParamError(module=modulename, parameter=pname)
raise NoSuchParameterError(module=modulename, parameter=pname)
if pobj.readonly:
raise ReadonlyError(module=modulename, parameter=pname)
@ -244,14 +244,14 @@ class Dispatcher(object):
return pobj.export_value(), dict(t=pobj.timestamp)
return pobj.export_value(), {}
def _getParamValue(self, modulename, pname):
def _getParameterValue(self, modulename, pname):
moduleobj = self.get_module(modulename)
if moduleobj is None:
raise NoSuchModuleError(module=modulename)
pobj = moduleobj.parameters.get(pname, None)
if pobj is None:
raise NoSuchParamError(module=modulename, parameter=pname)
raise NoSuchParameterError(module=modulename, parameter=pname)
readfunc = getattr(moduleobj, u'read_%s' % pname, None)
if readfunc:
@ -335,7 +335,7 @@ class Dispatcher(object):
# XXX: trigger polling and force sending event
if not msg.parameter:
msg.parameter = u'value'
msg.set_result(*self._getParamValue(msg.module, msg.parameter))
msg.set_result(*self._getParameterValue(msg.module, msg.parameter))
#if conn in self._active_connections:
# return None # already send to myself
@ -349,7 +349,7 @@ class Dispatcher(object):
# just return the reply in that case
if not msg.parameter:
msg.parameter = u'target'
msg.set_result(*self._setParamValue(msg.module, msg.parameter, msg.data))
msg.set_result(*self._setParameterValue(msg.module, msg.parameter, msg.data))
#if conn in self._active_connections:
# return None # already send to myself
@ -403,7 +403,7 @@ class Dispatcher(object):
# XXX: should we send the cached values instead? (pbj.value)
# also: ignore errors here.
try:
res = self._getParamValue(modulename, pname)
res = self._getParameterValue(modulename, pname)
if res[0] == Ellipsis: # means we do not have a value at all so skip this
self.log.error(
u'activate: got no value for %s:%s!' %

View File

@ -57,7 +57,7 @@ class NoSuchModuleError(SECOPError):
pass
class NoSuchParamError(SECOPError):
class NoSuchParameterError(SECOPError):
pass
@ -100,7 +100,7 @@ class DisabledError(SECOPError):
EXCEPTIONS = dict(
NoSuchModule=NoSuchModuleError,
NoSuchParam=NoSuchParamError,
NoSuchParameter=NoSuchParameterError,
NoSuchCommand=NoSuchCommandError,
CommandFailed=CommandFailedError,
CommandRunning=CommandRunningError,

View File

@ -24,7 +24,7 @@
import random
from time import sleep
from secop.modules import Module, Readable, Writable, Drivable, Param
from secop.modules import Module, Readable, Writable, Drivable, Parameter
from secop.lib import mkthread
from secop.datatypes import FloatRange
@ -42,7 +42,7 @@ class SimBase(object):
self.parameters = dict((k, v.copy()) for k, v in self.parameters.items())
for k in extra_params.split(','):
k = k.strip()
self.parameters[k] = Param('extra_param: %s' % k.strip(),
self.parameters[k] = Parameter('extra_param: %s' % k.strip(),
datatype=FloatRange(),
default=0.0)
def reader(maxage=0, pname=k):

View File

@ -24,7 +24,7 @@ from math import atan
import time
import random
from secop.modules import Drivable, Command, Param
from secop.modules import Drivable, Command, Parameter
from secop.datatypes import FloatRange, EnumType, TupleOf
from secop.lib import clamp, mkthread
@ -41,82 +41,82 @@ class Cryostat(CryoBase):
- thermal transfer between regulation and samplen
"""
parameters = dict(
jitter=Param("amount of random noise on readout values",
jitter=Parameter("amount of random noise on readout values",
datatype=FloatRange(0, 1), unit="K",
default=0.1, readonly=False, export=False,
),
T_start=Param("starting temperature for simulation",
T_start=Parameter("starting temperature for simulation",
datatype=FloatRange(0), default=10,
export=False,
),
looptime=Param("timestep for simulation",
looptime=Parameter("timestep for simulation",
datatype=FloatRange(0.01, 10), unit="s", default=1,
readonly=False, export=False,
),
ramp=Param("ramping speed of the setpoint",
ramp=Parameter("ramping speed of the setpoint",
datatype=FloatRange(0, 1e3), unit="K/min", default=1,
readonly=False,
),
setpoint=Param("current setpoint during ramping else target",
setpoint=Parameter("current setpoint during ramping else target",
datatype=FloatRange(), default=1, unit='K',
),
maxpower=Param("Maximum heater power",
maxpower=Parameter("Maximum heater power",
datatype=FloatRange(0), default=1, unit="W",
readonly=False,
group='heater_settings',
),
heater=Param("current heater setting",
heater=Parameter("current heater setting",
datatype=FloatRange(0, 100), default=0, unit="%",
group='heater_settings',
),
heaterpower=Param("current heater power",
heaterpower=Parameter("current heater power",
datatype=FloatRange(0), default=0, unit="W",
group='heater_settings',
),
target=Param("target temperature",
target=Parameter("target temperature",
datatype=FloatRange(0), default=0, unit="K",
readonly=False,
),
value=Param("regulation temperature",
value=Parameter("regulation temperature",
datatype=FloatRange(0), default=0, unit="K",
),
pid=Param("regulation coefficients",
pid=Parameter("regulation coefficients",
datatype=TupleOf(FloatRange(0), FloatRange(0, 100),
FloatRange(0, 100)),
default=(40, 10, 2), readonly=False,
group='pid',
),
p=Param("regulation coefficient 'p'",
p=Parameter("regulation coefficient 'p'",
datatype=FloatRange(0), default=40, unit="%/K", readonly=False,
group='pid',
),
i=Param("regulation coefficient 'i'",
i=Parameter("regulation coefficient 'i'",
datatype=FloatRange(0, 100), default=10, readonly=False,
group='pid',
),
d=Param("regulation coefficient 'd'",
d=Parameter("regulation coefficient 'd'",
datatype=FloatRange(0, 100), default=2, readonly=False,
group='pid',
),
mode=Param("mode of regulation",
mode=Parameter("mode of regulation",
datatype=EnumType('mode', ramp=None, pid=None, openloop=None),
default='ramp',
readonly=False,
),
pollinterval=Param("polling interval",
pollinterval=Parameter("polling interval",
datatype=FloatRange(0), default=5,
),
tolerance=Param("temperature range for stability checking",
tolerance=Parameter("temperature range for stability checking",
datatype=FloatRange(0, 100), default=0.1, unit='K',
readonly=False,
group='stability',
),
window=Param("time window for stability checking",
window=Parameter("time window for stability checking",
datatype=FloatRange(1, 900), default=30, unit='s',
readonly=False,
group='stability',
),
timeout=Param("max waiting time for stabilisation check",
timeout=Parameter("max waiting time for stabilisation check",
datatype=FloatRange(1, 36000), default=900, unit='s',
readonly=False,
group='stability',

View File

@ -25,7 +25,7 @@ import random
import threading
from secop.lib.enum import Enum
from secop.modules import Readable, Drivable, Param
from secop.modules import Readable, Drivable, Parameter
from secop.datatypes import EnumType, FloatRange, IntRange, ArrayOf, StringType, TupleOf, StructOf, BoolType
@ -33,18 +33,18 @@ class Switch(Drivable):
"""switch it on or off....
"""
parameters = {
'value': Param('current state (on or off)',
'value': Parameter('current state (on or off)',
datatype=EnumType(on=1, off=0), default=0,
),
'target': Param('wanted state (on or off)',
'target': Parameter('wanted state (on or off)',
datatype=EnumType(on=1, off=0), default=0,
readonly=False,
),
'switch_on_time': Param('seconds to wait after activating the switch',
'switch_on_time': Parameter('seconds to wait after activating the switch',
datatype=FloatRange(0, 60), unit='s',
default=10, export=False,
),
'switch_off_time': Param('cool-down time in seconds',
'switch_off_time': Parameter('cool-down time in seconds',
datatype=FloatRange(0, 60), unit='s',
default=10, export=False,
),
@ -95,22 +95,22 @@ class MagneticField(Drivable):
"""a liquid magnet
"""
parameters = {
'value': Param('current field in T',
'value': Parameter('current field in T',
unit='T', datatype=FloatRange(-15, 15), default=0,
),
'target': Param('target field in T',
'target': Parameter('target field in T',
unit='T', datatype=FloatRange(-15, 15), default=0,
readonly=False,
),
'ramp': Param('ramping speed',
'ramp': Parameter('ramping speed',
unit='T/min', datatype=FloatRange(0, 1), default=0.1,
readonly=False,
),
'mode': Param('what to do after changing field',
'mode': Parameter('what to do after changing field',
default=1, datatype=EnumType(persistent=1, hold=0),
readonly=False,
),
'heatswitch': Param('name of heat switch device',
'heatswitch': Parameter('name of heat switch device',
datatype=StringType(), export=False,
),
}
@ -183,10 +183,10 @@ class CoilTemp(Readable):
"""a coil temperature
"""
parameters = {
'value': Param('Coil temperatur',
'value': Parameter('Coil temperatur',
unit='K', datatype=FloatRange(), default=0,
),
'sensor': Param("Sensor number or calibration id",
'sensor': Parameter("Sensor number or calibration id",
datatype=StringType(), readonly=True,
),
}
@ -199,13 +199,13 @@ class SampleTemp(Drivable):
"""a sample temperature
"""
parameters = {
'value': Param('Sample temperature',
'value': Parameter('Sample temperature',
unit='K', datatype=FloatRange(), default=10,
),
'sensor': Param("Sensor number or calibration id",
'sensor': Parameter("Sensor number or calibration id",
datatype=StringType(), readonly=True,
),
'ramp': Param('moving speed in K/min',
'ramp': Parameter('moving speed in K/min',
datatype=FloatRange(0, 100), unit='K/min', default=0.1,
readonly=False,
),
@ -246,16 +246,16 @@ class Label(Readable):
modules.
"""
parameters = {
'system': Param("Name of the magnet system",
'system': Parameter("Name of the magnet system",
datatype=StringType, export=False,
),
'subdev_mf': Param("name of subdevice for magnet status",
'subdev_mf': Parameter("name of subdevice for magnet status",
datatype=StringType, export=False,
),
'subdev_ts': Param("name of subdevice for sample temp",
'subdev_ts': Parameter("name of subdevice for sample temp",
datatype=StringType, export=False,
),
'value': Param("final value of label string",
'value': Parameter("final value of label string",
datatype=StringType,
),
}
@ -291,20 +291,20 @@ class DatatypesTest(Readable):
"""for demoing all datatypes
"""
parameters = {
'enum': Param('enum', datatype=EnumType(boo=None, faar=None, z=9),
'enum': Parameter('enum', datatype=EnumType(boo=None, faar=None, z=9),
readonly=False, default=1),
'tupleof': Param('tuple of int, float and str',
'tupleof': Parameter('tuple of int, float and str',
datatype=TupleOf(IntRange(), FloatRange(),
StringType()),
readonly=False, default=(1, 2.3, 'a')),
'arrayof': Param('array: 2..3 times bool',
'arrayof': Parameter('array: 2..3 times bool',
datatype=ArrayOf(BoolType(), 2, 3),
readonly=False, default=[1, 0, 1]),
'intrange': Param('intrange', datatype=IntRange(2, 9),
'intrange': Parameter('intrange', datatype=IntRange(2, 9),
readonly=False, default=4),
'floatrange': Param('floatrange', datatype=FloatRange(-1, 1),
'floatrange': Parameter('floatrange', datatype=FloatRange(-1, 1),
readonly=False, default=0, ),
'struct': Param('struct(a=str, b=int, c=bool)',
'struct': Parameter('struct(a=str, b=int, c=bool)',
datatype=StructOf(a=StringType(), b=IntRange(),
c=BoolType()),
),
@ -313,6 +313,6 @@ class DatatypesTest(Readable):
class ArrayTest(Readable):
parameters = {
"x": Param('value', datatype=ArrayOf(FloatRange(), 100000, 100000),
"x": Parameter('value', datatype=ArrayOf(FloatRange(), 100000, 100000),
default = 100000 * [0]),
}

View File

@ -22,7 +22,7 @@
import random
from secop.modules import Readable, Drivable, Communicator, Param
from secop.modules import Readable, Drivable, Communicator, Parameter
from secop.datatypes import FloatRange, StringType
@ -44,7 +44,7 @@ class Heater(Drivable):
but the implementation may do anything
"""
parameters = {
'maxheaterpower': Param('maximum allowed heater power',
'maxheaterpower': Parameter('maximum allowed heater power',
datatype=FloatRange(0, 100), unit='W',
),
}
@ -63,14 +63,14 @@ class Temp(Drivable):
but the implementation may do anything
"""
parameters = {
'sensor': Param(
'sensor': Parameter(
"Sensor number or calibration id",
datatype=StringType(
8,
16),
readonly=True,
),
'target': Param(
'target': Parameter(
"Target temperature",
default=300.0,
datatype=FloatRange(0),

View File

@ -23,7 +23,7 @@
from __future__ import absolute_import
from secop.datatypes import EnumType, FloatRange, StringType
from secop.modules import Readable, Drivable, Param
from secop.modules import Readable, Drivable, Parameter
try:
from pvaccess import Channel # import EPIVSv4 functionallity, PV access
@ -60,16 +60,16 @@ class EpicsReadable(Readable):
"""EpicsDrivable handles a Drivable interfacing to EPICS v4"""
# Commmon parameter for all EPICS devices
parameters = {
'value': Param('EPICS generic value',
'value': Parameter('EPICS generic value',
datatype=FloatRange(),
default=300.0,),
'epics_version': Param("EPICS version used, v3 or v4",
'epics_version': Parameter("EPICS version used, v3 or v4",
datatype=EnumType(v3=3, v4=4),),
# 'private' parameters: not remotely accessible
'value_pv': Param('EPICS pv_name of value',
'value_pv': Parameter('EPICS pv_name of value',
datatype=StringType(),
default="unset", export=False),
'status_pv': Param('EPICS pv_name of status',
'status_pv': Parameter('EPICS pv_name of status',
datatype=StringType(),
default="unset", export=False),
}
@ -120,18 +120,18 @@ class EpicsDrivable(Drivable):
"""EpicsDrivable handles a Drivable interfacing to EPICS v4"""
# Commmon parameter for all EPICS devices
parameters = {
'target': Param('EPICS generic target', datatype=FloatRange(),
'target': Parameter('EPICS generic target', datatype=FloatRange(),
default=300.0, readonly=False),
'value': Param('EPICS generic value', datatype=FloatRange(),
'value': Parameter('EPICS generic value', datatype=FloatRange(),
default=300.0,),
'epics_version': Param("EPICS version used, v3 or v4",
'epics_version': Parameter("EPICS version used, v3 or v4",
datatype=StringType(),),
# 'private' parameters: not remotely accessible
'target_pv': Param('EPICS pv_name of target', datatype=StringType(),
'target_pv': Parameter('EPICS pv_name of target', datatype=StringType(),
default="unset", export=False),
'value_pv': Param('EPICS pv_name of value', datatype=StringType(),
'value_pv': Parameter('EPICS pv_name of value', datatype=StringType(),
default="unset", export=False),
'status_pv': Param('EPICS pv_name of status', datatype=StringType(),
'status_pv': Parameter('EPICS pv_name of status', datatype=StringType(),
default="unset", export=False),
}
@ -194,13 +194,13 @@ class EpicsTempCtrl(EpicsDrivable):
parameters = {
# TODO: restrict possible values with oneof datatype
'heaterrange': Param('Heater range', datatype=StringType(),
'heaterrange': Parameter('Heater range', datatype=StringType(),
default='Off', readonly=False,),
'tolerance': Param('allowed deviation between value and target',
'tolerance': Parameter('allowed deviation between value and target',
datatype=FloatRange(1e-6, 1e6), default=0.1,
readonly=False,),
# 'private' parameters: not remotely accessible
'heaterrange_pv': Param('EPICS pv_name of heater range',
'heaterrange_pv': Parameter('EPICS pv_name of heater range',
datatype=StringType(), default="unset", export=False,),
}

View File

@ -30,7 +30,7 @@ import math
from secop.lib.sequence import SequencerMixin, Step
from secop.datatypes import StringType, TupleOf, FloatRange, ArrayOf, StructOf
from secop.errors import DisabledError, ConfigError
from secop.modules import Param, Drivable
from secop.modules import Parameter, Drivable
class GarfieldMagnet(SequencerMixin, Drivable):
@ -47,30 +47,30 @@ class GarfieldMagnet(SequencerMixin, Drivable):
"""
parameters = {
'subdev_currentsource': Param('(bipolar) Powersupply', datatype=StringType(), readonly=True, export=False),
'subdev_enable': Param('Switch to set for on/off', datatype=StringType(), readonly=True, export=False),
'subdev_polswitch': Param('Switch to set for polarity', datatype=StringType(), readonly=True, export=False),
'subdev_symmetry': Param('Switch to read for symmetry', datatype=StringType(), readonly=True, export=False),
'userlimits': Param('User defined limits of device value',
'subdev_currentsource': Parameter('(bipolar) Powersupply', datatype=StringType(), readonly=True, export=False),
'subdev_enable': Parameter('Switch to set for on/off', datatype=StringType(), readonly=True, export=False),
'subdev_polswitch': Parameter('Switch to set for polarity', datatype=StringType(), readonly=True, export=False),
'subdev_symmetry': Parameter('Switch to read for symmetry', datatype=StringType(), readonly=True, export=False),
'userlimits': Parameter('User defined limits of device value',
unit='main', datatype=TupleOf(FloatRange(), FloatRange()),
default=(float('-Inf'), float('+Inf')), readonly=False, poll=10),
'abslimits': Param('Absolute limits of device value',
'abslimits': Parameter('Absolute limits of device value',
unit='main', datatype=TupleOf(FloatRange(), FloatRange()),
default=(-0.5, 0.5), poll=True,
),
'precision': Param('Precision of the device value (allowed deviation '
'precision': Parameter('Precision of the device value (allowed deviation '
'of stable values from target)',
unit='main', datatype=FloatRange(0.001), default=0.001, readonly=False,
),
'ramp': Param('Target rate of field change per minute', readonly=False,
'ramp': Parameter('Target rate of field change per minute', readonly=False,
unit='main/min', datatype=FloatRange(), default=1.0),
'calibration': Param('Coefficients for calibration '
'calibration': Parameter('Coefficients for calibration '
'function: [c0, c1, c2, c3, c4] calculates '
'B(I) = c0*I + c1*erf(c2*I) + c3*atan(c4*I)'
' in T', poll=1,
datatype=ArrayOf(FloatRange(), 5, 5),
default=(1.0, 0.0, 0.0, 0.0, 0.0)),
'calibrationtable': Param('Map of Coefficients for calibration per symmetry setting',
'calibrationtable': Parameter('Map of Coefficients for calibration per symmetry setting',
datatype=StructOf(symmetric=ArrayOf(FloatRange(), 5, 5),
short=ArrayOf(
FloatRange(), 5, 5),

View File

@ -41,7 +41,7 @@ from secop.datatypes import IntRange, FloatRange, StringType, TupleOf, \
ArrayOf, EnumType
from secop.errors import ConfigError, ProgrammingError, CommunicationError, \
HardwareError
from secop.modules import Param, Command, Override, Module, Readable, Drivable
from secop.modules import Parameter, Command, Override, Module, Readable, Drivable
#####
@ -159,14 +159,14 @@ class PyTangoDevice(Module):
"""
parameters = {
'comtries': Param('Maximum retries for communication',
'comtries': Parameter('Maximum retries for communication',
datatype=IntRange(1, 100), default=3, readonly=False,
group='communication'),
'comdelay': Param('Delay between retries', datatype=FloatRange(0),
'comdelay': Parameter('Delay between retries', datatype=FloatRange(0),
unit='s', default=0.1, readonly=False,
group='communication'),
'tangodevice': Param('Tango device name',
'tangodevice': Parameter('Tango device name',
datatype=StringType(), readonly=True,
# export=True, # for testing only
export=False,
@ -426,25 +426,25 @@ class AnalogOutput(PyTangoDevice, Drivable):
"""
parameters = {
'userlimits': Param('User defined limits of device value',
'userlimits': Parameter('User defined limits of device value',
datatype=TupleOf(FloatRange(), FloatRange()),
default=(float('-Inf'), float('+Inf')),
unit='main', readonly=False, poll=10,
),
'abslimits': Param('Absolute limits of device value',
'abslimits': Parameter('Absolute limits of device value',
datatype=TupleOf(FloatRange(), FloatRange()),
unit='main',
),
'precision': Param('Precision of the device value (allowed deviation '
'precision': Parameter('Precision of the device value (allowed deviation '
'of stable values from target)',
unit='main', datatype=FloatRange(1e-38),
readonly=False, group='stability',
),
'window': Param('Time window for checking stabilization if > 0',
'window': Parameter('Time window for checking stabilization if > 0',
unit='s', default=60.0, readonly=False,
datatype=FloatRange(0, 900), group='stability',
),
'timeout': Param('Timeout for waiting for a stable value (if > 0)',
'timeout': Parameter('Timeout for waiting for a stable value (if > 0)',
unit='s', default=60.0, readonly=False,
datatype=FloatRange(0, 900), group='stability',
),
@ -599,10 +599,10 @@ class Actuator(AnalogOutput):
# for secop: support the speed and ramp parameters
parameters = {
'speed': Param('The speed of changing the value',
'speed': Parameter('The speed of changing the value',
unit='main/s', readonly=False, datatype=FloatRange(0),
),
'ramp': Param('The speed of changing the value',
'ramp': Parameter('The speed of changing the value',
unit='main/min', readonly=False, datatype=FloatRange(0),
poll=30,
),
@ -639,13 +639,13 @@ class Motor(Actuator):
"""
parameters = {
'refpos': Param('Reference position',
'refpos': Parameter('Reference position',
datatype=FloatRange(), unit='main',
),
'accel': Param('Acceleration',
'accel': Parameter('Acceleration',
datatype=FloatRange(), readonly=False, unit='main/s^2',
),
'decel': Param('Deceleration',
'decel': Parameter('Deceleration',
datatype=FloatRange(), readonly=False, unit='main/s^2',
),
}
@ -679,24 +679,24 @@ class TemperatureController(Actuator):
"""
parameters = {
'p': Param('Proportional control Parameter', datatype=FloatRange(),
'p': Parameter('Proportional control Parameter', datatype=FloatRange(),
readonly=False, group='pid',
),
'i': Param('Integral control Parameter', datatype=FloatRange(),
'i': Parameter('Integral control Parameter', datatype=FloatRange(),
readonly=False, group='pid',
),
'd': Param('Derivative control Parameter', datatype=FloatRange(),
'd': Parameter('Derivative control Parameter', datatype=FloatRange(),
readonly=False, group='pid',
),
'pid': Param('pid control Parameters',
'pid': Parameter('pid control Parameters',
datatype=TupleOf(FloatRange(), FloatRange(), FloatRange()),
readonly=False, group='pid', poll=30,
),
'setpoint': Param('Current setpoint', datatype=FloatRange(), poll=1,
'setpoint': Parameter('Current setpoint', datatype=FloatRange(), poll=1,
),
'heateroutput': Param('Heater output', datatype=FloatRange(), poll=1,
'heateroutput': Parameter('Heater output', datatype=FloatRange(), poll=1,
),
'ramp': Param('Temperature ramp', unit='main/min',
'ramp': Parameter('Temperature ramp', unit='main/min',
datatype=FloatRange(), readonly=False, poll=30),
}
@ -754,11 +754,11 @@ class PowerSupply(Actuator):
"""
parameters = {
'ramp': Param('Current/voltage ramp', unit='main/min',
'ramp': Parameter('Current/voltage ramp', unit='main/min',
datatype=FloatRange(), readonly=False, poll=30,),
'voltage': Param('Actual voltage', unit='V',
'voltage': Parameter('Actual voltage', unit='V',
datatype=FloatRange(), poll=-5),
'current': Param('Actual current', unit='A',
'current': Parameter('Actual current', unit='A',
datatype=FloatRange(), poll=-5),
}
@ -792,7 +792,7 @@ class NamedDigitalInput(DigitalInput):
"""
parameters = {
'mapping': Param('A dictionary mapping state names to integers',
'mapping': Parameter('A dictionary mapping state names to integers',
datatype=StringType(), export=False), # XXX:!!!
}
@ -815,9 +815,9 @@ class PartialDigitalInput(NamedDigitalInput):
"""
parameters = {
'startbit': Param('Number of the first bit',
'startbit': Parameter('Number of the first bit',
datatype=IntRange(0), default=0),
'bitwidth': Param('Number of bits',
'bitwidth': Parameter('Number of bits',
datatype=IntRange(0), default=1),
}
@ -859,7 +859,7 @@ class NamedDigitalOutput(DigitalOutput):
"""
parameters = {
'mapping': Param('A dictionary mapping state names to integers',
'mapping': Parameter('A dictionary mapping state names to integers',
datatype=StringType(), export=False),
}
@ -885,9 +885,9 @@ class PartialDigitalOutput(NamedDigitalOutput):
"""
parameters = {
'startbit': Param('Number of the first bit',
'startbit': Parameter('Number of the first bit',
datatype=IntRange(0), default=0),
'bitwidth': Param('Number of bits',
'bitwidth': Parameter('Number of bits',
datatype=IntRange(0), default=1),
}
@ -916,13 +916,13 @@ class StringIO(PyTangoDevice, Module):
"""
parameters = {
'bustimeout': Param('Communication timeout',
'bustimeout': Parameter('Communication timeout',
datatype=FloatRange(), readonly=False,
unit='s', group='communication'),
'endofline': Param('End of line',
'endofline': Parameter('End of line',
datatype=StringType(), readonly=False,
group='communication'),
'startofline': Param('Start of line',
'startofline': Parameter('Start of line',
datatype=StringType(), readonly=False,
group='communication'),
}