diff --git a/site_ansto/instrument/qld/motor_configuration.tcl b/site_ansto/instrument/qld/motor_configuration.tcl index 4b00048b..d019bc34 100644 --- a/site_ansto/instrument/qld/motor_configuration.tcl +++ b/site_ansto/instrument/qld/motor_configuration.tcl @@ -1,27 +1,27 @@ -set slit2active 0 +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) pmc2-$animal +set dmc2280_controller2(port) 1044 -# Run slit homing routines -#if [catch {dmc_connect dmc2280_controller2} ] { -# dmc_sendCmd dmc2280_controller2 "XQ#HOME,1" -# dmc_close dmc2280_controller2 -#} -#if [catch {dmc_connect dmc2280_controller2} ] { -# dmc_sendCmd dmc2280_controller2 "XQ#HOME,1" -# dmc_close dmc2280_controller2 -#} -# -#TD at upper switches -# 1048508, 1062259, 2651595, 2644121, 1017903, 1041617, 2715943, 2683888 -# -#Measured or computed slit motor steps per unit (mm) -set slitStepRate 20125 +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 @@ -46,104 +46,203 @@ set vertSlitUpRange 64 set horSlitLowRange 25 set horSlitUpRange 25 -Motor ss1r DMC2280 [params \ - host $dmc2280_controller2(host)\ - port $dmc2280_controller2(port)\ +#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] -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 aperture.first +ss1r long_name right -Motor ss1l DMC2280 [params \ - host $dmc2280_controller2(host)\ - port $dmc2280_controller2(port)\ +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 $ss1l_Home] -setHomeandRange -motor ss1l -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange + 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 ss1u DMC2280 [params \ - host $dmc2280_controller2(host)\ - port $dmc2280_controller2(port)\ - axis C\ - units mm\ - maxSpeed 1\ - maxAccel 1\ - maxDecel 1\ - stepsPerX -$slitStepRate\ - motorHome $ss1u_Home] -setHomeandRange -motor ss1u -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange - -Motor ss1d DMC2280 [params \ - host $dmc2280_controller2(host)\ - port $dmc2280_controller2(port)\ +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\ + 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 aperture.first +ss1d long_name bottom if {$slit2active} { -Motor ss2r DMC2280 [params \ - host $dmc2280_controller2(host)\ - port $dmc2280_controller2(port)\ +# 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] -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 aperture.second +ss2r long_name right -Motor ss2l DMC2280 [params \ - host $dmc2280_controller2(host)\ - port $dmc2280_controller2(port)\ - axis B\ +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 $ss2l_Home] -setHomeandRange -motor ss2l -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange + 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 ss2u DMC2280 [params \ - host $dmc2280_controller2(host)\ - port $dmc2280_controller2(port)\ - axis G\ - units mm\ - maxSpeed 1\ - maxAccel 1\ - maxDecel 1\ - stepsPerX -$slitStepRate\ - motorHome $ss2u_Home] -setHomeandRange -motor ss2u -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange - -Motor ss2d DMC2280 [params \ - host $dmc2280_controller2(host)\ - port $dmc2280_controller2(port)\ +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\ + 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 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 +} + +if {0} { #-------------------------------------------------------- proc ss1widthscript {val} { set currentWidth [expr [SplitReply [ss1r]] + [SplitReply [ss1l]]] @@ -320,6 +419,7 @@ publish ss2readvertoffset user MakeConfigurableMotor ss2vo ss2vo drivescript ss2vertoffsetscript ss2vo readscript ss2readvertoffset +} ############################################### } # END MOTOR CONFIGURATION