# Script Context Driver for the Twickenham Scientific Instruments Superconducting Magnet Controller driver tsi_smc = { vendor = Twickenham_Scientific_Instruments; device = Superconducting_Magnet_Controller; protocol = std; class = environment; simulation_group = environment_simulation; add_args = '{id 1}'; make_args = 'id'; group = { priv = user; type = float; property 'units' = 'G'; control = true; data = true; nxsave = true; group_property 'data' = true group_property 'control' = true var 'value' = {permlink = 'B.S01'; mutable = true; property klass = 'NXsensor'}; var setpoint = { permlink = 'B.SP01'; writeable = 1; write_function = setGauss; lowerlimit = 0; upperlimit = 500.0; tolerance = 10; property settle_time = 5; mutable = true; property klass = 'sensor'; driveable = 'value'; }; }; group a = { readable = 1; priv = user; type = text; control = false; data = false; var G = { read_command = "G"; property offset = 16.116; }; var J = { read_command = "J"; }; var K = { read_command = "K"; }; var N = { read_command = "N"; }; var O = { read_command = "O"; }; var S = { read_command = "S"; }; }; group b = { writeable = 1; priv = user; type = text; var Rate = { type = float; write_command = "A"; }; var Lower = { type = float; write_command = "L"; lowerlimit = 0; upperlimit = 2; property 'units' = "A"; }; var Ramp = { type = int; write_command = "R"; allowed = "0,1"; lowerlimit = 0; upperlimit = 1; }; var Pause = { type = int; write_command = "P"; allowed = "0,1"; lowerlimit = 0; upperlimit = 1; }; }; code rdValue = {%% if {[basename [sct]] == "G"} { set value [expr {[string range ${data} 1 8]}] set value [expr {${value} * 2.5177E+02 - 1.6116E+01}] if {[hpropexists [sct] offset]} { set value [expr {${value} + [hgetpropval [sct] offset]}] } if {${value} != [hgetpropval ${tc_root}/value oldval]} { debug_log ${tc_root} 1 "${tc_root}/value changed to new:${value}, from old:[hgetpropval ${tc_root}/value oldval]" hupdate ${tc_root}/value ${value} hsetprop ${tc_root}/value oldval ${value} hsetprop ${tc_root}/value readtime [sct utime] } } if {[basename [sct]] == "S"} { set value [expr {[string range ${data} 11 17]}] set value [expr {${value} * 2.5177E+02 - 1.6116E+01}] if {${value} != [hgetpropval ${tc_root}/value oldval]} { debug_log ${tc_root} 1 "${tc_root}/setpoint changed to new:${value}, from old:[hgetpropval ${tc_root}/setpoint oldval]" hupdate ${tc_root}/setpoint ${value} hsetprop ${tc_root}/setpoint oldval ${value} hsetprop ${tc_root}/setpoint readtime [sct utime] } } %%} code setGauss = {%% set amps [expr {(${par} + 1.6116E+01) / 2.5177E+02}] hset ${tc_root}/b/Lower ${amps} %%} };