diff --git a/site_ansto/instrument/pelican/config/beamline/sct_hv.tcl b/site_ansto/instrument/pelican/config/beamline/sct_hv.tcl index 9f8dd016..2c0f20ad 100644 --- a/site_ansto/instrument/pelican/config/beamline/sct_hv.tcl +++ b/site_ansto/instrument/pelican/config/beamline/sct_hv.tcl @@ -47,16 +47,22 @@ proc ::scobj::hv:setting {par} { set newPara [sct target] - switch $par { - "hv1" {set comm "hv_set hv1 $newPara"} - "hv2" {set comm "hv_set hv2 $newPara"} - "i1" {set comm "hv_set i1 $newPara"} - "i2" {set comm "hv_set i2 $newPara"} - default {error "ERROR: illegal parameters, try "hv1","hv2","i1" or "i2""} - } + if{[sct oldStatus] != $newPara} { + set oldStatus $newPara + switch $par { + "hv1" {set comm "hv_set hv1 $newPara"} + "hv2" {set comm "hv_set hv2 $newPara"} + "i1" {set comm "hv_set i1 $newPara"} + "i2" {set comm "hv_set i2 $newPara"} + default {error "ERROR: illegal parameters, try "hv1","hv2","i1" or "i2"" + return idle} + } - sct send $comm - return checkReply + sct send $comm + return checkReply + } else { + return idle + } } proc ::scobj::hv::checkReplyFunc {basePath} { @@ -83,9 +89,12 @@ proc ::scobj::hv::getParaFunc {} { proc ::scobj::hv::rdParaStateFunc {basePath} { set replyStr [sct result] broadcast "Reply from hv_get: $replyStr" + if {[string first "Error" $replyStr] != -1} { broadcast "ERROR: cannot get the current parameters setting from the HV device, check again!" - } else { + } elseif {$replyStr != [sct oldval]} { + sct oldval $replyStr + broadcast "oldval = [sct oldval]" set s1 [string trimright $replyStr "\n"] set s2 [split $s1 "=;"] @@ -126,6 +135,7 @@ proc ::scobj::hv::mkHV {argList} { MakeSICSObj $pa(NAME) SCT_OBJECT sicslist setatt $pa(NAME) klass instrument sicslist setatt $pa(NAME) long_name $pa(NAME) + hsetprop /sics/$pa(NAME) status "IDLE" hfactory /sics/$pa(NAME)/hv1 plain user int hfactory /sics/$pa(NAME)/hv2 plain user int @@ -136,15 +146,18 @@ proc ::scobj::hv::mkHV {argList} { #makesctcontroller sct_hv rfamp $pa(IP):$pa(PORT) makesctcontroller sct_hv std $pa(IP):$pa(PORT) - hsetprop /sics/$pa(NAME) read ::scobj::hv::getParaFunc - hsetprop /sics/$pa(NAME) rdParaState ::scobj::hv::rdParaStateFunc /sics/$pa(NAME) + hfactory /sics/$pa(NAME)/status plain user text + hsetprop /sics/$pa(NAME)/status read ::scobj::hv::getParaFunc + hsetprop /sics/$pa(NAME)/status rdParaState ::scobj::hv::rdParaStateFunc /sics/$pa(NAME) + hsetprop /sics/$pa(NAME)/status oldval UNKNOWN + hset /sics/$pa(NAME)/status idle - hsetprop /sics/$pa(NAME) tuning $pa(TUNING) + hsetprop /sics/$pa(NAME)/status tuning $pa(TUNING) # Initialise properties required for generating the API for GumTree and to save data ::scobj::hinitprops $pa(NAME) hv1 i1 hv2 i2 msg - sct_hv poll /sics/$pa(NAME) $pa(INTERVAL) + sct_hv poll /sics/$pa(NAME)/status $pa(INTERVAL) if {$pa(TUNING)} { hfactory /sics/$pa(NAME)/set_hv1 plain user int @@ -152,19 +165,23 @@ proc ::scobj::hv::mkHV {argList} { hfactory /sics/$pa(NAME)/set_i1 plain user int hfactory /sics/$pa(NAME)/set_i2 plain user int - ::scobj::hinitprops $pa(NAME) set_hv1 set_hv2 set_i1 set_i2 + ::scobj::hinitprops $pa(NAME) status set_hv1 set_hv2 set_i1 set_i2 hsetprop /sics/$pa(NAME)/set_hv1 write ::scobj::hv:setting "hv1" hsetprop /sics/$pa(NAME)/set_hv1 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME) + hsetprop /sics/$pa(NAME)/set_hv1 oldStatus UNKNOWN hsetprop /sics/$pa(NAME)/set_hv2 write ::scobj::hv:setting "hv2" hsetprop /sics/$pa(NAME)/set_hv2 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME) + hsetprop /sics/$pa(NAME)/set_hv2 oldStatus UNKNOWN - hsetprop /sics/$pa(NAME)/set_i1 write ::scobj::hv:setting "i1" - hsetprop /sics/$pa(NAME)/set_i1 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME) + hsetprop /sics/$pa(NAME)/set_i1 write ::scobj::hv:setting "i1" + hsetprop /sics/$pa(NAME)/set_i1 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME) + hsetprop /sics/$pa(NAME)/set_i1 oldStatus UNKNOWN - hsetprop /sics/$pa(NAME)/set_i2 write ::scobj::hv:setting "i2" - hsetprop /sics/$pa(NAME)/set_i2 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME) + hsetprop /sics/$pa(NAME)/set_i2 write ::scobj::hv:setting "i2" + hsetprop /sics/$pa(NAME)/set_i2 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME) + hsetprop /sics/$pa(NAME)/set_i2 oldStatus UNKNOWN sct_hv write /sics/$pa(NAME)/set_hv1 $pa(INTERVAL) sct_hv write /sics/$pa(NAME)/set_hv2 $pa(INTERVAL)