Adapt sim_* cfg's to current syntax

+ make 'limit' usable as type in cfg files
+ minor fixes

Change-Id: Ib94b2645c7a0d978d64d4c86c4415d4b5b0d485f
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/21485
Tested-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
This commit is contained in:
Enrico Faulhaber
2019-10-30 17:24:03 +01:00
parent ac873ed546
commit 5458911b67
20 changed files with 246 additions and 226 deletions

View File

@@ -10,7 +10,6 @@ type=tcp
bindto=0.0.0.0 bindto=0.0.0.0
bindport=10769 bindport=10769
[module cryo] [module cryo]
# some (non-defaut) module properties # some (non-defaut) module properties
.group=very important/stuff .group=very important/stuff

View File

@@ -13,7 +13,7 @@ bindport=10767
class=secop.simulation.SimDrivable class=secop.simulation.SimDrivable
.description=simulation stuff .description=simulation stuff
.extra_params=param3,param4,jitter,ramp .extra_params=param3,param4,jitter,ramp
param3.datatype=['bool'] param3.datatype={"type":"bool"}
param3.default=True param3.default=True
param3.readonly=False param3.readonly=False
jitter.default=1 jitter.default=1

View File

@@ -20,60 +20,54 @@ bindport=10767
[module enable] [module enable]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
value.datatype=["enum", {'On':1,'Off':0}] value.datatype={"type":"enum", "members":{'On':1,'Off':0}}
target.datatype=["enum", {'On':1,'Off':0}] target.datatype={"type":"enum", "members":{'On':1,'Off':0}}
.description='Enables to Output of the Powersupply' .description='Enables to Output of the Powersupply'
.visibility='advanced' .visibility='advanced'
[module polarity] [module polarity]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
value.datatype=["enum", {'+1':1,'0':0,'-1':-1}] value.datatype={"type":"enum", "members":{'+1':1,'0':0,'-1':-1}}
target.datatype=["enum", {'+1':1,'0':0,'-1':-1}] target.datatype={"type":"enum", "members":{'+1':1,'0':0,'-1':-1}}
.description=polarity (+/-) switch .description=polarity (+/-) switch
. .
there is an interlock in the plc: there is an interlock in the plc:
if there is current, switching polarity is forbidden if there is current, switching polarity is forbidden
if polarity is short, powersupply is disabled if polarity is short, powersupply is disabled
.visibility=advanced .visibility=advanced
#comtries = 50
[module symmetry] [module symmetry]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
value.datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}] value.datatype={"type":"enum", "members":{'symmetric':1,'short':0, 'asymmetric':-1}}
target.datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}] target.datatype={"type":"enum", "members":{'symmetric':1,'short':0, 'asymmetric':-1}}
.description=par/ser switch selecting (a)symmetric mode .description=par/ser switch selecting (a)symmetric mode
. .
note: on the front panel symmetric is ser, asymmetric is par note: on the front panel symmetric is ser, asymmetric is par
.visibility=advanced .visibility=advanced
value.default = 'symmetric' value.default = 'symmetric'
value.value = 'symmetric'
[module T1] [module T1]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Temperature1 of the coils system .description=Temperature1 of the coils system
#warnlimits=(0, 50)
value.unit='degC' value.unit='degC'
value.default = 23.45 value.default = 23.45
[module T2] [module T2]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Temperature2 of the coils system .description=Temperature2 of the coils system
#warnlimits=(0, 50)
value.unit='degC' value.unit='degC'
value.default = 23.45 value.default = 23.45
[module T3] [module T3]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Temperature3 of the coils system .description=Temperature3 of the coils system
#warnlimits=(0, 50)
value.unit='degC' value.unit='degC'
value.default = 23.45 value.default = 23.45
[module T4] [module T4]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Temperature4 of the coils system .description=Temperature4 of the coils system
#warnlimits=(0, 50)
value.unit='degC' value.unit='degC'
value.default = 23.45 value.default = 23.45
@@ -86,31 +80,22 @@ ramp=60
precision=0.02 precision=0.02
current=0 current=0
voltage=10 voltage=10
#unit=A
.visibility=advanced .visibility=advanced
.extra_params = abslimits, speed, ramp, precision, current, voltage, window .extra_params = abslimits, speed, ramp, precision, current, voltage, window
abslimits.datatype = ["tuple", [["double"], ["double"]]] abslimits.datatype = {"type":"limit", "members":{"type":"double", "min":0, "max":200, "unit":"A"}}
abslimits.value = (0, 200)
abslimits.default = (0, 200) abslimits.default = (0, 200)
abslimits.unit = 'A' speed.datatype = {"type":"double", "min":0, "max":10, "unit":"A/s"}
speed.datatype = ["double", 0, 10]
speed.default = 10 speed.default = 10
speed.unit = 'A/s' ramp.datatype = {"type":"double", "min":0, "max":600, "unit":"A/min"}
ramp.datatype = ["double", 0, 600]
ramp.default = 600 ramp.default = 600
ramp.unit = 'A/min' precision.datatype = {"type":"double", "unit":"A"}
precision.datatype = ["double"]
precision.default = 0.1 precision.default = 0.1
precision.unit = 'A' current.datatype = {"type":"double", "min":0, "max":200, "unit":"A"}
current.datatype = ["double", 0, 200]
current.default = 0 current.default = 0
current.unit = 'A' voltage.datatype = {"type":"double", "min":0, "max":10, "unit":"V"}
voltage.datatype = ["double", 0, 10]
voltage.default = 0 voltage.default = 0
voltage.unit = 'V' window.datatype = {"type":"double", "min":0, "max":120, "unit":"s"}
window.datatype = ["double", 0, 120]
window.default = 10 window.default = 10
window.unit = 's'
[module mf] [module mf]
class=secop_mlz.amagnet.GarfieldMagnet class=secop_mlz.amagnet.GarfieldMagnet
@@ -125,8 +110,7 @@ userlimits=(-0.35, 0.35)
calibrationtable={'symmetric':[0.00186517, 0.0431937, -0.185956, 0.0599757, 0.194042], calibrationtable={'symmetric':[0.00186517, 0.0431937, -0.185956, 0.0599757, 0.194042],
'short': [0.0, 0.0, 0.0, 0.0, 0.0], 'short': [0.0, 0.0, 0.0, 0.0, 0.0],
'asymmetric':[0.00136154, 0.027454, -0.120951, 0.0495289, 0.110689]} 'asymmetric':[0.00136154, 0.027454, -0.120951, 0.0495289, 0.110689]}
.meaning=The magnetic field .meaning=["magneticfield", 20]
.priority=100
.visibility=user .visibility=user
abslimits.default=-0.4,0.4 abslimits.default=-0.4,0.4

