Provide systemd files

+ move example cfg from etc/ to cfg/

Change-Id: I437b3e2aaca55539ff110f5a46e411b34e0a0b9c
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/21319
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-09-25 11:18:54 +02:00
parent 0c1a63538c
commit 9b33e07260
21 changed files with 92 additions and 4 deletions

111
cfg/amagnet.cfg Normal file
View File

@ -0,0 +1,111 @@
[node MLZ_amagnet(Garfield)]
description=MLZ-Amagnet
.
Water cooled magnet from ANTARES@MLZ.
.
Use module to control the magnetic field.
Don't forget to select symmetry first (can be moved only at zero field!).
.
Monitor T1..T4 (Coil temps), if they get to hot, field will ramp down!
.
In case of Problems, contact the ANTARES people at MLZ.
visibility=expert
foo=bar
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10767
[module enable]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice='tango://localhost:10000/box/plc/_enable'
value.datatype=["enum", {'On':1,'Off':0}]
target.datatype=["enum", {'On':1,'Off':0}]
.description='Enables to Output of the Powersupply'
.visibility='advanced'
[module polarity]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/plc/_polarity
value.datatype=["enum", {'+1':1,'0':0,'-1':-1}]
target.datatype=["enum", {'+1':1,'0':0,'-1':-1}]
.description=polarity (+/-) switch
.
there is an interlock in the plc:
if there is current, switching polarity is forbidden
if polarity is short, powersupply is disabled
.visibility=advanced
comtries=50
[module symmetry]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/plc/_symmetric
value.datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]
target.datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]
.description=par/ser switch selecting (a)symmetric mode
.
symmetric is ser, asymmetric is par
.visibility=advanced
[module T1]
class=secop_mlz.entangle.AnalogInput
tangodevice=tango://localhost:10000/box/plc/_t1
.description=Temperature1 of the coils system
#warnlimits=(0, 50)
value.unit='degC'
[module T2]
class=secop_mlz.entangle.AnalogInput
tangodevice=tango://localhost:10000/box/plc/_t2
.description=Temperature2 of the coils system
#warnlimits=(0, 50)
value.unit='degC'
[module T3]
class=secop_mlz.entangle.AnalogInput
tangodevice=tango://localhost:10000/box/plc/_t3
.description=Temperature3 of the coils system
#warnlimits=(0, 50)
value.unit='degC'
[module T4]
class=secop_mlz.entangle.AnalogInput
tangodevice=tango://localhost:10000/box/plc/_t4
.description=Temperature4 of the coils system
#warnlimits=(0, 50)
value.unit='degC'
[module currentsource]
class=secop_mlz.entangle.PowerSupply
tangodevice=tango://localhost:10000/box/lambda/curr
.description=Device for the magnet power supply (current mode)
abslimits=(0,200)
speed=1
ramp=60
precision=0.02
current=0
voltage=10
#unit=A
.visibility=advanced
[module mf]
class=secop_mlz.amagnet.GarfieldMagnet
.description=magnetic field module, handling polarity switching and stuff
subdev_currentsource=currentsource
subdev_enable=enable
subdev_polswitch=polarity
subdev_symmetry=symmetry
target.unit='T'
value.unit='T'
userlimits=(-0.35, 0.35)
calibrationtable={'symmetric':[0.00186517, 0.0431937, -0.185956, 0.0599757, 0.194042],
'short': [0.0, 0.0, 0.0, 0.0, 0.0],
'asymmetric':[0.00136154, 0.027454, -0.120951, 0.0495289, 0.110689]}
.meaning=The magnetic field
.priority=100
.visibility=user
abslimits.default=-0.4,0.4

119
cfg/ccr12.cfg Normal file
View File

