From fa2eb775acca9015aa0d9e583954498cb6478f12 Mon Sep 17 00:00:00 2001 From: Douglas Clowes Date: Mon, 27 Oct 2014 14:35:37 +1100 Subject: [PATCH] Regen 3He SC driver --- .../config/beamline/sct_he3_polanal.tcl | 156 +++++++++++++++++- 1 file changed, 152 insertions(+), 4 deletions(-) diff --git a/site_ansto/instrument/config/beamline/sct_he3_polanal.tcl b/site_ansto/instrument/config/beamline/sct_he3_polanal.tcl index e4ee096a..7388a93d 100644 --- a/site_ansto/instrument/config/beamline/sct_he3_polanal.tcl +++ b/site_ansto/instrument/config/beamline/sct_he3_polanal.tcl @@ -58,7 +58,7 @@ proc ::scobj::he3_polanal::chkWrite {tc_root} { set catch_status [ catch { debug_log ${tc_root} 1 "chkWrite tc_root=${tc_root} sct=[sct] resp=[sct result]" # chkWrite hook code starts - rdValue ${tc_root} + [namespace current]::rdValue ${tc_root} # chkWrite hook code ends return "idle" } catch_message ] @@ -83,6 +83,16 @@ proc ::scobj::he3_polanal::getValue {tc_root nextState cmd_str} { handle_exception ${catch_status} ${catch_message} } +# function to check the write parameter on a device +proc ::scobj::he3_polanal::noResponse {tc_root} { + set catch_status [ catch { + debug_log ${tc_root} 1 "noResponse tc_root=${tc_root} sct=[sct] resp=[sct result]" +# noResponse hook code goes here + return "idle" + } catch_message ] + handle_exception ${catch_status} ${catch_message} +} + # function to parse the read of a parameter on a device proc ::scobj::he3_polanal::rdValue {tc_root} { set catch_status [ catch { @@ -105,7 +115,7 @@ proc ::scobj::he3_polanal::rdValue {tc_root} { } set my_name [basename [pathname [sct]]] if {![string equal -nocase "[lindex ${dlist} 0]" "${my_name}"]} { - error "[lindex ${dlist} 0] is not ${my_name}" + error "[lindex ${dlist} 0] is not my name (${my_name})" } if {[string match "*Not Active*" "${data}"]} { set data 0 @@ -115,6 +125,26 @@ proc ::scobj::he3_polanal::rdValue {tc_root} { } else { set data [lindex ${dlist} 1] } + set path [pathname [sct]] + if {[llength ${dlist}] > 2} { + set new_value [lindex ${dlist} 2] + if { "${new_value}" == "NaN" } { + set new_value 0 + } + hupdateif ${path}/Amplitude "${new_value}" + } + if {[llength ${dlist}] > 3} { + hupdateif ${path}/Freq "[lindex ${dlist} 3]" + } + if {[llength ${dlist}] > 4} { + hupdateif ${path}/Phase "[lindex ${dlist} 4]" + } + if {[llength ${dlist}] > 5} { + hupdateif ${path}/Time2 "[lindex ${dlist} 5]" + } + if {[llength ${dlist}] > 6} { + hupdateif ${path}/Field "[lindex ${dlist} 6]" + } # rdValue hook code ends if { [hpropexists [sct] geterror] } { debug_log ${tc_root} 9 "[sct] error: [sct geterror]" @@ -193,6 +223,65 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio hsetprop ${scobj_hpath}/analyser klass "@none" hsetprop ${scobj_hpath}/analyser type "part" + hfactory ${scobj_hpath}/analyser/Amplitude plain user text + hsetprop ${scobj_hpath}/analyser/Amplitude control true + hsetprop ${scobj_hpath}/analyser/Amplitude data true + hsetprop ${scobj_hpath}/analyser/Amplitude mutable true + hsetprop ${scobj_hpath}/analyser/Amplitude nxsave true + hsetprop ${scobj_hpath}/analyser/Amplitude oldval UNKNOWN + hsetprop ${scobj_hpath}/analyser/Amplitude klass "parameter" + hsetprop ${scobj_hpath}/analyser/Amplitude sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/analyser/Amplitude type "part" + hsetprop ${scobj_hpath}/analyser/Amplitude nxalias "${name}_analyser_Amplitude" + + hfactory ${scobj_hpath}/analyser/Field plain user text + hsetprop ${scobj_hpath}/analyser/Field control true + hsetprop ${scobj_hpath}/analyser/Field data true + hsetprop ${scobj_hpath}/analyser/Field mutable true + hsetprop ${scobj_hpath}/analyser/Field nxsave true + hsetprop ${scobj_hpath}/analyser/Field units Oersted + hsetprop ${scobj_hpath}/analyser/Field oldval UNKNOWN + hsetprop ${scobj_hpath}/analyser/Field klass "parameter" + hsetprop ${scobj_hpath}/analyser/Field sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/analyser/Field type "part" + hsetprop ${scobj_hpath}/analyser/Field nxalias "${name}_analyser_Field" + + hfactory ${scobj_hpath}/analyser/Freq plain user text + hsetprop ${scobj_hpath}/analyser/Freq control true + hsetprop ${scobj_hpath}/analyser/Freq data true + hsetprop ${scobj_hpath}/analyser/Freq mutable true + hsetprop ${scobj_hpath}/analyser/Freq nxsave true + hsetprop ${scobj_hpath}/analyser/Freq units Hertz + hsetprop ${scobj_hpath}/analyser/Freq oldval UNKNOWN + hsetprop ${scobj_hpath}/analyser/Freq klass "parameter" + hsetprop ${scobj_hpath}/analyser/Freq sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/analyser/Freq type "part" + hsetprop ${scobj_hpath}/analyser/Freq nxalias "${name}_analyser_Freq" + + hfactory ${scobj_hpath}/analyser/Phase plain user text + hsetprop ${scobj_hpath}/analyser/Phase control true + hsetprop ${scobj_hpath}/analyser/Phase data true + hsetprop ${scobj_hpath}/analyser/Phase mutable true + hsetprop ${scobj_hpath}/analyser/Phase nxsave true + hsetprop ${scobj_hpath}/analyser/Phase units Degree + hsetprop ${scobj_hpath}/analyser/Phase oldval UNKNOWN + hsetprop ${scobj_hpath}/analyser/Phase klass "parameter" + hsetprop ${scobj_hpath}/analyser/Phase sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/analyser/Phase type "part" + hsetprop ${scobj_hpath}/analyser/Phase nxalias "${name}_analyser_Phase" + + hfactory ${scobj_hpath}/analyser/Time2 plain user text + hsetprop ${scobj_hpath}/analyser/Time2 control true + hsetprop ${scobj_hpath}/analyser/Time2 data true + hsetprop ${scobj_hpath}/analyser/Time2 mutable true + hsetprop ${scobj_hpath}/analyser/Time2 nxsave true + hsetprop ${scobj_hpath}/analyser/Time2 units Second + hsetprop ${scobj_hpath}/analyser/Time2 oldval UNKNOWN + hsetprop ${scobj_hpath}/analyser/Time2 klass "parameter" + hsetprop ${scobj_hpath}/analyser/Time2 sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/analyser/Time2 type "part" + hsetprop ${scobj_hpath}/analyser/Time2 nxalias "${name}_analyser_Time2" + hfactory ${scobj_hpath}/analyser/spin plain user text hsetprop ${scobj_hpath}/analyser/spin read ${ns}::getValue ${scobj_hpath} rdValue {analyser} hsetprop ${scobj_hpath}/analyser/spin rdValue ${ns}::rdValue ${scobj_hpath} @@ -203,7 +292,7 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio hsetprop ${scobj_hpath}/analyser/spin data true hsetprop ${scobj_hpath}/analyser/spin mutable true hsetprop ${scobj_hpath}/analyser/spin nxsave true - hsetprop ${scobj_hpath}/analyser/spin values -1,+1 + hsetprop ${scobj_hpath}/analyser/spin values +,-,0 hsetprop ${scobj_hpath}/analyser/spin oldval UNKNOWN hsetprop ${scobj_hpath}/analyser/spin klass "parameter" hsetprop ${scobj_hpath}/analyser/spin sdsinfo "::nexus::scobj::sdsinfo" @@ -222,6 +311,65 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio hsetprop ${scobj_hpath}/polariser klass "@none" hsetprop ${scobj_hpath}/polariser type "part" + hfactory ${scobj_hpath}/polariser/Amplitude plain user text + hsetprop ${scobj_hpath}/polariser/Amplitude control true + hsetprop ${scobj_hpath}/polariser/Amplitude data true + hsetprop ${scobj_hpath}/polariser/Amplitude mutable true + hsetprop ${scobj_hpath}/polariser/Amplitude nxsave true + hsetprop ${scobj_hpath}/polariser/Amplitude oldval UNKNOWN + hsetprop ${scobj_hpath}/polariser/Amplitude klass "parameter" + hsetprop ${scobj_hpath}/polariser/Amplitude sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/polariser/Amplitude type "part" + hsetprop ${scobj_hpath}/polariser/Amplitude nxalias "${name}_polariser_Amplitude" + + hfactory ${scobj_hpath}/polariser/Field plain user text + hsetprop ${scobj_hpath}/polariser/Field control true + hsetprop ${scobj_hpath}/polariser/Field data true + hsetprop ${scobj_hpath}/polariser/Field mutable true + hsetprop ${scobj_hpath}/polariser/Field nxsave true + hsetprop ${scobj_hpath}/polariser/Field units Oersted + hsetprop ${scobj_hpath}/polariser/Field oldval UNKNOWN + hsetprop ${scobj_hpath}/polariser/Field klass "parameter" + hsetprop ${scobj_hpath}/polariser/Field sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/polariser/Field type "part" + hsetprop ${scobj_hpath}/polariser/Field nxalias "${name}_polariser_Field" + + hfactory ${scobj_hpath}/polariser/Freq plain user text + hsetprop ${scobj_hpath}/polariser/Freq control true + hsetprop ${scobj_hpath}/polariser/Freq data true + hsetprop ${scobj_hpath}/polariser/Freq mutable true + hsetprop ${scobj_hpath}/polariser/Freq nxsave true + hsetprop ${scobj_hpath}/polariser/Freq units Hertz + hsetprop ${scobj_hpath}/polariser/Freq oldval UNKNOWN + hsetprop ${scobj_hpath}/polariser/Freq klass "parameter" + hsetprop ${scobj_hpath}/polariser/Freq sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/polariser/Freq type "part" + hsetprop ${scobj_hpath}/polariser/Freq nxalias "${name}_polariser_Freq" + + hfactory ${scobj_hpath}/polariser/Phase plain user text + hsetprop ${scobj_hpath}/polariser/Phase control true + hsetprop ${scobj_hpath}/polariser/Phase data true + hsetprop ${scobj_hpath}/polariser/Phase mutable true + hsetprop ${scobj_hpath}/polariser/Phase nxsave true + hsetprop ${scobj_hpath}/polariser/Phase units Degree + hsetprop ${scobj_hpath}/polariser/Phase oldval UNKNOWN + hsetprop ${scobj_hpath}/polariser/Phase klass "parameter" + hsetprop ${scobj_hpath}/polariser/Phase sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/polariser/Phase type "part" + hsetprop ${scobj_hpath}/polariser/Phase nxalias "${name}_polariser_Phase" + + hfactory ${scobj_hpath}/polariser/Time2 plain user text + hsetprop ${scobj_hpath}/polariser/Time2 control true + hsetprop ${scobj_hpath}/polariser/Time2 data true + hsetprop ${scobj_hpath}/polariser/Time2 mutable true + hsetprop ${scobj_hpath}/polariser/Time2 nxsave true + hsetprop ${scobj_hpath}/polariser/Time2 units Second + hsetprop ${scobj_hpath}/polariser/Time2 oldval UNKNOWN + hsetprop ${scobj_hpath}/polariser/Time2 klass "parameter" + hsetprop ${scobj_hpath}/polariser/Time2 sdsinfo "::nexus::scobj::sdsinfo" + hsetprop ${scobj_hpath}/polariser/Time2 type "part" + hsetprop ${scobj_hpath}/polariser/Time2 nxalias "${name}_polariser_Time2" + hfactory ${scobj_hpath}/polariser/spin plain user text hsetprop ${scobj_hpath}/polariser/spin read ${ns}::getValue ${scobj_hpath} rdValue {polariser} hsetprop ${scobj_hpath}/polariser/spin rdValue ${ns}::rdValue ${scobj_hpath} @@ -232,7 +380,7 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio hsetprop ${scobj_hpath}/polariser/spin data true hsetprop ${scobj_hpath}/polariser/spin mutable true hsetprop ${scobj_hpath}/polariser/spin nxsave true - hsetprop ${scobj_hpath}/polariser/spin values -1,+1 + hsetprop ${scobj_hpath}/polariser/spin values +,-,0 hsetprop ${scobj_hpath}/polariser/spin oldval UNKNOWN hsetprop ${scobj_hpath}/polariser/spin klass "parameter" hsetprop ${scobj_hpath}/polariser/spin sdsinfo "::nexus::scobj::sdsinfo"