Files
sics/site_ansto/instrument/qld/motor_configuration.tcl
Douglas Clowes 4a88bf6fc1 cut out some older code
r2627 | dcl | 2008-06-12 17:20:58 +1000 (Thu, 12 Jun 2008) | 2 lines
2012-11-15 13:39:22 +11:00

247 lines
5.9 KiB
Tcl

set slit2active 1
# START MOTOR CONFIGURATION
set animal koala
#set sim_mode [SplitReply [motor_simulation]]
set sim_mode false
# Setup addresses of Galil DMC2280 controllers.
set dmc2280_controller2(host) mc2-$animal
set dmc2280_controller2(port) 1044
if {$sim_mode == "true"} {
set motor_driver_type asim
} else {
set motor_driver_type DMC2280
MakeAsyncQueue mc2 DMC2280 $dmc2280_controller2(host) $dmc2280_controller2(port)
}
#Measured or computed slit motor steps per millimetre
# 125 steps * 161:1 gears = 20125
set slitStepRate 20125
#Measured slit gap, in units, after homing on limit switches
set ss1h_Gap 52.6
set ss1v_Gap 128.6
set ss2h_Gap 51.0
set ss2v_Gap 205.0
set ss1r_Home [expr $ss1h_Gap/2*$slitStepRate]
set ss1l_Home [expr $ss1h_Gap/2*$slitStepRate]
set ss1u_Home [expr $ss1v_Gap/2*$slitStepRate]
set ss1d_Home [expr $ss1v_Gap/2*$slitStepRate]
set ss2r_Home [expr $ss2h_Gap/2*$slitStepRate]
set ss2l_Home [expr $ss2h_Gap/2*$slitStepRate]
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 64
set vertSlitUpRange 64
#Default upper and lower ranges for horizontal slits
set horSlitLowRange 25
set horSlitUpRange 25
#Default upper and lower ranges for vertical slits
set vSlitHome 0
set vSlitLoRange 20
set vSlitHiRange 100
#Default upper and lower ranges for horizontal slits
set hSlitHome 0
set hSlitLoRange 15
set hSlitHiRange 35
#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 slit1VGroup first/vertical
set slit1HGroup first/horizontal
set slit2VGroup second/vertical
set slit2HGroup second/horizontal
# set movecount high to reduce the frequency of
# hnotify messages to a reasonable level
set move_count 10
# Slit 1, right
Motor ss1r $motor_driver_type [params \
asyncqueue mc2\
axis A\
units mm\
hardlowerlim $ss1r_LoRange\
hardupperlim $ss1r_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1r_Home]
ss1r softlowerlim $ss1r_LoRange
ss1r softupperlim $ss1r_HiRange
ss1r home 0
ss1r movecount $move_count
ss1r part aperture.first
ss1r long_name right
Motor ss1l $motor_driver_type [params \
asyncqueue mc2\
axis B\
units mm\
hardlowerlim $ss1l_LoRange\
hardupperlim $ss1l_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX $slitStepRate\
motorHome $ss1l_Home]
ss1l softlowerlim $ss1l_LoRange
ss1l softupperlim $ss1l_HiRange
ss1l home 0
ss1l movecount $move_count
ss1l part aperture.first
ss1l long_name left
Motor ss1u $motor_driver_type [params \
asyncqueue mc2\
axis C\
units mm\
hardlowerlim $ss1u_LoRange\
hardupperlim $ss1u_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1u_Home]
ss1u softlowerlim $ss1u_LoRange
ss1u softupperlim $ss1u_HiRange
ss1u home 0
ss1u movecount $move_count
ss1u part aperture.first
ss1u long_name top
Motor ss1d $motor_driver_type [params \
asyncqueue mc2\
axis D\
units mm\
hardlowerlim $ss1d_LoRange\
hardupperlim $ss1d_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX $slitStepRate\
motorHome $ss1d_Home]
ss1d softlowerlim $ss1d_LoRange
ss1d softupperlim $ss1d_HiRange
ss1d home 0
ss1d movecount $move_count
ss1d part aperture.first
ss1d long_name bottom
if {$slit2active} {
# Slit 2, right
Motor ss2r $motor_driver_type [params \
asyncqueue mc2\
axis E\
units mm\
hardlowerlim $ss2r_LoRange\
hardupperlim $ss2r_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2r_Home]
ss2r softlowerlim $ss2r_LoRange
ss2r softupperlim $ss2r_HiRange
ss2r home 0
ss2r movecount $move_count
ss2r part aperture.second
ss2r long_name right
Motor ss2l $motor_driver_type [params \
asyncqueue mc2\
axis F\
units mm\
hardlowerlim $ss2l_LoRange\
hardupperlim $ss2l_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX $slitStepRate\
motorHome $ss2l_Home]
ss2l softlowerlim $ss2l_LoRange
ss2l softupperlim $ss2l_HiRange
ss2l home 0
ss2l movecount $move_count
ss2l part aperture.second
ss2l long_name left
# Slit 2, up
Motor ss2u $motor_driver_type [params \
asyncqueue mc2\
axis G\
units mm\
hardlowerlim $ss2u_LoRange\
hardupperlim $ss2u_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2u_Home]
ss2u softlowerlim $ss2u_LoRange
ss2u softupperlim $ss2u_HiRange
ss2u home 0
ss2u movecount $move_count
ss2u part aperture.second
ss2u long_name top
Motor ss2d $motor_driver_type [params \
asyncqueue mc2\
axis H\
units mm\
hardlowerlim $ss2d_LoRange\
hardupperlim $ss2d_HiRange\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX $slitStepRate\
motorHome $ss2d_Home]
ss2d softlowerlim $ss2d_LoRange
ss2d softupperlim $ss2d_HiRange
ss2d home 0
ss2d movecount $move_count
ss2d part aperture.second
ss2d long_name bottom
}
make_gap_motors ss1vg gap ss1vo offset ss1u ss1d mm $slit1VGroup
make_gap_motors ss1hg gap ss1ho offset ss1r ss1l mm $slit1HGroup
if {$slit2active} {
make_gap_motors ss2vg gap ss2vo offset ss2u ss2d mm $slit2VGroup
make_gap_motors ss2hg gap ss2ho offset ss2r ss2l mm $slit2HGroup
}
# END MOTOR CONFIGURATION