View File

@@ -4,7 +4,6 @@ description = [sim] cci3he box of MLZ Sample environment group
Controls an 3He insert with an ls370 and an PLC controlling Controls an 3He insert with an ls370 and an PLC controlling
the compressor and the valves of the gas handling. the compressor and the valves of the gas handling.
.meaning={'T_regulation':{'T_cci3he1':300}, 'T_sample':{'T_cci3he1_A':300, 'T_cci3he1_B':280}}
[interface tcp] [interface tcp]
type=tcp type=tcp
@@ -16,78 +15,79 @@ class=secop.simulation.SimDrivable
.description=Main temperature control node of cci3he1. .description=Main temperature control node of cci3he1.
. .
Controls the regulation loop of the ls370. Controls the regulation loop of the ls370.
value.unit='K' value.datatype={"type":"double","unit":"K"}
value.default=300 value.default=300
target.datatype=["double", 0, 300] target.datatype={"type":"double", "min":0, "max":300, "unit":"K"}
target.default=300 target.default=300
target.unit='K'
.extra_params=ramp .extra_params=ramp
ramp.datatype=["double",0,600] ramp.datatype={"type":"double","min":0,"max":600,"unit":"K/min"}
ramp.description=target ramping speed in K/min. ramp.description=target ramping speed in K/min.
ramp.default=60 ramp.default=60
ramp.unit=K/min .meaning=["temperature_regulation",40]
[module T_cci3he1_A] [module T_cci3he1_A]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=3He pot temperature sensor. Also used for the regulation. .description=3He pot temperature sensor. Also used for the regulation.
.visibility=expert .visibility=expert
value.default=300 value.default=300
value.unit='K' value.datatype={"type":"double","unit":"K"}
.meaning=["temperature",38]
[module T_cci3he1_B] [module T_cci3he1_B]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(optional) sample temperature sensor close to sample. .description=(optional) sample temperature sensor close to sample.
.visibility=expert .visibility=user
value.default=300 value.default=300
value.unit='K' value.datatype={"type":"double","unit":"K"}
.meaning=["temperature",39]
[module cci3he1_p1] [module cci3he1_p1]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure at turbo pump inlet. .description=Pressure at turbo pump inlet.
.visibility=expert .visibility=expert
value.default=999 value.default=2e-3
value.unit=mbar value.datatype={"type":"double","unit":"mbar"}
[module cci3he1_p2] [module cci3he1_p2]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure at turbo pump outlet. .description=Pressure at turbo pump outlet.
.visibility=expert .visibility=expert
value.default=999 value.default=9.87
value.unit=mbar value.datatype={"type":"double","unit":"mbar"}
[module cci3he1_p3] [module cci3he1_p3]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure at compressor inlet. .description=Pressure at compressor inlet.
.visibility=expert .visibility=expert
value.default=999 value.default=19.99
value.unit=mbar value.datatype={"type":"double","unit":"mbar"}
[module cci3he1_p4] [module cci3he1_p4]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure at compressor outlet. .description=Pressure at compressor outlet.
.visibility=expert .visibility=expert
value.default=999 value.default=999
value.unit=mbar value.datatype={"type":"double","unit":"mbar"}
[module cci3he1_p5] [module cci3he1_p5]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure in dump tank. .description=Pressure in dump tank.
.visibility=expert .visibility=expert
value.default=999 value.default=567
value.unit=mbar value.datatype={"type":"double","unit":"mbar"}
[module cci3he1_p6] [module cci3he1_p6]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure in the vacuum dewar (ivc). .description=Pressure in the vacuum dewar (ivc).
.visibility=expert .visibility=expert
value.default=999 value.default=1e-3
value.unit=mbar value.datatype={"type":"double","unit":"mbar"}
[module cci3he1_flow] [module cci3he1_flow]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Gas Flow (condensing line). .description=Gas Flow (condensing line).
.visibility=expert .visibility=expert
value.default=999 value.default=12.34
value.unit=mln/min value.datatype={"type":"double","unit":"mln/min"}
# note: all valves and switches are missing: use VNC to control them # note: all valves and switches are missing: use VNC to control them

View File

@@ -1,10 +1,9 @@
[node ccidu1] [node ccidu1]
description = [sim] ccidu box of MLZ Sample environment group description = [sim] ccidu box of MLZ Sample environment group
. .
Controls an 3He/4He dilution insert with an ls370 and an PLC controlling Controls an 3He/4He dilution insert with an ls372 and an PLC controlling
the compressor and the valves of the gas handling. the compressor and the valves of the gas handling.
.meaning={'T_regulation':{'T_ccidu1':300}, 'T_sample':{'T_ccidu1_A':300, 'T_ccidu1_B':280}}
[interface tcp] [interface tcp]
type=tcp type=tcp
@@ -15,80 +14,94 @@ bindport=10767
class=secop.simulation.SimDrivable class=secop.simulation.SimDrivable
.description=Main temperature control node of ccidu1. .description=Main temperature control node of ccidu1.
. .
Controls the regulation loop of the ls370. Controls the regulation loop of the ls372.
value.unit='K' value.unit='K'
value.default=300 value.default=300
target.datatype=["double", 0, 300] target.datatype={"type":"double", "min":0, "max":300, "unit":"K"}
target.default=300 target.default=300
target.unit='K'
.extra_params=ramp .extra_params=ramp
ramp.datatype=["double",0,600] ramp.datatype={"type":"double", "min":0, "max":600, "unit":"K/min"}
ramp.description=target ramping speed in K/min. ramp.description=target ramping speed in K/min.
ramp.default=60 ramp.default=60
ramp.unit=K/min .meaning=["temperature_regulation",40]
[module T_ccidu1_A] [module T_ccidu1_A]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=mixing chamber temperature sensor. Also used for the regulation. .description=mixing chamber temperature sensor. Also used for the regulation.
.visibility=expert .visibility=expert
value.default=300 value.default=300
value.unit='K' value.datatype={"type":"double", "unit":"K"}
.meaning=["temperature",38]
[module T_ccidu1_B] [module T_ccidu1_B]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(optional) sample temperature sensor close to sample. .description=(optional) sample temperature sensor close to sample.
.visibility=expert .visibility=user
value.default=300 value.default=300
value.unit='K' value.datatype={"type":"double", "unit":"K"}
.meaning=["temperature",39]
[module ccidu1_pstill] [module ccidu1_pstill]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure at the still/turbo pump inlet. .description=Pressure at the still/turbo pump inlet.
.visibility=expert .visibility=expert
value.default=999 value.default=999
value.unit=mbar value.datatype={"type":"double", "unit":"mbar"}
[module ccidu1_pinlet] [module ccidu1_pinlet]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure at forepump inlet/turbo pump outlet. .description=Pressure at forepump inlet/turbo pump outlet.
.visibility=expert .visibility=expert
value.default=999 value.default=999
value.unit=mbar value.datatype={"type":"double", "unit":"mbar"}
[module ccidu1_poutlet] [module ccidu1_poutlet]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure at forepump outlet/compressor inlet. .description=Pressure at forepump outlet/compressor inlet.
.visibility=expert .visibility=expert
value.default=999 value.default=999
value.unit=mbar value.datatype={"type":"double", "unit":"mbar"}
[module ccidu1_pkond] [module ccidu1_pkond]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure at condensing line/compressor outlet. .description=Pressure at condensing line/compressor outlet.
.visibility=expert .visibility=expert
value.default=999 value.default=999
value.unit=mbar value.datatype={"type":"double", "unit":"mbar"}
[module ccidu1_ptank] [module ccidu1_ptank]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure in dump tank. .description=Pressure in dump tank.
.visibility=expert .visibility=expert
value.default=999 value.default=999
value.unit=mbar value.datatype={"type":"double", "unit":"mbar"}
[module ccidu1_pvac] [module ccidu1_pvac]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure in the vacuum dewar (ivc). .description=Pressure in the vacuum dewar (ivc).
.visibility=expert .visibility=expert
value.default=999 value.default=999
value.unit=mbar value.datatype={"type":"double", "unit":"mbar"}
[module ccidu1_flow] [module ccidu1_flow]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Gas Flow (condensing line). .description=Gas Flow (condensing line).
.visibility=expert .visibility=expert
value.default=999 value.default=999
value.unit=mln/min value.datatype={"type":"double", "unit":"mbar"}
# note: all valves and switches are missing: use VNC to control them # note: all valves and switches are missing: use VNC to control them
[module ccidu1_V6]
class=secop.simulation.SimDrivable
.description=Needle valve
.visibility=expert
value.default=99
value.datatype={"type":"double", "min":0, "max":100, "unit":"%%"}
[module ccidu1_V3]
class=secop.simulation.SimWritable
.description=Dump Valve
.visibility=expert
value.default="OFF"
value.datatype={"type":"enum", "members":{"on": 1, "OFF":0}}
target.datatype={"type":"enum", "members":{"on": 1, "OFF":0}}