@ -0,0 +1,119 @@
[node MLZ_ccr12]
description = CCR12 box of MLZ Sample environment group
.
Contains a Lakeshore 336 and an PLC controlling the compressor
and some valves.
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10767
[module automatik]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/plc/_automatik
mapping=dict(Off=0,p1=1,p2=2)
[module compressor]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/plc/_cooler_onoff
mapping=dict(Off=0,On=1)
[module gas]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/plc/_gas_onoff
mapping=dict(Off=0,On=1)
[module vacuum]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/plc/_vacuum_Onoff
mapping=dict(Off=0,On=1)
[module p1]
class=secop_mlz.entangle.AnalogInput
tangodevice=tango://localhost:10000/box/plc/_p1
value.unit='mbar'
[module p2]
class=secop_mlz.entangle.AnalogInput
tangodevice=tango://localhost:10000/box/plc/_p2
value.unit='mbar'
[module curve_p2]
class=secop_mlz.entangle.NamedDigitalInput
tangodevice=tango://localhost:10000/box/plc/_curve
value.default='undefined'
mapping=dict(curve1=1,curve2=2,curve3=3)
# sensors
[module T_sample]
class=secop_mlz.entangle.Sensor
tangodevice=tango://localhost:10000/box/sample/sensora
value.unit='K'
[module T_stick]
class=secop_mlz.entangle.Sensor
tangodevice=tango://localhost:10000/box/stick/sensorb
value.unit='K'
[module T_coldhead]
class=secop_mlz.entangle.Sensor
tangodevice=tango://localhost:10000/box/coldhead/sensorc
value.unit='K'
[module T_tube]
class=secop_mlz.entangle.Sensor
tangodevice=tango://localhost:10000/box/tube/sensord
value.unit='K'
# regulations
[module T_stick_regulation]
class=secop_mlz.entangle.TemperatureController
tangodevice=tango://localhost:10000/box/stick/control2
heateroutput.default=0
ramp.default=6
speed.default=0.1
setpoint.default=0
pid.default=(40,10,1)
p.default=40
i.default=10
d.default=1
abslimits=(0,500)
value.unit='K'
# OMG! a NamedDigitalOutput, but with float'ints' 0..3
[module T_stick_regulation_heaterrange]
class=secop_mlz.entangle.AnalogOutput
tangodevice=tango://localhost:10000/box/stick/range2
precision.default=1
abslimits=(0,3)
[module T_tube_regulation]
class=secop_mlz.entangle.TemperatureController
tangodevice=tango://localhost:10000/box/tube/control1
heateroutput.default=0
ramp.default=6
speed.default=0.1
setpoint.default=0
pid.default=(40,10,1)
p.default=40
i.default=10
d.default=1
abslimits=(0,500)
value.unit='K'
# OMG! a NamedDigitalOutput, but with float'ints' 0..3
#[module T_tube_regulation_heaterrange]
#class=secop_mlz.entangle.AnalogOutput
#tangodevice=tango://localhost:10000/box/tube/range1
#precision.default=1
#abslimits=(0,3)
[module T_tube_regulation_heaterrange]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/tube/range1
mapping=dict(Off=0, Low=1, Medium=2, High=3)

51
cfg/cryo.cfg Normal file
View File

@ -0,0 +1,51 @@
[node cryo_7]
# set SEC-node properties
description = short description
.
This is a very long description providing all the glory details in all the glory details about the stuff we are describing
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10769
[module cryo]
# some (non-defaut) module properties
.group=very important/stuff
.description=A simulated cc cryostat with heat-load, specific heat for the sample
and a temperature dependend heat-link between sample and regulation.
# class of module:
class=secop_demo.cryo.Cryostat
# some parameters
jitter=0.1
T_start=10.0
target=10.0
looptime=1
ramp=6
maxpower=20.0
heater=4.1
p=40
i=10
d=2
mode=pid
tolerance=0.1
window=30
timeout=900
# some (non-default) parameter properties
pollinterval.export=False
# some parameter grouping
p.group=pid
i.group=pid
d.group=pid
value.unit=K
# test custom properties
value.test=customized value

43
cfg/demo.cfg Normal file
View File

@ -0,0 +1,43 @@
[node Equipment_ID_for_demonstration]
description = virtual modules to play around with
[interface tcp]
bindto=0.0.0.0
bindport=10767
[module heatswitch]
class=secop_demo.modules.Switch
switch_on_time=5
switch_off_time=10
.description="Heatswitch for `mf` device"
[module mf]
class=secop_demo.modules.MagneticField
heatswitch = heatswitch
.description="simulates some cryomagnet with persistent/non-persistent switching"
[module ts]
class=secop_demo.modules.SampleTemp
sensor = 'Q1329V7R3'
ramp = 4
target = 10
value = 10
.description = "some temperature"
[module tc1]
class=secop_demo.modules.CoilTemp
sensor="X34598T7"
.description = "some temperature"
[module tc2]
class=secop_demo.modules.CoilTemp
sensor="X39284Q8'
.description = "some temperature"
[module label]
class=secop_demo.modules.Label
system=Cryomagnet MX15
subdev_mf=mf
subdev_ts=ts
.description = "some label indicating the state of the magnet `mf`."

