Files
sea/tcl/drivers/irfcurrent.tcl
2022-08-18 15:04:28 +02:00

50 lines
1.3 KiB
Tcl

namespace eval irfcurrent {
}
proc stdConfig::irfcurrent {} {
variable name
controller std timeout=20
prop startcmd v
obj IRFCURRENT rd
prop read irfcurrent::poll
kids "current monitor ($name)" {
node i1 upd
node i2 upd
node i3 upd
node i4 upd
node ib upd
}
}
proc irfcurrent::poll {} {
sct send "?"
return irfcurrent::update
}
proc irfcurrent::update {} {
if {[scan [sct result] "%f,%f,%f,%f,%f" i1 i2 ib i3 i4] != 5} {
error "[sct]: illegal answer"
}
set i1 [expr $i1 - 854]
set i2 [expr $i2 - 855.5]
set i3 [expr $i3 - 852]
set i4 [expr $i4 - 851.2]
# there is some cross talk between i1-i2 and i3-i4
#updateval [sct]/i1 [expr 0.0312 * $i1 - 0.0011 * $i2]
#updateval [sct]/i2 [expr 0.0248 * $i2 - 0.0028 * $i1]
#updateval [sct]/i3 [expr 0.0262 * $i3 - 0.0016 * $i4]
#updateval [sct]/i4 [expr 0.0286 * $i4 - 0.0007 * $i3]
updateval [sct]/i1 [expr 0.0405 * $i1 - 0.0014 * $i2]
updateval [sct]/i2 [expr 0.0323 * $i2 - 0.0037 * $i1]
updateval [sct]/i3 [expr 0.0341 * $i3 - 0.0021 * $i4]
updateval [sct]/i4 [expr 0.0372 * $i4 - 0.0010 * $i3]
# not sure if the background sensor would help to correct for offset shifts.
# record for reference
updateval [sct]/ib [expr ($ib - 850) * 0.025]
sct update [expr [hval [sct]/i1] + [hval [sct]/i2] + [hval [sct]/i3] + [hval [sct]/i4]]
return idle
}