View File

@@ -6,8 +6,6 @@ description = [sim] CCR12 box of MLZ Sample environment group
. .
This is how we use it now. This is how we use it now.
.meaning={'T_regulation':{'T_ccr12':200, 'T_ccr12_stick':150, 'T_ccr12_tube':100}, 'T_sample':{'T_ccr12_B':100, 'T_ccr12_A':90, 'T_ccr12_D':20, 'T_ccr12_C':10}}
[interface tcp] [interface tcp]
type=tcp type=tcp
bindto=0.0.0.0 bindto=0.0.0.0
@@ -19,60 +17,69 @@ class=secop.simulation.SimDrivable
. .
Switches between regulation on stick and regulation on tube depending on temperature requested. Switches between regulation on stick and regulation on tube depending on temperature requested.
May also pump gas for higher temperatures, if configured. May also pump gas for higher temperatures, if configured.
.
Note: in nicos this is handled by its own class which manages T_ccr12_stick and T_ccr12_tube.
in this simulation this module is isolated.
.extra_params=ramp .extra_params=ramp
ramp.datatype=["double",0,600] ramp.datatype={"type":"double", "min":0,"max":60, "unit":"K/min"}
ramp.default=60 ramp.default=60
value.unit='K' value.datatype={"type":"double", "min":0,"max":600, "unit":"K"}
value.default=300 value.default=300
target.datatype=["double", 0, 600] target.datatype={"type":"double", "min":0,"max":600, "unit":"K"}
target.default=300 target.default=300
target.unit='K' .meaning=["temperature_regulation", 20]
[module T_ccr12_stick] [module T_ccr12_stick]
class=secop.simulation.SimDrivable class=secop.simulation.SimDrivable
.description=Temperature regulation for the sample stick in ccr12. .description=Temperature regulation for the sample stick in ccr12.
.extra_params=ramp .extra_params=ramp
target.datatype=["double", 0, 600] ramp.datatype={"type":"double", "min":0,"max":60, "unit":"K/min"}
ramp.datatype=["double",0,600]
ramp.default=60 ramp.default=60
value.unit='K' value.datatype={"type":"double", "min":0,"max":600, "unit":"K"}
value.default=300 value.default=300
target.datatype={"type":"double", "min":0,"max":600, "unit":"K"}
target.default=300 target.default=300
.meaning=["temperature_regulation", 15]
[module T_ccr12_tube] [module T_ccr12_tube]
class=secop.simulation.SimDrivable class=secop.simulation.SimDrivable
.description=Temperature regulation for the tube of ccr12. .description=Temperature regulation for the tube of ccr12.
.extra_params=ramp .extra_params=ramp
target.datatype=["double", 0, 300] ramp.datatype={"type":"double", "min":0,"max":60, "unit":"K/min"}
ramp.datatype=["double",0,600]
ramp.default=60 ramp.default=60
value.unit='K' value.datatype={"type":"double", "min":0,"max":600, "unit":"K"}
value.default=300 value.default=300
target.datatype={"type":"double", "min":0,"max":600, "unit":"K"}
target.default=300 target.default=300
.meaning=["temperature_regulation", 10]
[module T_ccr12_A] [module T_ccr12_A]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(optional) Sample temperature sensor. .description=(optional) Sample temperature sensor.
value.datatype={"type":"double", "unit":"K"}
value.default=300 value.default=300
value.unit='K' .meaning=["temperature", 9]
[module T_ccr12_B] [module T_ccr12_B]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(regulation) temperature sensor on stick. .description=(regulation) temperature sensor on stick.
value.datatype={"type":"double", "unit":"K"}
value.default=300 value.default=300
value.unit='K' .meaning=["temperature", 10]
[module T_ccr12_C] [module T_ccr12_C]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Temperature at the coldhead. .description=Temperature at the coldhead.
value.datatype={"type":"double", "unit":"K"}
value.default=70 value.default=70
value.unit='K' .meaning=["temperature", 1]
[module T_ccr12_D] [module T_ccr12_D]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(regulation) temperature at coupling to stick. .description=(regulation) temperature at coupling to stick.
value.datatype={"type":"double", "unit":"K"}
value.default=80 value.default=80
value.unit='K' .meaning=["temperature", 2]
@@ -80,71 +87,78 @@ value.unit='K'
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Selects on which Sensor the pressure regulation works, or switches it off. .description=Selects on which Sensor the pressure regulation works, or switches it off.
.visibility=expert .visibility=expert
value.datatype={"type":"enum", "members":{'off':0,'p1':1,'p2':2}}
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'p1':1,'p2':2}] target.datatype={"type":"enum", "members":{'off':0,'p1':1,'p2':2}}
target.datatype=["enum", {'off':0,'p1':1,'p2':2}] target.default='off'
[module ccr12_compressor] [module ccr12_compressor]
class=secop.simulation.SimDrivable class=secop.simulation.SimDrivable
.description=Switches the compressor for the cooling stage on or off. .description=Switches the compressor for the cooling stage on or off.
. .
Note: This should always be on, except for fast heatup for sample change. Note: This should always be on, except for fast heatup for sample change.
value.default='off' value.datatype={"type":"enum", "members":{'off':0,'on':1}}
value.datatype=["enum", {'off':0,'on':1}] value.default='on'
target.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.default='on'
[module ccr12_gas_switch] [module ccr12_gas_switch]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Switches the gas inlet on or off. .description=Switches the gas inlet on or off.
.
note: in reality this switches itself off after 15min.
note: in reality this is interlocked with ccr12_vacuum_switch, only one can be on!
note: in this simulation this module is isolated.
value.datatype={"type":"enum", "members":{'off':0,'on':1}}
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.default='off'
[module ccr12_vacuum_switch] [module ccr12_vacuum_switch]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Switches the vacuum pumping valve on or off. .description=Switches the vacuum pumping valve on or off.
.
note: in reality this is interlocked with ccr12_gas_switch, only one can be on!
note: in this simulation this module is isolated.
value.datatype={"type":"enum", "members":{'off':0,'on':1}}
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.default='off'
[module ccr12_p1] [module ccr12_p1]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Default pressure Sensor, linear scale 0..1000mbar .description=Default pressure Sensor, linear scale 0..1000mbar
value.datatype={"type":"double", "unit":"mbar"}
value.default=999 value.default=999
value.unit=mbar
[module ccr12_p2] [module ccr12_p2]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Auxillary pressure Sensor. .description=Auxillary pressure Sensor.
value.datatype={"type":"double", "unit":"mbar"}
value.default=1e-6 value.default=1e-6
value.unit=mbar
[module ccr12_curve_p2] [module ccr12_curve_p2]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Curve for Aux pressure Sensor p2 .description=Curve for Aux pressure Sensor p2
.visibility=expert .visibility=expert
value.default='TTR100' value.default='TTR100'
value.datatype=["enum", {'10V':0,'default':1,'9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}] value.datatype={"type":"enum", "members":{'0..10V':0,'default':1,'0..9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}}
target.datatype=["enum", {'10V':0,'default':1,'9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}] target.datatype={"type":"enum", "members":{'0..10V':0,'default':1,'0..9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}}
[module ccr12_p1_limits] [module ccr12_p1_limits]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Limits for pressure regulation in P1. .description=Limits for pressure regulation in P1.
.visibility=expert .visibility=expert
value.datatype=["tuple",[["double"],["double"]]] value.datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}}
value.default=[0,10] value.default=[0,10]
value.unit=mbar target.datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}}
target.datatype=["tuple",[["double"],["double"]]]
target.default=[0,10] target.default=[0,10]
target.unit=mbar
[module ccr12_p2_limits] [module ccr12_p2_limits]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Limits for pressure regulation in P2. .description=Limits for pressure regulation in P2.
.visibility=expert .visibility=expert
value.datatype=["tuple",[["double"],["double"]]] value.datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}}
value.default=[1e-5,1e-3] value.default=[1e-5,1e-3]
value.unit=mbar target.datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}}
target.datatype=["tuple",[["double"],["double"]]]
target.default=[1e-5,1e-3] target.default=[1e-5,1e-3]
target.unit=mbar