50
cfg/epics.cfg Normal file
View File

@ -0,0 +1,50 @@
[node see_demo_equipment]
description=Do not use, it needs to be rewritten....
[interface testing]
type=tcp
bindto=0.0.0.0
bindport=10767
[module tc1]
class=secop_demo.modules.CoilTemp
sensor="X34598T7"
[module tc2]
class=secop_demo.modules.CoilTemp
sensor="X39284Q8'
[module sensor1]
class=secop_ess.epics.EpicsReadable
epics_version="v4"
.group="Lakeshore336"
value_pv="DEV:KRDG1"
[module loop1]
class=secop_ess.epics.EpicsTempCtrl
epics_version="v4"
.group="Lakeshore336"
value_pv="DEV:KRDG1"
target_pv="DEV:SETP_S1"
heaterrange_pv="DEV:RANGE_S1"
[module sensor2]
class=secop_ess.epics.EpicsReadable
epics_version="v4"
.group="Lakeshore336"
value_pv="DEV:KRDG2"
[module loop2]
class=secop_ess.epics.EpicsTempCtrl
epics_version="v4"
.group="Lakeshore336"
value_pv="DEV:KRDG2"
target_pv="DEV:SETP_S2"
heaterrange_pv="DEV:RANGE_S2"

23
cfg/sim.cfg Normal file
View File

@ -0,0 +1,23 @@
[node test config]
description=description of the simulation sec-node
.
Testing simulation dummy setup.
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10767
[module sim]
class=secop.simulation.SimDrivable
.description=simulation stuff
.extra_params=param3,param4,jitter,ramp
param3.datatype=['bool']
param3.default=True
param3.readonly=False
jitter.default=1
ramp.default=60
value.default=123
target.default=42

132
cfg/sim_mlz_amagnet.cfg Normal file
View File

@ -0,0 +1,132 @@
[node SIM_MLZ_amagnet(Garfield)]
description=MLZ-Amagnet
.
Water cooled magnet from ANTARES@MLZ.
.
Use module to control the magnetic field.
Don't forget to select symmetry first (can be moved only at zero field!).
.
Monitor T1..T4 (Coil temps), if they get to hot, field will ramp down!
.
In case of Problems, contact the ANTARES people at MLZ.
visibility=expert
foo=bar
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10767
[module enable]
class=secop.simulation.SimWritable
value.datatype=["enum", {'On':1,'Off':0}]
target.datatype=["enum", {'On':1,'Off':0}]
.description='Enables to Output of the Powersupply'
.visibility='advanced'
[module polarity]
class=secop.simulation.SimWritable
value.datatype=["enum", {'+1':1,'0':0,'-1':-1}]
target.datatype=["enum", {'+1':1,'0':0,'-1':-1}]
.description=polarity (+/-) switch
.
there is an interlock in the plc:
if there is current, switching polarity is forbidden
if polarity is short, powersupply is disabled
.visibility=advanced
#comtries = 50
[module symmetry]
class=secop.simulation.SimWritable
value.datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]
target.datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]
.description=par/ser switch selecting (a)symmetric mode
.
note: on the front panel symmetric is ser, asymmetric is par
.visibility=advanced
value.default = 'symmetric'
value.value = 'symmetric'
[module T1]
class=secop.simulation.SimReadable
.description=Temperature1 of the coils system
#warnlimits=(0, 50)
value.unit='degC'
value.default = 23.45
[module T2]
class=secop.simulation.SimReadable
.description=Temperature2 of the coils system
#warnlimits=(0, 50)
value.unit='degC'
value.default = 23.45
[module T3]
class=secop.simulation.SimReadable
.description=Temperature3 of the coils system
#warnlimits=(0, 50)
value.unit='degC'
value.default = 23.45
[module T4]
class=secop.simulation.SimReadable
.description=Temperature4 of the coils system
#warnlimits=(0, 50)
value.unit='degC'
value.default = 23.45
[module currentsource]
class=secop.simulation.SimDrivable
.description=Device for the magnet power supply (current mode)
abslimits=(0,200)
speed=1
ramp=60
precision=0.02
current=0
voltage=10
#unit=A
.visibility=advanced
.extra_params = abslimits, speed, ramp, precision, current, voltage, window
abslimits.datatype = ["tuple", [["double"], ["double"]]]
abslimits.value = (0, 200)
abslimits.default = (0, 200)
abslimits.unit = 'A'
speed.datatype = ["double", 0, 10]
speed.default = 10
speed.unit = 'A/s'
ramp.datatype = ["double", 0, 600]
ramp.default = 600
ramp.unit = 'A/min'
precision.datatype = ["double"]
precision.default = 0.1
precision.unit = 'A'
current.datatype = ["double", 0, 200]
current.default = 0
current.unit = 'A'
voltage.datatype = ["double", 0, 10]
voltage.default = 0
voltage.unit = 'V'
window.datatype = ["double", 0, 120]
window.default = 10
window.unit = 's'
[module mf]
class=secop_mlz.amagnet.GarfieldMagnet
.description=magnetic field module, handling polarity switching and stuff
subdev_currentsource=currentsource
subdev_enable=enable
subdev_polswitch=polarity
subdev_symmetry=symmetry
target.unit='T'
value.unit='T'
userlimits=(-0.35, 0.35)
calibrationtable={'symmetric':[0.00186517, 0.0431937, -0.185956, 0.0599757, 0.194042],
'short': [0.0, 0.0, 0.0, 0.0, 0.0],
'asymmetric':[0.00136154, 0.027454, -0.120951, 0.0495289, 0.110689]}
.meaning=The magnetic field
.priority=100
.visibility=user
abslimits.default=-0.4,0.4

