Restructure knauer_pump.sct
This commit is contained in:
@ -6,7 +6,7 @@ driver knauer_pump = {
|
||||
debug_threshold = 0;
|
||||
vendor = knauer; device = pump40p; protocol = knauer_ap;
|
||||
class = environment;
|
||||
simulation_group = environment_simulation
|
||||
simulation_group = environment_simulation;
|
||||
#
|
||||
group dummy = {
|
||||
type = text; readable = 1; data = false; control = false; nxsave = false;
|
||||
@ -14,53 +14,68 @@ driver knauer_pump = {
|
||||
var glp = { read_command = 'GLP?'; read_function = read_glp; }
|
||||
}
|
||||
|
||||
group volume = {
|
||||
type = float;
|
||||
property 'units' = 'mL';
|
||||
var sensor = {
|
||||
group pump = {
|
||||
var state = {
|
||||
type = text;
|
||||
readable = 1;
|
||||
read_command = ' ';
|
||||
fetch_function = state_fetch;
|
||||
}
|
||||
var status = {
|
||||
type = text;
|
||||
readable = 1;
|
||||
read_command = ' ';
|
||||
fetch_function = status_fetch;
|
||||
}
|
||||
var volume_pv = {
|
||||
type = float;
|
||||
readable = 1;
|
||||
read_command = ' ';
|
||||
fetch_function = volume_fetch;
|
||||
#checkrange_function = volume_reject;
|
||||
#checkrange_function = volume_reject;
|
||||
property 'units' = 'mL';
|
||||
}
|
||||
var setpoint = {
|
||||
var volume_sp = {
|
||||
type = float;
|
||||
writeable = 1;
|
||||
write_command = ' ';
|
||||
write_function = volume_write;
|
||||
driveable = volume/sensor;
|
||||
checkstatus_function = volume_checkstatus;
|
||||
driveable = pump/volume_pv
|
||||
checkstatus_function = volume_checkstatus;
|
||||
halt_function = volume_halt;
|
||||
lowerlimit = 0; upperlimit = 100; tolerance = 0.01;
|
||||
readable = 1;
|
||||
read_command = ' ';
|
||||
fetch_function = volume_checkpumping;
|
||||
property 'units' = 'mL';
|
||||
}
|
||||
}
|
||||
group ratios = {
|
||||
type = text;
|
||||
property 'units' = 'percent';
|
||||
var sensor = {
|
||||
var ratio_pv = {
|
||||
type = text;
|
||||
readable = 1; read_command = ' '; fetch_function = ratios_fetch;
|
||||
property 'units' = 'percent';
|
||||
}
|
||||
var setpoint = {
|
||||
var ratio_sp = {
|
||||
type = text;
|
||||
writeable = 1; write_command = ' '; write_function = ratios_write; checkrange_function = ratios_check;
|
||||
property 'units' = 'percent';
|
||||
}
|
||||
}
|
||||
group flow = {
|
||||
type = float;
|
||||
property 'units' = 'mL/min';
|
||||
var sensor = {
|
||||
var flow_pv = {
|
||||
type = float;
|
||||
readable = 1; read_command = ' '; fetch_function = flow_fetch;
|
||||
property 'units' = 'mL/min';
|
||||
}
|
||||
var setpoint = {
|
||||
var flow_sp = {
|
||||
type = float;
|
||||
writeable = 1; write_command = ' '; write_function = flow_write;
|
||||
lowerlimit = 0; upperlimit = 10;
|
||||
property 'units' = 'mL/min';
|
||||
}
|
||||
}
|
||||
|
||||
group stuff = {
|
||||
readable = 60;
|
||||
type = text;
|
||||
data = false; control = false; nxsave = false;
|
||||
var an_out = { read_command = 'AN_OUT?'; }
|
||||
var boardinfo = { read_command = 'BOARDINFO?'; }
|
||||
var config = { read_command = 'CONFIG?'; }
|
||||
@ -164,18 +179,52 @@ driver knauer_pump = {
|
||||
sct real_data "[join [lrange ${dlist} 0 end] ,]"
|
||||
set data "Hidden in real_data property"
|
||||
%%}
|
||||
code status_fetch = {%%
|
||||
set index 1
|
||||
set data [hgetpropval ${tc_root}/dummy/status real_data]
|
||||
set dlist [split ${data} ","]
|
||||
set status_code [lindex ${dlist} ${index}]
|
||||
set cmd "@@NOSEND@@"
|
||||
if { ${status_code} == 3 } {
|
||||
sct result "PUMPING"
|
||||
} else {
|
||||
sct result "IDLE"
|
||||
}
|
||||
%%}
|
||||
code state_fetch = {%%
|
||||
set index 1
|
||||
set data [hgetpropval ${tc_root}/dummy/status real_data]
|
||||
set dlist [split ${data} ","]
|
||||
set state_code [lindex ${dlist} ${index}]
|
||||
set cmd "@@NOSEND@@"
|
||||
if { ${state_code} < 0 || ${state_code} > 9 } {
|
||||
sct geterror "Invalid device_state ${state_code}"
|
||||
error "[sct geterror]"
|
||||
}
|
||||
set slist [list "SYS_ST_INITIALIZING" \
|
||||
"SYS_ST_OFF" \
|
||||
"SYS_ST_IDLE" \
|
||||
"SYS_ST_RUN" \
|
||||
"SYS_ST_HOLD" \
|
||||
"SYS_ST_PURGE" \
|
||||
"SYS_ST_STANDBY" \
|
||||
"SYS_ST_FAILED" \
|
||||
"SYS_ST_RUNATEND" \
|
||||
]
|
||||
sct result [lindex ${slist} ${state_code}]
|
||||
%%}
|
||||
|
||||
code halt = {%%
|
||||
set ratios [hval ${tc_root}/ratios/setpoint]
|
||||
set ratios [join [split ${ratios} /] ,]
|
||||
set cmd "RAMP:0,0,${ratios},0,0,0,0,0,0,0,0,2"
|
||||
set rlist [hval ${tc_root}/pump/ratio_sp]
|
||||
set ratio_tgt [join [split ${rlist} /] ,]
|
||||
set cmd "RAMP:0,0,${ratio_tgt},0,0,0,0,0,0,0,0,2"
|
||||
%%}
|
||||
|
||||
code flow_fetch = {%%
|
||||
set data [hgetpropval ${tc_root}/dummy/status real_data]
|
||||
set dlist [split ${data} ","]
|
||||
set flow [lindex ${dlist} 4]
|
||||
sct result [expr {0.001 * ${flow}}]
|
||||
set flow_pv [lindex ${dlist} 4]
|
||||
sct result [expr {0.001 * ${flow_pv}}]
|
||||
set cmd "@@NOSEND@@"
|
||||
%%}
|
||||
code flow_write = {%%
|
||||
@ -191,12 +240,12 @@ driver knauer_pump = {
|
||||
%%}
|
||||
|
||||
code ratios_check = {%%
|
||||
set ratios [split ${setpoint} /]
|
||||
if { [llength ${ratios}] != 4 } {
|
||||
sct geterror "${setpoint} has [llength ${ratios}] components, needs 4"
|
||||
set rlist [split ${setpoint} /]
|
||||
if { [llength ${rlist}] != 4 } {
|
||||
sct geterror "${setpoint} has [llength ${rlist}] components, needs 4"
|
||||
error [sct geterror]
|
||||
}
|
||||
set sum [expr [lindex ${ratios} 0] + [lindex ${ratios} 1] + [lindex ${ratios} 2] + [lindex ${ratios} 3]]
|
||||
set sum [expr [lindex ${rlist} 0] + [lindex ${rlist} 1] + [lindex ${rlist} 2] + [lindex ${rlist} 3]]
|
||||
if { ${sum} != 100 } {
|
||||
sct geterror "sum is ${sum}, must be 100"
|
||||
error [sct geterror]
|
||||
@ -206,8 +255,8 @@ driver knauer_pump = {
|
||||
code ratios_fetch = {%%
|
||||
set data [hgetpropval ${tc_root}/dummy/status real_data]
|
||||
set dlist [split ${data} ","]
|
||||
set ratios "[lindex ${dlist} 5]/[lindex ${dlist} 6]/[lindex ${dlist} 7]/[lindex ${dlist} 8]"
|
||||
sct result ${ratios}
|
||||
set ratio_vals "[lindex ${dlist} 5]/[lindex ${dlist} 6]/[lindex ${dlist} 7]/[lindex ${dlist} 8]"
|
||||
sct result ${ratio_vals}
|
||||
set cmd "@@NOSEND@@"
|
||||
%%}
|
||||
code ratios_write = {%%
|
||||
@ -228,26 +277,25 @@ driver knauer_pump = {
|
||||
if { [llength ${dlist}] > 11 } {
|
||||
set pump_volm [lindex ${dlist} 10]
|
||||
set pump_voln [lindex ${dlist} 11]
|
||||
set volume [expr {${pump_volm} + 0.000001 * ${pump_voln}}]
|
||||
set pump_volume [expr {${pump_volm} + 0.000001 * ${pump_voln}}]
|
||||
} else {
|
||||
set volume 0.0
|
||||
set pump_volume 0.0
|
||||
}
|
||||
sct raw_volume ${volume}
|
||||
sct raw_volume ${pump_volume}
|
||||
if { [hpropexists [sct] base_volume] } {
|
||||
set volume [expr {${volume} - [sct base_volume]}]
|
||||
set pump_volume [expr {${pump_volume} - [sct base_volume]}]
|
||||
} else {
|
||||
sct base_volume [sct raw_volume]
|
||||
}
|
||||
sct result ${volume}
|
||||
sct result ${pump_volume}
|
||||
set cmd "@@NOSEND@@"
|
||||
%%}
|
||||
code volume_write = {%%
|
||||
hsetprop ${tc_root}/[sct driveable] base_volume [hgetpropval ${tc_root}/[sct driveable] raw_volume]
|
||||
hset ${tc_root}/[sct driveable] 0.0
|
||||
set flow [expr {int(1000.0 * [hval ${tc_root}/flow/setpoint])}]
|
||||
set ratios [hval ${tc_root}/ratios/setpoint]
|
||||
set ratios [join [split ${ratios} /] ,]
|
||||
set cmd "RAMP:0,${flow},${ratios},0,0,0,0,0,0,0,0,3"
|
||||
set flow_tgt [expr {int(1000.0 * [hval ${tc_root}/pump/flow_sp])}]
|
||||
set ratio_tgt [join [split [hval ${tc_root}/pump/ratio_sp] /] ,]
|
||||
set cmd "RAMP:0,${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0,3"
|
||||
sct pumping 1
|
||||
%%}
|
||||
|
||||
@ -261,10 +309,9 @@ driver knauer_pump = {
|
||||
set sp "[sct target]"
|
||||
set pv "[hval ${tc_root}/[sct driveable]]"
|
||||
if { (${sp} - ${pv}) <= [sct tolerance] } {
|
||||
set flow 0
|
||||
set ratios [hval ${tc_root}/ratios/setpoint]
|
||||
set ratios [join [split ${ratios} /] ,]
|
||||
set cmd "RAMP:0,${flow},${ratios},0,0,0,0,0,0,0,0,2"
|
||||
set flow_tgt 0
|
||||
set ratio_tgt [join [split [hval ${tc_root}/pump/ratio_sp] /] ,]
|
||||
set cmd "RAMP:0,${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0,2"
|
||||
set nextState noResponse
|
||||
sct pumping 0
|
||||
}
|
||||
@ -272,10 +319,9 @@ driver knauer_pump = {
|
||||
%%}
|
||||
|
||||
code volume_halt = {%%
|
||||
set flow 0
|
||||
set ratios [hval ${tc_root}/ratios/setpoint]
|
||||
set ratios [join [split ${ratios} /] ,]
|
||||
set cmd "RAMP:0,${flow},${ratios},0,0,0,0,0,0,0,0,2"
|
||||
set flow_tgt 0
|
||||
set ratio_tgt [join [split [hval ${tc_root}/pump/ratio_sp] /] ,]
|
||||
set cmd "RAMP:0,${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0,2"
|
||||
sct send ${cmd}
|
||||
%%}
|
||||
|
||||
|
Reference in New Issue
Block a user