initial commit
This commit is contained in:
134
tcl/drivers/dilhtr.tcl
Normal file
134
tcl/drivers/dilhtr.tcl
Normal file
@@ -0,0 +1,134 @@
|
||||
namespace eval dilhtr {
|
||||
}
|
||||
|
||||
proc stdConfig::dilhtr {} {
|
||||
variable name
|
||||
variable node
|
||||
|
||||
controller std timeout=20
|
||||
prop startcmd id
|
||||
set node $node/tasks
|
||||
prop start dilhtr::start
|
||||
|
||||
pollperiod 1 1
|
||||
|
||||
obj DILHTR14 wr
|
||||
prop label {power set [mW]}
|
||||
prop write dilhtr::write
|
||||
prop read dilhtr::poll
|
||||
prop cmd p
|
||||
prop fact 0.001
|
||||
|
||||
kids "dil heater ($name)" {
|
||||
node resistance out
|
||||
prop write dilhtr::write
|
||||
prop cmd r
|
||||
|
||||
node power upd
|
||||
prop label "power read"
|
||||
prop cmd pr
|
||||
prop fact 0.001
|
||||
|
||||
node sigma upd
|
||||
prop label "power error"
|
||||
prop cmd dp
|
||||
prop fact 0.001
|
||||
|
||||
node current upd
|
||||
prop help {heater current [mA]}
|
||||
prop cmd i
|
||||
|
||||
node voltage upd
|
||||
prop help {heater voltage [mV]}
|
||||
prop cmd v
|
||||
|
||||
node state -int upd
|
||||
prop enum ok,short,open
|
||||
prop cmd h
|
||||
|
||||
node range -int upd
|
||||
prop enum low=1,mid,high
|
||||
prop cmd k
|
||||
|
||||
node lim out
|
||||
prop write dilhtr::write
|
||||
prop help "correction for resistor value and power\nhappens only above this value"
|
||||
prop cmd l
|
||||
prop fact 0.001
|
||||
|
||||
node tol out
|
||||
prop write dilhtr::write
|
||||
prop help "correction for resistor value and power\nhappens only when difference is < tol * sigma"
|
||||
prop cmd t
|
||||
|
||||
node timeout out
|
||||
prop write dilhtr::write
|
||||
prop help "after 'timeout' seconds with no connection, the heater is switched off"
|
||||
prop cmd tmo
|
||||
|
||||
node pmin upd
|
||||
|
||||
node pmax upd
|
||||
|
||||
node cor upd
|
||||
prop cmd cor
|
||||
|
||||
node resAdjust -int out
|
||||
prop cmd ra
|
||||
}
|
||||
}
|
||||
|
||||
proc dilhtr::start {} {
|
||||
sct send id
|
||||
return stdSct::start
|
||||
}
|
||||
|
||||
proc dilhtr::cmds {} {
|
||||
set base [sct objectPath]
|
||||
sct cmd_p $base
|
||||
foreach node [hlist $base] {
|
||||
catch {
|
||||
set cmd [hgetpropval $base/$node cmd]
|
||||
sct cmd_$cmd $base/$node
|
||||
lappend query $cmd
|
||||
}
|
||||
}
|
||||
return [join $query " "]
|
||||
}
|
||||
|
||||
proc dilhtr::poll {{query {}}} {
|
||||
set base [sct objectPath]
|
||||
sct send "p [dilhtr::cmds]"
|
||||
return dilhtr::update
|
||||
}
|
||||
|
||||
proc dilhtr::update {} {
|
||||
variable pathlist
|
||||
|
||||
set kill ""
|
||||
foreach item [split [sct result]] {
|
||||
set itm [split $item =]
|
||||
set var [lindex $itm 0]
|
||||
set val [lindex $itm 1]
|
||||
catch {
|
||||
set path [sct cmd_$var]
|
||||
set fact [silent 1 hgetpropval $path fact]
|
||||
updateval $path [expr $fact * $val]
|
||||
}
|
||||
}
|
||||
set pr [hvali [sct objectPath]/power]
|
||||
set dp [hvali [sct objectPath]/sigma]
|
||||
hupdate [sct objectPath]/pmin [expr $pr - $dp]
|
||||
hupdate [sct objectPath]/pmax [expr $pr + $dp]
|
||||
if {$kill eq ""} {
|
||||
return idle
|
||||
}
|
||||
sct send [string trim $kill]
|
||||
return stdSct::complete
|
||||
}
|
||||
|
||||
proc dilhtr::write {} {
|
||||
set p [expr [sct target]/double([silent 1 sct fact])]
|
||||
sct send "[sct cmd]=$p [dilhtr::cmds]"
|
||||
return dilhtr::update
|
||||
}
|
||||
Reference in New Issue
Block a user