93
cfg/sim_mlz_cci3he1.cfg Normal file
View File

@ -0,0 +1,93 @@
[node cci3he1]
description = [sim] cci3he box of MLZ Sample environment group
.
Controls an 3He insert with an ls370 and an PLC controlling
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]
type=tcp
bindto=0.0.0.0
bindport=10767
[module T_cci3he1]
class=secop.simulation.SimDrivable
.description=Main temperature control node of cci3he1.
.
Controls the regulation loop of the ls370.
value.unit='K'
value.default=300
target.datatype=["double", 0, 300]
target.default=300
target.unit='K'
.extra_params=ramp
ramp.datatype=["double",0,600]
ramp.description=target ramping speed in K/min.
ramp.default=60
ramp.unit=K/min
[module T_cci3he1_A]
class=secop.simulation.SimReadable
.description=3He pot temperature sensor. Also used for the regulation.
.visibility=expert
value.default=300
value.unit='K'
[module T_cci3he1_B]
class=secop.simulation.SimReadable
.description=(optional) sample temperature sensor close to sample.
.visibility=expert
value.default=300
value.unit='K'
[module cci3he1_p1]
class=secop.simulation.SimReadable
.description=Pressure at turbo pump inlet.
.visibility=expert
value.default=999
value.unit=mbar
[module cci3he1_p2]
class=secop.simulation.SimReadable
.description=Pressure at turbo pump outlet.
.visibility=expert
value.default=999
value.unit=mbar
[module cci3he1_p3]
class=secop.simulation.SimReadable
.description=Pressure at compressor inlet.
.visibility=expert
value.default=999
value.unit=mbar
[module cci3he1_p4]
class=secop.simulation.SimReadable
.description=Pressure at compressor outlet.
.visibility=expert
value.default=999
value.unit=mbar
[module cci3he1_p5]
class=secop.simulation.SimReadable
.description=Pressure in dump tank.
.visibility=expert
value.default=999
value.unit=mbar
[module cci3he1_p6]
class=secop.simulation.SimReadable
.description=Pressure in the vacuum dewar (ivc).
.visibility=expert
value.default=999
value.unit=mbar
[module cci3he1_flow]
class=secop.simulation.SimReadable
.description=Gas Flow (condensing line).
.visibility=expert
value.default=999
value.unit=mln/min
# note: all valves and switches are missing: use VNC to control them

94
cfg/sim_mlz_ccidu1.cfg Normal file
View File

