[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. [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.datatype={"type":"double", "min":0, "max":600, "unit":"K"} value.default=300 target.datatype={"type":"double", "min":0, "max":600, "unit":"K"} target.default=300 .extra_params=ramp,regulationmode,abslimits,userlimits ramp.datatype={"type":"double", "min":0, "max":60, "unit":"K/min"} ramp.description=target ramping speed in K/min. ramp.default=60 ramp.readonly=False regulationmode.datatype={"type":"enum","members":{"stick":1,"tube":2,"both":3}} regulationmode.default='both' regulationmode.description=regulate only stick, tube or select based upon the target value. regulationmode.readonly=False abslimits.datatype={"type":"limit","members":{"type":"double", "min":0,"max":600, "unit":"K"}} 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). userlimits.datatype={"type":"limit","members":{"type":"double", "min":0,"max":600, "unit":"K"}} userlimits.default=[0,300] userlimits.description=current user set limits for the setpoint. must be inside abslimits. userlimits.readonly=False .meaning=["temperature_regulation", 20] [module T_ccr12_A] class=secop.simulation.SimReadable .description=(optional) Sample temperature sensor. .visibility=expert value.datatype={"type":"double", "min":0, "unit":"K"} value.default=300 .meaning=["temperature", 9] [module T_ccr12_B] class=secop.simulation.SimReadable .description=(regulation) temperature sensor on stick. .visibility=expert value.datatype={"type":"double", "min":0, "unit":"K"} value.default=300 .meaning=["temperature", 10] [module T_ccr12_C] class=secop.simulation.SimReadable .description=Temperature at the coldhead. .visibility=expert value.datatype={"type":"double", "min":0, "unit":"K"} value.default=70 .meaning=["temperature", 1] [module T_ccr12_D] class=secop.simulation.SimReadable .description=(regulation) temperature at coupling to stick. .visibility=expert value.datatype={"type":"double", "min":0, "unit":"K"} value.default=80 .meaning=["temperature", 2] [module ccr12_pressure_regulation] class=secop.simulation.SimReadable .description=Simple two-point presssure regulation. the mode parameter selects the readout on which to regulate, or 'none' for no regulation. .visibility=user .extra_params=switchpoints, mode mode.datatype={"type":"enum", "members":{"none":0,"p1":1,"p2":2}} mode.description=Select pressure sensor to regulate on, or 'none' to disable regulation. mode.default='none' # struct is more explicit, but ugly to read.... switchpoints.datatype={"type":"struct", "members":{"lower":{"type":"double", "unit":"mbar"},"upper":{"type":"double", "unit":"mbar"}}, "optional":["upper","lower"]} 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.readonly=True value.datatype={"type":"double", "min":0, "max":1000, "unit":"mbar"} value.default = 1e-5 [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.datatype={"type":"enum", "members":{'off':0,'on':1}} value.default='off' target.datatype={"type":"enum", "members":{'off':0,'on':1}} [module ccr12_gas_switch] class=secop.simulation.SimWritable .description=Switches the gas inlet on or off. . note: in reality this switches itself off after 15min. note: in reality this is interlocked with ccr12_vacuum_switch, only one can be on! note: in this simulation this module is isolated. value.datatype={"type":"enum", "members":{'off':0,'on':1}} value.default='off' target.datatype={"type":"enum", "members":{'off':0,'on':1}} target.default='off' [module ccr12_vacuum_switch] class=secop.simulation.SimWritable .description=Switches the vacuum pumping valve on or off. . note: in reality this is interlocked with ccr12_gas_switch, only one can be on! note: in this simulation this module is isolated. value.datatype={"type":"enum", "members":{'off':0,'on':1}} value.default='off' target.datatype={"type":"enum", "members":{'off':0,'on':1}} target.default='off' [module ccr12_p1] class=secop.simulation.SimReadable .description=Default pressure Sensor, linear scale 0..1000 mbar . Good candidate for a 'Sensor' Interface class! value.default=999 value.unit=mbar .extra_params=curve, userlimits curve.datatype={"type":"enum", "members":{'0..10V':0,'default':1,'0..9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}} curve.description=Calibration curve for pressure sensor curve.default='TTR100' userlimits.datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}} userlimits.default=[1, 100] userlimits.description=current user set limits for the pressure regulation. userlimits.readonly=False [module ccr12_p2] class=secop.simulation.SimReadable .description=Auxillary pressure Sensor. value.default=1e-6 value.unit=mbar .extra_params=curve,userlimits curve.datatype={"type":"enum", "members":{'0..10V':0,'default':1,'0..9V':2,'DI200':3,'DI2000':4,'TTR100':7,'PTR90':8,'PTR225/PTR237':9,'ITR90':10,'ITR100 curve D':11, 'ITR100 curve 2':12, 'ITR100 curve 3':13,'ITR100 curve 4':14,'ITR100 curve 5':15, 'ITR100 curve 6':16, 'ITR100 curve 7':17, 'ITR100 curve 8':18, 'ITR100 curve 9':19, 'ITR100 curve A':20,'CMR361':21, 'CMR362':22, 'CMR363':23, 'CMR364':24, 'CMR365':25}} curve.description=Calibration curve for pressure sensor curve.default='PTR90' userlimits.datatype={"type":"limit","members":{"type":"double", "min":0,"max":1000, "unit":"mbar"}} userlimits.default=[1e-6, 1e-3] userlimits.description=current user set limits for the pressure regulation. userlimits.readonly=False pollinterval.visibility='expert'