#AUTO NO THIS ROUTINE RUNS AUTOMATICALLY UPON POWER UP. NO IT SETS THE DEFAULT GALIL MOTION CONTROL PARAMETERS. NO MOST OF THESE PARAMETERS ARE BURNED INTO MEMORY AS WELL. MT 2.5,2.5,2.5,,-2.5,2.5,-2.5,-2.0 CN -1,1,-1,0 CC 9600,0,0,0 IT 0.1,0.1,0.1,,0.1,0.1,0.1,0.1 KS 2.0,2.0,2.0,,2.0,2.0,2.0,2.0 AC 9216,9216,9216,,9216,5120,5120,1024 DC 9216,9216,9216,,9216,14336,239616,1024 SP 600,600,600,,500,500,5000,100 NO THE VECTOR SPEED IS SET SUCH THAT EACH AXIS SPEED IS 600 VA 9216,9216 VD 9216,9216 VS 1040,1040 NO TURN ON THE ROTATION MOTOR, IT SHOULD ALWAYS BE LEFT ON SH F EN NO ******************** NO *** INITIALIZE THE FOCUS ACTUATORS ON AXES A, B, AND C *** #FOCSTUP NO THE VARIABLES FOCAC, FOCDC, FOCSP, VECAC, VECDC, AND VECSP NO HAVE DEFAULT VALUES WHICH ARE STORED IN MEMORY. MT 2.5,2.5,2.5 AC FOCAC,FOCAC,FOCAC DC FOCDC,FOCDC,FOCDC SP FOCSP,FOCSP,FOCSP VA VECAC,VECAC VD VECDC,VECDC VS VECSP,VECSP IT 0.1,0.1,0.1 KS 2.0,2.0,2.0 NO SET THE SOFTWARE LIMITS. NO USE MG{F10.0} FOCBL TO VIEW THESE VALUES. NO BL FOCBL,FOCBL,FOCBL NO FL FOCFL,FOCFL,FOCFL EN NO ******************** NO *** MOVE THE FOCUS ACTUATORS INDEPENDENTLY *** #FOCIND NO BEGIN BY INITIALIZING THE FOCUS ACTUATORS. JS #FOCSTUP NO SET THE POSITION RELATIVE MOVE DISTANCE. NO DISTA, DISTB, AND DISTC ARE STORED IN MEMORY WITH THE DEFAULT VALUE OF 200. NO DISTA, DISTB, AND DISTC SHOULD BE CHANGED BY HIGHER LEVEL SOFTWARE. PR DISTA,DISTB,DISTC NO MOVE THE ACTUATORS. JS #FOCMV NO MG "MOTION COMPLETE, A = ",DISTA," B = ",DISTB," C = ",DISTC EN NO ******************** NO *** MOVE ALL OF THE FOCUS ACTUATORS THE SAME DISTANCE *** #FOCALL NO BEGIN BY INITIALIZING THE FOCUS ACTUATORS. JS #FOCSTUP NO SET THE POSITION RELATIVE MOVE DISTANCE. NO DISTALL IS STORED IN MEMORY WITH THE DEFAULT VALUE OF 200. NO DISTALL SHOULD BE CHANGED BY HIGHER LEVEL SOFTWARE. PR DISTALL,DISTALL,DISTALL NO MOVE THE ACTUATORS. JS #FOCMV EN NO ******************** NO *** MOVE THE FOCUS ACTUATORS *** #FOCMV NO ENABLES THE DRIVES WITH SH (SERVO HERE). SH ABC NO BEGIN THE MOTION WITH BG. BG ABC NO WAIT UNTIL THE MOTION IS COMPLETE WITH MC (MOTION COMPLETE). NO ALTHOUGH MC HALTS FURTHER EXECUTION UNTIL ALL THE STEPS HAVE BEEN NO ISSUED THE MOTORS COULD STILL BE MOVING. MC ABC NO THE MC COMMAND ABOVE DOES NOT ACCOUNT FOR SMOOTHING AND THEREFORE NO IT IS PERTINENT TO WAIT FOR THE MOTORS TO COMPLETE THEIR MOVEMENT. WT 500 NO TURN THE MOTORS OFF WITH MO. MO ABC EN NO ******************** NO *** INITIALIZE THE FILTER WHEEL ROTATION *** #FILTRSU MTF=2.5 ACF=FILTRAC DCF=FILTRDC SPF=FILTRSP ITF=0.1 KSF=2.0 NO DOESN'T WORK NO BLF=FILTRBL{F10.0} NO FLF=FILTRFL{F10.0} EN NO ******************** NO *** ROTATE THE FILTER WHEEL *** #FILTROT JS #FILTRSU NO NROT IS A VARIABLE WHICH INDICATES THE NUMBER OF FILTER POSITIONS TO ROTATE. NO NROT IS STORED IN MEMORY WITH THE DEFAULT VALUE OF 1. NO NROT SHOULD BE CHANGED BY HIGHER LEVEL SOFTWARE. NO THERE ARE 1600 MOTOR STEPS BETWEEN EACH FILTER POSITION. PRF=1600*NROT NO THE ROTATION MOTOR WILL ALWAYS BE LEFT ON NO SH F BG F MC F WT 500 HM F BG F MC F WT 500 NO THE ROTATION MOTOR WILL WAYS BE LEFT ON NO MO F NO NOW RECORD WHICH FILTER IS IN THE LOAD POSITION MC F FILTBIT1=@IN[1] FILTBIT2=@IN[2] FILTBIT3=@IN[3] FILTBIT4=@IN[4] FILTBIT5=@IN[5] FILTBIT6=@IN[6] FILTBIT7=@IN[7] FILTBIT8=@IN[8] FILTLOW=(1*FILTBIT1)+(2*FILTBIT2)+(4*FILTBIT3)+(8*FILTBIT4) FILTHIGH=(16*FILTBIT5)+(32*FILTBIT6)+(64*FILTBIT7)+(128*FILTBIT8) NO THE BITS ARE TRUE LOW SO WE NEED TO SUBTRACT THE VALUE FROM 255 FILTVAL=255-(FILTLOW+FILTHIGH) EN NO ******************** NO *** MOVE THE FILTER WHEEL TO THE NEXT FILTER LOAD POSITION *** #FILTLD JS #FILTRSU NO ARM THE F AXIS LATCH. AL F PRF=2000 NO THE ROTATION MOTOR WILL ALWAYS BE LEFT ON. NO SH F BG F NO LOOP UNTIL THE LATCH IS TRIGGERED. #CHKLTCH JP #CHKLTCH,_ALF=1 ST F WT 500 NO ARM LATCH H. THIS IS USED IN THE FILTLDM ROUTINE. AL H NO THE ROTATION MOTOR WILL ALWAYS BE LEFT ON. NO MO F EN NO ******************** NO *** MOVE THE FILTER WHEEL TO THE THE NEXT FILTER LOAD POSITION USING *** NO *** THE MANUAL JOG BUTTON ON THE INSTRUMENT *** #FILTLDM AL H #CHKBTN JS #FILTLD,_ALH=0 JP #CHKBTN EN NO ******************** NO *** INITIALIZE THE FILTER WHEEL TRANSLATION *** #FILTTSU MTG=-2.5 ACG=FILTTAC DCG=FILTTDC SPG=FILTTSP ITG=0.1 KSG=2.0 BLG=-2147483648 FLG=2147483647 EN NO ******************** NO *** TRANSLATE THE FILTER INTO THE BEAM *** #FILTIN JS #FILTTSU NO FILTTDIS IS STORED IN MEMORY WITH THE DEFAULT VALUE OF 21000. NO FILTTDIS SHOULD NOT BE CHANGED BY HIGHER LEVEL SOFTWARE. PRG=FILTTDIS SH G BG G AM G WT 500 MO G NO DETERMINE HOW THE FILTER STOPPED, DID IT HIT A FORWARD LIMIT? FILTTSC=_SCG FILTISIN=1 EN NO ******************** NO *** TRANSLATE THE FILTER OUT OF THE BEAM *** #FILTOUT JS #FILTTSU PRG=-1*FILTTDIS NO IS THE REVERSE LIMIT CURRENTLY ON JP #FILTLR,_LRG=0 SH G BG G AM G WT 500 NO DETERMINE HOW THE FILTER STOPPED, DID IT HIT A REVERSE LIMIT? FILTTSC=_SCG NO NUDGE THE FILTER TRANSLATION ARM FORWARD SLIGHTLY NO TO ALLOW FOR FILTER ROTATION. NO FILTTNUD IS STORED IN MEMORY WITH THE DEFAULT VALUE OF 300. NO FILTTNUD SHOULD NOT BE CHANGED BY HIGHER LEVEL SOFTWARE. PRG=FILTTNUD BG G MC G WT 500 NO DONT TURN THE MOTOR OFF, THIS IS SO THE ARM DOESNT FALL NO WHEN POINTING NORTH 04/04/26 NO MO G #FILTLR FILTISIN=0 EN NO ******************** NO *** INITIALIZE THE GUIDE CAMERA FILTER WHEEL STAGE *** #GCAMSU MTE=-2.5 ACE=GFILTAC DCE=GFILTDC SPE=GFILTSP ITE=0.1 KSE=2.0 BLE=-2183648 FLE=2147483647 EN NO ******************** NO *** FOCUS THE GUIDE CAMERA *** #FOCGCAM JS #GCAMSU NO DISTGCAM IS STORED IN MEMORY WITH THE DEFAULT VALUE OF 100. NO DISTGCAM SHOULD BE CHANGED BY HIGHER LEVEL SOFTWARE. PRE=DISTGCAM SH E BG E MC E WT 500 MO E EN NO ******************** #MVGFILT NO THIS ROUTINE IS NOW OBSOLETE AND SHOULD BE REMOVED. NO CHANGE GUIDE CAMERA FILTERS CC 9600,0,0,0 MG {P2},"FILTER ",GFILTN{S1} EN NO ******************** #QUGFILT NO THIS ROUTINE IS NOW OBSOLETE AND SHOULD BE REMOVED. NO QUERY THE GUIDE CAMERA FILTER WHEEL FOR THE FILTER NUMBER MG {P2}, "FILTER?" GFILTQ=P2ST{S} EN NO ******************** NO *** INITIALIZE THE FILTER WHEEL BY READING THE TAB LENGTHS *** #FILTTBS NO DIMENSION THE TABLNGTH ARRAY. DM TABLNGTH[6] TABNUM=0 BEGTAB=0 ENDTAB=0 NROT=6 NO ROTATE 6 FILTER POSITIONS JS #FILTROT #NEXTTAB AL F #CHKTAB JP #CHKTAB,_ALF=1 NO GET THE TIME WHEN THE EDGE OF THE TAB IS DETECTED. BEGTAB=TIME #MEASTAB JP #MEASTAB,@IN[10]=0 ENDTAB=TIME TABLNGTH[TABNUM]=ENDTAB-BEGTAB TABNUM=TABNUM+1 JP #NEXTTAB,TABNUM<6 NROT=1 EN NO ******************** NO *** INITIALIZE THE FILTER WHEEL BY READING THE FILTER HOLDER CODES *** #FILTRD NO INITFILT IS A FLAG INDICATING WHETHER THE FILTER WHEEL HAS BEEN INITIALIZED. NO INITFILT IS STORED IN MEMORY WITH THE DEFAULT VALUE OF 0. NO INITFILT SHOULD NOT BE CHANGED BY HIGHER LEVEL SOFTWARE. NO FILTVALS[6] (ARRAY) IS STORED IN MEMORY WITH DEFAULT VALUES OF 0. NO INITIALLY CONTAINS ALL ZEROS NO DM FILTVALS[6] FILTNUM=0 NROT=1 #NEXTFLT JS #FILTROT FILTVALS[FILTNUM]=FILTVAL FILTNUM=FILTNUM+1 JP #NEXTFLT,FILTNUM<6 INITFILT=1 FILTTSC=3 EN NO ******************** NO *** MAKE A COORDINATED MOVE OF THE FOCUS ACTUATORS *** #COORDMV JS #FOCSTUP CAS LM ABC NO DISTALL IS STORED IN MEMORY WITH THE DEFAULT VALUE OF 200. NO DISTALL SHOULD BE CHANGED BY HIGHER LEVEL SOFTWARE. LI DISTALL,DISTALL,DISTALL LE SH ABC BGS WT 500 MO ABC EN NO ******************** NO *** MOVE TO THE REQUESTED FILTER *** #FILTMOV ERRFILT=0 NROT=1 NMOVES=0 #FILTBEG NO CHECK IF THE CURRENT FILTER IS THE REQUESTED FILTER NO REQFILT IS STORED IN MEMORY WITH THE DEFAULT VALUE OF 256 (NO FILTER). NO REQFILT SHOULD BE CHANGED BY HIGHER LEVEL SOFTWARE. JP #ATFILT,FILTVAL=REQFILT JP #FILTERR,NMOVES=5 JS #FILTROT NMOVES=NMOVES+1 JP #FILTBEG #FILTERR ERRFILT=1 #ATFILT EN NO ******************** NO *** CHANGE FILTERS, TRANS OUT, ROTATE, TRANS IN *** #FILTCHG JS #FILTOUT JS #FILTMOV JS #FILTIN EN NO ******************** NO *** ORIEL FILTER WHEEL DRIVER *** NO *** USED WITH THE 90 PRIME *** NO *** VERSION 2 *** NO *** WRITTEN by JEFF RILL *** NO *** MODIFIED BY GRANT WILLIAMS *** NO *** 11/14/03 *** NO ******************** NO USE WITH DMC SMART TERMINAL NO OPEN FILE IN EDITOR NO DOWNLOAD FILE TO CONTROLLER NO BEGIN EXECUTING PROGRAMS NO NOTE: ALL COMMANDS MUST BE IN UPPER CASE. NO ******************** NO *** COMMAND LIST *** NO ***XQ #GFWINIT ---> INITIALIZES FILTER WHEEL NO ***XQ #GFWMOV ---> MOVES TO FILTER "GFILTN" NO ***XQ #GFWMOV1 ---> MOVES FILTER WHEEL ONE POSITION NO ***XQ #GFWQ ---> RETURNS FILTER NUMBER NO ***XQ #GFWTST1 ---> MOVE WHEEL APPROX. ONE ROTATION NO ***HX ---> HALTS EXECUTION NO *** INITIALIZE THE ORIEL FILTER WHEEL *** NO ******************** #GFWINIT MTH=-2.0 NO PRH=2050 ACH=GFAC DCH=GFDC SPH=GFSP JS #MOV1 JS #MOV1 JS #CENTER NO MG "INITIALIZED" EN NO ******************** NO *** INPUT FILTER NUMBER *** NO *** CHECKS FOR OUT OF RANGE *** #GFWIFN ERR=0 IF(GFILTN<1) | (GFILTN>6) NO MG "FILTER NUMBER OUT OF RANGE" ERR=1 JP #GOBACK ELSE FNUM_IN=GFILTN NO MG "FNUM_IN=",FNUM_IN ENDIF #GOBACK EN NO ******************** NO *** CONVERT FILTER NUMBER TO SENSOR NUMBER *** #CONVERT IF FNUM_IN=1 SNUM_IN=1 ELSE IF FNUM_IN=2 SNUM_IN=3 ELSE IF FNUM_IN=3 SNUM_IN=2 ELSE IF FNUM_IN=4 SNUM_IN=6 ELSE IF FNUM_IN=5 SNUM_IN=4 ELSE IF FNUM_IN=6 SNUM_IN=5 ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF NO MG "SNUM_IN=",SNUM_IN EN NO ******************** NO *** MOVE FILTER TO GIVEN SENSOR NUMBER (SNUM_IN) *** #GFWMOV JS #GFWIFN JP #ONERR, ERR=1 JS #CONVERT COUNT=6 #LOOP IF COUNT=0 MG "CAN'T FIND FILTER" JP #ONERR ELSE JS #MOV1 JS #READSN JP #FOUND, SNUM=SNUM_IN COUNT=COUNT-1 JP #LOOP ENDIF #FOUND NO JS #CENTER NO MG "MOTION COMPLETE" JS #GFWQ #ONERR EN NO ******************** NO *** MOVE FILTER ONCE UNTIL SENSOR(S) ARE ENCOUNTERED *** #MOV1 NO MG "MOVING 1" PRH=2050 SHH BGH WT 1000 #LOOP1 JP #DONE, (@IN[15]=0) | (@IN[14]=0) | (@IN[13]=0) JP #LOOP1 #DONE STH WT 200 EN NO ******************** NO *** CENTER ON TAB *** #CENTER WT 500 NO GFCENT IS STORED IN MEMORY WITH A DEFAULT VALUE OF 5 NO WHICH SHOULD NOT BE CHANGED BY HIGHER LEVEL SOFTWARE PRH=-GFCENT BGH WT 1000 NO STH NO MG "CENTERED" EN NO ******************** NO *** FIND CURRENT FILTER NUMBER *** #GFWQ JS #READSN JS #UNCONV IF FNUM=0 NO MG "WHEEL NOT POSITIONED AT FILTER" JP #NONUM ELSE IF FNUM=7 NO MG "SENSORS NOT RESPONDING - CHECK POWER & CABLING" JP #NONUM ENDIF,ENDIF NO MG "FILTER=",FNUM #NONUM EN NO ******************** NO *** READ SENSORS - CONVERT TO INTEGER *** NO *** SENSOR POLARITY: LOW = 0, HI = 1 *** #READSN SNUM=((@IN[15]*4)+(@IN[14]*2)+@IN[13]) NO MG "BIT14",@IN[14]*4 NO MG "BIT13",@IN[13]*2 NO MG "BIT12",@IN[12] NO MG "SNUM=",SNUM WT 500 EN NO ******************** NO *** CONVERT SENSOR NUMBER TO FILTER NUMBER *** #UNCONV IF SNUM=0 FNUM=7 ELSE IF SNUM=1 FNUM=1 ELSE IF SNUM=3 FNUM=2 ELSE IF SNUM=2 FNUM=3 ELSE IF SNUM=6 FNUM=4 ELSE IF SNUM=4 FNUM=5 ELSE IF SNUM=5 FNUM=6 ELSE IF SNUM=7 FNUM=0 ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF WT 500 NO MG "SNUM=",SNUM EN NO ******************** NO *** TEST1 - MOVE APPROX. ONE ROTATION *** NO *** DOESN'T LOOK AT SENSORS TURNS OFF MOTOR WHEN FINISHED #GFWTST1 MTH=-2 PRH=2050 SPH=150 SHH BGH AMH MOH MG "MOTION COMPLETE" EN