Make the slits cartesian and do a little cleaning up

r1781 | dcl | 2007-04-02 15:00:20 +1000 (Mon, 02 Apr 2007) | 2 lines
This commit is contained in:
Douglas Clowes
2007-04-02 15:00:20 +10:00
parent c944a7383d
commit 636fb54aa7
2 changed files with 253 additions and 449 deletions

View File

@@ -1,7 +1,7 @@
# $Revision: 1.11 $
# $Date: 2007-04-01 02:24:16 $
# $Revision: 1.12 $
# $Date: 2007-04-02 05:00:20 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: ffr $
# Last revision by: $Author: dcl $
# START MOTOR CONFIGURATION
@@ -60,27 +60,39 @@ set ss2u_Home [expr $ss2v_Gap/2*$slitStepRate]
set ss2d_Home [expr $ss2v_Gap/2*$slitStepRate]
#Default upper and lower ranges for vertical slits
set vertSlitLowRange 25
set vertSlitUpRange 100
set vSlitHome 0
set vSlitLoRange 20
set vSlitHiRange 100
#Default upper and lower ranges for horizontal slits
set horSlitLowRange 25
set horSlitUpRange 25
set hSlitHome 0
set hSlitLoRange 15
set hSlitHiRange 35
# set movecount high to reduce the frequency of
#calculate individual slit motor low ranges
set ss1r_LoRange [expr $hSlitHome - $hSlitLoRange]
set ss1l_LoRange [expr $hSlitHome - $hSlitHiRange]
set ss1u_LoRange [expr $vSlitHome - $vSlitLoRange]
set ss1d_LoRange [expr $vSlitHome - $vSlitHiRange]
set ss2r_LoRange [expr $hSlitHome - $hSlitLoRange]
set ss2l_LoRange [expr $hSlitHome - $hSlitHiRange]
set ss2u_LoRange [expr $vSlitHome - $vSlitLoRange]
set ss2d_LoRange [expr $vSlitHome - $vSlitHiRange]
#calculate individual slit motor high ranges
set ss1r_HiRange [expr $hSlitHome + $hSlitHiRange]
set ss1l_HiRange [expr $hSlitHome + $hSlitLoRange]
set ss1u_HiRange [expr $vSlitHome + $vSlitHiRange]
set ss1d_HiRange [expr $vSlitHome + $vSlitLoRange]
set ss2r_HiRange [expr $hSlitHome + $hSlitHiRange]
set ss2l_HiRange [expr $hSlitHome + $hSlitLoRange]
set ss2u_HiRange [expr $vSlitHome + $vSlitHiRange]
set ss2d_HiRange [expr $vSlitHome + $vSlitLoRange]
# set movecount high to reduce the frequency of
# hnotify messages to a reasonable level
set move_count 100
# Run slit homing routines on controllers 3 and 4
#if [catch {dmc_connect dmc2280_controller3} ] {
# dmc_sendCmd dmc2280_controller3 "XQ#HOME,1"
# dmc_close dmc2280_controller3
#}
#if [catch {dmc_connect dmc2280_controller4} ] {
# dmc_sendCmd dmc2280_controller4 "XQ#HOME,1"
# dmc_close dmc2280_controller4
#}
############################
# Motor Controller 1
# Motor Controller 1
@@ -463,14 +475,16 @@ Motor ss1r DMC2280 [params \
port $dmc2280_controller3(port)\
axis E\
units mm\
hardlowerlim -15\
hardupperlim 35\
hardlowerlim $ss1r_LoRange\
hardupperlim $ss1r_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1r_Home]
setHomeandRange -motor ss1r -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange
ss1r softlowerlim $ss1r_LoRange
ss1r softupperlim $ss1r_HiRange
ss1r home 0
ss1r movecount $move_count
ss1r part filter
ss1r long_name right
@@ -482,14 +496,16 @@ Motor ss1l DMC2280 [params \
port $dmc2280_controller3(port)\
axis F\
units mm\
hardlowerlim -15\
hardupperlim 35\
hardlowerlim $ss1l_LoRange\
hardupperlim $ss1l_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1l_Home]
setHomeandRange -motor ss1l -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange
ss1l softlowerlim $ss1l_LoRange
ss1l softupperlim $ss1l_HiRange
ss1l home 0
ss1l movecount $move_count
ss1l part filter
ss1l long_name left
@@ -501,14 +517,16 @@ Motor ss1u DMC2280 [params \
port $dmc2280_controller3(port)\
axis G\
units mm\
hardlowerlim -20\
hardupperlim 100\
hardlowerlim $ss1u_LoRange\
hardupperlim $ss1u_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1u_Home]
setHomeandRange -motor ss1u -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange
ss1u softlowerlim $ss1u_LoRange
ss1u softupperlim $ss1u_HiRange
ss1u home 0
ss1u movecount $move_count
ss1u part filter
ss1u long_name top
@@ -520,14 +538,16 @@ Motor ss1d DMC2280 [params \
port $dmc2280_controller3(port)\
axis H\
units mm\
hardlowerlim -20\
hardupperlim 100\
hardlowerlim $ss1d_LoRange\
hardupperlim $ss1d_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1d_Home]
setHomeandRange -motor ss1d -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange
ss1d softlowerlim $ss1d_LoRange
ss1d softupperlim $ss1d_HiRange
ss1d home 0
ss1d movecount $move_count
ss1d part filter
ss1d long_name bottom
@@ -578,14 +598,16 @@ Motor ss2r DMC2280 [params \
port $dmc2280_controller4(port)\
axis E\
units mm\
hardlowerlim -15\
hardupperlim 35\
hardlowerlim $ss2r_LoRange\
hardupperlim $ss2r_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2r_Home]
setHomeandRange -motor ss2r -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange
ss2r softlowerlim $ss2r_LoRange
ss2r softupperlim $ss2r_HiRange
ss2r home 0
ss2r movecount $move_count
ss2r part filter
ss2r long_name right
@@ -597,14 +619,16 @@ Motor ss2l DMC2280 [params \
port $dmc2280_controller4(port)\
axis F\
units mm\
hardlowerlim -15\
hardupperlim 35\
hardlowerlim $ss2l_LoRange\
hardupperlim $ss2l_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2l_Home]
setHomeandRange -motor ss2l -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange
ss2l softlowerlim $ss2l_LoRange
ss2l softupperlim $ss2l_HiRange
ss2l home 0
ss2l movecount $move_count
ss2l part filter
ss2l long_name left
@@ -616,14 +640,16 @@ Motor ss2u DMC2280 [params \
port $dmc2280_controller4(port)\
axis G\
units mm\
hardlowerlim -20\
hardupperlim 100\
hardlowerlim $ss2u_LoRange\
hardupperlim $ss2u_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2u_Home]
setHomeandRange -motor ss2u -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange
ss2u softlowerlim $ss2u_LoRange
ss2u softupperlim $ss2u_HiRange
ss2u home 0
ss2u movecount $move_count
ss2u part filter
ss2u long_name top
@@ -635,14 +661,16 @@ Motor ss2d DMC2280 [params \
port $dmc2280_controller4(port)\
axis H\
units mm\
hardlowerlim -20\
hardupperlim 100\
hardlowerlim $ss2d_LoRange\
hardupperlim $ss2d_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2d_Home]
setHomeandRange -motor ss2d -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange
ss2d softlowerlim $ss2d_LoRange
ss2d softupperlim $ss2d_HiRange
ss2d home 0
ss2d movecount $move_count
ss2d part filter
ss2d long_name bottom
@@ -663,182 +691,59 @@ MakeConfigurableMotor sth
sth readscript sthGet
sth drivescript sthSet
#--------------------------------------------------------
proc ss1widthscript {val} {
set currentWidth [expr [SplitReply [ss1r]] + [SplitReply [ss1l]]]
proc get_gap_width {m1 m2} {
return [expr [SplitReply [$m1]] - [SplitReply [$m2]]]
}
proc set_gap_width {m1 m2 val} {
set currentWidth [expr [SplitReply [$m1]] - [SplitReply [$m2]]]
set diff [expr $val - $currentWidth]
set newD1R [expr [SplitReply [ss1r]] + $diff/2]
set newD1L [expr [SplitReply [ss1l]] + $diff/2]
return "ss1r=$newD1R,ss1l=$newD1L"
set newD1R [expr [SplitReply [$m1]] + $diff/2]
set newD1L [expr [SplitReply [$m2]] - $diff/2]
return "$m1=$newD1R,$m2=$newD1L"
}
publish ss1widthscript user
#-------------------------------------------------------
proc ss1readwidth {} {
return [expr [SplitReply [ss1r]] + [SplitReply [ss1l]]]
proc get_gap_offset {m1 m2} {
set S1 [SplitReply [$m1]]
set S2 [SplitReply [$m2]]
return [ expr ($S1 + $S2)/2.0 ]
}
publish ss1readwidth user
MakeConfigurableMotor ss1hg
ss1hg drivescript ss1widthscript
ss1hg readscript ss1readwidth
#--------------------------------------------------------
proc ss1horoffsetscript {val} {
set SR [SplitReply [ss1r]]
set SL [SplitReply [ss1l]]
set currentOffset [ expr $SR - ($SR + $SL)/2.0 ]
set diff [expr $val - $currentOffset]
set newD1R [expr $SR + $diff]
set newD1L [expr $SL - $diff]
return "ss1r=$newD1R,ss1l=$newD1L"
proc set_gap_offset {m1 m2 val} {
set S1 [SplitReply [$m1]]
set S2 [SplitReply [$m2]]
set currentoffset [expr ($S1 + $S2)/2.0 ]
set diff [expr $val - $currentoffset]
set newD1R [expr $S1 + $diff]
set newD1L [expr $S2 + $diff]
return "$m1=$newD1R,$m2=$newD1L"
}
publish ss1horoffsetscript user
#-------------------------------------------------------
proc ss1readhoroffset {} {
set SR [SplitReply [ss1r]]
return [ expr $SR - ($SR + [SplitReply [ss1l]])/2.0 ]
# make_gap_motors virt_width_motor virt_offset_motor real_high_motor real_low_motor
proc make_gap_motors {vm1 vm2 m1 m2} {
eval "proc get_$vm1 {} { get_gap_width $m1 $m2 }"
set v {$var}
eval "proc set_$vm1 {var} { set_gap_width $m1 $m2 $v }"
MakeConfigurableMotor $vm1
$vm1 readscript get_$vm1
$vm1 drivescript set_$vm1
publish get_$vm1 user
publish set_$vm1 user
eval "proc get_$vm2 {} { get_gap_offset $m1 $m2 }"
set v {$var}
eval "proc set_$vm2 {var} { set_gap_offset $m1 $m2 $v }"
MakeConfigurableMotor $vm2
$vm2 readscript get_$vm2
$vm2 drivescript set_$vm2
publish get_$vm2 user
publish set_$vm2 user
}
publish ss1readhoroffset user
#-------------------------------------------------------
MakeConfigurableMotor ss1ho
ss1ho drivescript ss1horoffsetscript
ss1ho readscript ss1readhoroffset
make_gap_motors ss1vg ss1vo ss1u ss1d
make_gap_motors ss1hg ss1ho ss1r ss1l
#-----------------------------------------------------
proc ss1heightscript {val} {
set currentWidth [expr [SplitReply [ss1u]] + [SplitReply [ss1d]]]
set diff [expr $val - $currentWidth]
set newD1B [expr [SplitReply [ss1d]] + $diff/2]
set newD1T [expr [SplitReply [ss1u]] + $diff/2]
return "ss1d=$newD1B,ss1u=$newD1T"
}
publish ss1heightscript user
#-------------------------------------------------------
proc ss1readheight {} {
return [expr [SplitReply [ss1u]] + [SplitReply [ss1d]]]
}
publish ss1readheight user
#---------------------------------------------------------
MakeConfigurableMotor ss1vg
ss1vg drivescript ss1heightscript
ss1vg readscript ss1readheight
#--------------------------------------------------------
proc ss1vertoffsetscript {val} {
set SU [SplitReply [ss1u]]
set SD [SplitReply [ss1d]]
set currentOffset [ expr $SU - ($SU + $SD)/2.0 ]
set diff [expr $val - $currentOffset]
set newD1U [expr $SU + $diff]
set newD1D [expr $SD - $diff]
return "ss1u=$newD1U,ss1d=$newD1D"
}
publish ss1vertoffsetscript user
#-------------------------------------------------------
proc ss1readvertoffset {} {
set SU [SplitReply [ss1u]]
return [ expr $SU - ($SU + [SplitReply [ss1d]])/2.0 ]
}
publish ss1readvertoffset user
#-------------------------------------------------------
MakeConfigurableMotor ss1vo
ss1vo drivescript ss1vertoffsetscript
ss1vo readscript ss1readvertoffset
###############################################
#--------------------------------------------------------
proc ss2widthscript {val} {
set currentWidth [expr [SplitReply [ss2r]] + [SplitReply [ss2l]]]
set diff [expr $val - $currentWidth]
set newD1R [expr [SplitReply [ss2r]] + $diff/2]
set newD1L [expr [SplitReply [ss2l]] + $diff/2]
return "ss2r=$newD1R,ss2l=$newD1L"
}
publish ss2widthscript user
#-------------------------------------------------------
proc ss2readwidth {} {
return [expr [SplitReply [ss2r]] + [SplitReply [ss2l]]]
}
publish ss2readwidth user
MakeConfigurableMotor ss2hg
ss2hg drivescript ss2widthscript
ss2hg readscript ss2readwidth
#--------------------------------------------------------
proc ss2horoffsetscript {val} {
set SR [SplitReply [ss2r]]
set SL [SplitReply [ss2l]]
set currentOffset [ expr $SR - ($SR + $SL)/2.0 ]
set diff [expr $val - $currentOffset]
set newD1R [expr $SR + $diff]
set newD1L [expr $SL - $diff]
return "ss2r=$newD1R,ss2l=$newD1L"
}
publish ss2horoffsetscript user
#-------------------------------------------------------
proc ss2readhoroffset {} {
set SR [SplitReply [ss2r]]
return [ expr $SR - ($SR + [SplitReply [ss2l]])/2.0 ]
}
publish ss2readhoroffset user
#-------------------------------------------------------
MakeConfigurableMotor ss2ho
ss2ho drivescript ss2horoffsetscript
ss2ho readscript ss2readhoroffset
#-----------------------------------------------------
proc ss2heightscript {val} {
set currentWidth [expr [SplitReply [ss2u]] + [SplitReply [ss2d]]]
set diff [expr $val - $currentWidth]
set newD1B [expr [SplitReply [ss2d]] + $diff/2]
set newD1T [expr [SplitReply [ss2u]] + $diff/2]
return "ss2d=$newD1B,ss2u=$newD1T"
}
publish ss2heightscript user
#-------------------------------------------------------
proc ss2readheight {} {
return [expr [SplitReply [ss2u]] + [SplitReply [ss2d]]]
}
publish ss2readheight user
#---------------------------------------------------------
MakeConfigurableMotor ss2vg
ss2vg drivescript ss2heightscript
ss2vg readscript ss2readheight
#--------------------------------------------------------
proc ss2vertoffsetscript {val} {
set SU [SplitReply [ss2u]]
set SD [SplitReply [ss2d]]
set currentOffset [ expr $SU - ($SU + $SD)/2.0 ]
set diff [expr $val - $currentOffset]
set newD1U [expr $SU + $diff]
set newD1D [expr $SD - $diff]
return "ss2u=$newD1U,ss2d=$newD1D"
}
publish ss2vertoffsetscript user
#-------------------------------------------------------
proc ss2readvertoffset {} {
set SU [SplitReply [ss2u]]
return [ expr $SU - ($SU + [SplitReply [ss2d]])/2.0 ]
}
publish ss2readvertoffset user
#-------------------------------------------------------
MakeConfigurableMotor ss2vo
ss2vo drivescript ss2vertoffsetscript
ss2vo readscript ss2readvertoffset
make_gap_motors ss2vg ss2vo ss2u ss2d
make_gap_motors ss2hg ss2ho ss2r ss2l
# END MOTOR CONFIGURATION