View File

@@ -6,8 +6,6 @@ description = [sim] CCR12 box of MLZ Sample environment group
. .
This is an improved version, how we think it should be. This is an improved version, how we think it should be.
.meaning={'T_regulation':{'T_ccr12':200, 'T_ccr12_stick':150, 'T_ccr12_tube':100}, 'T_sample':{'T_ccr12_B':100, 'T_ccr12_A':90, 'T_ccr12_D':20, 'T_ccr12_C':10}}
[interface tcp] [interface tcp]
type=tcp type=tcp
bindto=0.0.0.0 bindto=0.0.0.0
@@ -20,75 +18,77 @@ class=secop.simulation.SimDrivable
Switches between regulation on stick and regulation on tube depending on temperature requested. Switches between regulation on stick and regulation on tube depending on temperature requested.
May also pump gas for higher temperatures, if configured. May also pump gas for higher temperatures, if configured.
Manual switching of the regulation node is supported via the regulationmode parameter. Manual switching of the regulation node is supported via the regulationmode parameter.
value.unit='K' value.datatype={"type":"double", "min":0, "max":600, "unit":"K"}
value.default=300 value.default=300
target.datatype=["double", 0, 600] target.datatype={"type":"double", "min":0, "max":600, "unit":"K"}
target.default=300 target.default=300
target.unit='K'
.extra_params=ramp,regulationmode,abslimits,userlimits .extra_params=ramp,regulationmode,abslimits,userlimits
ramp.datatype=["double",0,600] ramp.datatype={"type":"double", "min":0, "max":60, "unit":"K/min"}
ramp.description=target ramping speed in K/min. ramp.description=target ramping speed in K/min.
ramp.default=60 ramp.default=60
ramp.unit=K/min ramp.readonly=False
regulationmode.datatype=["enum",{'stick':1,'tube':2,'both':3}] regulationmode.datatype={"type":"enum","members":{"stick":1,"tube":2,"both":3}}
regulationmode.default='both' regulationmode.default='both'
regulationmode.description=regulate only stick, tube or select based upon the target value. regulationmode.description=regulate only stick, tube or select based upon the target value.
regulationmode.unit='' regulationmode.readonly=False
abslimits.datatype=["tuple",[["double"],["double"]]] abslimits.datatype={"type":"limit","members":{"type":"double", "min":0,"max":600, "unit":"K"}}
abslimits.default=[0,600] abslimits.default=[0,600]
abslimits.description=currently active absolute limits for the setpoint. depend on the regulationmode parameter (both/stick->0..600, tube->0..300K). abslimits.description=currently active absolute limits for the setpoint. depend on the regulationmode parameter (both/stick->0..600, tube->0..300K).
abslimits.unit='K' userlimits.datatype={"type":"limit","members":{"type":"double", "min":0,"max":600, "unit":"K"}}
abslimits.readonly=True
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[0,300] userlimits.default=[0,300]
userlimits.description=current user set limits for the setpoint. must be inside abslimits. userlimits.description=current user set limits for the setpoint. must be inside abslimits.
userlimits.unit='K' userlimits.readonly=False
.meaning=["temperature_regulation", 20]
[module T_ccr12_A] [module T_ccr12_A]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(optional) Sample temperature sensor. .description=(optional) Sample temperature sensor.
.visibility=expert .visibility=expert
value.datatype={"type":"double", "min":0, "unit":"K"}
value.default=300 value.default=300
value.unit='K' .meaning=["temperature", 9]
[module T_ccr12_B] [module T_ccr12_B]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(regulation) temperature sensor on stick. .description=(regulation) temperature sensor on stick.
.visibility=expert .visibility=expert
value.datatype={"type":"double", "min":0, "unit":"K"}
value.default=300 value.default=300
value.unit='K' .meaning=["temperature", 10]
[module T_ccr12_C] [module T_ccr12_C]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Temperature at the coldhead. .description=Temperature at the coldhead.
.visibility=expert .visibility=expert
value.datatype={"type":"double", "min":0, "unit":"K"}
value.default=70 value.default=70
value.unit='K' .meaning=["temperature", 1]
[module T_ccr12_D] [module T_ccr12_D]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(regulation) temperature at coupling to stick. .description=(regulation) temperature at coupling to stick.
.visibility=expert .visibility=expert
value.datatype={"type":"double", "min":0, "unit":"K"}
value.default=80 value.default=80
value.unit='K' .meaning=["temperature", 2]
[module ccr12_pressure_regulation] [module ccr12_pressure_regulation]
class=secop.simulation.SimDrivable class=secop.simulation.SimReadable
.description=Simple two-point presssure regulation. the mode parameter selects the readout on which to regulate, or 'none' for no regulation. .description=Simple two-point presssure regulation. the mode parameter selects the readout on which to regulate, or 'none' for no regulation.
.visibility=user .visibility=user
.extra_params=switchpoints, mode .extra_params=switchpoints, mode
mode.datatype=["enum", {'off':0,'p1':1,'p2':2}] mode.datatype={"type":"enum", "members":{"none":0,"p1":1,"p2":2}}
mode.description=Select pressure sensor to regulate on, or 'none' to disable regulation. mode.description=Select pressure sensor to regulate on, or 'none' to disable regulation.
mode.default='off' mode.default='none'
mode.unit='' # struct is more explicit, but ugly to read....
mode.readonly=False switchpoints.datatype={"type":"struct", "members":{"lower":{"type":"double", "unit":"mbar"},"upper":{"type":"double", "unit":"mbar"}}, "optional":["upper","lower"]}
switchpoints.datatype=["struct", {'lower':["double"],'upper':["double"]}]
switchpoints.description=Switching points for regulation. If the selected pressure is below 'lower' value, the gas valve is opened, above 'upper' the value vacuum valve is openend, else both are closed. values for switchpoints are taken from the selected pressure sensors userlimits. switchpoints.description=Switching points for regulation. If the selected pressure is below 'lower' value, the gas valve is opened, above 'upper' the value vacuum valve is openend, else both are closed. values for switchpoints are taken from the selected pressure sensors userlimits.
switchpoints.default={'lower':1e-6,'upper':1e-3} switchpoints.default={'lower':1e-6,'upper':1e-3}
switchpoints.unit=''
switchpoints.readonly=True switchpoints.readonly=True
value.datatype={"type":"double", "min":0, "max":1000, "unit":"mbar"}
value.default = 1e-5
[module ccr12_compressor] [module ccr12_compressor]
class=secop.simulation.SimDrivable class=secop.simulation.SimDrivable
@@ -96,41 +96,48 @@ class=secop.simulation.SimDrivable
. .
Note: This should always be on, except for fast heatup for sample change. Note: This should always be on, except for fast heatup for sample change.
.visibility=user .visibility=user
value.datatype={"type":"enum", "members":{'off':0,'on':1}}
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}]
[module ccr12_gas_switch] [module ccr12_gas_switch]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Switches the gas inlet on or off. .description=Switches the gas inlet on or off.
.visibility=expert .
note: in reality this switches itself off after 15min.
note: in reality this is interlocked with ccr12_vacuum_switch, only one can be on!
note: in this simulation this module is isolated.
value.datatype={"type":"enum", "members":{'off':0,'on':1}}
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.default='off'
[module ccr12_vacuum_switch] [module ccr12_vacuum_switch]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Switches the vacuum pumping valve on or off. .description=Switches the vacuum pumping valve on or off.
.visibility=expert .
note: in reality this is interlocked with ccr12_gas_switch, only one can be on!
note: in this simulation this module is isolated.
value.datatype={"type":"enum", "members":{'off':0,'on':1}}
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.default='off'
[module ccr12_p1] [module ccr12_p1]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Default pressure Sensor, linear scale 0..1000mbar .description=Default pressure Sensor, linear scale 0..1000 mbar
.
Good candidate for a 'Sensor' Interface class!
value.default=999 value.default=999
value.unit=mbar value.unit=mbar
.extra_params=curve, userlimits .extra_params=curve, userlimits
curve.datatype=["enum", {'10V':0,'default':1,'9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}] curve.datatype={"type":"enum", "members":{'0..10V':0,'default':1,'0..9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}}
curve.description=Calibration curve for pressure sensor curve.description=Calibration curve for pressure sensor
curve.default='TTR100' curve.default='TTR100'
curve.unit='' userlimits.datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}}
curve.readonly=True
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[1, 100] userlimits.default=[1, 100]
userlimits.description=current user set limits for the pressure regulation. userlimits.description=current user set limits for the pressure regulation.
userlimits.unit='mbar' userlimits.readonly=False
[module ccr12_p2] [module ccr12_p2]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
@@ -138,11 +145,11 @@ class=secop.simulation.SimReadable
value.default=1e-6 value.default=1e-6
value.unit=mbar value.unit=mbar
.extra_params=curve,userlimits .extra_params=curve,userlimits
curve.datatype=["enum", {'10V':0,'default':1,'9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}] curve.datatype={"type":"enum", "members":{'0..10V':0,'default':1,'0..9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}}
curve.description=Calibration curve for pressure sensor curve.description=Calibration curve for pressure sensor
curve.default='TTR100' curve.default='PTR90'
curve.unit='' userlimits.datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}}
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[1e-6, 1e-3] userlimits.default=[1e-6, 1e-3]
userlimits.description=current user set limits for the pressure regulation. userlimits.description=current user set limits for the pressure regulation.
userlimits.unit='mbar' userlimits.readonly=False
pollinterval.visibility='expert'

