From 59101a7d4dbc0bdb0a8ee252f4f379eda21df28f Mon Sep 17 00:00:00 2001 From: Ferdi Franceschini Date: Fri, 15 Jan 2010 09:48:17 +1100 Subject: [PATCH] Merged Arndt's changes from trunk version 20100114, deployed on Wombat Today, provides independent tolerance control for control loop one and two. AM r2869 | ffr | 2010-01-15 09:48:17 +1100 (Fri, 15 Jan 2010) | 4 lines --- .../temperature/sct_lakeshore_3xx.tcl | 47 +++++++++++++------ 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/site_ansto/instrument/config/environment/temperature/sct_lakeshore_3xx.tcl b/site_ansto/instrument/config/environment/temperature/sct_lakeshore_3xx.tcl index 1897fe23..a61c0aea 100755 --- a/site_ansto/instrument/config/environment/temperature/sct_lakeshore_3xx.tcl +++ b/site_ansto/instrument/config/environment/temperature/sct_lakeshore_3xx.tcl @@ -58,7 +58,8 @@ namespace eval ::scobj::ls3xx { # Variables that are identical to node names but are needed internally as well # temperature difference between setpoint and actual temperature at which the # heater changes from idle to driving - set ls3xx_driveTolerance 2 + set ls3xx_driveTolerance1 2 + set ls3xx_driveTolerance2 2 # Next 2 parameters are supported by LS model 340 only # ctrl loop 1 settle parameter, threshold=allowable band around setpoint (0,..,100) set ls340_settleThr 30 @@ -182,7 +183,8 @@ proc ls3xx_init {sct_controller tc_root} { puts "Make sure INTERFACE : SERIAL : TERMINATOR is set correctly" } # Set the default tolerances for the setpoint temperatures - hset $tc_root/control/tolerance $::scobj::ls3xx::ls3xx_driveTolerance + hset $tc_root/control/tolerance1 $::scobj::ls3xx::ls3xx_driveTolerance1 + hset $tc_root/control/tolerance2 $::scobj::ls3xx::ls3xx_driveTolerance2 } message ] { return -code error "in ls3xx_init: $message" } @@ -696,7 +698,7 @@ proc inTolerance {CtrlLoopIdx} { # set iSensor [hval $nodename] # set iSensor [string range $iSensor 0 0] set iSensor [getCorrespondingInputSensor $CtrlLoopIdx] - #puts "inTolerance 2 $::scobj::ls3xx::ls3xx_sct_obj_name CtrlLoopIdx:$CtrlLoopIdx data:$data, iSensor:$iSensor" + # puts "inTolerance 2 $::scobj::ls3xx::ls3xx_sct_obj_name CtrlLoopIdx:$CtrlLoopIdx data:$data, iSensor:$iSensor" #puts {set intol [checktol $tc_root [sct readtime] [sct timecheck] $CtrlLoopIdx $iSensor]} if {[string length $iSensor] == 1} { set intol [checktol $tc_root [sct readtime] [sct timecheck] $CtrlLoopIdx $iSensor] @@ -705,10 +707,15 @@ proc inTolerance {CtrlLoopIdx} { set setpt [hval $nodename] set nodename $tc_root/sensor/sensorValue$iSensor set temp [hval $nodename] - # puts "inTolerance(): comparing sensor/setpoint$CtrlLoopIdx=$setpt with actual sensorValue$iSensor=$temp" + # puts "inTolerance(): comparing sensor/setpoint$CtrlLoopIdx=$setpt with actual sensorValue$iSensor=$temp" set diff [expr abs($setpt - $temp)] # $::scobj::ls3xx::ls3xx_driveTolerance = 0.2 Kelvin - if {$diff > $::scobj::ls3xx::ls3xx_driveTolerance} { + set tol $::scobj::ls3xx::ls3xx_driveTolerance1 + if {$CtrlLoopIdx == 2} { + set tol $::scobj::ls3xx::ls3xx_driveTolerance2 + } + # puts "inTolerance(): diff=$diff tol=$tol" + if {$diff > $tol} { set nodename $tc_root/emon/monMode_Lp$CtrlLoopIdx hset $nodename "drive" if {$CtrlLoopIdx == 1} { @@ -729,6 +736,7 @@ proc inTolerance {CtrlLoopIdx} { } } } else { + # puts "inTolerance(): uuppss - should not go here" hset $tc_root/emon/monMode_Lp1 "idle" hset $tc_root/emon/monMode_Lp2 "idle" hset $tc_root/emon/isInTolerance_Lp1 "inTolerance" @@ -1052,10 +1060,13 @@ proc checktol {tc_root currtime timecheck iLoop iSensor} { set temp [hval $sensorValue] set isetp $tc_root/sensor/setpoint$iLoop set setpt [hval $isetp] - set tol [hval $tc_root/control/tolerance] + set tol [hval $tc_root/control/tolerance1] + if {$iLoop == 2 } { + set tol [hval $tc_root/control/tolerance2] + } set lotemp [expr $setpt - $tol] set hitemp [expr $setpt + $tol] - # puts "checktol: lotemp=$lotemp, temp=$temp, hitemp=$hitemp, tol=$tol" + # puts "checktol: setpt=$setpt lotemp=$lotemp, temp=$temp, hitemp=$hitemp, tol=$tol, iLoop=$iLoop" if { $temp < $lotemp || $temp > $hitemp} { hset $tc_root/emon/isInTolerance_Lp$iLoop "outsideTolerance" set retVal 0 @@ -1696,9 +1707,10 @@ proc createNode {scobj_hpath sct_controller cmdGroup varName readable writable\ # @param tempobj short name for the temperature controller scriptcontext object (typ. tc1 or tc2) # @param tol temperature tolerance in Kelvin (typ. 1) # @return nothing (well, the sct object) -proc mk_sct_lakeshore_3xx {sct_controller klass tempobj tol LSmodel} { +proc mk_sct_lakeshore_3xx {sct_controller klass tempobj tol1 tol2 LSmodel} { if [ catch { - set ::scobj::ls3xx::ls3xx_driveTolerance $tol + set ::scobj::ls3xx::ls3xx_driveTolerance1 $tol1 + set ::scobj::ls3xx::ls3xx_driveTolerance2 $tol2 set ::scobj::ls3xx::ls3xx_LSmodel $LSmodel set ns ::scobj::ls3xx set ::scobj::ls3xx::ls3xx_sct_obj_name $tempobj @@ -1886,11 +1898,16 @@ proc mk_sct_lakeshore_3xx {sct_controller klass tempobj tol LSmodel} { hset $scobj_hpath/control/apply_tolerance 1 helpNotes4user $scobj_hpath "control" "apply_tolerance" - hfactory $scobj_hpath/control/tolerance plain user float - hsetprop $scobj_hpath/control/tolerance units $::scobj::ls3xx::ls3xx_tempUnits + hfactory $scobj_hpath/control/tolerance1 plain user float + hsetprop $scobj_hpath/control/tolerance1 units $::scobj::ls3xx::ls3xx_tempUnits # hsetprop $scobj_hpath/control/tolerance units "K" - hset $scobj_hpath/control/tolerance $tol - helpNotes4user $scobj_hpath "control" "tolerance" + hset $scobj_hpath/control/tolerance1 $tol1 + helpNotes4user $scobj_hpath "control" "tolerance1" + + hfactory $scobj_hpath/control/tolerance2 plain user float + hsetprop $scobj_hpath/control/tolerance2 units $::scobj::ls3xx::ls3xx_tempUnits + hset $scobj_hpath/control/tolerance2 $tol2 + helpNotes4user $scobj_hpath "control" "tolerance2" #hfactory $scobj_hpath/lowerlimit plain mugger float #hsetprop $scobj_hpath/lowerlimit units $::scobj::ls3xx::ls3xx_tempUnits @@ -2027,7 +2044,7 @@ proc mk_sct_lakeshore_3xx {sct_controller klass tempobj tol LSmodel} { # @param port port number on the moxabox (typ. 4001, 4002, 4003, or 4004) # @param tol temperature tolerance in Kelvin (typ. 1) # @return nothing (well, the sct object) -proc add_ls3xx {name IP port terminator {_tol 1.0} {_ls3xx_LSmodel 340} } { +proc add_ls3xx {name IP port terminator {_tol1 1.0} {_tol2 1.0} {_ls3xx_LSmodel 340} } { # ffr 2009-11-09, Don't create a temperature controller for the script validator, this causes the # lakeshore to lock up. # NOTE: I put this outside the catch block because "return" raises an exception @@ -2037,7 +2054,7 @@ proc add_ls3xx {name IP port terminator {_tol 1.0} {_ls3xx_LSmodel 340} } { if [ catch { puts "\nadd_ls3xx: makesctcontroller $name std ${IP}:$port for Lakeshore model $_ls3xx_LSmodel" makesctcontroller sct_ls3xx_$name std ${IP}:$port $terminator - mk_sct_lakeshore_3xx sct_ls3xx_$name environment $name $_tol $_ls3xx_LSmodel + mk_sct_lakeshore_3xx sct_ls3xx_$name environment $name $_tol1 $_tol2 $_ls3xx_LSmodel makesctemon $name /sics/$name/emon/monMode_Lp1 /sics/$name/emon/isInTolerance_Lp1 /sics/$name/emon/errhandler # set m2 "_2" # makesctemon $name$m2 /sics/$name/emon/monMode_Lp2 /sics/$name/emon/isInTolerance_Lp2 /sics/$name/emon/errhandler