@ -0,0 +1,94 @@
[node ccidu1]
description = [sim] ccidu box of MLZ Sample environment group
.
Controls an 3He/4He dilution insert with an ls370 and an PLC controlling
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]
type=tcp
bindto=0.0.0.0
bindport=10767
[module T_ccidu1]
class=secop.simulation.SimDrivable
.description=Main temperature control node of ccidu1.
.
Controls the regulation loop of the ls370.
value.unit='K'
value.default=300
target.datatype=["double", 0, 300]
target.default=300
target.unit='K'
.extra_params=ramp
ramp.datatype=["double",0,600]
ramp.description=target ramping speed in K/min.
ramp.default=60
ramp.unit=K/min
[module T_ccidu1_A]
class=secop.simulation.SimReadable
.description=mixing chamber temperature sensor. Also used for the regulation.
.visibility=expert
value.default=300
value.unit='K'
[module T_ccidu1_B]
class=secop.simulation.SimReadable
.description=(optional) sample temperature sensor close to sample.
.visibility=expert
value.default=300
value.unit='K'
[module ccidu1_pstill]
class=secop.simulation.SimReadable
.description=Pressure at the still/turbo pump inlet.
.visibility=expert
value.default=999
value.unit=mbar
[module ccidu1_pinlet]
class=secop.simulation.SimReadable
.description=Pressure at forepump inlet/turbo pump outlet.
.visibility=expert
value.default=999
value.unit=mbar
[module ccidu1_poutlet]
class=secop.simulation.SimReadable
.description=Pressure at forepump outlet/compressor inlet.
.visibility=expert
value.default=999
value.unit=mbar
[module ccidu1_pkond]
class=secop.simulation.SimReadable
.description=Pressure at condensing line/compressor outlet.
.visibility=expert
value.default=999
value.unit=mbar
[module ccidu1_ptank]
class=secop.simulation.SimReadable
.description=Pressure in dump tank.
.visibility=expert
value.default=999
value.unit=mbar
[module ccidu1_pvac]
class=secop.simulation.SimReadable
.description=Pressure in the vacuum dewar (ivc).
.visibility=expert
value.default=999
value.unit=mbar
[module ccidu1_flow]
class=secop.simulation.SimReadable
.description=Gas Flow (condensing line).
.visibility=expert
value.default=999
value.unit=mln/min
# note: all valves and switches are missing: use VNC to control them

150
cfg/sim_mlz_ccr12.cfg Normal file
View File

@ -0,0 +1,150 @@
[node ccr12]
description = [sim] CCR12 box of MLZ Sample environment group
.
Contains a Lakeshore 336 and an PLC controlling the compressor
and some valves.
.
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]
type=tcp
bindto=0.0.0.0
bindport=10767
[module T_ccr12]
class=secop.simulation.SimDrivable
.description=Main temperature control node of CCR12.
.
Switches between regulation on stick and regulation on tube depending on temperature requested.
May also pump gas for higher temperatures, if configured.
.extra_params=ramp
ramp.datatype=["double",0,600]
ramp.default=60
value.unit='K'
value.default=300
target.datatype=["double", 0, 600]
target.default=300
target.unit='K'
[module T_ccr12_stick]
class=secop.simulation.SimDrivable
.description=Temperature regulation for the sample stick in ccr12.
.extra_params=ramp
target.datatype=["double", 0, 600]
ramp.datatype=["double",0,600]
ramp.default=60
value.unit='K'
value.default=300
target.default=300
[module T_ccr12_tube]
class=secop.simulation.SimDrivable
.description=Temperature regulation for the tube of ccr12.
.extra_params=ramp
target.datatype=["double", 0, 300]
ramp.datatype=["double",0,600]
ramp.default=60
value.unit='K'
value.default=300
target.default=300
[module T_ccr12_A]
class=secop.simulation.SimReadable
.description=(optional) Sample temperature sensor.
value.default=300
value.unit='K'
[module T_ccr12_B]
class=secop.simulation.SimReadable
.description=(regulation) temperature sensor on stick.
value.default=300
value.unit='K'
[module T_ccr12_C]
class=secop.simulation.SimReadable
.description=Temperature at the coldhead.
value.default=70
value.unit='K'
[module T_ccr12_D]
class=secop.simulation.SimReadable
.description=(regulation) temperature at coupling to stick.
value.default=80
value.unit='K'
[module ccr12_pressure_regulate]
class=secop.simulation.SimWritable
.description=Selects on which Sensor the pressure regulation works, or switches it off.
.visibility=expert
value.default='off'
value.datatype=["enum", {'off':0,'p1':1,'p2':2}]
target.datatype=["enum", {'off':0,'p1':1,'p2':2}]
[module ccr12_compressor]
class=secop.simulation.SimDrivable
.description=Switches the compressor for the cooling stage on or off.
.
Note: This should always be on, except for fast heatup for sample change.
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
[module ccr12_gas_switch]
class=secop.simulation.SimWritable
.description=Switches the gas inlet on or off.
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
[module ccr12_vacuum_switch]
class=secop.simulation.SimWritable
.description=Switches the vacuum pumping valve on or off.
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
[module ccr12_p1]
class=secop.simulation.SimReadable
.description=Default pressure Sensor, linear scale 0..1000mbar
value.default=999
value.unit=mbar
[module ccr12_p2]
class=secop.simulation.SimReadable
.description=Auxillary pressure Sensor.
value.default=1e-6
value.unit=mbar
[module ccr12_curve_p2]
class=secop.simulation.SimWritable
.description=Curve for Aux pressure Sensor p2
.visibility=expert
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}]
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}]
[module ccr12_p1_limits]
class=secop.simulation.SimWritable
.description=Limits for pressure regulation in P1.
.visibility=expert
value.datatype=["tuple",[["double"],["double"]]]
value.default=[0,10]
value.unit=mbar
target.datatype=["tuple",[["double"],["double"]]]
target.default=[0,10]
target.unit=mbar
[module ccr12_p2_limits]
class=secop.simulation.SimWritable
.description=Limits for pressure regulation in P2.
.visibility=expert
value.datatype=["tuple",[["double"],["double"]]]
value.default=[1e-5,1e-3]
value.unit=mbar
target.datatype=["tuple",[["double"],["double"]]]
target.default=[1e-5,1e-3]
target.unit=mbar

