initial commit
This commit is contained in:
211
tcl/startup/ips.tcl
Normal file
211
tcl/startup/ips.tcl
Normal file
@ -0,0 +1,211 @@
|
||||
#----- IPS magnet power supply ------
|
||||
|
||||
proc mfLayout args {
|
||||
Group mf "magnetic field control"
|
||||
}
|
||||
|
||||
proc makeIps args {
|
||||
scanargs $args var -limit 0 -startRamp 0.5 -startScript 0 -port 0 -args
|
||||
if {$limit == 0} {
|
||||
error "limit argument required"
|
||||
}
|
||||
makenv mf ips -port $port
|
||||
mf limit $limit
|
||||
mf ramp $startRamp
|
||||
mf startScript $startScript
|
||||
Layout mf
|
||||
appendVars mf.current/Tesla/Current mf/Tesla/Mag_Field
|
||||
if {$startScript != 0} {
|
||||
clientput "INIT ${startScript}_init $args"
|
||||
${startScript}_init $args
|
||||
}
|
||||
}
|
||||
|
||||
proc mfAdvancedGroup {} {
|
||||
Label "before changing the field limit look at the web page of [result device name] for the restrictions on [result Instrument]"
|
||||
Tip max. limit [result mf maxlimit] \[Tesla\]
|
||||
Input "field limit" "mf limit"
|
||||
Tip "delay for auto persistent mode"
|
||||
Input "pers. mode delay" "mf persdelay"
|
||||
Tip "for fields higher than this value, slow ramp is used"
|
||||
Input "trained up to" "mf trainedTo"
|
||||
Newline
|
||||
Label "Workaround for persistent switch problems:"
|
||||
Newline
|
||||
Tip "current \[in Tesla\] to go first in persistent mode"
|
||||
Input "persistent current" "mf perscurrent"
|
||||
Tip "wait time before going to zero \[sec\]"
|
||||
Input "wait time" "mf perswait"
|
||||
Tip "when field is below this value \[Tesla\]: normal operation"
|
||||
Input "do workaround above" "mf perslimit"
|
||||
}
|
||||
|
||||
proc mfGroup {} {
|
||||
set startscript [result mf startScript]
|
||||
if {$startscript eq "0"} {
|
||||
showStatus mf
|
||||
} else {
|
||||
${startscript}_showStatus
|
||||
}
|
||||
Tip magnetic field set point \[Tesla\]
|
||||
Input "set field" "run mf/[result mf targetValue]"
|
||||
Tip do not wait on a drive command
|
||||
CheckBox "no wait" "mf nowait"
|
||||
Newline
|
||||
RadioGroup "mf persmode"
|
||||
Label "persistent mode:"
|
||||
NoNewline
|
||||
Tip "do not go into persistent mode for [result mf persdelay] seconds after any field change"
|
||||
RadioButton 0 off
|
||||
NoNewline
|
||||
Tip "go into persistent mode immediately after changing the field"
|
||||
RadioButton 1 on
|
||||
if {[result mf persmode] != 1} {
|
||||
NoNewline
|
||||
Tip "go never into persistent mode (not recommended)"
|
||||
RadioButton 2 "completely off"
|
||||
}
|
||||
if {[result mf perswitch] == 1} {
|
||||
Label "the switch heater is on"
|
||||
} else {
|
||||
Label "the switch heater is off"
|
||||
}
|
||||
Tip ramp rate \[Tesla/min.\]
|
||||
Tip the actual rate may be lower
|
||||
Tip because of magnet limitations
|
||||
Input "ramp rate" "mf ramp"
|
||||
Group mfAdvanced "advanced settings"
|
||||
}
|
||||
|
||||
proc checkMA7_init {arglist} {
|
||||
if {[sicsdescriptor checkMA7_pars] eq "notfound"} {
|
||||
makeobject checkMA7_pars array logged
|
||||
checkMA7_pars makeitem mode
|
||||
checkMA7_pars makeitem status
|
||||
}
|
||||
if {"[lindex $arglist 0]" eq ""} {
|
||||
error "checkMA7_init needs asymmetric limit as argument"
|
||||
}
|
||||
checkMA7_pars makeitem asymmetric_limit [lindex $arglist 0]
|
||||
checkMA7_pars makeitem symmetric_limit [result mf limit]
|
||||
checkMA7_pars mode unknown
|
||||
checkMA7_pars status 0
|
||||
}
|
||||
|
||||
proc checkMA7_confirm {{value 0}} {
|
||||
if {$value == 0} {return 0}
|
||||
instconfig makeitem checkMA7_expected [result checkMA7_pars mode]
|
||||
instconfig makeitem checkMA7_last [clock seconds]
|
||||
checkMA7_pars status 0
|
||||
mf reconnect
|
||||
return 0
|
||||
}
|
||||
|
||||
publishLazy checkMA7_confirm
|
||||
|
||||
proc checkMA7_restart {{value 0}} {
|
||||
if {$value == 0} {return 0}
|
||||
checkMA7_pars status 0
|
||||
mf restart 1
|
||||
return 0
|
||||
}
|
||||
|
||||
publishLazy checkMA7_restart
|
||||
|
||||
proc checkMA7_showStatus {} {
|
||||
Newline
|
||||
set mode [result checkMA7_pars mode]
|
||||
Label "MA7 in $mode mode"
|
||||
Newline
|
||||
set status [result checkMA7_pars status]
|
||||
if {$status eq "0"} {
|
||||
showStatus mf
|
||||
} else {
|
||||
if {$mode eq "symmetric"} {
|
||||
set lab SYM
|
||||
set other asymmetric
|
||||
set olab ASY
|
||||
} else {
|
||||
set lab ASY
|
||||
set other symmetric
|
||||
set olab SYM
|
||||
}
|
||||
if {$status eq "check"} {
|
||||
Newline
|
||||
Style warning
|
||||
Label "for keeping $mode mode:"
|
||||
Newline
|
||||
Label "check that the current cables are connected to COM and $lab"
|
||||
Newline
|
||||
Style warning
|
||||
Label "for changing to $other mode:"
|
||||
Newline
|
||||
Label "change IPS parameters S11,S02 and S01 (see MA7 web page)"
|
||||
Newline
|
||||
Label "connect the current cables to COM and $olab"
|
||||
Newline
|
||||
Style warning
|
||||
CheckBox "done" "checkMA7_confirm"
|
||||
Newline
|
||||
} else {
|
||||
Newline
|
||||
Style warning
|
||||
Label "see the MA7 web page for the correct parameters on the IPS"
|
||||
Newline
|
||||
Style warning
|
||||
Label $status
|
||||
Style warning
|
||||
CheckBox "click here when the parameters are correctly set" "checkMA7_restart"
|
||||
Newline
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc checkMA7 {} {
|
||||
set expected [silent undefined result instconfig checkMA7_expected]
|
||||
if {[silent 0 result instconfig checkMA7_last] < [clock seconds] - 3600} {
|
||||
set expected undefined
|
||||
}
|
||||
|
||||
set ind [result mf inductance]
|
||||
set rampt [result mf ramp]
|
||||
set rampa [result mf ampRamp]
|
||||
set sym [expr abs($rampt - $rampa * 6.8 / 96.636) < 0.001]
|
||||
set asym [expr abs($rampt - $rampa * 6.2 / 100.657) < 0.001]
|
||||
checkMA7_pars status 0
|
||||
mf startScript checkMA7
|
||||
if {$ind == 112} {
|
||||
set mode symmetric
|
||||
if {! $sym} {
|
||||
checkMA7_pars status "S11 = $ind, S02/S01 do not match"
|
||||
}
|
||||
} elseif {$ind == 78.8} {
|
||||
set mode asymmetric
|
||||
if {! $asym} {
|
||||
checkMA7_pars status "S11 = $ind, S02/S01 do not match"
|
||||
}
|
||||
} elseif {$ind == 0.0} {
|
||||
error [result mf status]
|
||||
} else {
|
||||
if {$sym && !$asym} {
|
||||
checkMA7_pars status "S11: $ind, S02: 96.636, S01.2: 6.8"
|
||||
} elseif {$asym && !$sym} {
|
||||
checkMA7_pars status "S11: $ind, S02: 100.657, S01.2: 6.2"
|
||||
} else {
|
||||
checkMA7_pars status "S11: $ind, S02/S01 bad"
|
||||
}
|
||||
}
|
||||
if {[result checkMA7_pars status] ne "0"} {
|
||||
error "inconsistent IPS parameters. please open 'magnetic field control'"
|
||||
}
|
||||
checkMA7_pars mode $mode
|
||||
checkMA7_pars status 0
|
||||
if {$expected ne $mode} {
|
||||
checkMA7_pars status check
|
||||
error "please open 'magnetic field control' to check the MA7 mode"
|
||||
}
|
||||
mf limit [result checkMA7_pars ${mode}_limit]
|
||||
return done
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user