move most files at root to tests

This commit is contained in:
2026-06-01 17:51:57 +02:00
parent fa33f33cb4
commit 5b6941a231
53 changed files with 2696 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
Node('camea_be_filter.psi.ch',
'Camea Be-Filter',
)
Mod('sea_addons',
'frappy_psi.sea.SeaClient',
'addons sea connection for camea-be-filter.addon',
config='camea-be-filter.addon',
service='addons',
)
Mod('t_be_filter',
'frappy_psi.sea.SeaReadable',
'Be filter T',
io='sea_addons',
sea_object='t_be_filter',
extra_modules=['a', 'b', 'c', 'd', 'det'],
)
Mod('t_be_fil_top_m',
'frappy_psi.sea.SeaReadable', '',
io='sea_addons',
single_module='t_be_filter.a',
)
Mod('t_be_fil_top_r',
'frappy_psi.sea.SeaReadable', '',
io='sea_addons',
single_module='t_be_filter.b',
)
Mod('t_be_fil_bot_l',
'frappy_psi.sea.SeaReadable', '',
io='sea_addons',
single_module='t_be_filter.c',
)
Mod('t_be_fil_bot_r',
'frappy_psi.sea.SeaReadable', '',
io='sea_addons',
single_module='t_be_filter.d',
)
Mod('t_detector',
'frappy_psi.sea.SeaReadable', '',
io='sea_addons',
single_module='t_be_filter.det',
)
+24
View File
@@ -0,0 +1,24 @@
Node('QnwTC1test.psi.ch',
'QnwTC1 test',
'tcp://5000',
)
Mod('io',
'frappy_psi.qnw.QnwIO',
'connection for Quantum northwest',
uri='tcp://ldm-fi-ts:3001',
)
Mod('T',
'frappy_psi.qnw.TemperatureLoopTC1',
'holder temperature',
channel='CT',
io='io',
)
Mod('Th',
'frappy_psi.qnw.SensorTC1',
'heat exch. temperature',
channel='HT',
io='io',
)
+19
View File
@@ -0,0 +1,19 @@
Node('TFA10.psi.ch',
'TFA10 test',
'tcp://5000',
)
Mod('io',
'frappy_psi.thermofisher.ThermFishIO',
'connection for ThermoFisher A10',
uri='tcp://ldm-fi-ts:3002',
)
Mod('T',
'frappy_psi.thermofisher.TemperatureLoopA10',
'holder temperature',
io='io',
target=Param(max=100),
tolerance=0.5,
settling_time=20,
)
+10
View File
@@ -0,0 +1,10 @@
Node('AH2700Test.psi.ch',
'AH2700 capacitance bridge test',
'tcp://5000',
)
Mod('cap',
'frappy_psi.ah2700.Capacitance',
'capacitance',
uri='ldmse3-ts:3015',
)
+91
View File
@@ -0,0 +1,91 @@
Node('MLZ_amagnet(Garfield)',
'MLZ-Amagnet\n'
'\n'
'Water cooled magnet from ANTARES@MLZ.\n'
'\n'
'Use module to control the magnetic field.\n'
'Don\'t forget to select symmetry first (can be moved only at zero field!).\n'
'\n'
'Monitor T1..T4 (Coil temps), if they get to hot, field will ramp down!\n'
'\n'
'In case of Problems, contact the ANTARES people at MLZ.',
'tcp://10767',
visibility = 'expert',
foo = 'bar',
)
Mod('enable',
'frappy_mlz.entangle.NamedDigitalOutput',
'Enables to Output of the Powersupply',
tangodevice = 'tango://localhost:10000/box/plc/_enable',
value = Param(datatype=["enum", {'On':1,'Off':0}]),
target = Param(datatype=["enum", {'On':1,'Off':0}]),
visibility = 'advanced',
)
Mod('polarity',
'frappy_mlz.entangle.NamedDigitalOutput',
'polarity (+/-) switch\n'
'\n'
'there is an interlock in the plc:\n'
'if there is current, switching polarity is forbidden\n'
'if polarity is short, powersupply is disabled',
tangodevice = 'tango://localhost:10000/box/plc/_polarity',
value = Param(datatype=["enum", {'+1':1,'0':0,'-1':-1}]),
target = Param(datatype=["enum", {'+1':1,'0':0,'-1':-1}]),
visibility = 'advanced',
comtries = 50,
)
Mod('symmetry',
'frappy_mlz.entangle.NamedDigitalOutput',
'par/ser switch selecting (a)symmetric mode\n'
'\n'
'symmetric is ser, asymmetric is par',
tangodevice = 'tango://localhost:10000/box/plc/_symmetric',
value = Param(datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]),
target = Param(datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]),
visibility = 'advanced',
)
for i in range(1,5):
Mod('T%d' % i,
'frappy_mlz.entangle.AnalogInput',
'Temperature %d of the coils system' % i,
tangodevice = 'tango://localhost:10000/box/plc/_t%d' % i,
#warnlimits=(0, 50),
value = Param(unit='degC'),
)
Mod('currentsource',
'frappy_mlz.entangle.PowerSupply',
'Device for the magnet power supply (current mode)',
tangodevice = 'tango://localhost:10000/box/lambda/curr',
abslimits = (0,200),
speed = 1,
ramp = 60,
precision = 0.02,
current = 0,
voltage = 10,
#value=Param(unit='A')
visibility = 'advanced',
)
Mod('mf',
'frappy_mlz.amagnet.GarfieldMagnet',
'magnetic field module, handling polarity switching and stuff',
currentsource = 'currentsource',
enable = 'enable',
polswitch = 'polarity',
symmetry = 'symmetry',
target = Param(unit='T'),
value = Param(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', 1],
#priority=100,
visibility = 'user',
abslimits = (-0.4,0.4,),
)
+19
View File
@@ -0,0 +1,19 @@
Node('attocube_test.psi.ch',
'a single attocube axis',
interface='tcp://5000',
)
Mod('r',
'frappy_psi.attocube.Axis',
'ANRv220-F3-02882',
axis = 1,
value = Param(unit='deg'),
tolerance = 0.1,
target_min = 0,
target_max = 360,
steps_fwd = 45,
steps_bwd = 85,
step_mode = True,
# gear = 1.2,
)
+24
View File
@@ -0,0 +1,24 @@
Node('bkpower.psi.ch',
'Powersupply B&K Precission BK168xB',
'tcp://5000',
)
Mod('htr_io',
'frappy_psi.bkpower.IO',
'powersupply communicator',
uri = 'serial:///dev/ttyUSBupper',
)
Mod('htr',
'frappy_psi.bkpower.Power',
'heater power',
io= 'htr_io',
)
Mod('out',
'frappy_psi.bkpower.Output',
'heater output',
io = 'htr_io',
maxvolt = 50,
maxcurrent = 2,
)
+148
View File
@@ -0,0 +1,148 @@
desc = '''CCR box of MLZ Sample environment group
Contains a Lakeshore 336 and an PLC controlling the compressor
and some valves.'''
Node('MLZ_ccr',
desc,
'tcp://10767',
)
Mod('automatik',
'frappy_mlz.entangle.NamedDigitalOutput',
'controls the (simple) pressure regulation\n'
'\n'
'selects between off, regulate on p1 or regulate on p2 sensor',
tangodevice = 'tango://localhost:10000/box/plc/_automatik',
mapping={'Off':0,'p1':1,'p2':2},
)
Mod('compressor',
'frappy_mlz.entangle.NamedDigitalOutput',
'control the compressor (on/off)',
tangodevice = 'tango://localhost:10000/box/plc/_cooler_onoff',
mapping={'Off':0,'On':1},
)
Mod('gas',
'frappy_mlz.entangle.NamedDigitalOutput',
'control the gas inlet into the ccr (on/off)\n'
'\n'
'note: this switches off automatically after 15 min.\n'
'note: activation de-activates the vacuum inlet\n'
'note: if the pressure regulation is active, it enslave this device',
tangodevice = 'tango://localhost:10000/box/plc/_gas_onoff',
mapping={'Off':0,'On':1},
)
Mod('vacuum',
'frappy_mlz.entangle.NamedDigitalOutput',
'control the vacuum inlet into the ccr (on/off)\n'
'\n'
'note: activation de-activates the gas inlet\n'
'note: if the pressure regulation is active, it enslave this device',
tangodevice = 'tango://localhost:10000/box/plc/_vacuum_onoff',
mapping={'Off':0,'On':1},
)
Mod('p1',
'frappy_mlz.entangle.AnalogInput',
'pressure sensor 1 (linear scale)',
tangodevice = 'tango://localhost:10000/box/plc/_p1',
value = Param(unit='mbar')
)
Mod('p2',
'frappy_mlz.entangle.AnalogInput',
'pressure sensor 2 (selectable curve)',
tangodevice = 'tango://localhost:10000/box/plc/_p2',
value = Param(unit='mbar'),
)
Mod('curve_p2',
'frappy_mlz.entangle.NamedDigitalInput',
'calibration curve for pressure sensor 2',
tangodevice = 'tango://localhost:10000/box/plc/_curve',
value = 0,
mapping = {'0-10V':0, '0-1000mbar':1, '1-9V to 0-1 mbar':2,
'DI200':3, 'DI2000':4, 'TTR100':7, 'PTR90':8,
'PTR225/237':9, 'ITR90':10, 'ITR100-D':11,
'ITR100-2':12, 'ITR100-3':13, 'ITR100-4':14,
'ITR100-5':15, 'ITR100-6':16, 'ITR100-7':17,
'ITR100-8':18, 'ITR100-9':19, 'ITR100-A':20,
'CMR361':21, 'CMR362':22, 'CMR363':23,
'CMR364':24, 'CMR365':25},
)
Mod('T_tube_regulation',
'frappy_mlz.entangle.TemperatureController',
'regulation of tube temperature',
tangodevice = 'tango://localhost:10000/box/tube/control1',
value = Param(unit = 'K'),
heateroutput = 0,
ramp = 6,
speed = 0.1,
setpoint = 0,
pid = (40, 10, 1),
p = 40,
i = 10,
d = 1,
abslimits = (0, 500),
)
Mod('T_stick_regulation',
'frappy_mlz.entangle.TemperatureController',
'regualtion of stick temperature',
tangodevice = 'tango://localhost:10000/box/stick/control2',
value = Param(unit = 'K'),
heateroutput = 0,
ramp = 6,
speed = 0.1,
setpoint = 0,
pid = (40, 10, 1),
p = 40,
i = 10,
d = 1,
abslimits = (0, 500),
)
Mod('T_sample',
'frappy_mlz.entangle.Sensor',
'sample temperature',
tangodevice = 'tango://localhost:10000/box/sample/sensora',
value = Param(unit = 'K'),
)
Mod('T_stick',
'frappy_mlz.entangle.Sensor',
'temperature at bottom of sample stick',
tangodevice = 'tango://localhost:10000/box/stick/sensorb',
value = Param(unit = 'K'),
)
Mod('T_coldhead',
'frappy_mlz.entangle.Sensor',
'temperature at coldhead',
tangodevice = 'tango://localhost:10000/box/coldhead/sensorc',
value = Param(unit = 'K'),
)
Mod('T_tube',
'frappy_mlz.entangle.Sensor',
'temperature at thermal coupling tube <-> stick',
tangodevice = 'tango://localhost:10000/box/tube/sensord',
value = Param(unit = 'K'),
)
# THIS IS A HACK: due to entangle (in controller)
Mod('T_tube_regulation_heaterrange',
'frappy_mlz.entangle.NamedDigitalOutput',
'heaterrange for tube regulation',
tangodevice = 'tango://localhost:10000/box/tube/range1',
mapping={'Off':0,'Low':1,'Medium':2, 'High':3},
)
Mod('T_stick_regulation_heaterrange',
'frappy_mlz.entangle.NamedDigitalOutput',
'heaterrange for stick regulation',
tangodevice = 'tango://localhost:10000/box/stick/range2',
mapping={'Off':0,'Low':1,'Medium':2, 'High':3},
)
+35
View File
@@ -0,0 +1,35 @@
#####################################################################
# Python version of frappy config
#####################################################################
Node('cryo_7.frappy.demo',
'short description\n\n'
'This is a very long description providing all the gory details '
'about the stuff we are describing.',
'tcp://10769',
more="blub",
)
Mod('cryo',
'frappy_demo.cryo.Cryostat',
'A simulated cc cryostat with heat-load, specific heat for the sample and a '
'temperature dependent heat-link between sample and regulation.',
group='very important/stuff',
jitter=0.1,
T_start=10.0,
target=10.0,
looptime=1,
ramp=6,
maxpower=20.0,
heater=4.1,
mode='pid',
tolerance=0.1,
window=30,
timeout=900,
p = Param(40, unit='%/K'), # in case 'default' is the first arg, we can omit 'default='
i = 10,
d = 2,
pid = Group('p', 'i', 'd'),
pollinterval = Param(export=False),
value = Param(unit = 'K', test = 'customized value'),
)
+47
View File
@@ -0,0 +1,47 @@
Node('demo.frappy.demo',
'Basic demo server for frappy',
'tcp://10767',
)
Mod('heatswitch',
'frappy_demo.modules.Switch',
'Heatswitch for `mf` device',
switch_on_time = 5,
switch_off_time = 10,
)
Mod('mf',
'frappy_demo.modules.MagneticField',
'simulates some cryomagnet with persistent/non-persistent switching',
heatswitch = 'heatswitch',
)
Mod('ts',
'frappy_demo.modules.SampleTemp',
'some temperature',
sensor = 'Q1329V7R3',
ramp = 4,
target = 10,
value = 10,
meaning = ['temperature', 20],
)
Mod('tc1',
'frappy_demo.modules.CoilTemp',
'some temperature',
sensor = 'X34598T7',
)
Mod('tc2',
'frappy_demo.modules.CoilTemp',
'some temperature',
sensor = 'X39284Q8',
)
Mod('label',
'frappy_demo.modules.Label',
'some label indicating the state of the magnet `mf`.',
system = 'Cryomagnet MX15',
mf = 'mf',
ts = 'ts',
)
+9
View File
@@ -0,0 +1,9 @@
Node('comm.sea.psi.ch',
'sea client (communication only)',
)
Mod('seaconn',
'frappy_psi.sea.SeaClient',
'a SEA connection',
visibility='expert',
)
+11
View File
@@ -0,0 +1,11 @@
# error creating module seaconn:
# missing sea port for seadesc
Node('comm.sea.psi.ch',
'sea client (tool for creating cfg)',
)
Mod('seaconn',
'frappy_psi.sea.SeaConfigCreator',
'a SEA connection. will shut down after getting the description',
visibility=1,
)
+317
View File
@@ -0,0 +1,317 @@
Node('LOGO.psi.ch',
'LOGO',
interface='tcp://5010',
secondary = ['ws://8010']
)
Mod('io',
'frappy_psi.logo.IO',
'',
ip_address = "192.168.0.3",
tcap_client = 0x3000,
tsap_server = 0x2000
)
Mod('V1',
'frappy_psi.logo.Valve',
'Valves',
io = 'io',
vm_address_input ="V1025.0",
vm_address_output ="V1064.3"
)
Mod('V2',
'frappy_psi.logo.Valve',
'Valves',
io = 'io',
vm_address_input ="V1024.2",
vm_address_output ="V1064.5"
)
Mod('V4',
'frappy_psi.logo.Valve',
'Valves',
io = 'io',
vm_address_input ="V1024.5",
vm_address_output ="V1064.5"
)
Mod('V5',
'frappy_psi.logo.Valve',
'Valves',
io = 'io',
vm_address_input ="V1024.4",
vm_address_output ="V1064.2"
)
Mod('V9',
'frappy_psi.logo.Valve',
'Valves',
io = 'io',
vm_address_input ="V1024.3",
vm_address_output ="V404.1"
)
Mod('pump',
'frappy_psi.logo.FluidMachines',
'Pump',
io = 'io',
vm_address_output ="V414.1"
)
Mod('compressor',
'frappy_psi.logo.FluidMachines',
'Compressor',
io = 'io',
vm_address_output ="V400.1"
)
Mod('p2',
'frappy_psi.logo.Pressure',
'Pressure in mBar',
io = 'io',
vm_address ="VW0",
)
Mod('p1',
'frappy_psi.logo.Pressure',
'Pressure in mBar',
io = 'io',
vm_address ="VW2",
)
Mod('p5',
'frappy_psi.logo.Pressure',
'Pressure in mBar',
io = 'io',
vm_address ="VW4",
)
Mod('Druckluft',
'frappy_psi.logo.Airpressure',
'Airpressure state',
io = 'io',
vm_address ="VW6",
)
Mod('SF1',
'frappy_psi.logo.safetyfeatureState',
'Safety Feature',
io = 'io',
vm_address ="V410.1",
)
Mod('SF2',
'frappy_psi.logo.safetyfeatureState',
'Safety Feature',
io = 'io',
vm_address ="V406.1",
)
Mod('SF3',
'frappy_psi.logo.safetyfeatureState',
'Safety Feature',
io = 'io',
vm_address ="V408.1",
)
Mod('SF4',
'frappy_psi.logo.safetyfeatureState',
'Safety Feature',
io = 'io',
vm_address ="V412.1",
)
Mod('p2max',
'frappy_psi.logo.safetyfeatureParam',
'Safety Feature Param',
io = 'io',
vm_address ="VW8",
)
Mod('pcond',
'frappy_psi.logo.safetyfeatureParam',
'Safety Feature Param',
io = 'io',
vm_address ="VW10",
)
Mod('p5min',
'frappy_psi.logo.safetyfeatureParam',
'Safety Feature Param',
io = 'io',
vm_address ="VW12",
)
Mod('p5max',
'frappy_psi.logo.safetyfeatureParam',
'Safety Feature Param',
io = 'io',
vm_address ="VW14",
)
"""
Mod('io_ls273',
'frappy_psi.ls372.StringIO',
'io for Ls372',
uri = 'localhost:2089',
)
Mod('sw',
'frappy_psi.ls372.Switcher',
'channel switcher',
io = 'io_ls273',
)
Mod('res1',
'frappy_psi.ls372.ResChannel',
'resistivity chan 1',
vexc = '2mV',
channel = 1,
switcher = 'sw',
)
"""
Mod('io_pfeiffer',
'frappy_psi.pfeiffer_new.PfeifferProtocol',
'',
uri='serial:///dev/ttyUSB0?baudrate=9600+parity=none+bytesize=8+stopbits=1',
)
Mod('io_turbo',
'frappy_psi.pfeiffer_new.PfeifferProtocol',
'',
uri='serial:///dev/ttyUSB1?baudrate=9600+parity=none+bytesize=8+stopbits=1',
)
Mod('p3',
'frappy_psi.pfeiffer_new.RPT200',
'Pressure in HPa',
io = 'io_pfeiffer',
address= 2,
)
Mod('p4',
'frappy_psi.pfeiffer_new.RPT200',
'Pressure in HPa',
io = 'io_pfeiffer',
address= 4
)
Mod('turbopump',
'frappy_psi.pfeiffer_new.TCP400',
'Pfeiffer Turbopump',
io = 'io_turbo',
address= 1
)
Mod('MV10',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV10'
)
Mod('MV13',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV13'
)
Mod('MV8',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV8'
)
Mod('MVB',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MVB'
)
Mod('MV2',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV2'
)
Mod('MV1',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV1'
)
Mod('MV3a',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV3a'
)
Mod('MV3b',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV3b'
)
Mod('GV1',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve GV1'
)
Mod('GV2',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve GV2'
)
Mod('MV14',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV14'
)
Mod('MV12',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV12'
)
Mod('MV11',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV11'
)
Mod('MV9',
'frappy_psi.manual_valves.ManualValve',
'Manual Valve MV9'
)
Mod('stateMachine',
'frappy_psi.dilution_statemachine.DIL5',
'Statemachine',
condenseline_pressure = "p2",
condense_valve = "V9",
dump_valve = "V4",
circulate_pump = "pump",
compressor = "compressor",
turbopump = "turbopump",
condenseline_valve = "V1",
circuitshort_valve = "V2",
still_pressure = "p3",
#ls372 = "res1",
V5 = "V5",
p1 = "p1",
MV10 = 'MV10',
MV13 ='MV13',
MV8 = 'MV8',
MVB = 'MVB',
MV2 = 'MV2',
MV1 = 'MV1',
MV3a = 'MV3a',
MV3b = 'MV3b',
GV1 = 'GV1',
MV14 = 'MV14',
MV12 = 'MV12',
MV11 = 'MV11',
MV9 = 'MV9',
GV2 = 'GV2',
condensing_p_low = 150,
condensing_p_high = 250
)
+12
View File
@@ -0,0 +1,12 @@
Node('dpm.psi.ch',
'DPM driver for pressure cell',
interface='tcp://5000',
)
Mod('force',
'frappy_psi.dpm.DPM3',
'DPM driver to read out the transducer value, write and read the offset and scale factor',
uri='serial:///dev/ttyUSB1',
digits=2,
scale_factor=0.0156,
)
+136
View File
@@ -0,0 +1,136 @@
Node('test.config.frappy.demo',
'''short description of the testing sec-node
This description for the node can be as long as you need if you use a multiline string.
Very long!
The needed fields are Equipment id (1st argument), description (this)
and the main interface of the node (3rd arg)
''',
'tcp://5000',
)
Mod('attachtest',
'frappy_demo.test.WithAtt',
'test attached',
att = 'LN2',
)
Mod('pinata',
'frappy_demo.test.Pin',
'scan test',
)
Mod('recursive',
'frappy_demo.test.RecPin',
'scan test',
)
Mod('LN2',
'frappy_demo.test.LN2',
'random value between 0..100%',
value = Param(default = 0, unit = '%'),
)
Mod('heater',
'frappy_demo.test.Heater',
'some heater',
maxheaterpower = 10,
)
Mod('T1',
'frappy_demo.test.Temp',
'some temperature',
sensor = 'X34598T7',
)
Mod('T2',
'frappy_demo.test.Temp',
'some temperature',
sensor = 'X34598T8',
)
Mod('T3',
'frappy_demo.test.Temp',
'some temperature',
sensor = 'X34598T9',
)
Mod('Lower',
'frappy_demo.test.Lower',
'something else',
)
Mod('Decision',
'frappy_demo.test.Mapped',
'Random value from configured property choices. Config accepts anything ' \
'that can be converted to a list',
choices = ['Yes', 'Maybe', 'No'],
)
Mod('c',
'frappy_demo.test.Commands',
'a command test',
)
Mod('cryo',
'frappy_demo.cryo.Cryostat',
'A simulated cc cryostat with heat-load, specific heat for the sample and a '
'temperature dependent heat-link between sample and regulation.',
group='very important/stuff',
jitter=0.1,
T_start=10.0,
target=10.0,
looptime=1,
ramp=6,
maxpower=20.0,
heater=4.1,
mode='pid',
tolerance=0.1,
window=30,
timeout=900,
p = Param(40, unit='%/K'), # in case 'default' is the first arg, we can omit 'default='
i = 10,
d = 2,
pid = Group('p', 'i', 'd'),
pollinterval = Param(export=False),
value = Param(unit = 'K', test = 'customized value'),
)
Mod('heatswitch',
'frappy_demo.modules.Switch',
'Heatswitch for `mf` device',
switch_on_time = 5,
switch_off_time = 10,
)
Mod('bool',
'frappy_demo.modules.BoolWritable',
'boolean writable test',
)
Mod('lscom',
'frappy_psi.ls370sim.Ls370Sim',
'simulated serial communicator to a LS 370',
visibility = 3
)
Mod('sw',
'frappy_psi.ls370res.Switcher',
'channel switcher for Lsc controller',
io = 'lscom',
)
Mod('a',
'frappy_psi.ls370res.ResChannel',
'resistivity',
channel = 1,
switcher = 'sw',
)
Mod('b',
'frappy_psi.ls370res.ResChannel',
'resistivity',
channel = 3,
switcher = 'sw',
)
+36
View File
@@ -0,0 +1,36 @@
Node('see_demo_equipment',
'Do not use, it needs to be rewritten....',
'tcp://10767',
)
Mod('tc1',
'frappy_demo.modules.CoilTemp',
'',
sensor="X34598T7",
)
Mod('tc2',
'frappy_demo.modules.CoilTemp',
'',
sensor="X39284Q8",
)
for i in [1,2]:
Mod('sensor%d' % i,
'frappy_ess.epics.EpicsReadable',
'',
epics_version="v4",
value_pv="DEV:KRDG%d" % i,
group="Lakeshore336",
)
Mod('loop%d' % i,
'frappy_ess.epics.EpicsTempCtrl',
'',
epics_version="v4",
group="Lakeshore336",
value_pv="DEV:KRDG%d" % i,
target_pv="DEV:SETP_S%d" % i,
heaterrange_pv="DEV:RANGE_S%d" % i,
)
+100
View File
@@ -0,0 +1,100 @@
Node('fi2.psi.ch',
'vacuum furnace ILL Type',
'tcp://5000',
)
Mod('htr_io',
'frappy_psi.tdkpower.IO',
'powersupply communicator',
uri = 'serial:///dev/ttyUSB0',
)
Mod('htr',
'frappy_psi.tdkpower.Power',
'heater power',
io= 'htr_io',
)
Mod('out',
'frappy_psi.tdkpower.Output',
'heater output',
io = 'htr_io',
maxvolt = 5,
maxcurrent = 25,
)
Mod('relais',
'frappy_psi.ionopimax.DigitalOutput',
'relais for power output',
addr = 'o2',
)
Mod('T_main',
'frappy_psi.ionopimax.CurrentInput',
'sample temperature',
addr = 'ai4',
valuerange = (0, 1372),
value = Param(unit='degC'),
)
Mod('T_extra',
'frappy_psi.ionopimax.CurrentInput',
'extra temperature',
addr = 'ai3',
valuerange = (0, 1372),
value = Param(unit='degC'),
)
Mod('T_htr',
'frappy_psi.ionopimax.CurrentInput',
'heater temperature',
addr = 'ai2',
valuerange = (0, 1372),
value = Param(unit='degC'),
)
Mod('T_wall',
'frappy_psi.ionopimax.VoltageInput',
'furnace wall temperature',
addr = 'av2',
rawrange = (0, 1.5),
valuerange = (0, 150),
value = Param(unit='degC'),
)
Mod('T',
'frappy_psi.picontrol.PI',
'controlled Temperature',
input = 'T_htr',
output = 'out',
relais = 'relais',
p = 2,
i = 0.01,
)
Mod('interlocks',
'frappy_psi.furnace.Interlocks',
'interlock parameters',
input = 'T_htr',
wall_T = 'T_wall',
vacuum = 'p',
relais = 'relais',
control = 'T',
wall_limit = 50,
vacuum_limit = 0.1,
)
Mod('p_io',
'frappy_psi.pfeiffer.IO',
'pressure io',
uri='serial:///dev/ttyUSBlower',
)
Mod('p',
'frappy_psi.pfeiffer.Pressure',
'pressure reading',
io = 'p_io',
)
+13
View File
@@ -0,0 +1,13 @@
[FRAPPY]
# general config for running in git repo
logdir = /home/linse/frappylog
piddir = /home/linse/frappylog
confdir = /home/linse/cfgfrappy
comlog = True
[superfrappy]
wrapperdir = /home/linse/cfgfrappy
setupdir = /home/linse/setups
cfgdirs = /sq_sw/linse/frappycfg:/sq_sw/linse/frappy_<INS>/cfg:/sq_sw/linse/frappy/cfg
main_port = 15000
+16
View File
@@ -0,0 +1,16 @@
Node('lockin70test.psi.ch',
'lockin70 test',
'tcp://5000',
)
Mod('io',
'frappy_psi.SR.SR_IO',
'lockin communication',
uri='10105266.psi.ch:50000',
)
Mod('XY',
'frappy_psi.SR.XY70',
'XY channels',
io='io',
)
+16
View File
@@ -0,0 +1,16 @@
Node('lockin830test.psi.ch',
'lockin830 test',
'tcp://5000',
)
Mod('io',
'frappy_psi.SR830.SR830_IO',
'lockin communication',
uri='tcp://linse-976d-ts:3002',
)
Mod('XY',
'frappy_psi.SR830.XY',
'XY channels',
io='io',
)
+16
View File
@@ -0,0 +1,16 @@
Node('lockintest.psi.ch',
'lockin test',
'tcp://5000',
)
Mod('io',
'frappy_psi.SR.SR_IO',
'lockin communication',
uri='10105266.psi.ch:50000',
)
Mod('XY',
'frappy_psi.SR.XY',
'XY channels',
io='io',
)
+20
View File
@@ -0,0 +1,20 @@
# error importing secop.bytesio.BytesIO
# module T, attached io: Module 'T_io' does not exist on this SEC-Node!
# error initializing T: AttributeError("'NoneType' object has no attribute 'polledModules'")
Node('ls240.psi.ch',
'ls240 test',
interface='tcp://5000',
)
Mod('T',
'frappy_psi.ls240.Ls240',
'temperature on uniax stick',
io='T_io',
)
Mod('T_io',
'frappy.bytesio.BytesIO',
'IO device for LS240',
uri='serial:///dev/ttyUSB0?baudrate=9600+parity=EVEN',
timeout=0.2,
)
+23
View File
@@ -0,0 +1,23 @@
from os import environ
# either change the uri or set the environment variable 'LS_URI'
lakeshore_uri = environ.get('LS_URI', 'tcp://<host>:7777')
Node('example_cryo.psi.ch', # a globally unique identification
'this is an example cryostat for the Frappy tutorial', # describes the node
interface='tcp://10767') # you might choose any port number > 1024
Mod('io', # the name of the module
'frappy_demo.lakeshore.LakeshoreIO', # the class used for communication
'communication to main controller', # a description
uri=lakeshore_uri, # the serial connection
)
Mod('T',
'frappy_demo.lakeshore.TemperatureLoop',
'Sample Temperature',
io='io',
channel='A', # the channel on the LakeShore for this module
loop=1, # the loop to be used
value=Param(max=470), # set the maximum expected T
target=Param(max=420), # set the maximum allowed target T
heater_range=3, # 5 for model 350
)
+25
View File
@@ -0,0 +1,25 @@
Node('ls340test.psi.ch',
'ls340 test',
'tcp://5000'
)
Mod('io',
'frappy_psi.lakeshore.IO340',
'communication to ls340',
uri='tcp://localhost:7777'
)
Mod('dev',
'frappy_psi.lakeshore.Device340',
'device for calcurve',
io='io',
curve_handling=True,
)
Mod('T',
'frappy_psi.lakeshore.Sensor340',
'sample temperature',
# output_module='Heater',
device='dev',
channel='A',
calcurve='x29746',
)
+25
View File
@@ -0,0 +1,25 @@
Node('ls370res.psi.ch',
'Lsc370 Test',
interface='tcp://5000',
)
Mod('lsmain_io',
'frappy_psi.ls370res.StringIO',
'the communication device',
uri='lollypop-ts:3001',
)
Mod('lsmain',
'frappy_psi.ls370res.Main',
'main control of Lsc controller',
uri='lollypop-ts:3001',
)
Mod('res',
'frappy_psi.ls370res.ResChannel',
'resistivity',
iexc='1mA',
channel=5,
main='lsmain',
io='lsmain_io',
)
+30
View File
@@ -0,0 +1,30 @@
Node('LscSIM.psi.ch',
'Lsc Simulation at PSI',
'tcp://5000',
)
Mod('lscom',
'frappy_psi.ls370sim.Ls370Sim',
'simulated serial communicator to a LS 370',
visibility = 3
)
Mod('sw',
'frappy_psi.ls370res.Switcher',
'channel switcher for Lsc controller',
io = 'lscom',
)
Mod('a',
'frappy_psi.ls370res.ResChannel',
'resistivity',
channel = 1,
switcher = 'sw',
)
Mod('b',
'frappy_psi.ls370res.ResChannel',
'resistivity',
channel = 3,
switcher = 'sw',
)
+30
View File
@@ -0,0 +1,30 @@
Node('LscSIM.psi.ch',
'Lsc370 Test',
'tcp://5000',
)
Mod('io',
'frappy_psi.ls370res.StringIO',
'io for Ls370',
# uri = 'localhost:2089',
uri = 'linse-976d-ts:3007',
)
Mod('sw',
'frappy_psi.ls370res.Switcher',
'channel switcher',
io = 'io',
)
Mod('res1',
'frappy_psi.ls370res.ResChannel',
'resistivity chan 1',
vexc = '2mV',
channel = 2,
switcher = 'sw',
)
Mod('res2',
'frappy_psi.ls370res.ResChannel',
'resistivity chn 3',
vexc = '2mV',
channel = 3,
switcher = 'sw',
)
+26
View File
@@ -0,0 +1,26 @@
Node('ma7matt.stick.sea.psi.ch',
'MA7 sample stick with wiring for Matt Littlehales',
)
Mod('sea_stick',
'frappy_psi.sea.SeaClient',
'SEA stick connection',
config='ma7matt.stick',
service='stick',
)
Mod('ts',
'frappy_psi.sea.SeaReadable', '',
meaning=['temperature', 30],
io='sea_stick',
sea_path='tt/ts_2',
json_file='ma7.config.json',
)
Mod('T_stick',
'frappy_psi.sea.SeaReadable', '',
io='sea_stick',
sea_path='tt/ts',
json_file='ma7.config.json',
)
+34
View File
@@ -0,0 +1,34 @@
Node('multimetertest.psi.ch',
'multimeter test',
'tcp://5000',
)
Mod('io',
'frappy_psi.HP.HP_IO',
'multimeter communication',
uri='/dev/cu.usbserial-21410',
)
Mod('Voltage',
'frappy_psi.HP.Voltage',
'voltage',
io='io',
)
Mod('Current',
'frappy_psi.HP.Current',
'current',
io='io',
)
Mod('Resistance',
'frappy_psi.HP.Resistance',
'resistivity',
io='io',
)
Mod('Frequency',
'frappy_psi.HP.Frequency',
'resistivity',
io='io',
)
+6
View File
@@ -0,0 +1,6 @@
Node('multiplexer',
'multiplexer node',
'tcp://5000',
cls = 'protocol.router.Router',
nodes = ['localhost:10768', 'localhost:10769'],
)
+4
View File
@@ -0,0 +1,4 @@
Mod('seaconn',
'frappy_psi.sea.SeaClient',
'a SEA connection',
)
+18
View File
@@ -0,0 +1,18 @@
Node('phytron_test.psi.ch',
'phytron motor test',
interface='tcp://5000',
)
Mod('drv_io',
'frappy_psi.phytron.PhytronIO',
'',
uri='ma7-ts.psi.ch:3007',
)
Mod('drv',
'frappy_psi.phytron.Motor',
'a phytron motor',
io='drv_io',
abslimits=(-180.0, 360.0),
encoder_mode='CHECK',
)
+198
View File
@@ -0,0 +1,198 @@
# error creating module mf:
# Module mf needs a value for either 'uri' or 'io'
# error creating module pos:
# Module pos needs a value for either 'uri' or 'io'
# error creating module lev:
# Module lev needs a value for either 'uri' or 'io'
# error creating module chamber:
# Module chamber needs a value for either 'uri' or 'io'
# error creating module r1:
# Module r1 needs a value for either 'uri' or 'io'
# error creating module r2:
# Module r2 needs a value for either 'uri' or 'io'
# error creating module r3:
# Module r3 needs a value for either 'uri' or 'io'
# error creating module r4:
# Module r4 needs a value for either 'uri' or 'io'
# error creating module i1:
# Module i1 needs a value for either 'uri' or 'io'
# error creating module i2:
# Module i2 needs a value for either 'uri' or 'io'
# error creating module i3:
# Module i3 needs a value for either 'uri' or 'io'
# error creating module i4:
# Module i4 needs a value for either 'uri' or 'io'
# error creating module v1:
# Module v1 needs a value for either 'uri' or 'io'
# error creating module v2:
# Module v2 needs a value for either 'uri' or 'io'
# error creating module tv:
# Module tv needs a value for either 'uri' or 'io'
# error creating module ts:
# Module ts needs a value for either 'uri' or 'io'
Node('PPMS.psi.ch',
'PPMS at PSI',
interface=5000,
)
Mod('tt',
'frappy_psi.ppms.Temp',
'main temperature',
io='ppms',
)
Mod('mf',
'frappy_psi.ppms.Field',
target=Param(
min=-9,
max=9,
),
description='magnetic field',
io='ppms',
)
Mod('pos',
'frappy_psi.ppms.Position',
description='sample rotator',
io='ppms',
)
Mod('lev',
'frappy_psi.ppms.Level',
description='helium level',
io='ppms',
)
Mod('chamber',
'frappy_psi.ppms.Chamber',
description='chamber state',
io='ppms',
)
Mod('r1',
'frappy_psi.ppms.BridgeChannel',
description='resistivity channel 1',
no=1,
value=Param(
unit='Ohm',
),
io='ppms',
)
Mod('r2',
'frappy_psi.ppms.BridgeChannel',
description='resistivity channel 2',
no=2,
value=Param(
unit='Ohm',
),
io='ppms',
)
Mod('r3',
'frappy_psi.ppms.BridgeChannel',
description='resistivity channel 3',
no=3,
value=Param(
unit='Ohm',
),
io='ppms',
)
Mod('r4',
'frappy_psi.ppms.BridgeChannel',
description='resistivity channel 4',
no=4,
value=Param(
unit='Ohm',
),
io='ppms',
)
Mod('i1',
'frappy_psi.ppms.Channel',
description='current channel 1',
no=1,
value=Param(
unit='uA',
),
io='ppms',
)
Mod('i2',
'frappy_psi.ppms.Channel',
description='current channel 2',
no=2,
value=Param(
unit='uA',
),
io='ppms',
)
Mod('i3',
'frappy_psi.ppms.Channel',
description='current channel 3',
no=3,
value=Param(
unit='uA',
),
io='ppms',
)
Mod('i4',
'frappy_psi.ppms.Channel',
description='current channel 4',
no=4,
value=Param(
unit='uA',
),
io='ppms',
)
Mod('v1',
'frappy_psi.ppms.DriverChannel',
description='voltage channel 1',
no=1,
value=Param(
unit='V',
),
io='ppms',
)
Mod('v2',
'frappy_psi.ppms.DriverChannel',
description='voltage channel 2',
no=2,
value=Param(
unit='V',
),
io='ppms',
)
Mod('tv',
'frappy_psi.ppms.UserChannel',
description='VTI temperature',
enabled=1,
value=Param(
unit='K',
),
io='ppms',
)
Mod('ts',
'frappy_psi.ppms.UserChannel',
description='sample temperature',
enabled=1,
value=Param(
unit='K',
),
io='ppms',
)
Mod('ppms',
'frappy_psi.ppms.Main',
description='the main and poller module',
class_id='QD.MULTIVU.PPMS.1',
visibility='expert',
pollinterval=2.0,
)
+21
View File
@@ -0,0 +1,21 @@
Node('filtered.PPMS.psi.ch',
'filtered PPMS at PSI',
'tcp://5002',
)
Mod('secnode',
'frappy.proxy.SecNode',
'a SEC node',
uri = 'tcp://localhost:5000',
)
Mod('mf',
'frappy.proxy.Proxy',
'magnetic field',
remote_class = 'frappy_psi.ppms.Field',
io = 'secnode',
value = Param(),
target = Param(min=-0.1, max=0.1),
)
+6
View File
@@ -0,0 +1,6 @@
Node('router',
'router node',
'tcp://5002',
cls = 'protocol.router.Router',
node = 'localhost:5000',
)
+9
View File
@@ -0,0 +1,9 @@
Node('comm.sea.psi.ch',
'sea client (communication only)',
)
Mod('seaconn',
'frappy_psi.sea.SeaClient',
'a SEA connection',
visibility='expert',
)
+43
View File
@@ -0,0 +1,43 @@
description = """
3He system in Lab ...
"""
Node('mlz_seop',
description,
'tcp://10767',
)
Mod('cell',
'frappy_mlz.seop.Cell',
'interface module to the driver',
config_directory = '/home/jcns/daemon/config',
)
Mod('afp',
'frappy_mlz.seop.Afp',
'controls the afp flip of the cell',
cell = 'cell'
)
Mod('nmr',
'frappy_mlz.seop.Nmr',
'controls the ',
cell = 'cell'
)
fitparams = [
('amplitude', 'V'),
('T1', 's'),
('T2', 's'),
('b', ''),
('frequency', 'Hz'),
('phase', 'deg'),
]
for param, unit in fitparams:
Mod(f'nmr_{param.lower()}',
'frappy_mlz.seop.FitParam',
f'fittet parameter {param} of NMR',
cell = 'cell',
value = Param(unit=unit),
sigma = Param(unit=unit),
param = param,
)
+67
View File
@@ -0,0 +1,67 @@
Node('bridge.psi.ch',
'ac resistance bridge',
'tcp://5000',
)
Mod('io',
'frappy_psi.bridge.BridgeIO',
'communication to sim900',
uri='serial:///dev/cu.usbserial-14340',
)
Mod('res1',
'frappy_psi.bridge.Resistance',
'module communication',
io='io',
port=1,
)
Mod('res2',
'frappy_psi.bridge.Resistance',
'module communication',
io='io',
port=3,
)
Mod('res3',
'frappy_psi.bridge.Resistance',
'module communication',
io='io',
port=5,
)
Mod('phase1',
'frappy_psi.bridge.Phase',
'module communication',
resistance='res1',
)
Mod('phase2',
'frappy_psi.bridge.Phase',
'module communication',
resistance='res2',
)
Mod('phase3',
'frappy_psi.bridge.Phase',
'module communication',
resistance='res3',
)
Mod('dev1',
'frappy_psi.bridge.Deviation',
'module communication',
resistance='res1',
)
Mod('dev2',
'frappy_psi.bridge.Deviation',
'module communication',
resistance='res1',
)
Mod('dev3',
'frappy_psi.bridge.Deviation',
'module communication',
resistance='res3',
)
+18
View File
@@ -0,0 +1,18 @@
Node('sim.test.config',
'description of the simulation sec-node\n'
'\n'
'Testing simulation dummy setup.',
'tcp://10767',
)
Mod('sim',
'frappy.simulation.SimDrivable',
'simulation stuff',
extra_params = 'param3,param4,jitter,ramp',
param3 = Param(default=True, datatype={'type': 'bool'}, readonly=False),
jitter = 1,
ramp = 60,
value = 123,
target = 42,
)
+116
View File
@@ -0,0 +1,116 @@
Node('SIM_MLZ_amagnet(Garfield)',
'MLZ-Amagnet\n'
'\n'
'Water cooled magnet from ANTARES@MLZ.\n'
'\n'
' Use module to control the magnetic field.\n'
'Don\'t forget to select symmetry first (can be moved only at zero field!).\n'
'\n'
'Monitor T1..T4 (Coil temps), if they get to hot, field will ramp down!\n'
'\n'
'In case of Problems, contact the ANTARES people at MLZ.',
'tcp://10767',
visibility = 'expert',
foo = 'bar',
)
Mod('enable',
'frappy.simulation.SimWritable',
'Enables to Output of the Powersupply',
value = Param(datatype={"type":"enum", "members":{'On':1,'Off':0}}),
target = Param(datatype={"type":"enum", "members":{'On':1,'Off':0}}),
visibility = 'advanced',
)
Mod('polarity',
'frappy.simulation.SimWritable',
'polarity (+/-) switch\n'
'\n'
'there is an interlock in the plc:\n'
'if there is current, switching polarity is forbidden\n'
'if polarity is short, powersupply is disabled',
value = Param(datatype={"type":"enum", "members":{'+1':1,'0':0,'-1':-1}}),
target = Param(datatype={"type":"enum", "members":{'+1':1,'0':0,'-1':-1}}),
visibility = 'advanced',
)
Mod('symmetry',
'frappy.simulation.SimWritable',
'par/ser switch selecting (a)symmetric mode\n'
'\n'
'note: on the front panel symmetric is ser, asymmetric is par',
value = Param(
datatype={"type":"enum", "members":{'symmetric':1,'short':0, 'asymmetric':-1}},
default = 'symmetric'
),
target = Param(datatype={"type":"enum", "members":{'symmetric':1,'short':0, 'asymmetric':-1}}),
visibility = 'advanced',
)
for i in range(1,5):
Mod('T%d' % i,
'frappy.simulation.SimReadable',
'Temperature%d of the coils system' % i,
value = Param(default = 23.45, unit='degC'),
)
Mod('currentsource',
'frappy.simulation.SimDrivable',
'Device for the magnet power supply (current mode)',
value = 0,
#abslimits = (0,200),
#speed = 1,
#ramp = 60,
#precision = 0.02,
#current = 0,
#voltage = 10,
visibility = 'advanced',
extra_params = 'abslimits, speed, ramp, precision, current, voltage, window',
abslimits = Param(
default = (0, 200),
datatype = {"type":"limit", "members":{"type":"double", "min":0, "max":200, "unit":"A"}}
),
speed = Param(
default = 10,
datatype = {"type":"double", "min":0, "max":10, "unit":"A/s"}
),
ramp = Param(
default = 600,
datatype = {"type":"double", "min":0, "max":600, "unit":"A/min"}
),
precision = Param(
default = 0.1,
datatype = {"type":"double", "unit":"A"}
),
current = Param(
default = 0,
datatype = {"type":"double", "min":0, "max":200, "unit":"A"}
),
voltage = Param(
default = 0,
datatype = {"type":"double", "min":0, "max":10, "unit":"V"}
),
window = Param(
default = 10,
datatype = {"type":"double", "min":0, "max":120, "unit":"s"}
)
)
Mod('mf',
'frappy_mlz.amagnet.GarfieldMagnet',
'magnetic field module, handling polarity switching and stuff',
currentsource='currentsource',
enable='enable',
polswitch='polarity',
symmetry='symmetry',
target = Param(unit='T'),
value = Param(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=("magneticfield", 20),
visibility='user',
abslimits=(-0.4,0.4),
)
+88
View File
@@ -0,0 +1,88 @@
Node('cci3he1',
'[sim] cci3he box of MLZ Sample environment group\n'
'\n'
'Controls an 3He insert with an ls370 and an PLC controlling \n'
'the compressor and the valves of the gas handling.',
'tcp://10767',
)
Mod('T_cci3he1',
'frappy.simulation.SimDrivable',
'Main temperature control node of cci3he1.\n'
'\n'
'Controls the regulation loop of the ls370.',
value = Param(default=300, datatype={"type":"double","unit":"K"}),
target = Param(default=300, datatype={"type":"double", "min":0, "max":300, "unit":"K"}),
extra_params='ramp',
ramp = Param(default=60,
datatype={"type":"double","min":0,"max":600,"unit":"K/min"},
description='target ramping speed in K/min.',
),
meaning=["temperature_regulation",40]
)
Mod('T_cci3he1_A',
'frappy.simulation.SimReadable',
'3He pot temperature sensor. Also used for the regulation.',
visibility='expert',
value = Param(default=300, datatype={"type":"double","unit":"K"}),
meaning=["temperature",38]
)
Mod('T_cci3he1_B',
'frappy.simulation.SimReadable',
'(optional) sample temperature sensor close to sample.',
visibility='user',
value = Param(default=300, datatype={"type":"double","unit":"K"}),
meaning=["temperature",39]
)
Mod('cci3he1_p1',
'frappy.simulation.SimReadable',
'Pressure at turbo pump inlet.',
value = Param(default=2e-3, datatype={"type":"double","unit":"mbar"}),
visibility='expert',
)
Mod('cci3he1_p2',
'frappy.simulation.SimReadable',
'Pressure at turbo pump outlet.',
value = Param(default=9.87, datatype={"type":"double","unit":"mbar"}),
visibility='expert',
)
Mod('cci3he1_p3',
'frappy.simulation.SimReadable',
'Pressure at compressor inlet.',
value = Param(default=19.99, datatype={"type":"double","unit":"mbar"}),
visibility='expert',
)
Mod('cci3he1_p4',
'frappy.simulation.SimReadable',
'Pressure at compressor outlet.',
value = Param(default=999, datatype={"type":"double","unit":"mbar"}),
visibility='expert',
)
Mod('cci3he1_p5',
'frappy.simulation.SimReadable',
'Pressure in dump tank.',
value = Param(default=567, datatype={"type":"double","unit":"mbar"}),
visibility='expert',
)
Mod('cci3he1_p6',
'frappy.simulation.SimReadable',
'Pressure in the vacuum dewar (ivc).',
value = Param(default=1e-3, datatype={"type":"double","unit":"mbar"}),
visibility='expert',
)
Mod('cci3he1_flow',
'frappy.simulation.SimReadable',
'Gas Flow (condensing line).',
value = Param(default=12.34, datatype={"type":"double","unit":"mln/min"}),
visibility='expert',
)
# note: all valves and switches are missing: use VNC to control them
+107
View File
@@ -0,0 +1,107 @@
Node('ccidu1',
'[sim] ccidu box of MLZ Sample environment group\n'
'\n'
'Controls an 3He/4He dilution insert with an ls372 and an PLC controlling\n'
'the compressor and the valves of the gas handling.',
'tcp://10767',
)
Mod('T_ccidu1',
'frappy.simulation.SimDrivable',
'Main temperature control node of ccidu1.\n'
'\n'
'Controls the regulation loop of the ls372.',
value = Param(default=300, unit='K'),
target = Param(default=300, datatype={"type":"double", "min":0, "max":300, "unit":"K"}),
extra_params='ramp',
ramp = Param(default=60,
datatype={"type":"double", "min":0, "max":600, "unit":"K/min"},
description='target ramping speed in K/min.',
),
meaning=["temperature_regulation",40]
)
Mod('T_ccidu1_A',
'frappy.simulation.SimReadable',
'mixing chamber temperature sensor. Also used for the regulation.',
value = Param(default=300, datatype={"type":"double", "unit":"K"}),
visibility='expert',
meaning=["temperature",38],
)
Mod('T_ccidu1_B',
'frappy.simulation.SimReadable',
'(optional) sample temperature sensor close to sample.',
value = Param(default=300, datatype={"type":"double", "unit":"K"}),
visibility='user',
meaning=["temperature",39],
)
Mod('ccidu1_pstill',
'frappy.simulation.SimReadable',
'Pressure at the still/turbo pump inlet.',
value = Param(default=999, datatype={"type":"double", "unit":"mbar"}),
visibility='expert',
)
Mod('ccidu1_pinlet',
'frappy.simulation.SimReadable',
'Pressure at forepump inlet/turbo pump outlet.',
value = Param(default=999, datatype={"type":"double", "unit":"mbar"}),
visibility='expert',
)
Mod('ccidu1_poutlet',
'frappy.simulation.SimReadable',
'Pressure at forepump outlet/compressor inlet.',
value = Param(default=999, datatype={"type":"double", "unit":"mbar"}),
visibility='expert',
)
Mod('ccidu1_pkond',
'frappy.simulation.SimReadable',
'Pressure at condensing line/compressor outlet.',
value = Param(default=999, datatype={"type":"double", "unit":"mbar"}),
visibility='expert',
)
Mod('ccidu1_ptank',
'frappy.simulation.SimReadable',
'Pressure in dump tank.',
value = Param(default=999, datatype={"type":"double", "unit":"mbar"}),
visibility='expert',
)
Mod('ccidu1_pvac',
'frappy.simulation.SimReadable',
'Pressure in the vacuum dewar (ivc).',
value = Param(default=999, datatype={"type":"double", "unit":"mbar"}),
visibility='expert',
)
Mod('ccidu1_flow',
'frappy.simulation.SimReadable',
'Gas Flow (condensing line).',
value = Param(default=999, datatype={"type":"double", "unit":"mbar"}),
visibility='expert',
)
# note: all valves and switches are missing: use VNC to control them
Mod('ccidu1_V6',
'frappy.simulation.SimDrivable',
'Needle valve',
value = Param(default=99, datatype={"type":"double", "min":0, "max":100, "unit":"%%"}),
target = Param(min=0, max=100),
visibility='expert',
)
Mod('ccidu1_V3',
'frappy.simulation.SimWritable',
'Dump Valve',
value = Param(
default="OFF",
datatype={"type":"enum", "members":{"on": 1, "OFF":0}}
),
target = Param(datatype={"type":"enum", "members":{"on": 1, "OFF":0}}),
visibility='expert',
)
+177
View File
@@ -0,0 +1,177 @@
# pylint: skip-file
Node('ccr12',
'[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.',
'tcp://10767',
)
Mod('T_ccr12',
'frappy.simulation.SimDrivable',
'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 = Param(default=300,
datatype={"type":"double", "min":0, "max":600, "unit":"K"}),
target = Param(default=300,
datatype={"type":"double", "min":0, "max":600, "unit":"K"}),
extra_params='ramp,regulationmode,abslimits,userlimits',
ramp = Param(
default=60,
datatype={"type":"double", "min":0, "max":60, "unit":"K/min"},
description='target ramping speed in K/min.',
readonly=False,
),
regulationmode = Param(
default='both',
datatype={"type":"enum","members":{"stick":1,"tube":2,"both":3}},
description='regulate only stick, tube or select based upon the target value.',
readonly=False,
),
abslimits = Param(
default=[0,600],
datatype={"type":"limit","members":{"type":"double", "min":0,"max":600, "unit":"K"}},
description='currently active absolute limits for the setpoint. depend on the regulationmode parameter (both/stick->0..600, tube->0..300K).',
),
userlimits = Param(
default=[0,300],
datatype={"type":"limit","members":{"type":"double", "min":0,"max":600, "unit":"K"}},
description='current user set limits for the setpoint. must be inside abslimits.',
readonly=False,
),
meaning=["temperature_regulation", 20],
)
Mod('T_ccr12_A',
'frappy.simulation.SimReadable',
'(optional) Sample temperature sensor.',
value = Param(default=300,
datatype={"type":"double", "min":0, "unit":"K"}),
visibility='expert',
meaning=["temperature", 9],
)
Mod('T_ccr12_B',
'frappy.simulation.SimReadable',
'(regulation) temperature sensor on stick.',
value = Param(default=300, datatype={"type":"double", "min":0, "unit":"K"}),
visibility='expert',
meaning=["temperature", 10],
)
Mod('T_ccr12_C',
'frappy.simulation.SimReadable',
'Temperature at the coldhead.',
value = Param(default=70, datatype={"type":"double", "min":0, "unit":"K"}),
visibility='expert',
meaning=["temperature", 1],
)
Mod('T_ccr12_D',
'frappy.simulation.SimReadable',
'(regulation) temperature at coupling to stick.',
value = Param(default=80, datatype={"type":"double", "min":0, "unit":"K"}),
visibility='expert',
meaning=["temperature", 2],
)
Mod('ccr12_pressure_regulation',
'frappy.simulation.SimReadable',
'Simple two-point presssure regulation. the mode parameter selects the readout on which to regulate, or, \'none\' for no regulation.',
value = Param(default = 1e-5,
datatype={"type":"double", "min":0, "max":1000, "unit":"mbar"}),
extra_params='switchpoints, mode',
mode = Param(
default='none',
datatype={"type":"enum", "members":{"none":0,"p1":1,"p2":2}},
description='Select pressure sensor to regulate on, or \'none\' to disable regulation.',
),
switchpoints = Param(
default={'lower':1e-6,'upper':1e-3},
# struct is more explicit, but ugly to read....
datatype={"type":"struct", "members":{"lower":{"type":"double", "unit":"mbar"},"upper":{"type":"double", "unit":"mbar"}}, "optional":["upper","lower"]},
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.',
readonly=True,
),
visibility='user',
)
Mod('ccr12_compressor',
'frappy.simulation.SimDrivable',
'Switches the compressor for the cooling stage on or off.\n'
'\n'
'Note: This should always be on, except for fast heatup for sample change.',
value = Param(default='off',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
target = Param(datatype={"type":"enum", "members":{'off':0,'on':1}}),
visibility='user',
)
Mod('ccr12_gas_switch',
'frappy.simulation.SimWritable',
'Switches the gas inlet on or off.\n'
'\n'
'note: in reality this switches itself off after 15min.\n'
'note: in reality this is interlocked with ccr12_vacuum_switch, only one can be on!\n'
'note: in this simulation this module is isolated.',
value = Param(default='off',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
target = Param(default='off',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
)
Mod('ccr12_vacuum_switch',
'frappy.simulation.SimWritable',
'Switches the vacuum pumping valve on or off.\n'
'\n'
'note: in reality this is interlocked with ccr12_gas_switch, only one can be on!\n'
'note: in this simulation this module is isolated.',
value = Param(default='off',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
target = Param(default='off',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
)
Mod('ccr12_p1',
'frappy.simulation.SimReadable',
'Default pressure Sensor, linear scale 0..1000 mbar\n'
'\n'
'Good candidate for a \'Sensor\' Interface class!',
value = Param(default=999, unit='mbar'),
extra_params='curve, userlimits',
curve = Param(
default='TTR100',
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}},
description='Calibration curve for pressure sensor',
),
userlimits = Param(
default=[1, 100],
datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}},
description='current user set limits for the pressure regulation.',
readonly=False,
),
)
Mod('ccr12_p2',
'frappy.simulation.SimReadable',
'Auxillary pressure Sensor.',
value = Param(default=1e-6, unit='mbar'),
extra_params='curve,userlimits',
curve = Param(
default='PTR90',
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}},
description='Calibration curve for pressure sensor',
),
userlimits = Param(
default=[1e-6, 1e-3],
datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}},
description='current user set limits for the pressure regulation.',
readonly=False,
),
pollinterval = Param(visibility='expert'),
)
+49
View File
@@ -0,0 +1,49 @@
Node('simulation',
'Auto-generated configuration by frappy.',
'tcp://10767',
)
Mod('analoginput',
'frappy_mlz.entangle.AnalogInput',
'from test/sim/analoginput',
tangodevice = 'tango://localhost:10000/test/sim/analoginput',
)
Mod('sensor',
'frappy_mlz.entangle.Sensor',
'from test/sim/sensor',
tangodevice = 'tango://localhost:10000/test/sim/sensor',
)
Mod('analogoutput',
'frappy_mlz.entangle.AnalogOutput',
'from test/sim/analogoutput',
tangodevice = 'tango://localhost:10000/test/sim/analogoutput',
)
Mod('actuator',
'frappy_mlz.entangle.Actuator',
'from test/sim/actuator',
tangodevice = 'tango://localhost:10000/test/sim/actuator',
)
Mod('motor',
'frappy_mlz.entangle.Motor',
'from test/sim/motor',
tangodevice = 'tango://localhost:10000/test/sim/motor',
)
Mod('powersupply',
'frappy_mlz.entangle.PowerSupply',
'from test/sim/powersupply',
tangodevice = 'tango://localhost:10000/test/sim/powersupply',
)
Mod('digitalinput',
'frappy_mlz.entangle.DigitalInput',
'from test/sim/digitalinput',
tangodevice = 'tango://localhost:10000/test/sim/digitalinput',
)
Mod('digitaloutput',
'frappy_mlz.entangle.DigitalOutput',
'from test/sim/digitaloutput',
tangodevice = 'tango://localhost:10000/test/sim/digitaloutput',
)
Mod('stringio',
'frappy_mlz.entangle.StringIO',
'from test/sim/stringio',
tangodevice = 'tango://localhost:10000/test/sim/stringio',
)
+30
View File
@@ -0,0 +1,30 @@
Node('htf02',
'[sim] htf02 box of MLZ Sample environment group\n'
'\n'
'Controls an High Temperature Furnace with an eurotherm controller and an PLC checking the cooing water.',
'tcp://10767',
)
Mod('T_htf02',
'frappy.simulation.SimDrivable',
'Main temperature control node of htf02.\n'
'\n'
'Controls the regulation loop of the Eurotherm.',
value = Param(default=300,
datatype={"type":"double", "min":0, "unit":"degC"}),
target = Param(default=300,
datatype={"type":"double", "min":0, "max": 2000, "unit":"degC"}),
extra_params='ramp',
ramp = Param(default=60,
datatype={"type":"double", "min":0, "max": 600, "unit":"K/min"},
description='target ramping speed in K/min.',
readonly=False,
),
meaning=["temperature", 10],
)
Mod('htf02_p',
'frappy.simulation.SimReadable',
'Pressure Sensor at sample space (ivc).',
value = Param(default=989, datatype={"type":"double", "min":0, "unit":"mbar"}),
)
+82
View File
@@ -0,0 +1,82 @@
Node('stressihtf2_v2',
'[sim] Stressihtf2 box of MLZ Sample environment group\n'
'\n'
'Controls an High Temperature Furnace with an Eurotherm and an PLC controlling some valves and checking cooling water.',
'tcp://10767',
)
Mod('T',
'frappy.simulation.SimDrivable',
'Main temperature control node of Stressihtf2.',
value = Param(default=20,
datatype={"type":"double", "min":0, "unit":"degC"}),
target = Param(default=20,
datatype={"type":"double", "min":0, "max":2000, "unit":"degC"}),
extra_params='ramp,regulationmode,abslimits,userlimits',
ramp = Param(
default=60,
datatype={"type":"double", "min":0, "max":600, "unit":"K/min"},
description='target ramping speed in K/min.',
),
abslimits = Param(
default=[0,2000],
datatype={"type":"limit", "members":{"type":"double", "min":0, "max":2000, "unit":"degC"}},
description='currently active absolute limits for the setpoint. depend \
on the regulationmode parameter (both/stick->0..600, tube->0..300K).',
),
userlimits = Param(
default=[0,300],
datatype={"type":"limit", "members":{"type":"double", "min":0, "max":2000, "unit":"degC"}},
description='current user set limits for the setpoint. must be inside abslimits.',
readonly=False,
),
meaning=['temperature_regulation', 10],
)
Mod('T_sample',
'frappy.simulation.SimReadable',
'(optional) Sample temperature sensor.',
value = Param(default=300,
datatype={"type":"double", "min":0, "unit":"degC"}),
visibility='expert',
meaning=["temperature", 9],
)
Mod('N2',
'frappy.simulation.SimWritable',
'Switches the N2 gas inlet on or off.',
value = Param(default='off',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
target = Param(default='off',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
visibility='expert',
)
Mod('He',
'frappy.simulation.SimWritable',
'Switches the He gas inlet on or off.',
value = Param(default='off',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
target = Param(default='off',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
visibility='expert',
)
Mod('lamps',
'frappy.simulation.SimWritable',
'Switches the heating lamps on or off.',
value = Param(default='on',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
target = Param(default='on',
datatype={"type":"enum", "members":{'off':0,'on':1}}),
visibility='expert',
)
Mod('water_ok',
'frappy.simulation.SimReadable',
'Readout of the cooling water state.',
value = Param(default='ok',
datatype={"type":"enum", "members":{'failed':0,'ok':1}}),
visibility='expert',
)
+61
View File
@@ -0,0 +1,61 @@
Node('uniax_sim.psi.ch',
'[sim] uniaxial pressure device',
interface='tcp://5000',
)
Mod('force',
'frappy_psi.uniax.Uniax',
'uniax driver',
motor='drv',
transducer='transducer',
)
Mod('drv',
'frappy.simulation.SimDrivable',
'simulated motor',
extra_params=['speed', 'safe_current', 'move_limit', 'maxcurrent', 'tolerance'],
value=Param(
default=0.0,
unit='deg',
),
speed=Param(
readonly=False,
default=40.0,
),
interval=0.11,
tolerance=Param(
default=0.9,
),
)
Mod('transducer',
'frappy_psi.simdpm.DPM3',
'simulated force',
motor='drv',
value=Param(
unit='N',
),
)
Mod('res',
'frappy.simulation.SimReadable',
'raw temperature sensor on the stick',
extra_params=['jitter'],
jitter=Param(
default=1.0,
),
value=Param(
default=99.0,
unit='Ohm',
),
)
Mod('T',
'frappy_psi.softcal.Sensor',
'temperature sensor, soft calibration',
rawsensor='res',
calib='X132254',
value=Param(
unit='K',
),
)
+20
View File
@@ -0,0 +1,20 @@
Node('softcal.demo.example',
'convert r2 from PPMS to a temperature',
'tcp://5001',
)
Mod('r2',
'frappy.core.Proxy',
'convert r2 from PPMS to a temperature',
remote_class = 'frappy.core.Readable',
uri = 'tcp://localhost:5000',
export = False,
)
Mod('T2',
'frappy_psi.softcal.Sensor',
'',
value = Param(unit = 'K'),
rawsensor = 'r2',
calib = 'X131346',
)
+96
View File
@@ -0,0 +1,96 @@
Node('stressihtf2',
'Stressihtf2 box of MLZ Sample environment group\n'
'\n'
'Controls an High Temperature Furnace with an Eurotherm and an PLC controlling some valves and checking cooling water.',
'localhost:10767',
meaning={'T_regulation':{'T':100}, 'T_sample':{'T_sample':100}},
)
Mod('T',
'frappy_mlz.entangle.TemperatureController',
'Main temperature control node of Stressihtf2.',
tangodevice='tango://localhost:10000/box/eurotherm/ctrl',
value = Param(unit='degC'),
target = Param(datatype=["double", 0, 2000]),
ramp = Param(
default=60,
datatype=["double",0,9999],
unit='K/min',
description='target ramping speed in K/min.',
),
abslimits = Param(
default=[0,2000],
datatype=["tuple",[["double"],["double"]]],
unit='degC',
description='currently active absolute limits for the setpoint.\
depend on the regulationmode parameter (both/stick->0..600, tube->0..300K).',
readonly=True,
),
userlimits = Param(
default=[0,300],
datatype=["tuple",[["double"],["double"]]],
unit='degC',
description='current user set limits for the setpoint. must be inside abslimits.',
),
heateroutput = Param(
default=0,
datatype=["double",0,100],
unit='%%',
description='output to the heater',
),
setpoint = 0,
p = 1,
i = 0,
d = 0,
pid = [1,0,0],
speed = 0,
)
Mod('T_sample_a',
'frappy_mlz.entangle.Sensor',
'Regulation temperature sensor.',
tangodevice='tango://localhost:10000/box/eurotherm/sensora',
value = Param(unit='degC'),
visibility='user',
)
Mod('T_sample_b',
'frappy_mlz.entangle.Sensor',
'(optional) Sample temperature sensor.',
tangodevice='tango://localhost:10000/box/eurotherm/sensorb',
value = Param(unit='degC'),
visibility='expert',
)
Mod('N2',
'frappy_mlz.entangle.NamedDigitalOutput',
'Switches the N2 gas inlet on or off.',
tangodevice='tango://localhost:10000/box/plc/_gas1',
mapping={'off':0,'on':1},
visibility='expert',
)
Mod('He',
'frappy_mlz.entangle.NamedDigitalOutput',
'Switches the He gas inlet on or off.',
tangodevice='tango://localhost:10000/box/plc/_gas2',
mapping={'off':0,'on':1},
visibility='expert',
)
Mod('lamps',
'frappy_mlz.entangle.NamedDigitalOutput',
'Switches the heating lamps on or off.',
tangodevice='tango://localhost:10000/box/plc/_onoff',
mapping={'off':0,'on':1},
visibility='expert',
)
Mod('water_ok',
'frappy_mlz.entangle.NamedDigitalInput',
'Readout of the cooling water state.',
tangodevice='tango://localhost:10000/box/plc/_waterok',
mapping={'failed':0,'ok':1},
visibility='expert',
)
+74
View File
@@ -0,0 +1,74 @@
Node('test.config.frappy.demo',
'''short description of the testing sec-node
This description for the node can be as long as you need if you use a multiline string.
Very long!
The needed fields are Equipment id (1st argument), description (this)
and the main interface of the node (3rd arg)
''',
'tcp://10768',
)
Mod('attachtest',
'frappy_demo.test.WithAtt',
'test attached',
att = 'LN2',
)
Mod('pinata',
'frappy_demo.test.Pin',
'scan test',
)
Mod('recursive',
'frappy_demo.test.RecPin',
'scan test',
)
Mod('LN2',
'frappy_demo.test.LN2',
'random value between 0..100%',
value = Param(default = 0, unit = '%'),
)
Mod('heater',
'frappy_demo.test.Heater',
'some heater',
maxheaterpower = 10,
)
Mod('T1',
'frappy_demo.test.Temp',
'some temperature',
sensor = 'X34598T7',
)
Mod('T2',
'frappy_demo.test.Temp',
'some temperature',
sensor = 'X34598T8',
)
Mod('T3',
'frappy_demo.test.Temp',
'some temperature',
sensor = 'X34598T9',
)
Mod('Lower',
'frappy_demo.test.Lower',
'something else',
)
Mod('Decision',
'frappy_demo.test.Mapped',
'Random value from configured property choices. Config accepts anything ' \
'that can be converted to a list',
choices = ['Yes', 'Maybe', 'No'],
)
Mod('c',
'frappy_demo.test.Commands',
'a command test',
)
+17
View File
@@ -0,0 +1,17 @@
Node('PPMS.psi.ch',
'PPMS at PSI',
interface='tcp://5000',
)
Mod('mf',
'frappy_psi.ppms.Field',
description='magnetic field',
io='ppms',
)
Mod('ppms',
'frappy_psi.ppms.Main',
description='the main and poller module',
class_id='QD.MULTIVU.PPMS.1',
pollinterval=2.0,
)
+4
View File
@@ -0,0 +1,4 @@
Mod('m',
'frappy_psi.testcmd.TestCmd',
'module for testing commands',
)
+24
View File
@@ -0,0 +1,24 @@
Node('trinamic_test.psi.ch',
'trinamic motor test',
interface='tcp://5000',
)
Mod('drv_io',
'frappy.core.BytesIO',
'',
uri='serial:///dev/tty.usbserial?baudrate=57600',
)
Mod('drv',
'frappy_psi.trinamic.Motor',
'trinamic motor test',
io='drv_io',
standby_current=0.1,
maxcurrent=1.4,
acceleration=150.0,
move_limit=360.0,
speed=40.0,
encoder_tolerance=3.6,
free_wheeling=0.1,
power_down_delay=0.1,
)