61 lines
1.2 KiB
Tcl
61 lines
1.2 KiB
Tcl
#current source with LS 340
|
|
|
|
namespace eval cs340 {} {
|
|
}
|
|
|
|
proc stdConfig::cs340 {} {
|
|
controller std "\r" 5
|
|
prop startcmd "*IDN?"
|
|
|
|
obj CS340 out
|
|
prop write cs340::write
|
|
|
|
kids "Current Source" {
|
|
node maxcur out
|
|
prop write cs340::wrcur
|
|
node readback rd
|
|
prop readcmd "HTR?"
|
|
prop readfmt "%g"
|
|
prop update cs340::update
|
|
}
|
|
}
|
|
|
|
proc cs340::update {} {
|
|
sct update [expr [hvali /current/maxcur] * 0.01 * [stdSct::scanresult]]
|
|
return idle
|
|
}
|
|
|
|
proc cs340::write {} {
|
|
set cur [expr [sct target] * 100.0 / [hvali [sct]/maxcur]]
|
|
sct send [format "MOUT 1,%g;MOUT?1" $cur]
|
|
sct update [sct target]
|
|
return complete
|
|
}
|
|
|
|
proc cs340::wrcur {} {
|
|
set tar [sct target]
|
|
set htrr 5
|
|
set mag 1.0
|
|
while {$tar < 0.21} {
|
|
set tar [expr $tar * 10.0]
|
|
incr htrr -2
|
|
set mag [expr $mag * 0.1]
|
|
}
|
|
if {$tar > 1.1} {
|
|
set curr 4
|
|
set curv 2.0
|
|
} elseif {$tar > 0.6} {
|
|
set curr 3
|
|
set curv 1.0
|
|
} elseif {$tar > 0.26} {
|
|
set curr 2
|
|
set curv 0.5
|
|
} else {
|
|
set curr 1
|
|
set curv 0.25
|
|
}
|
|
sct update [expr $curv * $mag]
|
|
sct send "CLIMIT 1,1,10,10,$curr,$htrr;CSET 1,,,1,1;RANGE $htrr;CMODE 1,3;MOUT 1,0;*IDN?"
|
|
return complete
|
|
}
|