View File

@@ -3,7 +3,6 @@ description = [sim] htf02 box of MLZ Sample environment group
. .
Controls an High Temperature Furnace with an eurotherm controller and an PLC checking the cooing water. Controls an High Temperature Furnace with an eurotherm controller and an PLC checking the cooing water.
.meaning={'T_regulation':{'T_htf02':100}, 'T_sample':{'T_htf02':100}}
[interface tcp] [interface tcp]
type=tcp type=tcp
@@ -15,20 +14,20 @@ class=secop.simulation.SimDrivable
.description=Main temperature control node of htf02. .description=Main temperature control node of htf02.
. .
Controls the regulation loop of the Eurotherm. Controls the regulation loop of the Eurotherm.
value.unit='degC' value.datatype={"type":"double", "min":0, "unit":"degC"}
value.default=300 value.default=300
target.datatype=["double", 0, 2000] target.datatype={"type":"double", "min":0, "max": 2000, "unit":"degC"}
target.default=300 target.default=300
target.unit='degC'
.extra_params=ramp .extra_params=ramp
ramp.datatype=["double",0,600] ramp.datatype={"type":"double", "min":0, "max": 600, "unit":"K/min"}
ramp.description=target ramping speed in K/min. ramp.description=target ramping speed in K/min.
ramp.default=60 ramp.default=60
ramp.unit=K/min ramp.readonly=False
.meaning=["temperature", 10]
[module htf02_p] [module htf02_p]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=Pressure Sensor at sample space (ivc). .description=Pressure Sensor at sample space (ivc).
value.datatype={"type":"double", "min":0, "unit":"mbar"}
value.default=989 value.default=989
value.unit='mbar'

