Files
sics/site_ansto/instrument/config/commands/hvcommands.tcl
Douglas Clowes 8b4ab411fd Merge branch 'Wombat' into temp
Conflicts:
	sics/site_ansto/instrument/config/environment/temperature/sct_oxford_mercury.tcl
	sics/site_ansto/instrument/hipd/config/commands/commands.tcl
	sics/site_ansto/instrument/hipd/config/motors/motor_configuration.tcl
	sics/site_ansto/instrument/hipd/util/sics_config.ini
2015-02-19 15:26:13 +11:00

444 lines
9.2 KiB
Tcl

set scaleval 2000.0
set rampstep 100
set rampdelay 3
set motdir 1
set pulserstate 0
proc SetVoltScale {newscaleval} {
global scaleval
set scaleval $newscaleval
}
proc VoltScale {involt} {
global scaleval
return [expr {($involt*1.0)/$scaleval}]
}
proc SetRampParms {_rampstep _rampdelay} {
global rampstep rampdelay
set rampstep $_rampstep
set rampdelay $_rampdelay
}
proc SetVolt {volt} {
global pulserstate
if {$volt== 0} {
PulserOff
set pulserstate 0
} else {
set pulservolt [VoltScale $volt]
# sct_pulser send "VOLT:OFFS $pulservolt; OFFS?"
# PulserDC $pulservolt
if {$pulserstate==0} {
PulserDC $pulservolt
PulserOn
set pulserstate 1
} else {
sct_pulser send "VOLT:OFFS $pulservolt; OFFS?"
PulserOn
}
}
}
proc VoltSetStep {start step fin delay} {
set i [expr {$start*1.0}]
set loopvar 1
SetVolt $i
if {($start == $fin) || ($step == 0)} {break}
while {$loopvar} {
wait $delay
if {($start < $fin)} {
set i [expr {$i + abs($step)}]
if {$i >= $fin} {
set i $fin
set loopvar 0
}
}
if {($start > $fin)} {
set i [expr {$i - abs($step)}]
if {$i <= $fin} {
set i $fin
set loopvar 0
}
}
SetVolt $i
}
}
proc GetVolt {} {
sct_pulser transact VOLT:OFFS?
}
proc SingleVolt {volt oscno} {
histmem mode unlimited
newfile HISTOGRAM_XY
SetVolt $volt
oct oscillate_count $oscno
oct oscillate start
save 0
}
proc SetDC {} {
pulseroff
#NOTE: Setting FUNC DC generates a remote ctrl error if the
# burst mode happens to be on
set resp [sct_pulser send "BURS:STAT OFF;:FUNC DC;:VOLT:OFFS 0; OFFS?"]
pulseron
}
proc VoltRamp {start step fin oscno} {
histmem mode unlimited
newfile HISTOGRAM_XY
set loopvar 1
set i 0
while {$loopvar} {
set j [expr {$i*$step+$start}]
if {$j> $fin && $step > 0} {break}
if {$j< $fin && $step < 0} {break}
SetVolt $j
oct oscillate_count $oscno
oct oscillate start
save $i
incr i
}
}
proc SingleVTexScan {mot tstart tstep tfin oscno} {
global motdir
broadcast in singlevtexscan
set loopvar 1
set i_bool 0
histmem mode unlimited
if {$motdir == 1} {
set currentmot $tstart
set i 0
} else {
set currentmot $tfin
set i [expr {int(($tfin-$tstart)/$tstep)}]
}
newfile HISTOGRAM_XY
while {$i_bool==0} {
drive $mot $currentmot
oct oscillate_count $oscno
oct oscillate start
hmm countblock
save $i
if {($motdir > 0)} {
set currentmot [expr {$currentmot + $tstep}]
if {$currentmot > $tfin} {set i_bool 1}
incr i
} else {
set currentmot [expr {$currentmot - $tstep}]
if {$currentmot < $tstart} {set i_bool 1}
incr i -1
}
}
set motdir [expr {(-1*$motdir)}]
}
proc VListTexScan {voltlist mot tstart tstep tfin oscno} {
global rampstep rampdelay
set curvolt [lindex $voltlist 0]
broadcast $curvolt
SetVolt $curvolt
foreach volt $voltlist {
broadcast $volt
VoltSetStep $curvolt $rampstep $volt $rampdelay
SingleVTexScan $mot $tstart $tstep $tfin $oscno
}
}
proc SquarePulseTexture {motor start step numsteps volt freq bins oscno} {
histmem mode unlimited
newfile HISTOGRAM_XYT
histmem_period_strobo $freq $bins
wait 3
set pulservolt [VoltScale $volt]
PulserSquare $freq $pulservolt
PulserOn
for {set i 0} {$i < $numsteps} {incr i} {
drive $motor [expr $i*$step+$start]
oct oscillate_count $oscno
oct oscillate start
save $i
}
}
proc UniPulseTexture {motor start step numsteps volt freq bins oscno} {
histmem mode unlimited
newfile HISTOGRAM_XYT
histmem_period_strobo $freq $bins
wait 3
set pulservolt [VoltScale [expr {$volt*1.0}]]
set pulseroffs [VoltScale [expr {$volt*0.5}]]
PulserSquareOffs $freq $pulservolt $pulseroffs
PulserOn
for {set i 0} {$i < $numsteps} {incr i} {
drive $motor [expr $i*$step+$start]
oct oscillate_count $oscno
oct oscillate start
save $i
}
}
proc BehlkePulseTexture {motor start step numsteps freq bins oscno} {
histmem mode unlimited
newfile HISTOGRAM_XYT
histmem_period_strobo $freq $bins
wait 3
PulserSquareOffs $freq 2.5 2.5
PulserOn
for {set i 0} {$i < $numsteps} {incr i} {
drive $motor [expr $i*$step+$start]
oct oscillate_count $oscno
oct oscillate start
save $i
}
}
proc SquarePulseVolt {start step fin freq bins oscno} {
histmem mode unlimited
newfile HISTOGRAM_XYT
histmem_period_strobo $freq $bins
wait 3
set loopvar 1
set i 0
while {$loopvar} {
set j [expr {$i*$step+$start}]
if {$j> $fin && $step > 0} {break}
if {$j< $fin && $step < 0} {break}
if {$j== 0} {
PulserOff
} else {
set pulservolt [VoltScale $j]
PulserSquare $freq $pulservolt
PulserOn
# sct_pulser send "APPL:SQU $freq,$pulservolt,0"
}
oct oscillate_count $oscno
oct oscillate start
save $i
incr i
}
}
proc SquarePulseFreq {volt freqlist bins oscno} {
histmem mode unlimited
newfile HISTOGRAM_XYT
set loopvar 1
set i 0
foreach freq $freqlist {
set pulservolt [VoltScale $volt]
histmem_period_strobo $freq $bins
wait 3
PulserSquare $freq $pulservolt
PulserOn
# sct_pulser send "APPL:SQU $freq,$pulservolt,0"
oct oscillate_count $oscno
oct oscillate start
save $i
incr i
}
}
proc BehlkePulseFreq {freqlist bins oscno} {
histmem mode unlimited
newfile HISTOGRAM_XYT
set loopvar 1
set i 0
foreach freq $freqlist {
histmem_period_strobo $freq $bins
wait 3
PulserSquareOffs $freq 2.5 2.5
PulserOn
oct oscillate_count $oscno
oct oscillate start
save $i
incr i
}
}
proc SinePulseFreq {volt freqlist bins oscno} {
histmem mode unlimited
newfile HISTOGRAM_XYT
set loopvar 1
set i 0
foreach freq $freqlist {
set pulservolt [VoltScale $volt]
histmem_period_strobo $freq $bins
wait 3
PulserSin $freq $pulservolt
PulserOn
oct oscillate_count $oscno
oct oscillate start
save $i
incr i
}
}
proc UniPulseFreq {volt freqlist bins oscno} {
histmem mode unlimited
newfile HISTOGRAM_XYT
set loopvar 1
set i 0
foreach freq $freqlist {
histmem_period_strobo $freq $bins
wait 3
# PulserSquareOffs $freq $pulservolt [expr {$pulservolt/2}]
set pulservolt [VoltScale [expr {$volt*1.0}]]
set pulseroffs [VoltScale [expr {$volt*0.5}]]
PulserSquareOffs $freq $pulservolt $pulseroffs
PulserOn
# sct_pulser send "APPL:SQU $freq,$pulservolt,[expr {$pulservolt/2}]"
oct oscillate_count $oscno
oct oscillate start
save $i
incr i
}
}
proc UniPulseFatigue {volt freq bins oscno reps runs} {
histmem mode unlimited
set pulservolt [VoltScale $volt]
set halfvolt [expr {$pulservolt/2.0}]
histmem_period_strobo $freq $bins
wait 3
PulserSquareOffs $freq $halfvolt $halfvolt
PulserOn
for {set i 0} {$i<$runs} {incr i} {
newfile HISTOGRAM_XYT
for {set j 0} {$j<$reps} {incr j} {
oct oscillate_count $oscno
oct oscillate start
save $j
}
oscmd stop
}
PulserOff
set pulserstate 0
Histmem_strobo_off
}
proc PulserBurst {} {
sct_pulser send "BURS:MODE TRIG; MODE?"
sct_pulser send "TRIG:SOUR BUS; SOUR?"
sct_pulser send "BURS:STAT ON; STAT?"
PulserOn
sct_pulser send "*TRG;:BURS:NCYC?"
while {1} {
set sval [sct_pulser transact *OPC?]
if {[string first 1 $sval] >-1} {break}
}
PulserOff
set pulserstate 0
}
proc VoltPulseRun {vlo vhi freq cycl} {
PulserOff
sct_pulser send "VOLT:LOW [VoltScale $vlo]; LOW?"
sct_pulser send "VOLT:HIGH [VoltScale $vhi]; HIGH?"
sct_pulser send "FREQ $freq;:FREQ?"
sct_pulser send "BURS:PHAS [expr {90.0 - ($vhi*180.0)/(($vhi-$vlo)*1.0)}]; PHAS?"
sct_pulser send "BURS:MODE TRIG; MODE?"
set ploop [expr {int($cycl/50000)}]
set prem [expr {$cycl % 50000}]
if {$ploop >0} {
for {set i 0} {$i< $ploop} {incr i} {
Pulser send "BURS:NCYC 50000; NCYC?"
PulserBurst
}
}
sct_pulser send "BURS:NCYC $prem; NCYC?"
PulserBurst
PulserOff
set pulserstate 0
sct_pulser send "BURS:STAT OFF; STAT?"
}
proc VoltPulses {vlo vhi freq cycl} {
PulserOff
sct_pulser send "FUNC SQU;:FUNC?"
VoltPulseRun $vlo $vhi $freq $cycl
}
proc VoltTriPulses {vlo vhi freq cycl} {
PulserOff
sct_pulser send "FUNC RAMP;:FUNC?"
sct_pulser send "FUNC:RAMP:SYMM 50;:FUNC:RAMP:SYMM?"
VoltPulseRun $vlo $vhi $freq $cycl
}
proc OneTri {volt period} {
PulserOff
if {$volt > 0} {
sct_pulser send "VOLT:LOW 0; LOW?"
sct_pulser send "VOLT:HIGH [VoltScale $volt]; HIGH?"
sct_pulser send "BURS:PHAS -90; PHAS?"
} else {
sct_pulser send "VOLT:LOW [VoltScale $volt]; LOW?"
sct_pulser send "VOLT:HIGH 0; HIGH?"
sct_pulser send "BURS:PHAS 90; PHAS?"
}
sct_pulser send "FUNC RAMP;:FUNC?"
sct_pulser send "FUNC:RAMP:SYMM 50;:FUNC:RAMP:SYMM?"
sct_pulser send "FREQ [expr {1.0/$period}];:FREQ?"
sct_pulser send "BURS:MODE TRIG; MODE?"
sct_pulser send "BURS:NCYC 1; NCYC?"
PulserBurst
PulserOff
set pulserstat 0
}
publish GetVolt user
publish SetDC user
publish SetVolt user
publish SetVoltScale user
publish SingleVTexScan user
publish VListTexScan user
publish SetRampParms user
publish SingleVolt user
publish VoltRamp user
publish SquarePulseVolt user
publish SquarePulseFreq user
publish UniPulseFreq user
publish VoltTextureRamp user
publish VoltPulses user
publish VoltPulseRun user
publish VoltTriPulses user
publish OneTri user
publish UniPulseFatigue user
publish SquarePulseTexture user
publish BehlkePulseTexture user
publish BehlkePulseFreq user
publish UniPulseTexture user
publish VoltSetStep user