initial commit
This commit is contained in:
68
tcl/drivers/lambdawatch.tcl
Normal file
68
tcl/drivers/lambdawatch.tcl
Normal file
@@ -0,0 +1,68 @@
|
||||
namespace eval lambdawatch {} {
|
||||
}
|
||||
|
||||
proc stdConfig::lambdawatch {safefield maxfield safetemp args} {
|
||||
controller syncedprot
|
||||
prop write lambdawatch::write
|
||||
|
||||
pollperiod 15 15
|
||||
|
||||
obj LambdaWatch rd
|
||||
prop read lambdawatch::loop
|
||||
prop cntlim 10
|
||||
prop cnt 0
|
||||
|
||||
kids "lambda watch" {
|
||||
node safefield out
|
||||
default $safefield
|
||||
node maxfield out
|
||||
default $maxfield
|
||||
node safetemp out
|
||||
default $safetemp
|
||||
node coiltemp -text par "$args"
|
||||
prop width 32
|
||||
}
|
||||
}
|
||||
|
||||
proc lambdawatch::write {} {
|
||||
hupdate [sct parent]/status ""
|
||||
sct update [sct target]
|
||||
return idle
|
||||
}
|
||||
|
||||
proc lambdawatch::loop {} {
|
||||
set saff [hval [sct]/safefield]
|
||||
set mf [result mf]
|
||||
if {$mf <= $saff} {
|
||||
if {[hval [sct]/status] ne "" && ([result mf limit] > $saff || [result mf] < $saff - 0.01)} {
|
||||
hupdate [sct]/status ""
|
||||
}
|
||||
sct update 4.5
|
||||
return idle
|
||||
}
|
||||
set saft [hval [sct]/safetemp]
|
||||
set maxf [hval [sct]/maxfield]
|
||||
set limt [expr $saft + ($maxf - $mf) / ($maxf - $saff) * (4.5 - $saft)]
|
||||
sct update $limt
|
||||
set cnt [sct cnt]
|
||||
foreach node [hval [sct]/coiltemp] {
|
||||
if {[hval $node] > $limt} {
|
||||
clientput [format "WARNING: %s > %g" $node $limt]
|
||||
incr cnt 2
|
||||
} else {
|
||||
incr cnt -1
|
||||
}
|
||||
}
|
||||
if {$cnt < [sct cntlim]} {
|
||||
sct cnt [expr max(0, $cnt)]
|
||||
return idle
|
||||
}
|
||||
if {[result mf targetValue] > $saff || ![string match "* mf *" " [split [listexe]] "]} {
|
||||
set txt [format "lambda controller getting warm, set mf and limit to %s" $saff]
|
||||
hupdate [sct]/status $txt
|
||||
run mf $saff
|
||||
mf limit $saff
|
||||
clientlog "ERROR: $txt"
|
||||
}
|
||||
return idle
|
||||
}
|
||||
Reference in New Issue
Block a user