From 6b1c629a4349215cda3e0b39eafbb91337bad7a9 Mon Sep 17 00:00:00 2001 From: Ferdi Franceschini Date: Sun, 26 Jun 2011 12:18:27 +1000 Subject: [PATCH] Guard against misinterpreting readings that have a leading zero as octal. Set the current to the target value when we're within one step rather than within tolerance to avoid undershooting the target. Do not try and get the state when initialising the driver because it will fail to create the driver properly if the RF generator is unavailable on SICS startup. The current is zero when the RF gen is power cycled so it is safe to set the current reading and target current as zero in initialisation so we just set the operating frequency and everything else is left at zero. r3228 | ffr | 2011-06-26 12:18:27 +1000 (Sun, 26 Jun 2011) | 3 lines --- .../config/beamline/sct_RFGen.tcl | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/site_ansto/instrument/reflectometer/config/beamline/sct_RFGen.tcl b/site_ansto/instrument/reflectometer/config/beamline/sct_RFGen.tcl index 4a69f2ff..dc29bcef 100644 --- a/site_ansto/instrument/reflectometer/config/beamline/sct_RFGen.tcl +++ b/site_ansto/instrument/reflectometer/config/beamline/sct_RFGen.tcl @@ -176,7 +176,8 @@ proc ::scobj::rfgen::rdStatFunc {} { lappend temp "$k $v" continue } - if {[string is integer $v]} { + # trim leading zeroes to guard against interpreting as octal + if {[string is integer [string trimleft $v 0]]} { lappend temp "$k $v" } else { lappend temp "$k -1" @@ -294,6 +295,10 @@ proc ::scobj::rfgen::rampFunc {} { set basePath [sct] set currSuperState [sct ramping] mkStatArr stateArr [hval $basePath/state_report] + if {$stateArr(curr) == -1} { + # Got invalid current reading try again + return idle + } set targetCurr [sct targetCurr] set SCT_RFGEN [sct contname] @@ -302,8 +307,7 @@ proc ::scobj::rfgen::rampFunc {} { set K3 [sct K3] set targetFreq [sct targetFreq] set output [sct OutputState] - - if { [expr {abs($stateArr(curr) - $targetCurr)}] <= [sct currTol] } { + if { [expr {abs($stateArr(curr) - $targetCurr)}] <= 5 } { set curr $targetCurr } elseif {$targetCurr < $stateArr(curr)} { set curr [expr $stateArr(curr)-5] @@ -399,14 +403,14 @@ proc ::scobj::rfgen::mkRFGen {argList} { set SCT_RFGEN sct_rfgen_$pa(NAME) makesctcontroller $SCT_RFGEN rfamp $pa(IP):$pa(PORT) hsetprop /sics/$pa(NAME) contname $SCT_RFGEN - mkStatArr stateArr [split [$SCT_RFGEN transact "L:$pa(ADDRESS)"] "|="] +# mkStatArr stateArr [split [$SCT_RFGEN transact "L:$pa(ADDRESS)"] "|="] - hset /sics/$pa(NAME)/flip_current [expr {$stateArr(curr) / 10.0}] - hset /sics/$pa(NAME)/flip_frequency $stateArr(freq) - hset /sics/$pa(NAME)/flip_voltage $stateArr(voltage) - hset /sics/$pa(NAME)/flip_on $stateArr(O) - hsetprop /sics/$pa(NAME) targetFreq $stateArr(freq) - hsetprop /sics/$pa(NAME) targetCurr $stateArr(curr) + hset /sics/$pa(NAME)/flip_current 0 + hset /sics/$pa(NAME)/flip_frequency $pa(OPFREQ) + hset /sics/$pa(NAME)/flip_voltage 0 + hset /sics/$pa(NAME)/flip_on 0 + hsetprop /sics/$pa(NAME) targetFreq $pa(OPFREQ) + hsetprop /sics/$pa(NAME) targetCurr 0 $SCT_RFGEN poll /sics/$pa(NAME) $pa(INTERVAL) $SCT_RFGEN write /sics/$pa(NAME)/switch_on