73 lines
1.3 KiB
Tcl
73 lines
1.3 KiB
Tcl
# keithley 2182 nanovoltmeter with resistivity
|
|
namespace eval resnanov {} {
|
|
}
|
|
|
|
proc stdConfig::resnanov {} {
|
|
controller std "\n" 5
|
|
prop startcmd "*IDN?"
|
|
|
|
obj Keithley2182 rd -none
|
|
prop read resnanov::read
|
|
kids resistivity {
|
|
node u1 upd
|
|
node res upd
|
|
node u2 upd
|
|
node chan out
|
|
default 0
|
|
prop write resnanov::setchan
|
|
prop enum auto,chan1,chan2
|
|
}
|
|
}
|
|
|
|
proc resnanov::read {} {
|
|
sct send ":FETCH?"
|
|
return resnanov::update
|
|
}
|
|
|
|
proc resnanov::update {} {
|
|
set mode [hvali [sct]/chan]
|
|
if {$mode == 0} {
|
|
set chan [silent 1 sct channel]
|
|
} else {
|
|
set chan $mode
|
|
}
|
|
hupdate [sct]/u$chan [sct result]
|
|
hdelprop [sct]/u$chan geterror
|
|
set volt [hvali [sct]/u1]
|
|
if {$chan == 1} {
|
|
set cur [result tt current/manualpower]
|
|
if {$cur} {
|
|
set res [expr $volt / $cur]
|
|
} else {
|
|
set res 0
|
|
}
|
|
hupdate [sct]/res $res
|
|
}
|
|
if {$mode != 0} {
|
|
return idle
|
|
}
|
|
set chan [expr 3-$chan]
|
|
sct send ";SENS:CHAN $chan;:SENS:CHAN?"
|
|
sct channel $chan
|
|
return stdSct::complete
|
|
}
|
|
|
|
proc resnanov::setchan {} {
|
|
set mode [sct target]
|
|
if {$mode == 0} {
|
|
sct update $mode
|
|
return idle
|
|
}
|
|
set chan $mode
|
|
sct send ";SENS:CHAN $chan;:SENS:CHAN?"
|
|
sct channel $chan
|
|
return resnanov::updatechan
|
|
}
|
|
|
|
proc resnanov::updatechan {} {
|
|
sct update [sct result]
|
|
return idle
|
|
}
|
|
|
|
|