Node('stressihtf2',
     '''[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.''',
     interface='tcp://10767',
)

Mod('T_stressihtf2',
    'frappy.simulation.SimDrivable',
    description='Main temperature control node of Stressihtf2.',
    value=Param(
        datatype=FloatRange(unit='degC', minval=0.0),
        default=20.0,
    ),
    target=Param(
        datatype=FloatRange(unit='degC', minval=0.0, maxval=2000.0),
        default=20.0,
    ),
    extra_params=['ramp', 'regulationmode', 'abslimits', 'userlimits'],
    ramp=Param(
        datatype=FloatRange(unit='K/min', minval=0.0, maxval=600.0),
        description='target ramping speed in K/min.',
        default=60.0,
    ),
    abslimits=Param(
        datatype=TupleOf(FloatRange(unit='degC', minval=0.0, maxval=2000.0), FloatRange(unit='degC', minval=0.0, maxval=2000.0)),
        default=(0.0, 2000.0),
        description='currently active absolute limits for the setpoint. depend on the regulationmode parameter (both/stick->0..600, tube->0..300K).',
    ),
    userlimits=Param(
        datatype=TupleOf(FloatRange(unit='degC', minval=0.0, maxval=2000.0), FloatRange(unit='degC', minval=0.0, maxval=2000.0)),
        default=(0.0, 300.0),
        description='current user set limits for the setpoint. must be inside abslimits.',
        readonly=False,
    ),
    meaning=('temperature_regulation', 10),
)

Mod('T_stressihtf2_sample',
    'frappy.simulation.SimReadable',
    description='(optional) Sample temperature sensor.',
    visibility='expert',
    value=Param(
        default=300.0,
        datatype=FloatRange(unit='degC', minval=0.0),
    ),
    meaning=('temperature', 9),
)

Mod('stressihtf2_n2',
    'frappy.simulation.SimWritable',
    description='Switches the N2 gas inlet on or off.',
    visibility='expert',
    value=Param(
        default='off',
        datatype=EnumType('', off=0, on=1),
    ),
    target=Param(
        datatype=EnumType('', off=0, on=1),
        default='off',
    ),
)

Mod('stressihtf2_he',
    'frappy.simulation.SimWritable',
    description='Switches the He gas inlet on or off.',
    visibility='expert',
    value=Param(
        default='off',
        datatype=EnumType('', off=0, on=1),
    ),
    target=Param(
        datatype=EnumType('', off=0, on=1),
        default='off',
    ),
)

Mod('stressihtf2_lamps',
    'frappy.simulation.SimWritable',
    description='Switches the heating lamps on or off.',
    visibility='expert',
    value=Param(
        default='on',
        datatype=EnumType('', off=0, on=1),
    ),
    target=Param(
        datatype=EnumType('', off=0, on=1),
        default='on',
    ),
)

Mod('stressihtf2_water_ok',
    'frappy.simulation.SimReadable',
    description='Readout of the cooling water state.',
    visibility='expert',
    value=Param(
        default='ok',
        datatype=EnumType('', failed=0, ok=1),
    ),
)
