69 lines
1.6 KiB
Tcl
69 lines
1.6 KiB
Tcl
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
|
|
}
|