View File

@@ -3,7 +3,6 @@ description = [sim] Stressihtf2 box of MLZ Sample environment group
. .
Controls an High Temperature Furnace with an Eurotherm and an PLC controlling some valves and checking cooling water. Controls an High Temperature Furnace with an Eurotherm and an PLC controlling some valves and checking cooling water.
.meaning={'T_regulation':{'T_stressihtf2':100}, 'T_sample':{'T_stressihtf2':100}}
[interface tcp] [interface tcp]
type=tcp type=tcp
@@ -13,40 +12,38 @@ bindport=10767
[module T_stressihtf2] [module T_stressihtf2]
class=secop.simulation.SimDrivable class=secop.simulation.SimDrivable
.description=Main temperature control node of Stressihtf2. .description=Main temperature control node of Stressihtf2.
value.unit='degC' value.datatype={"type":"double", "min":0, "unit":"degC"}
value.default=20 value.default=20
target.datatype=["double", 0, 2000] target.datatype={"type":"double", "min":0, "max":2000, "unit":"degC"}
target.default=20 target.default=20
target.unit='degC'
.extra_params=ramp,regulationmode,abslimits,userlimits .extra_params=ramp,regulationmode,abslimits,userlimits
ramp.datatype=["double",0,600] ramp.datatype={"type":"double", "min":0, "max":600, "unit":"K/min"}
ramp.description=target ramping speed in K/min. ramp.description=target ramping speed in K/min.
ramp.default=60 ramp.default=60
ramp.unit=K/min abslimits.datatype={"type":"limit", "members":{"type":"double", "min":0, "max":2000, "unit":"degC"}}
abslimits.datatype=["tuple",[["double"],["double"]]]
abslimits.default=[0,2000] abslimits.default=[0,2000]
abslimits.description=currently active absolute limits for the setpoint. depend on the regulationmode parameter (both/stick->0..600, tube->0..300K). abslimits.description=currently active absolute limits for the setpoint. depend on the regulationmode parameter (both/stick->0..600, tube->0..300K).
abslimits.unit='degC' userlimits.datatype={"type":"limit", "members":{"type":"double", "min":0, "max":2000, "unit":"degC"}}
abslimits.readonly=True
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[0,300] userlimits.default=[0,300]
userlimits.description=current user set limits for the setpoint. must be inside abslimits. userlimits.description=current user set limits for the setpoint. must be inside abslimits.
userlimits.unit='degC' userlimits.readonly=False
.meaning=['temperature_regulation', 10]
[module T_stressihtf2_sample] [module T_stressihtf2_sample]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(optional) Sample temperature sensor. .description=(optional) Sample temperature sensor.
.visibility=expert .visibility=expert
value.default=300 value.default=300
value.unit='degC' value.datatype={"type":"double", "min":0, "unit":"degC"}
.meaning=["temperature", 9]
[module stressihtf2_n2] [module stressihtf2_n2]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Switches the N2 gas inlet on or off. .description=Switches the N2 gas inlet on or off.
.visibility=expert .visibility=expert
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'on':1}] value.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.default='off' target.default='off'
[module stressihtf2_he] [module stressihtf2_he]
@@ -54,8 +51,8 @@ class=secop.simulation.SimWritable
.description=Switches the He gas inlet on or off. .description=Switches the He gas inlet on or off.
.visibility=expert .visibility=expert
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'on':1}] value.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.default='off' target.default='off'
[module stressihtf2_lamps] [module stressihtf2_lamps]
@@ -63,8 +60,8 @@ class=secop.simulation.SimWritable
.description=Switches the heating lamps on or off. .description=Switches the heating lamps on or off.
.visibility=expert .visibility=expert
value.default='on' value.default='on'
value.datatype=["enum", {'off':0,'on':1}] value.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.default='on' target.default='on'
[module stressihtf2_water_ok] [module stressihtf2_water_ok]
@@ -72,5 +69,5 @@ class=secop.simulation.SimReadable
.description=Readout of the cooling water state. .description=Readout of the cooling water state.
.visibility=expert .visibility=expert
value.default='ok' value.default='ok'
value.datatype=["enum", {'failed':0,'ok':1}] value.datatype={"type":"enum", "members":{'failed':0,'ok':1}}

View File

