50 lines
915 B
Tcl
50 lines
915 B
Tcl
# motorized valve (DC-motor with endswitch)
|
|
namespace eval motvalve {} {
|
|
}
|
|
|
|
proc stdConfig::motvalve {} {
|
|
controller std "\n" 5
|
|
prop startcmd "t"
|
|
|
|
obj MotValve wr
|
|
prop write motvalve::write
|
|
prop read motvalve::read
|
|
prop enum close,open,closing,opening
|
|
kids "motor valve" {
|
|
node pos upd
|
|
}
|
|
}
|
|
|
|
proc motvalve::write {} {
|
|
if {[sct target] == 1 || [sct target] == 3} {
|
|
sct send o
|
|
} else {
|
|
sct send c
|
|
}
|
|
return motvalve::read
|
|
}
|
|
|
|
proc motvalve::read {} {
|
|
sct send ep
|
|
return motvalve::update
|
|
}
|
|
|
|
proc motvalve::update {} {
|
|
set pos -1
|
|
set state -1
|
|
set error ""
|
|
scan [sct result] "e%d p%f %s" state pos error
|
|
updateval [sct]/pos $pos
|
|
switch $state {
|
|
0 {sct enum closed,open}
|
|
1 {sct enum close,opened}
|
|
2 {sct enum close,open,closing}
|
|
3 {sct enum close,open,opening=3}
|
|
}
|
|
sct update $state
|
|
if {"$error" ne ""} {
|
|
sct geterror $error
|
|
}
|
|
return idle
|
|
}
|