148
cfg/sim_mlz_ccr12_v2.cfg Normal file
View File

@ -0,0 +1,148 @@
[node ccr12]
description = [sim] CCR12 box of MLZ Sample environment group
.
Contains a Lakeshore 336 and an PLC controlling the compressor
and some valves.
.
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]
type=tcp
bindto=0.0.0.0
bindport=10767
[module T_ccr12]
class=secop.simulation.SimDrivable
.description=Main temperature control node of CCR12.
.
Switches between regulation on stick and regulation on tube depending on temperature requested.
May also pump gas for higher temperatures, if configured.
Manual switching of the regulation node is supported via the regulationmode parameter.
value.unit='K'
value.default=300
target.datatype=["double", 0, 600]
target.default=300
target.unit='K'
.extra_params=ramp,regulationmode,abslimits,userlimits
ramp.datatype=["double",0,600]
ramp.description=target ramping speed in K/min.
ramp.default=60
ramp.unit=K/min
regulationmode.datatype=["enum",{'stick':1,'tube':2,'both':3}]
regulationmode.default='both'
regulationmode.description=regulate only stick, tube or select based upon the target value.
regulationmode.unit=''
abslimits.datatype=["tuple",[["double"],["double"]]]
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.unit='K'
abslimits.readonly=True
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[0,300]
userlimits.description=current user set limits for the setpoint. must be inside abslimits.
userlimits.unit='K'
[module T_ccr12_A]
class=secop.simulation.SimReadable
.description=(optional) Sample temperature sensor.
.visibility=expert
value.default=300
value.unit='K'
[module T_ccr12_B]
class=secop.simulation.SimReadable
.description=(regulation) temperature sensor on stick.
.visibility=expert
value.default=300
value.unit='K'
[module T_ccr12_C]
class=secop.simulation.SimReadable
.description=Temperature at the coldhead.
.visibility=expert
value.default=70
value.unit='K'
[module T_ccr12_D]
class=secop.simulation.SimReadable
.description=(regulation) temperature at coupling to stick.
.visibility=expert
value.default=80
value.unit='K'
[module ccr12_pressure_regulation]
class=secop.simulation.SimDrivable
.description=Simple two-point presssure regulation. the mode parameter selects the readout on which to regulate, or 'none' for no regulation.
.visibility=user
.extra_params=switchpoints, mode
mode.datatype=["enum", {'off':0,'p1':1,'p2':2}]
mode.description=Select pressure sensor to regulate on, or 'none' to disable regulation.
mode.default='off'
mode.unit=''
mode.readonly=False
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.default={'lower':1e-6,'upper':1e-3}
switchpoints.unit=''
switchpoints.readonly=True
[module ccr12_compressor]
class=secop.simulation.SimDrivable
.description=Switches the compressor for the cooling stage on or off.
.
Note: This should always be on, except for fast heatup for sample change.
.visibility=user
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
[module ccr12_gas_switch]
class=secop.simulation.SimWritable
.description=Switches the gas inlet on or off.
.visibility=expert
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
[module ccr12_vacuum_switch]
class=secop.simulation.SimWritable
.description=Switches the vacuum pumping valve on or off.
.visibility=expert
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
[module ccr12_p1]
class=secop.simulation.SimReadable
.description=Default pressure Sensor, linear scale 0..1000mbar
value.default=999
value.unit=mbar
.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.description=Calibration curve for pressure sensor
curve.default='TTR100'
curve.unit=''
curve.readonly=True
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[1, 100]
userlimits.description=current user set limits for the pressure regulation.
userlimits.unit='mbar'
[module ccr12_p2]
class=secop.simulation.SimReadable
.description=Auxillary pressure Sensor.
value.default=1e-6
value.unit=mbar
.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.description=Calibration curve for pressure sensor
curve.default='TTR100'
curve.unit=''
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[1e-6, 1e-3]
userlimits.description=current user set limits for the pressure regulation.
userlimits.unit='mbar'

