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
This commit is contained in:
Ferdi Franceschini
2010-01-15 09:48:17 +11:00
committed by Douglas Clowes
parent 5e2cfbad44
commit 59101a7d4d

View File

@@ -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