212 lines
5.8 KiB
Tcl
212 lines
5.8 KiB
Tcl
#----- 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
|
|
}
|
|
|
|
|