From e2fae661990cfbc210e03b334a9a075156177e85 Mon Sep 17 00:00:00 2001 From: Douglas Clowes Date: Tue, 10 Jun 2014 17:17:10 +1000 Subject: [PATCH] Update the mercury pressure loop for the pressure card --- .../environment/temperature/mercury_pres.sct | 15 +- .../temperature/sct_mercury_pres.tcl | 142 +++++++++--------- 2 files changed, 76 insertions(+), 81 deletions(-) diff --git a/site_ansto/instrument/config/environment/temperature/mercury_pres.sct b/site_ansto/instrument/config/environment/temperature/mercury_pres.sct index ad160881..3c236387 100644 --- a/site_ansto/instrument/config/environment/temperature/mercury_pres.sct +++ b/site_ansto/instrument/config/environment/temperature/mercury_pres.sct @@ -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"; } } diff --git a/site_ansto/instrument/config/environment/temperature/sct_mercury_pres.tcl b/site_ansto/instrument/config/environment/temperature/sct_mercury_pres.tcl index 1510fe64..f83e7601 100644 --- a/site_ansto/instrument/config/environment/temperature/sct_mercury_pres.tcl +++ b/site_ansto/instrument/config/environment/temperature/sct_mercury_pres.tcl @@ -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"]"