140 lines
2.7 KiB
Tcl
140 lines
2.7 KiB
Tcl
# magnet resistivity measured with IPS
|
|
|
|
namespace eval magres {} {
|
|
}
|
|
|
|
proc stdConfig::magres {} {
|
|
variable hostport none
|
|
variable name
|
|
controller syncedprot
|
|
pollperiod 1 1
|
|
|
|
obj magres rd
|
|
prop read magres::read
|
|
prop last 0
|
|
prop htr 0
|
|
prop exc 0
|
|
kids "magnet resistance" {
|
|
node active out
|
|
default 0
|
|
prop enum 1
|
|
prop write magres::setactive
|
|
|
|
node coil upd
|
|
|
|
node excitation par 0.1
|
|
}
|
|
}
|
|
|
|
proc magres::setactive {} {
|
|
if {[sct target]} {
|
|
sct init 1
|
|
mf persmode 3
|
|
} else {
|
|
sct init 11
|
|
}
|
|
sct update [sct target]
|
|
return idle
|
|
}
|
|
|
|
proc magres::read {} {
|
|
if {[result mf persmode] != 3} {
|
|
# switch off immedately as a run mf has been done
|
|
updateval [sct]/active 0
|
|
return idle
|
|
}
|
|
set ramp [result mf ramp]
|
|
set ampRamp [result mf ampRamp]
|
|
if {$ramp == 0 || $ampRamp == 0} {
|
|
mf ramp 0.5
|
|
sct init 1
|
|
return idle
|
|
}
|
|
set fact [expr $ramp / $ampRamp]
|
|
set exc [hvali [sct]/excitation]
|
|
if {abs($exc) > 0.1} {
|
|
clientput "excitation is limited to 0.1 A"
|
|
set exc 0.1
|
|
}
|
|
set init [sct init]
|
|
if {[hvali [sct]/active] == 0} {
|
|
sct geterror "off"
|
|
if {$init > 0} {
|
|
if {$init <= 10} {
|
|
if {abs([result mf current] - [sct exc] * $fact) > 0.001} {
|
|
clientput "bad state of power supply"
|
|
return idle
|
|
}
|
|
set init 11
|
|
}
|
|
switch $init {
|
|
11 { mf send C3 }
|
|
12 { mf send H2 }
|
|
30 { mf send I0 }
|
|
31 { mf send A1 }
|
|
32 { mf send H0 }
|
|
33 {
|
|
mf send C1
|
|
mf persmode 1
|
|
}
|
|
34 { return idle }
|
|
default {
|
|
}
|
|
}
|
|
incr init
|
|
sct init $init
|
|
}
|
|
return idle
|
|
}
|
|
if {$init > 10 || ($init == 10 && $exc != [sct exc])} {
|
|
set init 1
|
|
}
|
|
if {$init < 10} {
|
|
switch $init {
|
|
1 {
|
|
mf send C3
|
|
}
|
|
2 { mf send T0.5000 }
|
|
3 {
|
|
mf send [format I%.4f $exc]
|
|
sct exc $exc
|
|
}
|
|
4 { mf send A1 }
|
|
5 { mf send R0 }
|
|
default {
|
|
sct init 10
|
|
return idle
|
|
}
|
|
}
|
|
incr init
|
|
sct init $init
|
|
return idle
|
|
}
|
|
set mf [expr $fact * $exc]
|
|
set curT [result mf current]
|
|
set res [expr [result mf voltage] / $curT * $fact]
|
|
set now [DoubleTime]
|
|
if {[sct htr]} {
|
|
if {$now > [sct last] + 10} {
|
|
updateval [sct]/coil $res
|
|
if {$now > [sct last] + 20} {
|
|
sct last $now
|
|
sct htr 0
|
|
mf send H0
|
|
}
|
|
}
|
|
} else {
|
|
if {$now > [sct last] + 10} {
|
|
sct update $res
|
|
if {$res > 1} {
|
|
hsetprop [sct]/coil geterror off
|
|
} elseif {$now > [sct last] + 20} {
|
|
sct last $now
|
|
sct htr 1
|
|
mf send H2
|
|
}
|
|
}
|
|
}
|
|
return idle
|
|
}
|