# vim: ts=8 sts=2 sw=2 expandtab autoindent smartindent nocindent driver mercury_scpi = { vendor = oxford; device = mercury; protocol = std; class = environment; simulation_group = environment_simulation; add_args = '{id 99} {permlink LT} {tol 1} {valve_tol 2}' make_args = 'id permlink tol valve_tol' group Level = { priv = user; type = float; readable = 15; var Nitrogen = { read_command = 'READ:DEV:DB5.L1:LVL:SIG:NIT:LEV'; permlink = '#0.S05'; } var Helium = { read_command = 'READ:DEV:DB5.L1:LVL:SIG:HEL:LEV'; permlink = '#0.S06'; } } group Loop1 = { priv = user; type = float; readable = 5; var sensor = { readable = 1; read_command = 'READ:DEV:MB1.T1:TEMP:SIG:TEMP'; permlink = '#1.S01'; } var nick = { type=text; readable = 15; read_command = 'READ:DEV:MB1.T1:TEMP:NICK'; read_function = rdText; } var power = { read_command = 'READ:DEV:MB0.H1:HTR:SIG:POWR'; } var setpoint = { read_command = 'READ:DEV:MB1.T1:TEMP:LOOP:TSET'; driveable = Loop1/sensor; lowerlimit = 0; upperlimit = 333; tolerance = '${tol}'; property settle_time = 15; writeable = 1; write_function = setPoint; write_command = 'SET:DEV:MB1.T1:TEMP:LOOP:TSET:'; permlink = '#1.SP01'; } } group Loop2 = { priv = user; type = float; readable = 5; var sensor = { readable = 1; read_command = 'READ:DEV:DB6.T1:TEMP:SIG:TEMP'; permlink = 'T.S02'; } var nick = { type=text; readable = 15; read_command = 'READ:DEV:DB6.T1:TEMP:NICK'; read_function = rdText; } var power = { read_command = 'READ:DEV:DB1.H1:HTR:SIG:POWR'; } var setpoint = { read_command = 'READ:DEV:DB6.T1:TEMP:LOOP:TSET'; driveable = Loop2/sensor; lowerlimit = 0; upperlimit = 333; tolerance = '${tol}'; property settle_time = 15; writeable = 1; write_function = setPoint; write_command = 'SET:DEV:DB6.T1:TEMP:LOOP:TSET:'; permlink = 'T.SP02'; } } group Loop3 = { priv = user; type = float; readable = 5; var sensor = { readable = 1; read_command = 'READ:DEV:DB7.T1:TEMP:SIG:TEMP'; permlink = 'T.S03'; } var nick = { type=text; readable = 15; read_command = 'READ:DEV:DB7.T1:TEMP:NICK'; read_function = rdText; } var power = { read_command = 'READ:DEV:DB2.H1:HTR:SIG:POWR'; } var setpoint = { read_command = 'READ:DEV:DB7.T1:TEMP:LOOP:TSET'; driveable = Loop3/sensor; lowerlimit = 0; upperlimit = 333; tolerance = '${tol}'; property settle_time = 15; writeable = 1; write_function = setPoint; write_command = 'SET:DEV:DB7.T1:TEMP:LOOP:TSET:'; permlink = 'T.SP03'; } } group Loop4 = { priv = user; type = float; readable = 5; var sensor = { readable = 1; read_command = 'READ:DEV:DB8.T1:TEMP:SIG:TEMP'; permlink = 'T.S04'; } var nick = { type=text; readable = 15; read_command = 'READ:DEV:DB8.T1:TEMP:NICK'; read_function = rdText; } var power = { read_command = 'READ:DEV:DB3.H1:HTR:SIG:POWR'; } var setpoint = { read_command = 'READ:DEV:DB8.T1:TEMP:LOOP:TSET'; driveable = Loop4/sensor; lowerlimit = 0; upperlimit = 333; tolerance = '${tol}'; property settle_time = 15; writeable = 1; write_function = setPoint; write_command = 'SET:DEV:DB8.T1:TEMP:LOOP:TSET:'; permlink = 'T.SP04'; } } group Valve = { priv = user; type = float; var sensor = { readable = 5; read_command = 'READ:DEV:DB4.G1:AUX:SIG:OPEN'; permlink = 'G.S07'; } var setpoint = { driveable = Valve/sensor; lowerlimit = 0; upperlimit = 100; tolerance = '${valve_tol}'; property settle_time = 30; writeable = 1; write_function = setValve; write_command = 'SET:DEV:DB4.G1:AUX:SIG:OPEN:'; permlink = 'G.SP07'; } } code read_function rdValue = { @ scan [lindex [split "$data" ":"] end] "%g" data } code read_function rdText = { @ scan [lindex [split "$data" ":"] end] "%s" data } code Write_function setPoint = { } code Write_function setValve = { @ if { [hpropexists [sct] pid_bias] } { @ set par [expr ${par} + [hgetpropval [sct] pid_bias]] @ set cmd "${cmd_str}${par}" @ } @ sct update [sct target] } }