initial commit
This commit is contained in:
98
tcl/drivers/svu.tcl
Normal file
98
tcl/drivers/svu.tcl
Normal file
@ -0,0 +1,98 @@
|
||||
# solenoid valve unit
|
||||
|
||||
namespace eval svu {} {
|
||||
}
|
||||
|
||||
proc stdConfig::svu {valves} {
|
||||
controller std "\r" 5
|
||||
prop startcmd "*IDN?"
|
||||
|
||||
pollperiod 1 1
|
||||
|
||||
obj SolenoidValveUnit -text rd
|
||||
prop read svu::read
|
||||
prop @valves $valves
|
||||
prop visible false
|
||||
|
||||
kids "valves" {
|
||||
foreach {v i} $valves {
|
||||
node $v out
|
||||
prop number $i
|
||||
prop write svu::write
|
||||
prop enum off=0,on=1
|
||||
prop label $v
|
||||
prop lineend 0
|
||||
|
||||
node ${v}_time -int wr
|
||||
prop writecmd "t$i %d"
|
||||
prop readcmd t$i
|
||||
prop readfmt %d
|
||||
prop label "timer \[ms\], 0=off"
|
||||
prop lineend 0
|
||||
|
||||
node ${v}_pwm par 0
|
||||
prop enum 1
|
||||
}
|
||||
node idn -text wr
|
||||
prop width 30
|
||||
prop write svu::store
|
||||
prop readcmd i
|
||||
prop label "store timer settings"
|
||||
# prop readfmt %s
|
||||
}
|
||||
}
|
||||
|
||||
proc svu::read {} {
|
||||
sct send "s"
|
||||
return svu::update
|
||||
}
|
||||
|
||||
proc svu::update {{kid 0}} {
|
||||
set res [sct result]
|
||||
set ocmd ""
|
||||
foreach {v i} [sct @valves] {
|
||||
set val [string equal [string index $res [expr $i - 1]] $i]
|
||||
hupdate [sct objectPath]/$v $val
|
||||
hdelprop [sct objectPath]/$v geterror
|
||||
if {[hvali [sct objectPath]/${v}_pwm]} {
|
||||
set t [hvali [sct objectPath]/${v}_time]
|
||||
if {$t > 0} {
|
||||
append ocmd o$i
|
||||
} else {
|
||||
append ocmd c$i
|
||||
}
|
||||
}
|
||||
}
|
||||
if {$kid} {
|
||||
hupdate [sct objectPath] $res
|
||||
hdelprop [sct objectPath] geterror
|
||||
} else {
|
||||
sct update $res
|
||||
}
|
||||
if {$ocmd eq ""} {
|
||||
return idle
|
||||
} else {
|
||||
sct send $ocmd
|
||||
return stdSct::complete
|
||||
}
|
||||
}
|
||||
|
||||
proc svu::write {} {
|
||||
if {[sct target]} {
|
||||
sct send "o[sct number]"
|
||||
} else {
|
||||
sct send "c[sct number]"
|
||||
}
|
||||
return "svu::update 1"
|
||||
}
|
||||
|
||||
proc svu::store {} {
|
||||
sct send "i[sct target]"
|
||||
return svu::updatestore
|
||||
}
|
||||
|
||||
proc svu::updatestore {} {
|
||||
sct update [sct result]
|
||||
sct send "store"
|
||||
return stdSct::complete
|
||||
}
|
Reference in New Issue
Block a user