34
cfg/sim_mlz_htf02.cfg Normal file
View File

@ -0,0 +1,34 @@
[node htf02]
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.
.meaning={'T_regulation':{'T_htf02':100}, 'T_sample':{'T_htf02':100}}
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10767
[module T_htf02]
class=secop.simulation.SimDrivable
.description=Main temperature control node of htf02.
.
Controls the regulation loop of the Eurotherm.
value.unit='degC'
value.default=300
target.datatype=["double", 0, 2000]
target.default=300
target.unit='degC'
.extra_params=ramp
ramp.datatype=["double",0,600]
ramp.description=target ramping speed in K/min.
ramp.default=60
ramp.unit=K/min
[module htf02_p]
class=secop.simulation.SimReadable
.description=Pressure Sensor at sample space (ivc).
value.default=989
value.unit='mbar'

View File

@ -0,0 +1,76 @@
[node stressihtf2]
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.
.meaning={'T_regulation':{'T_stressihtf2':100}, 'T_sample':{'T_stressihtf2':100}}
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10767
[module T_stressihtf2]
class=secop.simulation.SimDrivable
.description=Main temperature control node of Stressihtf2.
value.unit='degC'
value.default=20
target.datatype=["double", 0, 2000]
target.default=20
target.unit='degC'
.extra_params=ramp,regulationmode,abslimits,userlimits
ramp.datatype=["double",0,600]
ramp.description=target ramping speed in K/min.
ramp.default=60
ramp.unit=K/min
abslimits.datatype=["tuple",[["double"],["double"]]]
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.unit='degC'
abslimits.readonly=True
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[0,300]
userlimits.description=current user set limits for the setpoint. must be inside abslimits.
userlimits.unit='degC'
[module T_stressihtf2_sample]
class=secop.simulation.SimReadable
.description=(optional) Sample temperature sensor.
.visibility=expert
value.default=300
value.unit='degC'
[module stressihtf2_n2]
class=secop.simulation.SimWritable
.description=Switches the N2 gas inlet on or off.
.visibility=expert
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
target.default='off'
[module stressihtf2_he]
class=secop.simulation.SimWritable
.description=Switches the He gas inlet on or off.
.visibility=expert
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
target.default='off'
[module stressihtf2_lamps]
class=secop.simulation.SimWritable
.description=Switches the heating lamps on or off.
.visibility=expert
value.default='on'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
target.default='on'
[module stressihtf2_water_ok]
class=secop.simulation.SimReadable
.description=Readout of the cooling water state.
.visibility=expert
value.default='ok'
value.datatype=["enum", {'failed':0,'ok':1}]

View File