@@ -1,9 +1,8 @@
[node stressihtf2] [node stressihtf2_v2]
description = [sim] Stressihtf2 box of MLZ Sample environment group description = [sim] Stressihtf2 box of MLZ Sample environment group
. .
Controls an High Temperature Furnace with an Eurotherm and an PLC controlling some valves and checking cooling water. Controls an High Temperature Furnace with an Eurotherm and an PLC controlling some valves and checking cooling water.
meaning={'T_regulation':{'T':100}, 'T_sample':{'T_sample':100}}
[interface tcp] [interface tcp]
type=tcp type=tcp
@@ -13,40 +12,38 @@ bindport=10767
[module T] [module T]
class=secop.simulation.SimDrivable class=secop.simulation.SimDrivable
.description=Main temperature control node of Stressihtf2. .description=Main temperature control node of Stressihtf2.
value.unit='degC' value.datatype={"type":"double", "min":0, "unit":"degC"}
value.default=20 value.default=20
target.datatype=["double", 0, 2000] target.datatype={"type":"double", "min":0, "max":2000, "unit":"degC"}
target.default=20 target.default=20
target.unit='degC'
.extra_params=ramp,regulationmode,abslimits,userlimits .extra_params=ramp,regulationmode,abslimits,userlimits
ramp.datatype=["double",0,600] ramp.datatype={"type":"double", "min":0, "max":600, "unit":"K/min"}
ramp.description=target ramping speed in K/min. ramp.description=target ramping speed in K/min.
ramp.default=60 ramp.default=60
ramp.unit=K/min abslimits.datatype={"type":"limit", "members":{"type":"double", "min":0, "max":2000, "unit":"degC"}}
abslimits.datatype=["tuple",[["double"],["double"]]]
abslimits.default=[0,2000] abslimits.default=[0,2000]
abslimits.description=currently active absolute limits for the setpoint. abslimits.description=currently active absolute limits for the setpoint. depend on the regulationmode parameter (both/stick->0..600, tube->0..300K).
abslimits.unit='degC' userlimits.datatype={"type":"limit", "members":{"type":"double", "min":0, "max":2000, "unit":"degC"}}
abslimits.readonly=True
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[0,300] userlimits.default=[0,300]
userlimits.description=current user set limits for the setpoint. must be inside or coincide with abslimits. userlimits.description=current user set limits for the setpoint. must be inside abslimits.
userlimits.unit='degC' userlimits.readonly=False
.meaning=['temperature_regulation', 10]
[module T_sample] [module T_sample]
class=secop.simulation.SimReadable class=secop.simulation.SimReadable
.description=(optional) Sample temperature sensor. .description=(optional) Sample temperature sensor.
.visibility=expert .visibility=expert
value.default=300 value.default=300
value.unit='degC' value.datatype={"type":"double", "min":0, "unit":"degC"}
.meaning=["temperature", 9]
[module N2] [module N2]
class=secop.simulation.SimWritable class=secop.simulation.SimWritable
.description=Switches the N2 gas inlet on or off. .description=Switches the N2 gas inlet on or off.
.visibility=expert .visibility=expert
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'on':1}] value.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.default='off' target.default='off'
[module He] [module He]
@@ -54,8 +51,8 @@ class=secop.simulation.SimWritable
.description=Switches the He gas inlet on or off. .description=Switches the He gas inlet on or off.
.visibility=expert .visibility=expert
value.default='off' value.default='off'
value.datatype=["enum", {'off':0,'on':1}] value.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.default='off' target.default='off'
[module lamps] [module lamps]
@@ -63,8 +60,8 @@ class=secop.simulation.SimWritable
.description=Switches the heating lamps on or off. .description=Switches the heating lamps on or off.
.visibility=expert .visibility=expert
value.default='on' value.default='on'
value.datatype=["enum", {'off':0,'on':1}] value.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.datatype=["enum", {'off':0,'on':1}] target.datatype={"type":"enum", "members":{'off':0,'on':1}}
target.default='on' target.default='on'
[module water_ok] [module water_ok]
@@ -72,5 +69,5 @@ class=secop.simulation.SimReadable
.description=Readout of the cooling water state. .description=Readout of the cooling water state.
.visibility=expert .visibility=expert
value.default='ok' value.default='ok'
value.datatype=["enum", {'failed':0,'ok':1}] value.datatype={"type":"enum", "members":{'failed':0,'ok':1}}

View File

@@ -286,6 +286,7 @@ class Client:
entry[0].set() entry[0].set()
return return
self.log.error("got an unexpected %s %r" % (msgtype,data[0:1])) self.log.error("got an unexpected %s %r" % (msgtype,data[0:1]))
self.log.error(repr(data))
return return
if msgtype == DESCRIPTIONREPLY: if msgtype == DESCRIPTIONREPLY:
entry = self.expected_replies.get((msgtype, ''), None) entry = self.expected_replies.get((msgtype, ''), None)

View File

@@ -945,14 +945,14 @@ UInt64 = IntRange(0, (1 << 64) - 1)
# Goodie: Convenience Datatypes for Programming # Goodie: Convenience Datatypes for Programming
class LimitsType(StructOf): class LimitsType(TupleOf):
def __init__(self, _min=None, _max=None): def __init__(self, members):
StructOf.__init__(self, min=FloatRange(_min,_max), max=FloatRange(_min, _max)) TupleOf.__init__(self, members, members)
def __call__(self, value): def __call__(self, value):
limits = StructOf.__call__(self, value) limits = TupleOf.__call__(self, value)
if limits['max'] < limits['min']: if limits[1] < limits[0]:
raise BadValueError('Maximum Value %s must be greater than minimum value %s!' % (limits['max'], limits['min'])) raise BadValueError('Maximum Value %s must be greater than minimum value %s!' % (limits[1], limits[0]))
return limits return limits
@@ -983,6 +983,7 @@ DATATYPES = dict(
struct =lambda members, optional=None: StructOf(optional, struct =lambda members, optional=None: StructOf(optional,
**dict((n, get_datatype(t)) for n, t in list(members.items()))), **dict((n, get_datatype(t)) for n, t in list(members.items()))),
command = lambda argument=None, result=None: CommandType(get_datatype(argument), get_datatype(result)), command = lambda argument=None, result=None: CommandType(get_datatype(argument), get_datatype(result)),
limit = lambda members: LimitsType(get_datatype(members)),
) )

View File

@@ -153,7 +153,7 @@ class SequencerMixin:
self._seq_error = str(e) self._seq_error = str(e)
finally: finally:
self._seq_thread = None self._seq_thread = None
self.poll(0) self.pollParams(0)
def _seq_thread_inner(self, seq, store_init): def _seq_thread_inner(self, seq, store_init):
store = Namespace() store = Namespace()

View File

@@ -68,12 +68,11 @@ class ModuleMeta(PropertyMeta):
for accessibles_dict in accessibles_list: for accessibles_dict in accessibles_list:
for key, obj in accessibles_dict.items(): for key, obj in accessibles_dict.items():
if isinstance(obj, Override): if isinstance(obj, Override):
try: if key not in accessibles:
obj = obj.apply(accessibles[key]) raise ProgrammingError("module %s: can not apply Override on %s: no such accessible!"
accessibles[key] = obj % (name, key))
except KeyError: obj = obj.apply(accessibles[key])
raise ProgrammingError("module %s: %s does not exist" accessibles[key] = obj
% (name, key))
else: else:
if key in accessibles: if key in accessibles:
# for now, accept redefinitions: # for now, accept redefinitions:

