Update the mercury pressure loop for the pressure card

This commit is contained in:
Douglas Clowes
2014-06-10 17:17:10 +10:00
parent 21c9193a4b
commit e2fae66199
2 changed files with 76 additions and 81 deletions

View File

@ -5,15 +5,14 @@ driver mercury_pres = {
add_args = '{id 99} {tol 1}'
make_args = 'id tol'
group Loop4 = {
group Loop8 = {
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';
var sensor = { readable = 1; read_command = 'READ:DEV:DB8.P1:PRES:SIG:PRES'; permlink = 'P.S08'; units = "mB"; }
var nick = { type=text; readable = 15; read_command = 'READ:DEV:DB8.P1:PRES:NICK'; read_function = rdText; }
var setpoint = { read_command = 'READ:DEV:DB8.P1:PRES:LOOP:TSET';
driveable = Loop8/sensor; lowerlimit = 0; upperlimit = 333; tolerance = '${tol}'; property settle_time = 15;
writeable = 1; write_function = setPoint; write_command = 'SET:DEV:DB8.P1:PRES:LOOP:TSET:';
permlink = 'P.SP08'; units = "mB";
}
}

View File

@ -278,79 +278,70 @@ proc ::scobj::mercury_pres::mkDriver { sct_controller name id tol } {
set scobj_hpath /sics/${name}
hfactory ${scobj_hpath}/Loop4 plain spy none
hfactory ${scobj_hpath}/Loop8 plain spy none
hfactory ${scobj_hpath}/Loop4/nick plain user text
hsetprop ${scobj_hpath}/Loop4/nick read ${ns}::getValue ${scobj_hpath} rdText {READ:DEV:DB8.T1:TEMP:NICK}
hsetprop ${scobj_hpath}/Loop4/nick rdText ${ns}::rdText ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop4/nick control true
hsetprop ${scobj_hpath}/Loop4/nick data true
hsetprop ${scobj_hpath}/Loop4/nick mutable false
hsetprop ${scobj_hpath}/Loop4/nick nxsave true
hsetprop ${scobj_hpath}/Loop4/nick oldval UNKNOWN
hsetprop ${scobj_hpath}/Loop4/nick sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/Loop4/nick type "part"
hsetprop ${scobj_hpath}/Loop4/nick nxalias "${name}_Loop4_nick"
hfactory ${scobj_hpath}/Loop8/nick plain user text
hsetprop ${scobj_hpath}/Loop8/nick read ${ns}::getValue ${scobj_hpath} rdText {READ:DEV:DB8.P1:PRES:NICK}
hsetprop ${scobj_hpath}/Loop8/nick rdText ${ns}::rdText ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop8/nick control true
hsetprop ${scobj_hpath}/Loop8/nick data true
hsetprop ${scobj_hpath}/Loop8/nick mutable false
hsetprop ${scobj_hpath}/Loop8/nick nxsave true
hsetprop ${scobj_hpath}/Loop8/nick oldval UNKNOWN
hsetprop ${scobj_hpath}/Loop8/nick sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/Loop8/nick type "part"
hsetprop ${scobj_hpath}/Loop8/nick nxalias "${name}_Loop8_nick"
hfactory ${scobj_hpath}/Loop4/power plain user float
hsetprop ${scobj_hpath}/Loop4/power read ${ns}::getValue ${scobj_hpath} rdValue {READ:DEV:DB3.H1:HTR:SIG:POWR}
hsetprop ${scobj_hpath}/Loop4/power rdValue ${ns}::rdValue ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop4/power control true
hsetprop ${scobj_hpath}/Loop4/power data true
hsetprop ${scobj_hpath}/Loop4/power mutable false
hsetprop ${scobj_hpath}/Loop4/power nxsave true
hsetprop ${scobj_hpath}/Loop4/power oldval 0.0
hsetprop ${scobj_hpath}/Loop4/power sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/Loop4/power type "part"
hsetprop ${scobj_hpath}/Loop4/power nxalias "${name}_Loop4_power"
hfactory ${scobj_hpath}/Loop8/sensor plain user float
hsetprop ${scobj_hpath}/Loop8/sensor read ${ns}::getValue ${scobj_hpath} rdValue {READ:DEV:DB8.P1:PRES:SIG:PRES}
hsetprop ${scobj_hpath}/Loop8/sensor rdValue ${ns}::rdValue ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop8/sensor control true
hsetprop ${scobj_hpath}/Loop8/sensor data true
hsetprop ${scobj_hpath}/Loop8/sensor mutable false
hsetprop ${scobj_hpath}/Loop8/sensor nxsave true
hsetprop ${scobj_hpath}/Loop8/sensor units mB
hsetprop ${scobj_hpath}/Loop8/sensor permlink data_set "P[format "%02d" ${id}]S08"
hsetprop ${scobj_hpath}/Loop8/sensor @description "P[format "%02d" ${id}]S08"
hsetprop ${scobj_hpath}/Loop8/sensor oldval 0.0
hsetprop ${scobj_hpath}/Loop8/sensor sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/Loop8/sensor type "part"
hsetprop ${scobj_hpath}/Loop8/sensor nxalias "${name}_Loop8_sensor"
hfactory ${scobj_hpath}/Loop4/sensor plain user float
hsetprop ${scobj_hpath}/Loop4/sensor read ${ns}::getValue ${scobj_hpath} rdValue {READ:DEV:DB8.T1:TEMP:SIG:TEMP}
hsetprop ${scobj_hpath}/Loop4/sensor rdValue ${ns}::rdValue ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop4/sensor control true
hsetprop ${scobj_hpath}/Loop4/sensor data true
hsetprop ${scobj_hpath}/Loop4/sensor mutable false
hsetprop ${scobj_hpath}/Loop4/sensor nxsave true
hsetprop ${scobj_hpath}/Loop4/sensor permlink data_set "T[format "%02d" ${id}]S04"
hsetprop ${scobj_hpath}/Loop4/sensor @description "T[format "%02d" ${id}]S04"
hsetprop ${scobj_hpath}/Loop4/sensor oldval 0.0
hsetprop ${scobj_hpath}/Loop4/sensor sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/Loop4/sensor type "part"
hsetprop ${scobj_hpath}/Loop4/sensor nxalias "${name}_Loop4_sensor"
hfactory ${scobj_hpath}/Loop8/setpoint plain user float
hsetprop ${scobj_hpath}/Loop8/setpoint read ${ns}::getValue ${scobj_hpath} rdValue {READ:DEV:DB8.P1:PRES:LOOP:TSET}
hsetprop ${scobj_hpath}/Loop8/setpoint rdValue ${ns}::rdValue ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop8/setpoint write ${ns}::setPoint ${scobj_hpath} noResponse {SET:DEV:DB8.P1:PRES:LOOP:TSET:}
hsetprop ${scobj_hpath}/Loop8/setpoint noResponse ${ns}::noResponse ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop8/setpoint check ${ns}::checkrange ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop8/setpoint driving 0
hsetprop ${scobj_hpath}/Loop8/setpoint checklimits ${ns}::checklimits ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop8/setpoint checkstatus ${ns}::checkstatus ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop8/setpoint halt ${ns}::halt ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop8/setpoint driveable Loop8/sensor
hsetprop ${scobj_hpath}/Loop8/setpoint control true
hsetprop ${scobj_hpath}/Loop8/setpoint data true
hsetprop ${scobj_hpath}/Loop8/setpoint mutable false
hsetprop ${scobj_hpath}/Loop8/setpoint nxsave true
hsetprop ${scobj_hpath}/Loop8/setpoint lowerlimit 0
hsetprop ${scobj_hpath}/Loop8/setpoint upperlimit 333
hsetprop ${scobj_hpath}/Loop8/setpoint tolerance ${tol}
hsetprop ${scobj_hpath}/Loop8/setpoint units mB
hsetprop ${scobj_hpath}/Loop8/setpoint permlink data_set "P[format "%02d" ${id}]SP08"
hsetprop ${scobj_hpath}/Loop8/setpoint @description "P[format "%02d" ${id}]SP08"
hsetprop ${scobj_hpath}/Loop8/setpoint oldval 0.0
hsetprop ${scobj_hpath}/Loop8/setpoint sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/Loop8/setpoint settle_time "15"
hsetprop ${scobj_hpath}/Loop8/setpoint type "drivable"
hsetprop ${scobj_hpath}/Loop8/setpoint nxalias "${name}_Loop8_setpoint"
hfactory ${scobj_hpath}/Loop4/setpoint plain user float
hsetprop ${scobj_hpath}/Loop4/setpoint read ${ns}::getValue ${scobj_hpath} rdValue {READ:DEV:DB8.T1:TEMP:LOOP:TSET}
hsetprop ${scobj_hpath}/Loop4/setpoint rdValue ${ns}::rdValue ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop4/setpoint write ${ns}::setPoint ${scobj_hpath} noResponse {SET:DEV:DB8.T1:TEMP:LOOP:TSET:}
hsetprop ${scobj_hpath}/Loop4/setpoint noResponse ${ns}::noResponse ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop4/setpoint check ${ns}::checkrange ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop4/setpoint driving 0
hsetprop ${scobj_hpath}/Loop4/setpoint checklimits ${ns}::checklimits ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop4/setpoint checkstatus ${ns}::checkstatus ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop4/setpoint halt ${ns}::halt ${scobj_hpath}
hsetprop ${scobj_hpath}/Loop4/setpoint driveable Loop4/sensor
hsetprop ${scobj_hpath}/Loop4/setpoint control true
hsetprop ${scobj_hpath}/Loop4/setpoint data true
hsetprop ${scobj_hpath}/Loop4/setpoint mutable false
hsetprop ${scobj_hpath}/Loop4/setpoint nxsave true
hsetprop ${scobj_hpath}/Loop4/setpoint lowerlimit 0
hsetprop ${scobj_hpath}/Loop4/setpoint upperlimit 333
hsetprop ${scobj_hpath}/Loop4/setpoint tolerance ${tol}
hsetprop ${scobj_hpath}/Loop4/setpoint permlink data_set "T[format "%02d" ${id}]SP04"
hsetprop ${scobj_hpath}/Loop4/setpoint @description "T[format "%02d" ${id}]SP04"
hsetprop ${scobj_hpath}/Loop4/setpoint oldval 0.0
hsetprop ${scobj_hpath}/Loop4/setpoint sdsinfo "::nexus::scobj::sdsinfo"
hsetprop ${scobj_hpath}/Loop4/setpoint settle_time "15"
hsetprop ${scobj_hpath}/Loop4/setpoint type "drivable"
hsetprop ${scobj_hpath}/Loop4/setpoint nxalias "${name}_Loop4_setpoint"
if {[SplitReply [environment_simulation]]=="false"} {
${sct_controller} poll ${scobj_hpath}/Loop4/nick 15
${sct_controller} poll ${scobj_hpath}/Loop4/power 5
${sct_controller} poll ${scobj_hpath}/Loop4/sensor 1
${sct_controller} poll ${scobj_hpath}/Loop4/setpoint 5
${sct_controller} write ${scobj_hpath}/Loop4/setpoint
ansto_makesctdrive ${name}_Loop4_setpoint ${scobj_hpath}/Loop4/setpoint ${scobj_hpath}/Loop4/sensor ${sct_controller}
if {[string equal -nocase [SplitReply [environment_simulation]] "false"]} {
${sct_controller} poll ${scobj_hpath}/Loop8/nick 15
${sct_controller} poll ${scobj_hpath}/Loop8/sensor 1
${sct_controller} poll ${scobj_hpath}/Loop8/setpoint 5
${sct_controller} write ${scobj_hpath}/Loop8/setpoint
ansto_makesctdrive ${name}_Loop8_setpoint ${scobj_hpath}/Loop8/setpoint ${scobj_hpath}/Loop8/sensor ${sct_controller}
} else {
::scobj::mercury_pres::sics_log 9 "[environment_simulation] => No poll/write for mercury_pres"
}
hsetprop ${scobj_hpath} klass environment
hsetprop ${scobj_hpath} debug_threshold 5
@ -369,7 +360,7 @@ namespace eval ::scobj::mercury_pres {
proc add_mercury_pres {name IP port {id 99} {tol 1}} {
set catch_status [ catch {
::scobj::mercury_pres::sics_log 9 "add_mercury_pres ${name} ${IP} ${port} ${id} ${tol}"
if {[SplitReply [environment_simulation]]=="false"} {
if {[string equal -nocase [SplitReply [environment_simulation]] "false"]} {
if {[string equal -nocase "aqadapter" "${IP}"]} {
::scobj::mercury_pres::sics_log 9 "makesctcontroller sct_${name} aqadapter ${port}"
makesctcontroller sct_${name} aqadapter ${port}
@ -377,6 +368,8 @@ proc add_mercury_pres {name IP port {id 99} {tol 1}} {
::scobj::mercury_pres::sics_log 9 "makesctcontroller sct_${name} std ${IP}:${port}"
makesctcontroller sct_${name} std ${IP}:${port}
}
} else {
::scobj::mercury_pres::sics_log 9 "[environment_simulation] => No sctcontroller for mercury_pres"
}
::scobj::mercury_pres::sics_log 1 "::scobj::mercury_pres::mkDriver sct_${name} ${name} ${id} ${tol}"
::scobj::mercury_pres::mkDriver sct_${name} ${name} ${id} ${tol}
@ -394,10 +387,11 @@ proc ::scobj::mercury_pres::read_config {} {
if { [dict exists $v "driver"] } {
if { [dict get $v "driver"] == "mercury_pres" } {
if { [dict get $v enabled] } {
set IP [dict get $v ip]
set PORT [dict get $v port]
set name [dict get $v name]
if { [dict exists $v "asyncqueue"] } {
if { ![string equal -nocase [SplitReply [environment_simulation]] "false"] } {
set asyncqueue "null"
${ns}::sics_log 9 "[environment_simulation] => using null asyncqueue"
} elseif { [dict exists $v "asyncqueue"] } {
set asyncqueue [dict get $v "asyncqueue"]
} else {
if { [dict exists $v "asyncprotocol"] } {
@ -411,6 +405,8 @@ proc ::scobj::mercury_pres::read_config {} {
}
}
set asyncqueue ${name}_queue
set IP [dict get $v ip]
set PORT [dict get $v port]
MakeAsyncQueue ${asyncqueue} ${asyncprotocol} ${IP} ${PORT}
if { [dict exists $v "timeout"] } {
${asyncqueue} timeout "[dict get $v "timeout"]"