# linear ramp for keithley 2450 proc first {old target} { # called first on run / drive # throw an error if not in limits # the actual measured value # the value to go to # make the first step hset [sct]/set $old } proc check {voltage current} { # called every second # measured voltage # measured current return 1 } proc step {set step target} { # called every seconds # from object # [sct objectName] is the name of the calling object if {$target > $set} { set step [expr abs($step)] } else { set step [expr -abs($step)] } if {$step == 0} { # loop forever return 1 } set next [expr $set + $step] set remaining [expr ($target - $next) / $step] if {$remaining <= 0.01} { [sct objectName] set $target return 0 } [sct objectName] set $next return 1 } proc halt {} { # script called on stop }