View File

@@ -324,6 +324,7 @@ class Readable(Module):
try: try:
rfunc() # pylint: disable = not-callable rfunc() # pylint: disable = not-callable
except Exception: # really all! except Exception: # really all!
# XXX: Error-handling: send error_update !
pass pass
return False return False
@@ -385,6 +386,7 @@ class Drivable(Writable):
try: try:
rfunc() # pylint: disable = not-callable rfunc() # pylint: disable = not-callable
except Exception: # really all! except Exception: # really all!
# XXX: Error-handling: send error_update !
pass pass
return fastpoll return fastpoll

View File

@@ -56,7 +56,7 @@ class SimBase:
return newval return newval
setattr(self, 'write_' + k, writer) setattr(self, 'write_' + k, writer)
def init_module(self): def initModule(self):
self._sim_thread = mkthread(self._sim) self._sim_thread = mkthread(self._sim)
def _sim(self): def _sim(self):
@@ -120,6 +120,10 @@ class SimDrivable(SimBase, Drivable):
if speed == 0: if speed == 0:
self._value = self.target self._value = self.target
speed *= 0.3 speed *= 0.3
try:
self.pollParams(0)
except Exception:
pass
while self._value != self.target: while self._value != self.target:
if self._value < self.target - speed: if self._value < self.target - speed:
@@ -129,6 +133,10 @@ class SimDrivable(SimBase, Drivable):
else: else:
self._value = self.target self._value = self.target
sleep(0.3) sleep(0.3)
try:
self.pollParams(0)
except Exception:
pass
self.status = self.Status.IDLE, '' self.status = self.Status.IDLE, ''
def _hw_wait(self): def _hw_wait(self):

View File

@@ -134,8 +134,7 @@ class Cryostat(CryoBase):
) )
commands = dict( commands = dict(
stop=Override( stop=Override(
"Stop ramping the setpoint\n\nby setting the current setpoint as new target", "Stop ramping the setpoint\n\nby setting the current setpoint as new target"),
special='content of special property'),
) )
def initModule(self): def initModule(self):

View File

@@ -293,7 +293,7 @@ class Label(Readable):
dev_ts = self.DISPATCHER.get_module(self.subdev_ts) dev_ts = self.DISPATCHER.get_module(self.subdev_ts)
if dev_ts: if dev_ts:
strings.append('at %.3f %s' % strings.append('at %.3f %s' %
(dev_ts.read_value(), dev_ts.parameters['value'].unit)) (dev_ts.read_value(), dev_ts.parameters['value'].datatype.unit))
else: else:
strings.append('No connection to sample temp!') strings.append('No connection to sample temp!')
@@ -302,7 +302,7 @@ class Label(Readable):
mf_stat = dev_mf.read_status() mf_stat = dev_mf.read_status()
mf_mode = dev_mf.mode mf_mode = dev_mf.mode
mf_val = dev_mf.value mf_val = dev_mf.value
mf_unit = dev_mf.parameters['value'].unit mf_unit = dev_mf.parameters['value'].datatype.unit
if mf_stat[0] == self.Status.IDLE: if mf_stat[0] == self.Status.IDLE:
state = 'Persistent' if mf_mode else 'Non-persistent' state = 'Persistent' if mf_mode else 'Non-persistent'
else: else:

View File

@@ -53,18 +53,18 @@ class GarfieldMagnet(SequencerMixin, Drivable):
'subdev_polswitch': Parameter('Switch to set for polarity', 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), 'subdev_symmetry': Parameter('Switch to read for symmetry', datatype=StringType(), readonly=True, export=False),
'userlimits': Parameter('User defined limits of device value', 'userlimits': Parameter('User defined limits of device value',
unit='main', datatype=TupleOf(FloatRange(), FloatRange()), datatype=TupleOf(FloatRange(unit='$'), FloatRange(unit='$')),
default=(float('-Inf'), float('+Inf')), readonly=False, poll=10), default=(float('-Inf'), float('+Inf')), readonly=False, poll=10),
'abslimits': Parameter('Absolute limits of device value', 'abslimits': Parameter('Absolute limits of device value',
unit='main', datatype=TupleOf(FloatRange(), FloatRange()), datatype=TupleOf(FloatRange(unit='$'), FloatRange(unit='$')),
default=(-0.5, 0.5), poll=True, default=(-0.5, 0.5), poll=True,
), ),
'precision': Parameter('Precision of the device value (allowed deviation ' 'precision': Parameter('Precision of the device value (allowed deviation '
'of stable values from target)', 'of stable values from target)',
unit='main', datatype=FloatRange(0.001), default=0.001, readonly=False, datatype=FloatRange(0.001, unit='$'), default=0.001, readonly=False,
), ),
'ramp': Parameter('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), datatype=FloatRange(unit='$/min'), default=1.0),
'calibration': Parameter('Coefficients for calibration ' 'calibration': Parameter('Coefficients for calibration '
'function: [c0, c1, c2, c3, c4] calculates ' 'function: [c0, c1, c2, c3, c4] calculates '
'B(I) = c0*I + c1*erf(c2*I) + c3*atan(c4*I)' 'B(I) = c0*I + c1*erf(c2*I) + c3*atan(c4*I)'

View File

@@ -386,7 +386,7 @@ class AnalogInput(PyTangoDevice, Readable):
# prefer configured unit if nothing is set on the Tango device, else # prefer configured unit if nothing is set on the Tango device, else
# update # update
if attrInfo.unit != 'No unit': if attrInfo.unit != 'No unit':
self.accessibles['value'].unit = attrInfo.unit self.accessibles['value'].datatype.setProperty('unit', attrInfo.unit)
def read_value(self): def read_value(self):
return self._dev.value return self._dev.value
@@ -469,7 +469,7 @@ class AnalogOutput(PyTangoDevice, Drivable):
# prefer configured unit if nothing is set on the Tango device, else # prefer configured unit if nothing is set on the Tango device, else
# update # update
if attrInfo.unit != 'No unit': if attrInfo.unit != 'No unit':
self.accessibles['value'].unit = attrInfo.unit self.accessibles['value'].datatype.setProperty('unit', attrInfo.unit)
def pollParams(self, nr=0): def pollParams(self, nr=0):
super(AnalogOutput, self).pollParams(nr) super(AnalogOutput, self).pollParams(nr)