Add sct driver for New Zealand magnet
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# 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;
|
||||
|
||||
group = {
|
||||
priv = user;
|
||||
type = float;
|
||||
property 'units' = 'G';
|
||||
control = true;
|
||||
data = true;
|
||||
nxsave = true;
|
||||
|
||||
var 'value';
|
||||
var setpoint = {
|
||||
writeable = 1;
|
||||
write_function = setGauss;
|
||||
lowerlimit = 0; upperlimit = 500.0; tolerance = 10;
|
||||
property settle_time = 5;
|
||||
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}
|
||||
%%}
|
||||
};
|
||||
Reference in New Issue
Block a user