Files
sea/tcl/drivers/sg382.tcl
2022-08-22 14:59:00 +02:00

61 lines
1.2 KiB
Tcl

namespace eval sg382 {} {
}
proc stdConfig::sg382 {} {
controller std "\r" 5
prop startcmd "*IDN?"
pollperiod 5 5
obj "SG382" wr
prop read sg382::read
prop write sg382::write
kids "frequency generator" {
node base par 0
prop width 12
prop fmt %.8g
node target -text out
prop write sg382::writetext
prop width 16
}
return "SG382 frequency generator"
}
proc sg382::read {} {
sct send "FREQ?"
return sg382::update
}
proc sg382::update {} {
set value [sct result]
hupdate [sct]/target $value
set base [hval [sct]/base]
if {abs($base - $value) > 1e6} {
set base [expr 1e5 * int($value / 1e5)]
hupdate [sct]/base $base
}
sct update [expr $value - $base]
return idle
}
proc sg382::write {} {
set base [hval [sct]/base]
set value [expr [sct target] + $base]
if {abs($base - $value) > 1e6} {
set base [expr 1e5 * int($value / 1e5)]
hupdate [sct]/base $base
}
sct send "FREQ $value;FREQ?"
sct update [expr $value - $base]
return sg382::update
}
proc sg382::writetext {} {
sct send "FREQ [sct target];FREQ?"
[sct controller] queue [sct parent] read read
return stdSct::completeUpdate
}