@ -0,0 +1,76 @@
[node stressihtf2]
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.
meaning={'T_regulation':{'T':100}, 'T_sample':{'T_sample':100}}
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10767
[module T]
class=secop.simulation.SimDrivable
.description=Main temperature control node of Stressihtf2.
value.unit='degC'
value.default=20
target.datatype=["double", 0, 2000]
target.default=20
target.unit='degC'
.extra_params=ramp,regulationmode,abslimits,userlimits
ramp.datatype=["double",0,600]
ramp.description=target ramping speed in K/min.
ramp.default=60
ramp.unit=K/min
abslimits.datatype=["tuple",[["double"],["double"]]]
abslimits.default=[0,2000]
abslimits.description=currently active absolute limits for the setpoint.
abslimits.unit='degC'
abslimits.readonly=True
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[0,300]
userlimits.description=current user set limits for the setpoint. must be inside or coincide with abslimits.
userlimits.unit='degC'
[module T_sample]
class=secop.simulation.SimReadable
.description=(optional) Sample temperature sensor.
.visibility=expert
value.default=300
value.unit='degC'
[module N2]
class=secop.simulation.SimWritable
.description=Switches the N2 gas inlet on or off.
.visibility=expert
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
target.default='off'
[module He]
class=secop.simulation.SimWritable
.description=Switches the He gas inlet on or off.
.visibility=expert
value.default='off'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
target.default='off'
[module lamps]
class=secop.simulation.SimWritable
.description=Switches the heating lamps on or off.
.visibility=expert
value.default='on'
value.datatype=["enum", {'off':0,'on':1}]
target.datatype=["enum", {'off':0,'on':1}]
target.default='on'
[module water_ok]
class=secop.simulation.SimReadable
.description=Readout of the cooling water state.
.visibility=expert
value.default='ok'
value.datatype=["enum", {'failed':0,'ok':1}]

83
cfg/stressihtf2.cfg Normal file
View File

@ -0,0 +1,83 @@
[node stressihtf2]
description = 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.
meaning={'T_regulation':{'T':100}, 'T_sample':{'T_sample':100}}
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10767
[module T]
class=secop_mlz.entangle.TemperatureController
tangodevice=tango://localhost:10000/box/eurotherm/ctrl
.description=Main temperature control node of Stressihtf2.
value.unit='degC'
target.datatype=["double", 0, 2000]
ramp.datatype=["double",0,9999]
ramp.description=target ramping speed in K/min.
ramp.default=60
ramp.unit=K/min
abslimits.datatype=["tuple",[["double"],["double"]]]
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.unit='degC'
abslimits.readonly=True
userlimits.datatype=["tuple",[["double"],["double"]]]
userlimits.default=[0,300]
userlimits.description=current user set limits for the setpoint. must be inside abslimits.
userlimits.unit='degC'
heateroutput.datatype=["double",0,100]
heateroutput.description=output to the heater
heateroutput.unit='%%'
heateroutput.default=0
setpoint.default=0
p.default=1
i.default=0
d.default=0
pid.default=[1,0,0]
speed.default=0
[module T_sample_a]
class=secop_mlz.entangle.Sensor
tangodevice=tango://localhost:10000/box/eurotherm/sensora
.description=Regulation temperature sensor.
.visibility=user
value.unit='degC'
[module T_sample_b]
class=secop_mlz.entangle.Sensor
tangodevice=tango://localhost:10000/box/eurotherm/sensorb
.description=(optional) Sample temperature sensor.
.visibility=expert
value.unit='degC'
[module N2]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/plc/_gas1
.description=Switches the N2 gas inlet on or off.
.visibility=expert
mapping=dict(off=0,on=1)
[module He]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/plc/_gas2
.description=Switches the He gas inlet on or off.
.visibility=expert
mapping=dict(off=0,on=1)
[module lamps]
class=secop_mlz.entangle.NamedDigitalOutput
tangodevice=tango://localhost:10000/box/plc/_onoff
.description=Switches the heating lamps on or off.
.visibility=expert
mapping=dict(off=0,on=1)
[module water_ok]
class=secop_mlz.entangle.NamedDigitalInput
tangodevice=tango://localhost:10000/box/plc/_waterok
.description=Readout of the cooling water state.
.visibility=expert
mapping=dict(failed=0,ok=1)

46
cfg/test.cfg Normal file
View File

@ -0,0 +1,46 @@
[node test config]
description=description of the testing sec-node
.
Here should be the long description.
It can be very long.
.
a single . on a line gets stripped so you can make paragraphs.
.
These texts are supposed to be possibly very long.
[interface tcp]
type=tcp
bindto=0.0.0.0
bindport=10768
[module LN2]
class=secop_demo.test.LN2
.description="random value between 0..100%%"
value.unit = "%%"
[module heater]
class=secop_demo.test.Heater
maxheaterpower=10
.description="some heater"
[module T1]
class=secop_demo.test.Temp
sensor="X34598T7"
.description="some temperature"
[module T2]
class=secop_demo.modules.CoilTemp
sensor="X34598T8"
.description="some temperature"
[module T3]
class=secop_demo.modules.CoilTemp
sensor="X34598T9"
.description="some temperature"
[module Lower]
class=secop_demo.test.Lower
.description="something else"