From baf2206efe5fd5b392d98c308ba6edf1d9195069 Mon Sep 17 00:00:00 2001 From: Douglas Clowes Date: Mon, 28 Nov 2011 14:23:41 +1100 Subject: [PATCH] Content downloaded from GALIL controllers before conversion to SICS r3292 | dcl | 2011-11-28 14:23:41 +1100 (Mon, 28 Nov 2011) | 1 line --- .../instrument/tas/DMC2280/controller1.txt | 1262 ++++++++--------- .../instrument/tas/DMC2280/controller2.txt | 700 ++++----- .../instrument/tas/DMC2280/controller3.txt | 500 +++---- .../instrument/tas/DMC2280/controller4.txt | 570 ++++---- .../instrument/tas/DMC2280/controller5.txt | 150 +- .../instrument/tas/DMC2280/controller6.txt | 852 +++++------ 6 files changed, 2018 insertions(+), 2016 deletions(-) diff --git a/site_ansto/instrument/tas/DMC2280/controller1.txt b/site_ansto/instrument/tas/DMC2280/controller1.txt index 91f870f7..6cf411ae 100755 --- a/site_ansto/instrument/tas/DMC2280/controller1.txt +++ b/site_ansto/instrument/tas/DMC2280/controller1.txt @@ -1,631 +1,631 @@ -'TAIPAN - CONTROLLER 1 -' -'$Revision:$ -'$Date:$ -'Author: Daniel Bartlett -'Last revision by: $dbx:$ -' -'A-MONOCHROMATOR TRANSLATION - TILT -'B-MONOCHROMATOR TRANSLATION - LINEAR -'C-SPARE -'D-MAGNET ARM ROTATE -'E-30' COLLIMATOR ROTATE, NOT ENCODED -'F-FLIGHT TUBE ROTATE -'G-15' COLLIMATOR ROTATE, NOT ENCODED. ENCODER IS FLIGHT TUBE BACK OF MOTOR -'H-DETECTOR ROTATE _TPH=18120009 BEAM CL -' -'----------------------------------------------------------------------------- -#AUTO -'THIS PROGRAM RUNS AUTOMATICALLY ON CONTROLLER START UP -' -ERRORLEV=0;'SETS ERROR LEVEL TO "INITIALISING" -MT-2,-2,-2,-2,-2,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER -MO;'ALL MOTORS OFF -CN 1;'CONFIGURES LIMIT SWITCHES TO ACCEPT NC CONTACTS -OP 65280;'SETS OUTPUTS 9-16 ON = RELAYS OFF -IA 137,157,203,131;'CONFIGURES IP ADDRESS -AC 25000,25000,,150000,12500,5000,12500,25000;'SET ACELERATION -DC 25000,25000,,150000,12500,5000,12500,25000;'SET DECELERATION -SP 25000,25000,,150000,25000,50000,25000,100000;'SET SPEED -SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE -SIB=0 -SIC=0 -SID=0 -SIE=0 -SIF=0 -SIG=0 -SIH=0 -WT1000;'WAIT FOR ENCODER TO INITIALISE -SIA=1,24,12,0<-2>1;'RESOLVER VIA VEGA 2790 BOARD -SIB=1,24,12,0<-2>1;'RESOLVER VIA VEGA 2790 BOARD -SID=1,24,12,0<-2>1;'RESOLVER VIA VEGA 2790 BOARD -SIF=1,25,13,0<-2>2;'KUEBLER 5863 -SIG=1,25,13,0<-2>1;'IVO GXM2H -SIH=1,25,25,0<-2>2;'HEIDENHAIN RCN226 -LSAHIT=0;'INITIALISE THE BIT SET AFTER A LIMIT IS HIT -LSBHIT=0 -LSCHIT=0 -LSDHIT=0 -LSEHIT=0 -LSFHIT=0 -LSGHIT=0 -LSHHIT=0 -APFDONE=0;'INITIALISE THE BIT FOR AXIS F AIRPAD CONTROL -APHDONE=0;'INITIALISE THE BIT FOR AXIS H AIRPAD CONTROL -HMTAPEDN=0;'TAPE HOME ROUTINE NOT RUN -HMWEDGDN=0;'WEDGE HOME ROUTINE NOT RUN -ANGLE=((_TPF-190161)*-0.006696)+25.77375473;'SET ANGLE TO CURRENT POSITION -'ERRORLEV=-1;'COMPLETED INITIALISATION -II 6,8,,0;'CONFIGURES THE 6TH, 7TH & 8TH INPUT TO ACTIVATE #ININT ROUTINE -ERRORLEV=0;'THIS SETS TO "MANUAL MODE" FOR SPICE, NO WEDGES MOVED -JS #THREAD0 -EN -' -' -'----------------------------------------------------------------------------- -#THREAD0 -'THREAD THAT CALLS HOMING & WEDGE CONTROL THREADS & RUNS GENERAL ROUTINES -' -IF ((_XQ1=-1)&(ERRORLEV=-1)) -'THREAD 1 NOT USED AND NO ERRORS -XQ #WDGCTRL,1;'EXECUTE WEDGE CONTROL ROUTINE IN THREAD 1 -ENDIF -IF (ERRORLEV>0);'IN ERROR -HX1;'HALT EXECUTION OF THREAD 1 -STDF;'STOP MAGNET ARM AND FLIGHT TUBE -ENDIF -JS #CHKDCEL;'CHECKS AND RESETS DECELERATIONS AFTER A LIMIT HIT -JS #CHKSPD;'CHECKS SPEEDS TO SEE IF ABOVE MAXIMUMS -JS #AIRPAD;'CONTROLS THE AIRPADS ON AXIS F & H -JP #THREAD0 -EN -' -' -'----------------------------------------------------------------------------- -#WDGCTRL -'ROUTINE TO CONTROL THE CO-ORDINATED MOTION OF THE FLIGHT TUBE AND MAGNET ARM. -'THE NUMBER OF WEDGES TO BE MOVED IS CALCULATED FROM THE DESTINATION POSITION. -'THE WEDGES ARE MOVED ALL AT ONCE, THEN THE FLIGHT TUBE CONTINUES TO THE -'FINAL POSITION. -' -JS #CALCANG;'CALCULATE DIRECTION AND DESTINATION IN ENCODER COUNTS -IF (DIRF=0);'IN POSITION -MO DF;'TURN OFF THE MAGNET ARM AND FLIGHT TUBE -JP #ENDWC;'JUMP TO THE END -ENDIF -' -FINPROG=1;'F AXIS IN PROGRESS BIT SET TO TRUE -IF (DIRF=1);'HEADING CLOCKWISE -IF ((DESTF<191710)&(DESTF>186185));'NEEDS 3 LEFT, 0 RIGHT (15-52DEG) -IF ((_TPF<191710)&(_TPF>186185));'CURRENTLY IN THE RANGE. NO WEDGES MOVED -JP #GOFINAL -ELSE;'WEDGES NEED TO BE MOVED -FTPOS=186511;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 3 R UNLATCH POINT -ENDIF -ENDIF -' -IF ((DESTF<186186)&(DESTF>184094));'NEEDS 2 LEFT, 1 RIGHT (52-66DEG) -IF ((_TPF<186186)&(_TPF>184094));'CURRENTLY IN THE RANGE. NO WEDGES MOVED -JP #GOFINAL -ELSE;'WEDGES NEED TO BE MOVED -FTPOS=184421;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 2 R UNLATCH POINT -ENDIF -ENDIF -' -IF ((DESTF<184095)&(DESTF>182003));'NEEDS 1 LEFT, 2 RIGHT (66-80DEG) -IF ((_TPF<184095)&(_TPF>182003));'CURRENTLY IN THE RANGE. NO WEDGES MOVED -JP #GOFINAL -ELSE;'WEDGES NEED TO BE MOVED -FTPOS=182255;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 1 R UNLATCH POINT -ENDIF -ENDIF -' -IF ((DESTF<182004)&(DESTF>181256));'NEEDS 0 LEFT, 3 RIGHT (80-85DEG) -IF ((_TPF<182004)&(_TPF>181256));'CURRENTLY IN THE RANGE. NO WEDGES MOVED -JP #GOFINAL -ELSE -'DESTINATION IN RANGE REQUIRING 0 WEDGES LEFT, 3 WEDGES RIGHT (80-85DEG) -'AND NOT CURRENTLY WITHIN THE RANGE AND HEADING CLOCKWISE IS NOT POSSIBLE -'A COUNTER CLOCKWISE ROTATION IS THE ONLY WAY INTO THIS ZONE -ERRORLEV=51;' SET ERROR -JP #ENDWC -ENDIF -ENDIF -' -IF (@IN[14]=0);'WEDGE SHOULD BE IN UNLATCH POS BUT RIGHT SWITCH NOT MADE -ERRORLEV=41;'SET ERROR, JUMP OUT -JP #ENDWC -ENDIF -ARMPOS=2897;ARMTRIES=0;JS #ARMMOVE;'SEND ARM TO R PICK UP POINT -CB16;'TURN MAGNET ON -WT 500;'WAIT 1/2 SEC FOR MAGNET TO LATCH -ARMPOS=1061;ARMTRIES=0;JS #ARMMOVE;'SEND ARM+ALL WEDGES TO L DROP OFF POINT -SB16;'TURN MAGNET OFF -JP #GOFINAL;'WEDGES MOVED, GO TO FINAL POSTION -ENDIF -' -IF (DIRF=-1);'HEADING COUNTER CLOCKWISE -IF ((DESTF<191710)&(DESTF>186185));'NEEDS 3 LEFT, 0 RIGHT (15-52DEG) -IF ((_TPF<191710)&(_TPF>186185));'CURRENTLY IN THE RANGE. NO WEDGES MOVED -JP #GOFINAL -ELSE -'DESTINATION IN RANGE REQUIRING 3 WEDGES LEFT, 0 WEDGES RIGHT (15-52DEG) -'AND NOT CURRENTLY IN THE RANGE AND HEADING COUNTER CLOCKWISE IS NOT POSSIBLE -'A COUNTER CLOCKWISE ROTATION IS THE ONLY WAY INTO THIS ZONE -ERRORLEV=52;'SET ERROR -JP #ENDWC -ENDIF -ENDIF -' -IF ((DESTF<186186)&(DESTF>184094));'NEEDS 2 LEFT, 1 RIGHT (52-66DEG) -IF ((_TPF<186186)&(_TPF>184094));'CURRENTLY IN THE RANGE. NO WEDGES MOVED -JP #GOFINAL -ELSE;'WEDGES NEED TO BE MOVED -FTPOS=185914;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 3 LEFT UNLATCH POINT -ENDIF -ENDIF -' -IF ((DESTF<184095)&(DESTF>182003));'NEEDS 1 LEFT, 2 RIGHT (66-80DEG) -IF ((_TPF<184095)&(_TPF>182003));'CURRENTLY IN THE RANGE. NO WEDGES MOVED -JP #GOFINAL -ELSE;'WEDGES NEED TO BE MOVED -FTPOS=183823;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 2 LEFT UNLATCH POINT -ENDIF -ENDIF -' -IF ((DESTF<182004)&(DESTF>181256));'NEEDS 0 LEFT, 3 RIGHT (80-85DEG) -IF ((_TPF<182004)&(_TPF>181256));'CURRENTLY IN THE RANGE. NO WEDGES MOVED -JP #GOFINAL -ELSE;'WEDGES NEED TO BE MOVED -FTPOS=181900;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 1 LEFT UNLATCH POINT -ENDIF -ENDIF -' -IF (@IN[13]=0);'WEDGE SHOULD BE IN UNLATCH POS BUT LEFT SWITCH NOT MADE -ERRORLEV=42;'SET ERROR, JUMP OUT -JP #ENDWC -ENDIF -ARMPOS=1206;ARMTRIES=0;JS #ARMMOVE;'SEND ARM TO L PICK UP POINT -CB16;'TURN MAGNET ON -WT 500;'WAIT 1/2 SEC FOR MAGNET TO LATCH -ARMPOS=3060;ARMTRIES=0;JS #ARMMOVE;'SEND ARM+ALL WEDGES TO R DROP OFF POINT -SB16;'TURN MAGNET OFF -JP #GOFINAL;'WEDGES MOVED, GO TO FINAL POSTION -ENDIF -' -#GOFINAL -FINTRIES=0;JS #FINE;'FINE TUNE FLIGHT TUBE -#ENDWC;'END OF THREAD WEGCTRL -FINPROG=0;'F AXIS IN PROGRESS BIT SET TO FALSE -EN -' -' -'----------------------------------------------------------------------------- -#CALCANG -'ROUTINE TO CALCULATE THE SSI AND TAPE POSITIONS FROM THE 'ANGLE' VARIABLE -' -DBAND3=1;'SETS TAPE ENCODER DEAD BAND -DESTF=((ANGLE-25.77375473)/-0.006696)+190161 -'CALCULATE ENCODER VALUE FROM USER INPUTTED ANGLE VARIABLE -IF ((DESTF>191710)|(DESTF<181508)) -'OUTSIDE HARD LIMITS -ERRORLEV=4 -WT500 -ENDIF -IF (@ABS[_TPF-DESTF]_TPF) -DIRF=1;'CLOCKWISE ROTATION NEEDED -ENDIF -IF (DESTF<_TPF) -DIRF=-1;'COUNTER CLOCKWISE ROTATION NEEDED -ENDIF -ENDIF -EN -' -' -'----------------------------------------------------------------------------- -#FTMOVE -'ROUTINE TO MOVE THE FLIGHT TUBE USING A MOVE-CHECK-CORRECT METHOD -' -'@IN[13]=0 IS THE LEFT CAM SWITCH IN THE UNACTUATED POSITION -'@IN[14]=0 IS THE RIGHT CAM SWITCH IN THE UNACTUATED POSITION -' -DBAND1=1 -PRF=25000*((FTPOS-_TPF)/-30.92);'CALC STEPS TO DESTINATION -IF ((_PRF>0)&(_LFF=0));'IF POSITIVE MOVE AND ALREADY ON LIMIT -ERRORLEV=2;'SET ERROR, JUMP OUT -JP #FTEND -ENDIF -IF ((_PRF<0)&(_LRF=0));'IF NEGATIVE MOVE AND ALREADY ON LIMIT -ERRORLEV=3;'SET ERROR, JUMP OUT -JP #FTEND -ENDIF -SHF -BGF -MCF;'WAIT FOR MOTION TO COMPLETE -FTTRIES=FTTRIES+1;'INCREMENT ATTEMPT COUNTER -IF (FTTRIES>4);'IF TOO MANY ATTEMPTS -ERRORLEV=1;'SET ERROR, JUMP OUT -JP #FTEND -ENDIF -JP #FTMOVE, (@ABS[_TPF-FTPOS]>DBAND1) -'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND1 -#FTEND -EN -' -' -'----------------------------------------------------------------------------- -#ARMMOVE -'ROUTINE TO MOVE THE MAGNET ARM WITH A CLOSED LOOP RESOLVER POSITION -' -'CW LIMIT 122 -'CCW LIMIT 3373 -' -'FT COUNTER CLOCKWISE -'LEFT PICK UP POINT 1206 -'TO THE -'RIGHT DROP OFF POINT 3060 -' -'FT CLOCKWISE -'RIGHT PICK UP POINT 2897 -'TO THE -'LEFT DROP OFF POINT 1061 -' -' -DBAND2=2;'HEAVILY GEARED, DEADBAND OF 2 ACHIEVABLE -PRD=25000*(((_TPD&4095)-ARMPOS)/13.5);'CALC STEPS TO DESTINATION -'&4095 MASKS OUT UNUSED 12 MOST SIGNIFICANT BITS -IF ((_PRD>0)&(_LFD=0));'IF POSITIVE MOVE AND ALREADY ON LIMIT -ERRORLEV=12;'SET ERROR, JUMP OUT -JP #ARMEND -ENDIF -IF ((_PRD<0)&(_LRD=0));'IF NEGATIVE MOVE AND ALREADY ON LIMIT -ERRORLEV=13;'SET ERROR, JUMP OUT -JP #ARMEND -ENDIF -ACD=75000 -DCD=75000 -SPD=150000 -SHD -BGD -MCD;'WAIT FOR MOTION TO COMPLETE -ARMTRIES=ARMTRIES+1;'INCREMENT ATTEMPT COUNTER -IF (ARMTRIES>4);'IF TOO MANY ATTEMPTS -ERRORLEV=11;'SET ERROR, JUMP OUT -JP #ARMEND -ENDIF -JP #ARMMOVE, (@ABS[ARMPOS-(_TPD&4095)]>DBAND2) -'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND2 -MOD;'TURN MOTOR OFF -#ARMEND -EN -' -' -'----------------------------------------------------------------------------- -#FINE -'ROUTINE TO MOVE THE FLIGHT TUBE USING A MOVE-CHECK-CORRECT METHOD -'AND THEN TURN OFF AIRPADS ONCE IN POSITION -' -'70.24 DEGREES TOTAL FOR 64 SEGMENTS -'2 ADJACENT SEGMENTS = 40000 COUNTS -'TOTAL COUNTS FOR 70.24 DEGREES = 1,280,000 -'0.000054875 DEGREES PER COUNT -PRF=25000*((DESTF-_TPF)/-30.92);'CALC STEPS TO DESTINATION -IF ((_PRF>0)&(_LFF=0));'IF POSITIVE MOVE AND ALREADY ON LIMIT -ERRORLEV=22;'SET ERROR, JUMP OUT -JP #FINEEND -ENDIF -IF ((_PRF<0)&(_LRF=0));'IF NEGATIVE MOVE AND ALREADY ON LIMIT -ERRORLEV=23;'SET ERROR, JUMP OUT -JP #FINEEND -ENDIF -SHF -BGF -MCF;'WAIT FOR MOTION TO COMPLETE -WT2000;'WAIT TO SETTLE -FINTRIES=FINTRIES+1;'INCREMENT ATTEMPT COUNTER -IF (FINTRIES>4);'IF TOO MANY ATTEMPTS -ERRORLEV=21;'SET ERROR, JUMP OUT -JP #FINEEND -ENDIF -JP #FINE, (@ABS[_TPF-DESTF]>DBAND3) -'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND3 -MOF;' TURN OFF FLIGHT TUBE MOTOR (AND HENCE AIRPADS) -#FINEEND -EN -' -' -'----------------------------------------------------------------------------- -#CHKDCEL -'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT -' -IF ((LSAHIT=1)&(_BGA=0));'WHEN MOTION STOPS AFTER A LIMIT HIT -DCA=OLDDCA;' RESET DECEL TO OLD VALUE -LSAHIT=0;'RESET LIMIT HIT INDICATOR BIT -ENDIF -' -IF ((LSBHIT=1)&(_BGB=0)) -DCB=OLDDCB -LSBHIT=0 -ENDIF -' -IF ((LSCHIT=1)&(_BGC=0)) -DCC=OLDDCC -LSCHIT=0 -ENDIF -' -IF ((LSDHIT=1)&(_BGD=0)) -DCD=OLDDCD -LSDHIT=0 -ENDIF -' -IF ((LSEHIT=1)&(_BGE=0)) -DCE=OLDDCE -LSEHIT=0 -ENDIF -' -IF ((LSFHIT=1)&(_BGF=0)) -DCF=OLDDCF -LSFHIT=0 -ENDIF -' -IF ((LSGHIT=1)&(_BGG=0)) -DCG=OLDDCG -LSGHIT=0 -ENDIF -' -IF ((LSHHIT=1)&(_BGH=0)) -DCH=OLDDCH -LSHHIT=0 -ENDIF -EN -' -' -'----------------------------------------------------------------------------- -#AIRPAD -'ROUTINE TO CONTROL AIRPADS -' -'CONTROLS THE AIRPAD SOLENOID VALVES FOR SAMPLE STAGE -IF (_MOF=0);'FLIGHT TUBE MOTOR IS ON -SB 10;'SAMPLE STAGE AIR PAD OFF-SOLENOID OFF -CB 9;'SAMPLE STAGE AIR PAD ON-SOLENOID ON -APFDONE=0 -ENDIF -IF ((_MOF=1)&(APFDONE=0));'FLIGHT TUBE MOTOR IS OFF AND 1ST TIME THROUGH -SB 9;'SAMPLE STAGE AIR PAD ON-SOLENOID OFF -CB 10;'SAMPLE STAGE AIR PAD OFF-SOLENOID ON -WT500;'WAIT 1/2 SEC -SB 10;'SAMPLE STAGE AIR PAD OFF-SOLENOID OFF -APFDONE=1 -ENDIF -' -'CONTROLS THE AIRPAD SOLENOID VALVES FOR DETECTOR STAGE -IF ((_MOH=0)|(_MOF=0));'DETECTOR OR FLIGHT TUBE MOTOR IS ON -SB 12;'DETECTOR AIR PAD OFF-SOLENOID OFF -CB 11;'DETECTOR AIR PAD ON-SOLENOID ON -APHDONE=0 -ENDIF -IF ((_MOH=1)&(_MOF=1)&(APHDONE=0));'DETECTOR & FT MOTORS OFF & 1ST TIME THROUGH -SB 11;'DETECTOR AIR PAD OFF-SOLENOID OFF -CB 12;'DETECTOR AIR PAD OFF-SOLENOID ON -WT500;'WAIT 1/2 SEC -SB 12;'DETECTOR AIR PAD OFF-SOLENOID OFF -APHDONE=1 -ENDIF -EN -' -' -'----------------------------------------------------------------------------- -#CHKSPD -'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED -' -IF (_SPA>50000) -SPA=50000 -ENDIF -' -IF (_SPB>50000) -SPB=50000 -ENDIF -' -IF (_SPC>50000) -SPC=50000 -ENDIF -' -IF (_SPD>150000) -SPD=150000 -ENDIF -' -IF (_SPE>25000) -SPE=25000 -ENDIF -' -IF (_SPF>50000) -SPF=50000 -ENDIF -' -IF (_SPG>25000) -SPG=25000 -ENDIF -' -IF (_SPH>100000) -SPH=100000 -ENDIF -EN -' -' -'----------------------------------------------------------------------------- -#TCPERR -'EMPTY TCP ERROR ROUTINE -' -RE -' -' -'----------------------------------------------------------------------------- -#ININT -'INTERUPT ROUTINE -'TO STOP ALL AXES WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT -'TO STOP AXIS F AND H WHEN LIGHT CURTAINS BROKEN BUT TO ALLOW MOVEMENT AWAY -' -IF @IN[8]=0 -'SAFETY INTERLOCK SYSTEM ALL AXES SLOWDOWN -CN-1;'RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI -WT250 -CN1;'SETS LIMITS BACK TO NORMAL -ERRORLEV=100 -JP #ENININT -ENDIF -' -IF @IN[6]=0 -'LOW ANGLE LIGHT CURTAIN BROKEN -IF _TVF>0 -'AXIS HEADING TOWARDS LIGHT CURTAIN -STF -ENDIF -IF _TVH>0 -'AXIS HEADING TOWARDS LIGHT CURTAIN -STH -'ERRORLEV=101 -ENDIF -ENDIF -' -IF @IN[7]=0 -'HIGH ANGLE LIGHT CURTAIN BROKEN -IF _TVF<0 -'AXIS HEADING TOWARDS LIGHT CURTAIN -STF -ENDIF -IF _TVH<0 -'AXIS HEADING TOWARDS LIGHT CURTAIN -STH -'ERRORLEV=102 -ENDIF -ENDIF -' -#ENININT -RI -' -' -'-------------------------------------------------------------------------- -#CMDERR -'ROUTINE TO HANDLE COMMAND ERRORS -' -ZS0 -EN1 -' -' -'----------------------------------------------------------------------------- -#LIMSWI -'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT -' -IF (_LFA=0)|(_LRA=0);'LIMIT HIT -IF (LSAHIT=0)&(_BGA=1);'STILL MOVING, FIRST TIME -OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE -DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP -LSAHIT=1 -ENDIF -ENDIF -' -IF (_LFB=0)|(_LRB=0) -IF (LSBHIT=0)&(_BGB=1) -OLDDCB=_DCB -DCB=100000 -LSBHIT=1 -ENDIF -ENDIF -' -IF (_LFC=0)|(_LRC=0) -IF (LSCHIT=0)&(_BGC=1) -OLDDCC=_DCC -DCC=100000 -LSCHIT=1 -ENDIF -ENDIF -' -IF (_LFD=0)|(_LRD=0) -IF (LSDHIT=0)&(_BGD=1) -OLDDCD=_DCD -DCD=600000;'SPD=150000 -LSDHIT=1 -ENDIF -ENDIF -' -IF (_LFE=0)|(_LRE=0) -IF (LSEHIT=0)&(_BGE=1) -OLDDCE=_DCE -DCE=200000 -LSEHIT=1 -ENDIF -ENDIF -' -IF (_LFF=0)|(_LRF=0) -IF (LSFHIT=0)&(_BGF=1) -OLDDCF=_DCF -DCF=100000 -LSFHIT=1 -ENDIF -ENDIF -' -IF (_LFG=0)|(_LRG=0) -IF (LSGHIT=0)&(_BGG=1) -OLDDCG=_DCG -DCG=200000 -LSGHIT=1 -ENDIF -ENDIF -' -IF (_LFH=0)|(_LRH=0) -IF (LSHHIT=0)&(_BGH=1) -OLDDCH=_DCH -DCH=200000 -LSHHIT=1 -ENDIF -ENDIF -RE -' -' -'----------------------------------------------------------------------------- -#HMWEDGE -'ROUTINE TO GET WEDGES TO A KNOW POSITION -'THE FLIGHT TUBE IS MOVED TO THE RIGHT UNLATCH POSITION OF WEDGE 3 -'THE MAGNET ARM IS THEN MOVED FROM THE RIGHT PICK UP POINT TO THE LEFT DROP -'OFF POINT WITH THE MAGNET ON. THIS WILL PICK UP ALL THE WEDGES NO MATTER -'WHERE THEY ARE, AND DRAG THEM AROUND TO THE LEFT DROP OFF POINT. -' -FTPOS=186511;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 3 RIGHT UNLATCH POSITION -ARMPOS=2897;ARMTRIES=0;JS #ARMMOVE;'RIGHT PICK UP POINT -CB16;'TURN MAGNET ON -WT 500;'WAIT 1/2 SEC FOR MAGNET TO LATCH -ARMPOS=1061;ARMTRIES=0;JS #ARMMOVE;'LEFT DROP OFF, PICK UP WEDGES ENROUTE -SB16;'TURN MAGNET OFF -MOF -ANGLE=((_TPF-190161)*-0.006696)+25.37375473;'SET ANGLE TO CURRENT POSITION -HMWEDGDN=1;'SET DONE FLAG -EN -' -' -'----------------------------------------------------------------------------- -'ERROR LEVELS -'-1 NO ERROR, NORMAL CONDITION -'0 CONTROLLER INITIALISING - RUNNING AUTO ROUTINE -'1 #FTMOVE TOOK TOO MANY ATTEMPTS TO GET INTO POSITION -'2 #FTMOVE TUBE FORWARD LIMIT HIT AND DRIVE ATTEMPTED -'3 #FTMOVE TUBE REVERSE LIMIT HIT AND DRIVE ATTEMPTED -'4 ANGLE INPUT OUTSIDE HARD LIMITS -'5 #HMTAPE TOOK TOO MANY ATTMEPTS -'11 #ARMMOVE TOOK TOO MANY ATTEMPTS TO GET INTO POSITION -'12 #ARMMOVE FORWARD LIMIT HIT AND DRIVE ATTEMPTED -'13 #ARMMOVE REVERSE LIMIT HIT AND DRIVE ATTEMPTED -'21 #FINE TOOK TOO MANY ATTEMPTS TO GET INTO POSITION -'22 #FINE FORWARD LIMIT HIT AND DRIVE ATTEMPTED -'23 #FINE REVERSE LIMIT HIT AND DRIVE ATTEMPTED -'31 #TAPEHOME LIMITS FAILURE -'41 WEDGES SHOULD BE AT RIGHT PICK UP POINT BUT CAM SWITCH NOT MADE -'42 WEDGES SHOULD BE AT LEFT PICK UP POINT BUT CAM SWITCH NOT MADE -'51 CLOCKWISE MOVE INTO 82-85DEG RANGE NOT POSSIBLE -'52 COUNTER CLOCKWISE MOVE INTO 15-55DEG RANGE NOT POSSIBLE -'100 SAFETY AND INTERLOCK SYSTEM HAS INITIATED A SLOWDOWN BY ESTOP -'101 SAFETY AND INTERLOCK SYSTEM HAS INITIATED A SLOWDOWN BY LIGHT CURTAIN -'102 SAFETY AND INTERLOCK SYSTEM HAS INITIATED A SLOWDOWN BY LIGHT CURTAIN -' +'TAIPAN - CONTROLLER 1 +' +'$Revision:$ +'$Date:$ +'Author: Daniel Bartlett +'Last revision by: $dbx:$ +' +'A-MONOCHROMATOR TRANSLATION - TILT +'B-MONOCHROMATOR TRANSLATION - LINEAR +'C-SPARE +'D-MAGNET ARM ROTATE +'E-30' COLLIMATOR ROTATE, NOT ENCODED +'F-FLIGHT TUBE ROTATE +'G-15' COLLIMATOR ROTATE, NOT ENCODED. ENCODER IS FLIGHT TUBE BACK OF MOTOR +'H-DETECTOR ROTATE _TPH=18120009 BEAM CL +' +'----------------------------------------------------------------------------- +#AUTO +'THIS PROGRAM RUNS AUTOMATICALLY ON CONTROLLER START UP +' +ERRORLEV=0;'SETS ERROR LEVEL TO "INITIALISING" +MT-2,-2,-2,-2,-2,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER +MO;'ALL MOTORS OFF +CN 1;'CONFIGURES LIMIT SWITCHES TO ACCEPT NC CONTACTS +OP 65280;'SETS OUTPUTS 9-16 ON = RELAYS OFF +IA 137,157,203,131;'CONFIGURES IP ADDRESS +AC 25000,25000,,150000,12500,5000,12500,25000;'SET ACELERATION +DC 25000,25000,,150000,12500,5000,12500,25000;'SET DECELERATION +SP 25000,25000,,150000,25000,50000,25000,100000;'SET SPEED +SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE +SIB=0 +SIC=0 +SID=0 +SIE=0 +SIF=0 +SIG=0 +SIH=0 +WT1000;'WAIT FOR ENCODER TO INITIALISE +SIA=1,24,12,0<-2>1;'RESOLVER VIA VEGA 2790 BOARD +SIB=1,24,12,0<-2>1;'RESOLVER VIA VEGA 2790 BOARD +SID=1,24,12,0<-2>1;'RESOLVER VIA VEGA 2790 BOARD +SIF=1,25,13,0<-2>2;'KUEBLER 5863 +SIG=1,25,13,0<-2>1;'IVO GXM2H +SIH=1,25,25,0<-2>2;'HEIDENHAIN RCN226 +LSAHIT=0;'INITIALISE THE BIT SET AFTER A LIMIT IS HIT +LSBHIT=0 +LSCHIT=0 +LSDHIT=0 +LSEHIT=0 +LSFHIT=0 +LSGHIT=0 +LSHHIT=0 +APFDONE=0;'INITIALISE THE BIT FOR AXIS F AIRPAD CONTROL +APHDONE=0;'INITIALISE THE BIT FOR AXIS H AIRPAD CONTROL +HMTAPEDN=0;'TAPE HOME ROUTINE NOT RUN +HMWEDGDN=0;'WEDGE HOME ROUTINE NOT RUN +ANGLE=((_TPF-190161)*-0.006696)+25.77375473;'SET ANGLE TO CURRENT POSITION +'ERRORLEV=-1;'COMPLETED INITIALISATION +II 6,8,,0;'CONFIGURES THE 6TH, 7TH & 8TH INPUT TO ACTIVATE #ININT ROUTINE +ERRORLEV=0;'THIS SETS TO "MANUAL MODE" FOR SPICE, NO WEDGES MOVED +JS #THREAD0 +EN +' +' +'----------------------------------------------------------------------------- +#THREAD0 +'THREAD THAT CALLS HOMING & WEDGE CONTROL THREADS & RUNS GENERAL ROUTINES +' +IF ((_XQ1=-1)&(ERRORLEV=-1)) +'THREAD 1 NOT USED AND NO ERRORS +XQ #WDGCTRL,1;'EXECUTE WEDGE CONTROL ROUTINE IN THREAD 1 +ENDIF +IF (ERRORLEV>0);'IN ERROR +HX1;'HALT EXECUTION OF THREAD 1 +STDF;'STOP MAGNET ARM AND FLIGHT TUBE +ENDIF +JS #CHKDCEL;'CHECKS AND RESETS DECELERATIONS AFTER A LIMIT HIT +JS #CHKSPD;'CHECKS SPEEDS TO SEE IF ABOVE MAXIMUMS +JS #AIRPAD;'CONTROLS THE AIRPADS ON AXIS F & H +JP #THREAD0 +EN +' +' +'----------------------------------------------------------------------------- +#WDGCTRL +'ROUTINE TO CONTROL THE CO-ORDINATED MOTION OF THE FLIGHT TUBE AND MAGNET ARM. +'THE NUMBER OF WEDGES TO BE MOVED IS CALCULATED FROM THE DESTINATION POSITION. +'THE WEDGES ARE MOVED ALL AT ONCE, THEN THE FLIGHT TUBE CONTINUES TO THE +'FINAL POSITION. +' +JS #CALCANG;'CALCULATE DIRECTION AND DESTINATION IN ENCODER COUNTS +IF (DIRF=0);'IN POSITION +MO DF;'TURN OFF THE MAGNET ARM AND FLIGHT TUBE +JP #ENDWC;'JUMP TO THE END +ENDIF +' +FINPROG=1;'F AXIS IN PROGRESS BIT SET TO TRUE +IF (DIRF=1);'HEADING CLOCKWISE +IF ((DESTF<191710)&(DESTF>186185));'NEEDS 3 LEFT, 0 RIGHT (15-52DEG) +IF ((_TPF<191710)&(_TPF>186185));'CURRENTLY IN THE RANGE. NO WEDGES MOVED +JP #GOFINAL +ELSE;'WEDGES NEED TO BE MOVED +FTPOS=186511;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 3 R UNLATCH POINT +ENDIF +ENDIF +' +IF ((DESTF<186186)&(DESTF>184094));'NEEDS 2 LEFT, 1 RIGHT (52-66DEG) +IF ((_TPF<186186)&(_TPF>184094));'CURRENTLY IN THE RANGE. NO WEDGES MOVED +JP #GOFINAL +ELSE;'WEDGES NEED TO BE MOVED +FTPOS=184421;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 2 R UNLATCH POINT +ENDIF +ENDIF +' +IF ((DESTF<184095)&(DESTF>182003));'NEEDS 1 LEFT, 2 RIGHT (66-80DEG) +IF ((_TPF<184095)&(_TPF>182003));'CURRENTLY IN THE RANGE. NO WEDGES MOVED +JP #GOFINAL +ELSE;'WEDGES NEED TO BE MOVED +FTPOS=182255;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 1 R UNLATCH POINT +ENDIF +ENDIF +' +IF ((DESTF<182004)&(DESTF>181256));'NEEDS 0 LEFT, 3 RIGHT (80-85DEG) +IF ((_TPF<182004)&(_TPF>181256));'CURRENTLY IN THE RANGE. NO WEDGES MOVED +JP #GOFINAL +ELSE +'DESTINATION IN RANGE REQUIRING 0 WEDGES LEFT, 3 WEDGES RIGHT (80-85DEG) +'AND NOT CURRENTLY WITHIN THE RANGE AND HEADING CLOCKWISE IS NOT POSSIBLE +'A COUNTER CLOCKWISE ROTATION IS THE ONLY WAY INTO THIS ZONE +ERRORLEV=51;' SET ERROR +JP #ENDWC +ENDIF +ENDIF +' +IF (@IN[14]=0);'WEDGE SHOULD BE IN UNLATCH POS BUT RIGHT SWITCH NOT MADE +ERRORLEV=41;'SET ERROR, JUMP OUT +JP #ENDWC +ENDIF +ARMPOS=2897;ARMTRIES=0;JS #ARMMOVE;'SEND ARM TO R PICK UP POINT +CB16;'TURN MAGNET ON +WT 500;'WAIT 1/2 SEC FOR MAGNET TO LATCH +ARMPOS=1061;ARMTRIES=0;JS #ARMMOVE;'SEND ARM+ALL WEDGES TO L DROP OFF POINT +SB16;'TURN MAGNET OFF +JP #GOFINAL;'WEDGES MOVED, GO TO FINAL POSTION +ENDIF +' +IF (DIRF=-1);'HEADING COUNTER CLOCKWISE +IF ((DESTF<191710)&(DESTF>186185));'NEEDS 3 LEFT, 0 RIGHT (15-52DEG) +IF ((_TPF<191710)&(_TPF>186185));'CURRENTLY IN THE RANGE. NO WEDGES MOVED +JP #GOFINAL +ELSE +'DESTINATION IN RANGE REQUIRING 3 WEDGES LEFT, 0 WEDGES RIGHT (15-52DEG) +'AND NOT CURRENTLY IN THE RANGE AND HEADING COUNTER CLOCKWISE IS NOT POSSIBLE +'A COUNTER CLOCKWISE ROTATION IS THE ONLY WAY INTO THIS ZONE +ERRORLEV=52;'SET ERROR +JP #ENDWC +ENDIF +ENDIF +' +IF ((DESTF<186186)&(DESTF>184094));'NEEDS 2 LEFT, 1 RIGHT (52-66DEG) +IF ((_TPF<186186)&(_TPF>184094));'CURRENTLY IN THE RANGE. NO WEDGES MOVED +JP #GOFINAL +ELSE;'WEDGES NEED TO BE MOVED +FTPOS=185914;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 3 LEFT UNLATCH POINT +ENDIF +ENDIF +' +IF ((DESTF<184095)&(DESTF>182003));'NEEDS 1 LEFT, 2 RIGHT (66-80DEG) +IF ((_TPF<184095)&(_TPF>182003));'CURRENTLY IN THE RANGE. NO WEDGES MOVED +JP #GOFINAL +ELSE;'WEDGES NEED TO BE MOVED +FTPOS=183823;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 2 LEFT UNLATCH POINT +ENDIF +ENDIF +' +IF ((DESTF<182004)&(DESTF>181256));'NEEDS 0 LEFT, 3 RIGHT (80-85DEG) +IF ((_TPF<182004)&(_TPF>181256));'CURRENTLY IN THE RANGE. NO WEDGES MOVED +JP #GOFINAL +ELSE;'WEDGES NEED TO BE MOVED +FTPOS=181900;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 1 LEFT UNLATCH POINT +ENDIF +ENDIF +' +IF (@IN[13]=0);'WEDGE SHOULD BE IN UNLATCH POS BUT LEFT SWITCH NOT MADE +ERRORLEV=42;'SET ERROR, JUMP OUT +JP #ENDWC +ENDIF +ARMPOS=1206;ARMTRIES=0;JS #ARMMOVE;'SEND ARM TO L PICK UP POINT +CB16;'TURN MAGNET ON +WT 500;'WAIT 1/2 SEC FOR MAGNET TO LATCH +ARMPOS=3060;ARMTRIES=0;JS #ARMMOVE;'SEND ARM+ALL WEDGES TO R DROP OFF POINT +SB16;'TURN MAGNET OFF +JP #GOFINAL;'WEDGES MOVED, GO TO FINAL POSTION +ENDIF +' +#GOFINAL +FINTRIES=0;JS #FINE;'FINE TUNE FLIGHT TUBE +#ENDWC;'END OF THREAD WEGCTRL +FINPROG=0;'F AXIS IN PROGRESS BIT SET TO FALSE +EN +' +' +'----------------------------------------------------------------------------- +#CALCANG +'ROUTINE TO CALCULATE THE SSI AND TAPE POSITIONS FROM THE 'ANGLE' VARIABLE +' +DBAND3=1;'SETS TAPE ENCODER DEAD BAND +DESTF=((ANGLE-25.77375473)/-0.006696)+190161 +'CALCULATE ENCODER VALUE FROM USER INPUTTED ANGLE VARIABLE +IF ((DESTF>191710)|(DESTF<181508)) +'OUTSIDE HARD LIMITS +ERRORLEV=4 +WT500 +ENDIF +IF (@ABS[_TPF-DESTF]_TPF) +DIRF=1;'CLOCKWISE ROTATION NEEDED +ENDIF +IF (DESTF<_TPF) +DIRF=-1;'COUNTER CLOCKWISE ROTATION NEEDED +ENDIF +ENDIF +EN +' +' +'----------------------------------------------------------------------------- +#FTMOVE +'ROUTINE TO MOVE THE FLIGHT TUBE USING A MOVE-CHECK-CORRECT METHOD +' +'@IN[13]=0 IS THE LEFT CAM SWITCH IN THE UNACTUATED POSITION +'@IN[14]=0 IS THE RIGHT CAM SWITCH IN THE UNACTUATED POSITION +' +DBAND1=1 +PRF=25000*((FTPOS-_TPF)/-30.92);'CALC STEPS TO DESTINATION +IF ((_PRF>0)&(_LFF=0));'IF POSITIVE MOVE AND ALREADY ON LIMIT +ERRORLEV=2;'SET ERROR, JUMP OUT +JP #FTEND +ENDIF +IF ((_PRF<0)&(_LRF=0));'IF NEGATIVE MOVE AND ALREADY ON LIMIT +ERRORLEV=3;'SET ERROR, JUMP OUT +JP #FTEND +ENDIF +SHF +BGF +MCF;'WAIT FOR MOTION TO COMPLETE +FTTRIES=FTTRIES+1;'INCREMENT ATTEMPT COUNTER +IF (FTTRIES>4);'IF TOO MANY ATTEMPTS +ERRORLEV=1;'SET ERROR, JUMP OUT +JP #FTEND +ENDIF +JP #FTMOVE, (@ABS[_TPF-FTPOS]>DBAND1) +'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND1 +#FTEND +EN +' +' +'----------------------------------------------------------------------------- +#ARMMOVE +'ROUTINE TO MOVE THE MAGNET ARM WITH A CLOSED LOOP RESOLVER POSITION +' +'CW LIMIT 122 +'CCW LIMIT 3373 +' +'FT COUNTER CLOCKWISE +'LEFT PICK UP POINT 1206 +'TO THE +'RIGHT DROP OFF POINT 3060 +' +'FT CLOCKWISE +'RIGHT PICK UP POINT 2897 +'TO THE +'LEFT DROP OFF POINT 1061 +' +' +DBAND2=2;'HEAVILY GEARED, DEADBAND OF 2 ACHIEVABLE +PRD=25000*(((_TPD&4095)-ARMPOS)/13.5);'CALC STEPS TO DESTINATION +'&4095 MASKS OUT UNUSED 12 MOST SIGNIFICANT BITS +IF ((_PRD>0)&(_LFD=0));'IF POSITIVE MOVE AND ALREADY ON LIMIT +ERRORLEV=12;'SET ERROR, JUMP OUT +JP #ARMEND +ENDIF +IF ((_PRD<0)&(_LRD=0));'IF NEGATIVE MOVE AND ALREADY ON LIMIT +ERRORLEV=13;'SET ERROR, JUMP OUT +JP #ARMEND +ENDIF +ACD=75000 +DCD=75000 +SPD=150000 +SHD +BGD +MCD;'WAIT FOR MOTION TO COMPLETE +ARMTRIES=ARMTRIES+1;'INCREMENT ATTEMPT COUNTER +IF (ARMTRIES>4);'IF TOO MANY ATTEMPTS +ERRORLEV=11;'SET ERROR, JUMP OUT +JP #ARMEND +ENDIF +JP #ARMMOVE, (@ABS[ARMPOS-(_TPD&4095)]>DBAND2) +'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND2 +MOD;'TURN MOTOR OFF +#ARMEND +EN +' +' +'----------------------------------------------------------------------------- +#FINE +'ROUTINE TO MOVE THE FLIGHT TUBE USING A MOVE-CHECK-CORRECT METHOD +'AND THEN TURN OFF AIRPADS ONCE IN POSITION +' +'70.24 DEGREES TOTAL FOR 64 SEGMENTS +'2 ADJACENT SEGMENTS = 40000 COUNTS +'TOTAL COUNTS FOR 70.24 DEGREES = 1,280,000 +'0.000054875 DEGREES PER COUNT +PRF=25000*((DESTF-_TPF)/-30.92);'CALC STEPS TO DESTINATION +IF ((_PRF>0)&(_LFF=0));'IF POSITIVE MOVE AND ALREADY ON LIMIT +ERRORLEV=22;'SET ERROR, JUMP OUT +JP #FINEEND +ENDIF +IF ((_PRF<0)&(_LRF=0));'IF NEGATIVE MOVE AND ALREADY ON LIMIT +ERRORLEV=23;'SET ERROR, JUMP OUT +JP #FINEEND +ENDIF +SHF +BGF +MCF;'WAIT FOR MOTION TO COMPLETE +WT2000;'WAIT TO SETTLE +FINTRIES=FINTRIES+1;'INCREMENT ATTEMPT COUNTER +IF (FINTRIES>4);'IF TOO MANY ATTEMPTS +ERRORLEV=21;'SET ERROR, JUMP OUT +JP #FINEEND +ENDIF +JP #FINE, (@ABS[_TPF-DESTF]>DBAND3) +'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND3 +MOF;' TURN OFF FLIGHT TUBE MOTOR (AND HENCE AIRPADS) +#FINEEND +EN +' +' +'----------------------------------------------------------------------------- +#CHKDCEL +'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT +' +IF ((LSAHIT=1)&(_BGA=0));'WHEN MOTION STOPS AFTER A LIMIT HIT +DCA=OLDDCA;' RESET DECEL TO OLD VALUE +LSAHIT=0;'RESET LIMIT HIT INDICATOR BIT +ENDIF +' +IF ((LSBHIT=1)&(_BGB=0)) +DCB=OLDDCB +LSBHIT=0 +ENDIF +' +IF ((LSCHIT=1)&(_BGC=0)) +DCC=OLDDCC +LSCHIT=0 +ENDIF +' +IF ((LSDHIT=1)&(_BGD=0)) +DCD=OLDDCD +LSDHIT=0 +ENDIF +' +IF ((LSEHIT=1)&(_BGE=0)) +DCE=OLDDCE +LSEHIT=0 +ENDIF +' +IF ((LSFHIT=1)&(_BGF=0)) +DCF=OLDDCF +LSFHIT=0 +ENDIF +' +IF ((LSGHIT=1)&(_BGG=0)) +DCG=OLDDCG +LSGHIT=0 +ENDIF +' +IF ((LSHHIT=1)&(_BGH=0)) +DCH=OLDDCH +LSHHIT=0 +ENDIF +EN +' +' +'----------------------------------------------------------------------------- +#AIRPAD +'ROUTINE TO CONTROL AIRPADS +' +'CONTROLS THE AIRPAD SOLENOID VALVES FOR SAMPLE STAGE +IF (_MOF=0);'FLIGHT TUBE MOTOR IS ON +SB 10;'SAMPLE STAGE AIR PAD OFF-SOLENOID OFF +CB 9;'SAMPLE STAGE AIR PAD ON-SOLENOID ON +APFDONE=0 +ENDIF +IF ((_MOF=1)&(APFDONE=0));'FLIGHT TUBE MOTOR IS OFF AND 1ST TIME THROUGH +SB 9;'SAMPLE STAGE AIR PAD ON-SOLENOID OFF +CB 10;'SAMPLE STAGE AIR PAD OFF-SOLENOID ON +WT500;'WAIT 1/2 SEC +SB 10;'SAMPLE STAGE AIR PAD OFF-SOLENOID OFF +APFDONE=1 +ENDIF +' +'CONTROLS THE AIRPAD SOLENOID VALVES FOR DETECTOR STAGE +IF ((_MOH=0)|(_MOF=0));'DETECTOR OR FLIGHT TUBE MOTOR IS ON +SB 12;'DETECTOR AIR PAD OFF-SOLENOID OFF +CB 11;'DETECTOR AIR PAD ON-SOLENOID ON +APHDONE=0 +ENDIF +IF ((_MOH=1)&(_MOF=1)&(APHDONE=0));'DETECTOR & FT MOTORS OFF & 1ST TIME THROUGH +SB 11;'DETECTOR AIR PAD OFF-SOLENOID OFF +CB 12;'DETECTOR AIR PAD OFF-SOLENOID ON +WT500;'WAIT 1/2 SEC +SB 12;'DETECTOR AIR PAD OFF-SOLENOID OFF +APHDONE=1 +ENDIF +EN +' +' +'----------------------------------------------------------------------------- +#CHKSPD +'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED +' +IF (_SPA>50000) +SPA=50000 +ENDIF +' +IF (_SPB>50000) +SPB=50000 +ENDIF +' +IF (_SPC>50000) +SPC=50000 +ENDIF +' +IF (_SPD>150000) +SPD=150000 +ENDIF +' +IF (_SPE>25000) +SPE=25000 +ENDIF +' +IF (_SPF>50000) +SPF=50000 +ENDIF +' +IF (_SPG>25000) +SPG=25000 +ENDIF +' +IF (_SPH>100000) +SPH=100000 +ENDIF +EN +' +' +'----------------------------------------------------------------------------- +#TCPERR +'EMPTY TCP ERROR ROUTINE +' +RE +' +' +'----------------------------------------------------------------------------- +#ININT +'INTERUPT ROUTINE +'TO STOP ALL AXES WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +'TO STOP AXIS F AND H WHEN LIGHT CURTAINS BROKEN BUT TO ALLOW MOVEMENT AWAY +' +IF @IN[8]=0 +'SAFETY INTERLOCK SYSTEM ALL AXES SLOWDOWN +CN-1;'RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI +WT250 +CN1;'SETS LIMITS BACK TO NORMAL +ERRORLEV=100 +JP #ENININT +ENDIF +' +IF @IN[6]=0 +'LOW ANGLE LIGHT CURTAIN BROKEN +IF _TVF>0 +'AXIS HEADING TOWARDS LIGHT CURTAIN +STF +ENDIF +IF _TVH>0 +'AXIS HEADING TOWARDS LIGHT CURTAIN +STH +'ERRORLEV=101 +ENDIF +ENDIF +' +IF @IN[7]=0 +'HIGH ANGLE LIGHT CURTAIN BROKEN +IF _TVF<0 +'AXIS HEADING TOWARDS LIGHT CURTAIN +STF +ENDIF +IF _TVH<0 +'AXIS HEADING TOWARDS LIGHT CURTAIN +STH +'ERRORLEV=102 +ENDIF +ENDIF +' +#ENININT +RI +' +' +'-------------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' +'----------------------------------------------------------------------------- +#LIMSWI +'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT +' +IF (_LFA=0)|(_LRA=0);'LIMIT HIT +IF (LSAHIT=0)&(_BGA=1);'STILL MOVING, FIRST TIME +OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE +DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP +LSAHIT=1 +ENDIF +ENDIF +' +IF (_LFB=0)|(_LRB=0) +IF (LSBHIT=0)&(_BGB=1) +OLDDCB=_DCB +DCB=100000 +LSBHIT=1 +ENDIF +ENDIF +' +IF (_LFC=0)|(_LRC=0) +IF (LSCHIT=0)&(_BGC=1) +OLDDCC=_DCC +DCC=100000 +LSCHIT=1 +ENDIF +ENDIF +' +IF (_LFD=0)|(_LRD=0) +IF (LSDHIT=0)&(_BGD=1) +OLDDCD=_DCD +DCD=600000;'SPD=150000 +LSDHIT=1 +ENDIF +ENDIF +' +IF (_LFE=0)|(_LRE=0) +IF (LSEHIT=0)&(_BGE=1) +OLDDCE=_DCE +DCE=200000 +LSEHIT=1 +ENDIF +ENDIF +' +IF (_LFF=0)|(_LRF=0) +IF (LSFHIT=0)&(_BGF=1) +OLDDCF=_DCF +DCF=100000 +LSFHIT=1 +ENDIF +ENDIF +' +IF (_LFG=0)|(_LRG=0) +IF (LSGHIT=0)&(_BGG=1) +OLDDCG=_DCG +DCG=200000 +LSGHIT=1 +ENDIF +ENDIF +' +IF (_LFH=0)|(_LRH=0) +IF (LSHHIT=0)&(_BGH=1) +OLDDCH=_DCH +DCH=200000 +LSHHIT=1 +ENDIF +ENDIF +RE +' +' +'----------------------------------------------------------------------------- +#HMWEDGE +'ROUTINE TO GET WEDGES TO A KNOW POSITION +'THE FLIGHT TUBE IS MOVED TO THE RIGHT UNLATCH POSITION OF WEDGE 3 +'THE MAGNET ARM IS THEN MOVED FROM THE RIGHT PICK UP POINT TO THE LEFT DROP +'OFF POINT WITH THE MAGNET ON. THIS WILL PICK UP ALL THE WEDGES NO MATTER +'WHERE THEY ARE, AND DRAG THEM AROUND TO THE LEFT DROP OFF POINT. +' +FTPOS=186511;FTTRIES=0;JS #FTMOVE;'GO TO WEDGE 3 RIGHT UNLATCH POSITION +ARMPOS=2897;ARMTRIES=0;JS #ARMMOVE;'RIGHT PICK UP POINT +CB16;'TURN MAGNET ON +WT 500;'WAIT 1/2 SEC FOR MAGNET TO LATCH +ARMPOS=1061;ARMTRIES=0;JS #ARMMOVE;'LEFT DROP OFF, PICK UP WEDGES ENROUTE +SB16;'TURN MAGNET OFF +MOF +ANGLE=((_TPF-190161)*-0.006696)+25.37375473;'SET ANGLE TO CURRENT POSITION +HMWEDGDN=1;'SET DONE FLAG +EN +' +' +'----------------------------------------------------------------------------- +'ERROR LEVELS +'-1 NO ERROR, NORMAL CONDITION +'0 CONTROLLER INITIALISING - RUNNING AUTO ROUTINE +'1 #FTMOVE TOOK TOO MANY ATTEMPTS TO GET INTO POSITION +'2 #FTMOVE TUBE FORWARD LIMIT HIT AND DRIVE ATTEMPTED +'3 #FTMOVE TUBE REVERSE LIMIT HIT AND DRIVE ATTEMPTED +'4 ANGLE INPUT OUTSIDE HARD LIMITS +'5 #HMTAPE TOOK TOO MANY ATTMEPTS +'11 #ARMMOVE TOOK TOO MANY ATTEMPTS TO GET INTO POSITION +'12 #ARMMOVE FORWARD LIMIT HIT AND DRIVE ATTEMPTED +'13 #ARMMOVE REVERSE LIMIT HIT AND DRIVE ATTEMPTED +'21 #FINE TOOK TOO MANY ATTEMPTS TO GET INTO POSITION +'22 #FINE FORWARD LIMIT HIT AND DRIVE ATTEMPTED +'23 #FINE REVERSE LIMIT HIT AND DRIVE ATTEMPTED +'31 #TAPEHOME LIMITS FAILURE +'41 WEDGES SHOULD BE AT RIGHT PICK UP POINT BUT CAM SWITCH NOT MADE +'42 WEDGES SHOULD BE AT LEFT PICK UP POINT BUT CAM SWITCH NOT MADE +'51 CLOCKWISE MOVE INTO 82-85DEG RANGE NOT POSSIBLE +'52 COUNTER CLOCKWISE MOVE INTO 15-55DEG RANGE NOT POSSIBLE +'100 SAFETY AND INTERLOCK SYSTEM HAS INITIATED A SLOWDOWN BY ESTOP +'101 SAFETY AND INTERLOCK SYSTEM HAS INITIATED A SLOWDOWN BY LIGHT CURTAIN +'102 SAFETY AND INTERLOCK SYSTEM HAS INITIATED A SLOWDOWN BY LIGHT CURTAIN +' diff --git a/site_ansto/instrument/tas/DMC2280/controller2.txt b/site_ansto/instrument/tas/DMC2280/controller2.txt index 11111f46..c5fc86b4 100755 --- a/site_ansto/instrument/tas/DMC2280/controller2.txt +++ b/site_ansto/instrument/tas/DMC2280/controller2.txt @@ -1,349 +1,351 @@ -'TAIPAN - CONTROLLER 2 -' -'$Revision:$ -'$Date:$ -'Author: Daniel Bartlett -'Last revision by: $author:$ -' -'A-SAMPLE TRANSLATION - TILT 1 -'B-SAMPLE TRANSLATION - TILT 2 -'C-SAMPLE TRANSLATION - LINEAR 1 -'D-SAMPLE TRANSLATION - LINEAR 2 -'E-SAMPLE TRANSLATION - ROTATE -'F-DETECTOR + ANALYSER ROTATE _TPF=2771351 ON BEAM CL -'G-ANALYSER FOCUS 1 -'H-ANALYSER FOCUS 2 -' -' -'-------------------------------------------------------------------------- -#AUTO -'THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP -' -MT-2,-2,-2,-2,-2,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER -MO;'ALL MOTORS OFF -CN 1;'CONFIGURES LIMIT SWITCHES TO ACCEPT NC CONTACTS -II 6,8,,0;' CONFIGURES THE 6TH, 7TH & 8TH INPUT TO ACTIVATE #ININT ROUTINE -OP 65281;' SETS OUTPUTS 9-16 ON = RELAYS OFF -IA 137,157,203,132;' CONFIGURES IP ADDRESS -AC 25000,25000,25000,25000,25000,25000,12500,12500;' SET ACELERATION -DC 25000,25000,25000,25000,25000,25000,12500,12500;' SET DECELERATION -SP 25000,25000,25000,25000,25000,100000,12500,12500;' SET SPEED -SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE -SIB=0 -SIC=0 -SID=0 -SIE=0 -SIF=0 -SIG=0 -SIH=0 -WT1000;'WAIT FOR ENCODER TO INITIALISE -SIA=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE TILT 1 -SIB=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE TILT 2 -SIC=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE TRANS 1 -SID=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE TRANS 2 -SIE=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE ROTATE -SIF=1,25,25,0<-13>2;'HEIDENHAIN RCN226 - DETECTOR + ANALYSER ROTATE -SIG=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - ANALYSER FOCUS 1 -SIH=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - ANALYSER FOCUS 2 -LSAHIT=0;' INITIALISE THE BIT SET AFTER A LIMIT IS HIT -LSBHIT=0 -LSCHIT=0 -LSDHIT=0 -LSEHIT=0 -LSFHIT=0 -LSGHIT=0 -LSHHIT=0 -APFDONE=0;' INITIALISE THE BIT FOR AXIS F AIRPAD CONTROL -JS #THREAD0 -EN -' -' -'-------------------------------------------------------------------------- -#THREAD0 -'THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -' -JS #CHKDCEL -JS #AIRPAD -JS #CHKSPD -JS #BEAMSTP -JP #THREAD0 -EN -' -' -'-------------------------------------------------------------------------- -#CHKDCEL -'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT -' -IF (LSAHIT=1)&(_BGA=0);'WHEN MOTION STOPS AFTER A LIMIT HIT -DCA=OLDDCA;' RESET DECEL TO OLD VALUE -LSAHIT=0 -ENDIF -' -IF (LSBHIT=1)&(_BGB=0) -DCB=OLDDCB -LSBHIT=0 -ENDIF -' -IF (LSCHIT=1)&(_BGC=0) -DCC=OLDDCC -LSCHIT=0 -ENDIF -' -IF (LSDHIT=1)&(_BGD=0) -DCD=OLDDCD -LSDHIT=0 -ENDIF -' -IF (LSEHIT=1)&(_BGE=0) -DCE=OLDDCE -LSEHIT=0 -ENDIF -' -IF (LSFHIT=1)&(_BGF=0) -DCF=OLDDCF -LSFHIT=0 -ENDIF -' -IF (LSGHIT=1)&(_BGG=0) -DCG=OLDDCG -LSGHIT=0 -ENDIF -' -IF (LSHHIT=1)&(_BGH=0) -DCH=OLDDCH -LSHHIT=0 -ENDIF -EN -' -' -'-------------------------------------------------------------------------- -#AIRPAD -'ROUTINE TO CONTROL AIRPADS -' -'CONTROLS THE AIRPAD SOLENOID VALVES FOR ANALYSER STAGE -IF (_MOF=0);'ANALYSER MOTOR IS ON -SB 10;'ANALYSER AIR PAD OFF-SOLENOID OFF -CB 9;'ANALYSER AIR PAD ON-SOLENOID ON -APFDONE=0 -ENDIF -IF (_MOF=1)&(APFDONE=0);'ANALYSER MOTOR IS OFF -SB 9;'ANALYSER AIR PAD ON-SOLENOID OFF -CB 10;'ANALYSER AIR PAD OFF-SOLENOID ON -WT500;'WAIT 1/2 SEC -SB 10;'ANALYSER AIR PAD OFF-SOLENOID OFF -APFDONE=1 -ENDIF -' -' -'-------------------------------------------------------------------------- -#CHKSPD -'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED -' -IF (_SPA>50000) -SPA=50000 -ENDIF -' -IF (_SPB>50000) -SPB=50000 -ENDIF -' -IF (_SPC>50000) -SPC=50000 -ENDIF -' -IF (_SPD>50000) -SPD=50000 -ENDIF -' -IF (_SPE>50000) -SPE=50000 -ENDIF -' -IF (_SPF>100000) -SPF=100000 -ENDIF -' -IF (_SPG>25000) -SPG=25000 -ENDIF -' -IF (_SPH>25000) -SPH=25000 -ENDIF -EN -' -' -'-------------------------------------------------------------------------- -#BEAMSTP -' -'THIS ROUTINE CONTROLS THE POSITION OF THE BEAMSTOP -'IF THE ANALYSER IS WITHIN THE RANGE SPECIFIED THEN THE BEAMSTOP IS DOWN -'TO AVOID COLLISIONS WITH SLITS AND OTHER EQUIPMENT -' -IF (_XQ1=-1) -'#BSCHECK NOT RUNNING -XQ #BSCHECK,1 -ENDIF -IF (_TPF>9665152)&(_TPF<14370000) -'IF (_TPF>9665152)&(_TPF<13168731) -'IF (_TPF>12554353)&(_TPF<15923500) -'IF (_TPF>12554353)&(_TPF<15809209) -'ANALYSER WITHIN RANGE, BEAMSTOP NEEDS TO BE DOWN -SB11;'TURN OFF SOLENOID VALVE -ELSE -CB11;'TURN ON SOLENOID VALVE -ENDIF -EN -' -' -'-------------------------------------------------------------------------- -#BSCHECK -'THIS ROUTINE CHECKS THE POSITION OF THE BEAMSTOP AND REPORTS ERRORS -'TO THE SAFETY AND INTERLOCK SYSTEM -' -'IN[13]=1 TOP LIMIT ACTUATED -'IN[14]=1 BOTTOM LIMIT ACTUATED -IF ((_OP0&1024)=0) -'RELAY 11 HAS BEEN ENABLED THEREFORE THE BEAMSTOP SHOULD BE UP -WT1500;'DELAY TO ALLOW BEAMSTOP TO MOVE -IF ((@IN[13]=1)&(@IN[14]=0)) -'BEAMSTOP UP AND NOT DOWN -CB16;'SEND ALL-OK TO SIS -ELSE -SB16;'SEND ERROR BIT TO SIS -ENDIF -ENDIF -' -IF ((_OP0&1024)<>0) -'RELAY 11 HAS BEEN DISABLED THEREFORE THE BEAMSTOP SHOULD BE DOWN -WT1500;'DELAY TO ALLOW BEAMSTOP TO MOVE -IF ((@IN[13]=0)&(@IN[14]=1)) -'BEAMSTOP DOWN AND NOT UP -CB16;'SEND ALL-OK TO SIS -ELSE -SB16;'SEND ERROR BIT TO SIS -ENDIF -ENDIF -' -JP #BSCHECK -EN -' -'-------------------------------------------------------------------------- -#TCPERR -'EMPTY TCP ERROR ROUTINE -' -RE -' -' -'-------------------------------------------------------------------------- -#ININT -'INTERUPT ROUTINE -'TO STOP ALL AXES WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT -'TO STOP AXIS F WHEN LIGHT CURTAINS BROKEN BUT TO ALLOW MOVEMENT AWAY -' -IF @IN[8]=0 -'SAFETY INTERLOCK SYSTEM ALL AXES SLOWDOWN -CN-1;'RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI -WT250 -CN1;'SETS LIMITS BACK TO NORMAL -JP #ENININT -ENDIF -' -IF @IN[6]=0 -'LOW ANGLE LIGHT CURTAIN BROKEN -IF _TVF>0 -'AXIS HEADING TOWARDS LIGHT CURTAIN -STF -ENDIF -ENDIF -' -IF @IN[7]=0 -'HIGH ANGLE LIGHT CURTAIN BROKEN -IF _TVF<0 -'AXIS HEADING TOWARDS LIGHT CURTAIN -STF -ENDIF -ENDIF -' -#ENININT -RI -' -' -'-------------------------------------------------------------------------- -#CMDERR -'ROUTINE TO HANDLE COMMAND ERRORS -' -ZS0 -EN1 -' -' -'-------------------------------------------------------------------------- -#LIMSWI -'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT -' -IF (_LFA=0)|(_LRA=0);'LIMIT HIT -IF (LSAHIT=0)&(_BGA=1);'STILL MOVING, FIRST TIME -OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE -DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP -LSAHIT=1 -ENDIF -ENDIF -' -IF (_LFB=0)|(_LRB=0) -IF (LSBHIT=0)&(_BGB=1) -OLDDCB=_DCB -DCB=100000 -LSBHIT=1 -ENDIF -ENDIF -' -IF (_LFC=0)|(_LRC=0) -IF (LSCHIT=0)&(_BGC=1) -OLDDCC=_DCC -DCC=100000 -LSCHIT=1 -ENDIF -ENDIF -' -IF (_LFD=0)|(_LRD=0) -IF (LSDHIT=0)&(_BGD=1) -OLDDCD=_DCD -DCD=100000 -LSDHIT=1 -ENDIF -ENDIF -' -IF (_LFE=0)|(_LRE=0) -IF (LSEHIT=0)&(_BGE=1) -OLDDCE=_DCE -DCE=200000 -LSEHIT=1 -ENDIF -ENDIF -' -IF (_LFF=0)|(_LRF=0) -IF (LSFHIT=0)&(_BGF=1) -OLDDCF=_DCF -DCF=100000 -LSFHIT=1 -ENDIF -ENDIF -' -IF (_LFG=0)|(_LRG=0) -IF (LSGHIT=0)&(_BGG=1) -OLDDCG=_DCG -DCG=200000 -LSGHIT=1 -ENDIF -ENDIF -' -IF (_LFH=0)|(_LRH=0) -IF (LSHHIT=0)&(_BGH=1) -OLDDCH=_DCH -DCH=200000 -LSHHIT=1 -ENDIF -ENDIF -RE -' -' +'TAIPAN - CONTROLLER 2 +' +'$Revision:$ +'$Date:$ +'Author: Daniel Bartlett +'Last revision by: $author:$ +' +'A-SAMPLE TRANSLATION - TILT 1 +'B-SAMPLE TRANSLATION - TILT 2 +'C-SAMPLE TRANSLATION - LINEAR 1 +'D-SAMPLE TRANSLATION - LINEAR 2 +'E-SAMPLE TRANSLATION - ROTATE +'F-DETECTOR + ANALYSER ROTATE _TPF=2771351 ON BEAM CL +'G-ANALYSER FOCUS 1 +'H-ANALYSER FOCUS 2 +' +' +'-------------------------------------------------------------------------- +#AUTO +'THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' +MT-2,-2,-2,-2,-2,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER +MO;'ALL MOTORS OFF +CN 1;'CONFIGURES LIMIT SWITCHES TO ACCEPT NC CONTACTS +II 6,8,,0;' CONFIGURES THE 6TH, 7TH & 8TH INPUT TO ACTIVATE #ININT ROUTINE +OP 65281;' SETS OUTPUTS 9-16 ON = RELAYS OFF +IA 137,157,203,132;' CONFIGURES IP ADDRESS +AC 25000,25000,25000,25000,25000,25000,12500,12500;' SET ACELERATION +DC 25000,25000,25000,25000,25000,25000,12500,12500;' SET DECELERATION +SP 25000,25000,25000,25000,25000,100000,12500,12500;' SET SPEED +SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE +SIB=0 +SIC=0 +SID=0 +SIE=0 +SIF=0 +SIG=0 +SIH=0 +WT1000;'WAIT FOR ENCODER TO INITIALISE +SIA=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE TILT 1 +SIB=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE TILT 2 +SIC=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE TRANS 1 +SID=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE TRANS 2 +SIE=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - SAMPLE ROTATE +SIF=1,25,25,0<-13>2;'HEIDENHAIN RCN226 - DETECTOR + ANALYSER ROTATE +SIG=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - ANALYSER FOCUS 1 +SIH=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 - ANALYSER FOCUS 2 +LSAHIT=0;' INITIALISE THE BIT SET AFTER A LIMIT IS HIT +LSBHIT=0 +LSCHIT=0 +LSDHIT=0 +LSEHIT=0 +LSFHIT=0 +LSGHIT=0 +LSHHIT=0 +APFDONE=0;' INITIALISE THE BIT FOR AXIS F AIRPAD CONTROL +JS #THREAD0 +EN +' +' +'-------------------------------------------------------------------------- +#THREAD0 +'THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK +' +JS #CHKDCEL +JS #AIRPAD +JS #CHKSPD +JS #BEAMSTP +JP #THREAD0 +EN +' +' +'-------------------------------------------------------------------------- +#CHKDCEL +'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT +' +IF (LSAHIT=1)&(_BGA=0);'WHEN MOTION STOPS AFTER A LIMIT HIT +DCA=OLDDCA;' RESET DECEL TO OLD VALUE +LSAHIT=0 +ENDIF +' +IF (LSBHIT=1)&(_BGB=0) +DCB=OLDDCB +LSBHIT=0 +ENDIF +' +IF (LSCHIT=1)&(_BGC=0) +DCC=OLDDCC +LSCHIT=0 +ENDIF +' +IF (LSDHIT=1)&(_BGD=0) +DCD=OLDDCD +LSDHIT=0 +ENDIF +' +IF (LSEHIT=1)&(_BGE=0) +DCE=OLDDCE +LSEHIT=0 +ENDIF +' +IF (LSFHIT=1)&(_BGF=0) +DCF=OLDDCF +LSFHIT=0 +ENDIF +' +IF (LSGHIT=1)&(_BGG=0) +DCG=OLDDCG +LSGHIT=0 +ENDIF +' +IF (LSHHIT=1)&(_BGH=0) +DCH=OLDDCH +LSHHIT=0 +ENDIF +EN +' +' +'-------------------------------------------------------------------------- +#AIRPAD +'ROUTINE TO CONTROL AIRPADS +' +'CONTROLS THE AIRPAD SOLENOID VALVES FOR ANALYSER STAGE +IF (_MOF=0);'ANALYSER MOTOR IS ON +SB 10;'ANALYSER AIR PAD OFF-SOLENOID OFF +CB 9;'ANALYSER AIR PAD ON-SOLENOID ON +APFDONE=0 +ENDIF +IF (_MOF=1)&(APFDONE=0);'ANALYSER MOTOR IS OFF +SB 9;'ANALYSER AIR PAD ON-SOLENOID OFF +CB 10;'ANALYSER AIR PAD OFF-SOLENOID ON +WT500;'WAIT 1/2 SEC +SB 10;'ANALYSER AIR PAD OFF-SOLENOID OFF +APFDONE=1 +ENDIF +' +' +'-------------------------------------------------------------------------- +#CHKSPD +'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED +' +IF (_SPA>50000) +SPA=50000 +ENDIF +' +IF (_SPB>50000) +SPB=50000 +ENDIF +' +IF (_SPC>50000) +SPC=50000 +ENDIF +' +IF (_SPD>50000) +SPD=50000 +ENDIF +' +IF (_SPE>50000) +SPE=50000 +ENDIF +' +IF (_SPF>100000) +SPF=100000 +ENDIF +' +IF (_SPG>25000) +SPG=25000 +ENDIF +' +IF (_SPH>25000) +SPH=25000 +ENDIF +EN +' +' +'-------------------------------------------------------------------------- +#BEAMSTP +' +'THIS ROUTINE CONTROLS THE POSITION OF THE BEAMSTOP +'IF THE ANALYSER IS WITHIN THE RANGE SPECIFIED THEN THE BEAMSTOP IS DOWN +'TO AVOID COLLISIONS WITH SLITS AND OTHER EQUIPMENT +' +IF (_XQ1=-1) +'#BSCHECK NOT RUNNING +XQ #BSCHECK,1 +ENDIF +IF (_TPF>9800000)&(_TPF<13300000) +'IF (_TPF>9800000)&(_TPF<14123000) +'IF (_TPF>9665152)&(_TPF<14123000) +'IF (_TPF>9665152)&(_TPF<13168731) +'IF (_TPF>12554353)&(_TPF<15923500) +'IF (_TPF>12554353)&(_TPF<15809209) +'ANALYSER WITHIN RANGE, BEAMSTOP NEEDS TO BE DOWN +SB11;'TURN OFF SOLENOID VALVE +ELSE +CB11;'TURN ON SOLENOID VALVE +ENDIF +EN +' +' +'-------------------------------------------------------------------------- +#BSCHECK +'THIS ROUTINE CHECKS THE POSITION OF THE BEAMSTOP AND REPORTS ERRORS +'TO THE SAFETY AND INTERLOCK SYSTEM +' +'IN[13]=1 TOP LIMIT ACTUATED +'IN[14]=1 BOTTOM LIMIT ACTUATED +IF ((_OP0&1024)=0) +'RELAY 11 HAS BEEN ENABLED THEREFORE THE BEAMSTOP SHOULD BE UP +WT1500;'DELAY TO ALLOW BEAMSTOP TO MOVE +IF ((@IN[13]=1)&(@IN[14]=0)) +'BEAMSTOP UP AND NOT DOWN +CB16;'SEND ALL-OK TO SIS +ELSE +SB16;'SEND ERROR BIT TO SIS +ENDIF +ENDIF +' +IF ((_OP0&1024)<>0) +'RELAY 11 HAS BEEN DISABLED THEREFORE THE BEAMSTOP SHOULD BE DOWN +WT1500;'DELAY TO ALLOW BEAMSTOP TO MOVE +IF ((@IN[13]=0)&(@IN[14]=1)) +'BEAMSTOP DOWN AND NOT UP +CB16;'SEND ALL-OK TO SIS +ELSE +SB16;'SEND ERROR BIT TO SIS +ENDIF +ENDIF +' +JP #BSCHECK +EN +' +'-------------------------------------------------------------------------- +#TCPERR +'EMPTY TCP ERROR ROUTINE +' +RE +' +' +'-------------------------------------------------------------------------- +#ININT +'INTERUPT ROUTINE +'TO STOP ALL AXES WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +'TO STOP AXIS F WHEN LIGHT CURTAINS BROKEN BUT TO ALLOW MOVEMENT AWAY +' +IF @IN[8]=0 +'SAFETY INTERLOCK SYSTEM ALL AXES SLOWDOWN +CN-1;'RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI +WT250 +CN1;'SETS LIMITS BACK TO NORMAL +JP #ENININT +ENDIF +' +IF @IN[6]=0 +'LOW ANGLE LIGHT CURTAIN BROKEN +IF _TVF>0 +'AXIS HEADING TOWARDS LIGHT CURTAIN +STF +ENDIF +ENDIF +' +IF @IN[7]=0 +'HIGH ANGLE LIGHT CURTAIN BROKEN +IF _TVF<0 +'AXIS HEADING TOWARDS LIGHT CURTAIN +STF +ENDIF +ENDIF +' +#ENININT +RI +' +' +'-------------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' +'-------------------------------------------------------------------------- +#LIMSWI +'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT +' +IF (_LFA=0)|(_LRA=0);'LIMIT HIT +IF (LSAHIT=0)&(_BGA=1);'STILL MOVING, FIRST TIME +OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE +DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP +LSAHIT=1 +ENDIF +ENDIF +' +IF (_LFB=0)|(_LRB=0) +IF (LSBHIT=0)&(_BGB=1) +OLDDCB=_DCB +DCB=100000 +LSBHIT=1 +ENDIF +ENDIF +' +IF (_LFC=0)|(_LRC=0) +IF (LSCHIT=0)&(_BGC=1) +OLDDCC=_DCC +DCC=100000 +LSCHIT=1 +ENDIF +ENDIF +' +IF (_LFD=0)|(_LRD=0) +IF (LSDHIT=0)&(_BGD=1) +OLDDCD=_DCD +DCD=100000 +LSDHIT=1 +ENDIF +ENDIF +' +IF (_LFE=0)|(_LRE=0) +IF (LSEHIT=0)&(_BGE=1) +OLDDCE=_DCE +DCE=200000 +LSEHIT=1 +ENDIF +ENDIF +' +IF (_LFF=0)|(_LRF=0) +IF (LSFHIT=0)&(_BGF=1) +OLDDCF=_DCF +DCF=100000 +LSFHIT=1 +ENDIF +ENDIF +' +IF (_LFG=0)|(_LRG=0) +IF (LSGHIT=0)&(_BGG=1) +OLDDCG=_DCG +DCG=200000 +LSGHIT=1 +ENDIF +ENDIF +' +IF (_LFH=0)|(_LRH=0) +IF (LSHHIT=0)&(_BGH=1) +OLDDCH=_DCH +DCH=200000 +LSHHIT=1 +ENDIF +ENDIF +RE +' +' diff --git a/site_ansto/instrument/tas/DMC2280/controller3.txt b/site_ansto/instrument/tas/DMC2280/controller3.txt index 51eb6fbd..5a235e7b 100755 --- a/site_ansto/instrument/tas/DMC2280/controller3.txt +++ b/site_ansto/instrument/tas/DMC2280/controller3.txt @@ -1,250 +1,250 @@ -'TAIPAN - CONTROLLER 3 -' -'$Revision:$ -'$Date:$ -'Author: Daniel Bartlett -'Last revision by: $author:$ -' -'A-MONOCHROMATOR 1 HORIZONTAL FOCUS -'B-MONOCHROMATOR 1 VERTICAL FOCUS -'C-MONOCHROMATOR 2 HORIZONTAL FOCUS -'D-MONOCHROMATOR 2 VERTICAL FOCUS -'E-MONOCHROMATOR ROTATE -'F-SPARE -'G-SPARE -'H-SPARE -' -' -'4096 COUNTS / 2 DEGREES -'2048 COUNTS / DEGREE -'PG 00 DEGREES = 16034863 -'PG 45 DEGREES = 16127023 -'-------------------------------------------------------------------------- -#AUTO -'THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP -' -MT-2,-2,-2,-2,-2.5,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER, E REVERSED -MO;'ALL MOTORS OFF -CN 1;'CONFIGURES LIMIT SWITCHES TO ACCEPT NC CONTACTS -II 8,,,0;' CONFIGURES THE 8TH INPUT TO ACTIVATE THE #ININT ROUTINE -OP 65280;' SETS OUTPUTS 9-16 ON = RELAYS OFF -IA 137,157,203,133;' CONFIGURES IP ADDRESS -AC 6000,6000,6000,6000,25000,,,;' SET ACELERATION -DC 6000,6000,6000,6000,25000,,,;' SET DECELERATION -SP 12500,12500,50000,12500,100000,,,;' SET SPEED -SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE -SIB=0 -SIC=0 -SID=0 -SIE=0 -SIF=0 -SIG=0 -SIH=0 -WT1000;'WAIT FOR ENCODER TO INITIALISE -SIA=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD -SIB=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD -SIC=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD -SID=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD -SIE=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD -LSAHIT=0;' INITIALISE THE BIT SET AFTER A LIMIT IS HIT -LSBHIT=0 -LSCHIT=0 -LSDHIT=0 -LSEHIT=0 -'LSFHIT=0 -'LSGHIT=0 -'LSHHIT=0 -JS #THREAD0 -EN -' -' -'-------------------------------------------------------------------------- -#THREAD0 -'THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -' -JW #CHKDCEL -JS #CHKSPD -JP #THREAD0 -EN -' -' -'-------------------------------------------------------------------------- -#CHKDCEL -'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT -' -IF ((LSAHIT=1)&(_BGA=0));'WHEN MOTION STOPS AFTER A LIMIT HIT -DCA=OLDDCA;' RESET DECEL TO OLD VALUE -LSAHIT=0 -ENDIF -' -IF ((LSBHIT=1)&(_BGB=0)) -DCB=OLDDCB -LSBHIT=0 -ENDIF -' -IF ((LSCHIT=1)&(_BGC=0)) -DCC=OLDDCC -LSCHIT=0 -ENDIF -' -IF ((LSDHIT=1)&(_BGD=0)) -DCD=OLDDCD -LSDHIT=0 -ENDIF -' -IF ((LSEHIT=1)&(_BGE=0)) -DCE=OLDDCE -LSEHIT=0 -ENDIF -' -'IF ((LSFHIT=1)&(_BGF=0)) -'DCF=OLDDCF -'LSFHIT=0 -'ENDIF -' -'IF ((LSGHIT=1)&(_BGG=0)) -'DCG=OLDDCG -'LSGHIT=0 -'ENDIF -' -'IF ((LSHHIT=1)&(_BGH=0)) -'DCH=OLDDCH -'LSHHIT=0 -'ENDIF -'EN -' -' -'-------------------------------------------------------------------------- -#CHKSPD -'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED -' -IF (_SPA>25000) -SPA=25000 -ENDIF -' -IF (_SPB>25000) -SPB=25000 -ENDIF -' -IF (_SPC>25000) -SPC=25000 -ENDIF -' -IF (_SPD>25000) -SPD=25000 -ENDIF -' -IF (_SPE>100000) -SPE=100000 -ENDIF -' -'IF (_SPF>100000) -'SPF=100000 -'ENDIF -' -'IF (_SPG>50000) -'SPG=50000 -'ENDIF -' -'IF (_SPH>100000) -'SPH=100000 -'ENDIF -'EN -' -' -'-------------------------------------------------------------------------- -#TCPERR -'EMPTY TCP ERROR ROUTINE -' -RE -' -' -'-------------------------------------------------------------------------- -#ININT -'INTERUPT ROUTINE TO STOP ALL AXES -'WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT -' -CN-1;' RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI -WT250 -CN1;' SETS LIMITS BACK TO NORMAL -RI -' -' -'-------------------------------------------------------------------------- -#CMDERR -'ROUTINE TO HANDLE COMMAND ERRORS -' -ZS0 -EN1 -' -' -'-------------------------------------------------------------------------- -#LIMSWI -'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT -' -IF ((_LFA=0)|(_LRA=0));'LIMIT HIT -IF ((LSAHIT=0)&(_BGA=1));'STILL MOVING, FIRST TIME -OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE -DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP -LSAHIT=1 -ENDIF -ENDIF -' -IF ((_LFB=0)|(_LRB=0)) -IF ((LSBHIT=0)&(_BGB=1)) -OLDDCB=_DCB -DCB=100000 -LSBHIT=1 -ENDIF -ENDIF -' -IF ((_LFC=0)|(_LRC=0)) -IF ((LSCHIT=0)&(_BGC=1)) -OLDDCC=_DCC -DCC=100000 -LSCHIT=1 -ENDIF -ENDIF -' -IF ((_LFD=0)|(_LRD=0)) -IF ((LSDHIT=0)&(_BGD=1)) -OLDDCD=_DCD -DCD=100000 -LSDHIT=1 -ENDIF -ENDIF -' -IF ((_LFE=0)|(_LRE=0)) -IF ((LSEHIT=0)&(_BGE=1)) -OLDDCE=_DCE -DCE=200000 -LSEHIT=1 -ENDIF -ENDIF -' -'IF ((_LFF=0)|(_LRF=0)) -'IF ((LSFHIT=0)&(_BGF=1)) -'OLDDCF=_DCF -'DCF=200000 -'LSFHIT=1 -'ENDIF -'ENDIF -' -'IF ((_LFG=0)|(_LRG=0)) -'IF ((LSGHIT=0)&(_BGG=1)) -'OLDDCG=_DCG -'DCG=200000 -'LSGHIT=1 -'ENDIF -'ENDIF -' -'IF ((_LFH=0)|(_LRH=0)) -'IF ((LSHHIT=0)&(_BGH=1)) -'OLDDCH=_DCH -'DCH=200000 -'LSHHIT=1 -'ENDIF -'ENDIF -RE -' -' +'TAIPAN - CONTROLLER 3 +' +'$Revision:$ +'$Date:$ +'Author: Daniel Bartlett +'Last revision by: $author:$ +' +'A-MONOCHROMATOR 1 HORIZONTAL FOCUS +'B-MONOCHROMATOR 1 VERTICAL FOCUS +'C-MONOCHROMATOR 2 HORIZONTAL FOCUS +'D-MONOCHROMATOR 2 VERTICAL FOCUS +'E-MONOCHROMATOR ROTATE +'F-SPARE +'G-SPARE +'H-SPARE +' +' +'4096 COUNTS / 2 DEGREES +'2048 COUNTS / DEGREE +'PG 00 DEGREES = 16034863 +'PG 45 DEGREES = 16127023 +'-------------------------------------------------------------------------- +#AUTO +'THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' +MT-2,-2,-2,-2,-2.5,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER, E REVERSED +MO;'ALL MOTORS OFF +CN 1;'CONFIGURES LIMIT SWITCHES TO ACCEPT NC CONTACTS +II 8,,,0;' CONFIGURES THE 8TH INPUT TO ACTIVATE THE #ININT ROUTINE +OP 65280;' SETS OUTPUTS 9-16 ON = RELAYS OFF +IA 137,157,203,133;' CONFIGURES IP ADDRESS +AC 6000,6000,6000,6000,25000,,,;' SET ACELERATION +DC 6000,6000,6000,6000,25000,,,;' SET DECELERATION +SP 12500,12500,50000,12500,100000,,,;' SET SPEED +SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE +SIB=0 +SIC=0 +SID=0 +SIE=0 +SIF=0 +SIG=0 +SIH=0 +WT1000;'WAIT FOR ENCODER TO INITIALISE +SIA=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD +SIB=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD +SIC=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD +SID=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD +SIE=1,24,12,0<-11>1;'RESOLVER VIA VEGA 2790 BOARD +LSAHIT=0;' INITIALISE THE BIT SET AFTER A LIMIT IS HIT +LSBHIT=0 +LSCHIT=0 +LSDHIT=0 +LSEHIT=0 +'LSFHIT=0 +'LSGHIT=0 +'LSHHIT=0 +JS #THREAD0 +EN +' +' +'-------------------------------------------------------------------------- +#THREAD0 +'THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK +' +JS #CHKDCEL +JS #CHKSPD +JP #THREAD0 +EN +' +' +'-------------------------------------------------------------------------- +#CHKDCEL +'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT +' +IF ((LSAHIT=1)&(_BGA=0));'WHEN MOTION STOPS AFTER A LIMIT HIT +DCA=OLDDCA;' RESET DECEL TO OLD VALUE +LSAHIT=0 +ENDIF +' +IF ((LSBHIT=1)&(_BGB=0)) +DCB=OLDDCB +LSBHIT=0 +ENDIF +' +IF ((LSCHIT=1)&(_BGC=0)) +DCC=OLDDCC +LSCHIT=0 +ENDIF +' +IF ((LSDHIT=1)&(_BGD=0)) +DCD=OLDDCD +LSDHIT=0 +ENDIF +' +IF ((LSEHIT=1)&(_BGE=0)) +DCE=OLDDCE +LSEHIT=0 +ENDIF +' +'IF ((LSFHIT=1)&(_BGF=0)) +'DCF=OLDDCF +'LSFHIT=0 +'ENDIF +' +'IF ((LSGHIT=1)&(_BGG=0)) +'DCG=OLDDCG +'LSGHIT=0 +'ENDIF +' +'IF ((LSHHIT=1)&(_BGH=0)) +'DCH=OLDDCH +'LSHHIT=0 +'ENDIF +'EN +' +' +'-------------------------------------------------------------------------- +#CHKSPD +'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED +' +IF (_SPA>25000) +SPA=25000 +ENDIF +' +IF (_SPB>25000) +SPB=25000 +ENDIF +' +IF (_SPC>25000) +SPC=25000 +ENDIF +' +IF (_SPD>25000) +SPD=25000 +ENDIF +' +IF (_SPE>100000) +SPE=100000 +ENDIF +' +'IF (_SPF>100000) +'SPF=100000 +'ENDIF +' +'IF (_SPG>50000) +'SPG=50000 +'ENDIF +' +'IF (_SPH>100000) +'SPH=100000 +'ENDIF +'EN +' +' +'-------------------------------------------------------------------------- +#TCPERR +'EMPTY TCP ERROR ROUTINE +' +RE +' +' +'-------------------------------------------------------------------------- +#ININT +'INTERUPT ROUTINE TO STOP ALL AXES +'WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' +CN-1;' RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI +WT250 +CN1;' SETS LIMITS BACK TO NORMAL +RI +' +' +'-------------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' +'-------------------------------------------------------------------------- +#LIMSWI +'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT +' +IF ((_LFA=0)|(_LRA=0));'LIMIT HIT +IF ((LSAHIT=0)&(_BGA=1));'STILL MOVING, FIRST TIME +OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE +DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP +LSAHIT=1 +ENDIF +ENDIF +' +IF ((_LFB=0)|(_LRB=0)) +IF ((LSBHIT=0)&(_BGB=1)) +OLDDCB=_DCB +DCB=100000 +LSBHIT=1 +ENDIF +ENDIF +' +IF ((_LFC=0)|(_LRC=0)) +IF ((LSCHIT=0)&(_BGC=1)) +OLDDCC=_DCC +DCC=100000 +LSCHIT=1 +ENDIF +ENDIF +' +IF ((_LFD=0)|(_LRD=0)) +IF ((LSDHIT=0)&(_BGD=1)) +OLDDCD=_DCD +DCD=100000 +LSDHIT=1 +ENDIF +ENDIF +' +IF ((_LFE=0)|(_LRE=0)) +IF ((LSEHIT=0)&(_BGE=1)) +OLDDCE=_DCE +DCE=200000 +LSEHIT=1 +ENDIF +ENDIF +' +'IF ((_LFF=0)|(_LRF=0)) +'IF ((LSFHIT=0)&(_BGF=1)) +'OLDDCF=_DCF +'DCF=200000 +'LSFHIT=1 +'ENDIF +'ENDIF +' +'IF ((_LFG=0)|(_LRG=0)) +'IF ((LSGHIT=0)&(_BGG=1)) +'OLDDCG=_DCG +'DCG=200000 +'LSGHIT=1 +'ENDIF +'ENDIF +' +'IF ((_LFH=0)|(_LRH=0)) +'IF ((LSHHIT=0)&(_BGH=1)) +'OLDDCH=_DCH +'DCH=200000 +'LSHHIT=1 +'ENDIF +'ENDIF +RE +' +' diff --git a/site_ansto/instrument/tas/DMC2280/controller4.txt b/site_ansto/instrument/tas/DMC2280/controller4.txt index 2a6ad0dd..430eefd2 100644 --- a/site_ansto/instrument/tas/DMC2280/controller4.txt +++ b/site_ansto/instrument/tas/DMC2280/controller4.txt @@ -1,285 +1,285 @@ -'TAIPAN - CONTROLLER 4 -' -'$Revision:$ -'$Date:$ -'Author: Daniel Bartlett -'Last revision by: $author:$ -' -'A-ANALYSER TILT 1 -'B-ANALYSER TILT 2 -'C-ANALYSER TRANSLATE -'D-ANALYSER ROTATE LFD@24724763 LRD@25454179 -'E-VIRTUAL SOURCE LEFT, +VE OPEN, 6mm/TURN -'F-VIRTUAL SOURCE RIGHT, -VE OPEN, 6mm/TURN -'G-FILTER ROTATE -'H-PRIMARY COLLIMATOR TRANSLATE -' -' -'-------------------------------------------------------------------------- -#AUTO -'THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP -' -MT-2,-2,-2,-2.5,-2,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER -MO;'ALL MOTORS OFF -CN 1;'CONFIGURES LIMIT SWITCHES TO ACCEPT NC CONTACTS -II 8,,,0;'CONFIGURES THE 8TH INPUT TO ACTIVATE THE #ININT ROUTINE -OP 65280;'SETS OUTPUTS 9-16 ON = RELAYS OFF -IA 137,157,203,134;'CONFIGURES IP ADDRESS -AC 25000,25000,25000,25000,25000,25000,25000,25000;'SET ACELERATION -DC 25000,25000,25000,25000,25000,25000,25000,25000;'SET DECELERATION -SP 25000,25000,25000,25000,12500,12500,25000,12500;'SET SPEED -SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE -SIB=0 -SIC=0 -SID=0 -SIE=0 -SIF=0 -SIG=0 -SIH=0 -WT1000;'WAIT FOR ENCODER TO INITIALISE -SIA=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 -SIB=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 -SIC=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 -SID=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 -SIE=1,24,12,0<-10>1;'RESOLVER VIA VEGA 2790 BOARD -SIF=1,24,12,0<-10>1;'RESOLVER VIA VEGA 2790 BOARD -SIG=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 -SIH=1,24,12,0<-10>1;'RESOLVER VIA VEGA 2790 BOARD -LSAHIT=0;'INITIALISE THE BIT SET AFTER A LIMIT IS HIT -LSBHIT=0 -LSCHIT=0 -LSDHIT=0 -LSEHIT=0 -LSFHIT=0 -LSGHIT=0 -LSHHIT=0 -JS #THREAD0 -EN -' -' -'-------------------------------------------------------------------------- -#THREAD0 -'THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -' -JS #CHKDCEL -JS #CHKSPD -JP #THREAD0 -EN -' -' -'-------------------------------------------------------------------------- -#VSLMOVE -'ROUTINE TO MOVE THE VIRTUAL SOURCE RIGHT USING A CLOSED LOOP SSI POSITION -' -'E AXIS -'TPE AT LIMIT 16752106 -'TPE AT BEAM CL 16773946 -' -DBAND1=2 -PRE=-25000*((VSLPOS-_TPE)/4096);'CALC STEPS TO DESTINATION -SHE -BGE -AME -JP #VSLMOVE, (@ABS[VSLPOS-_TPE]>DBAND1) -'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND1 -EN -' -' -'----------------------------------------------------------------------------- -#VSRMOVE -'ROUTINE TO MOVE THE VIRTUAL SOURCE RIGHT USING A CLOSED LOOP SSI POSITION -' -'F AXIS -'TPF AT LIMIT 16775162 -'TPF AT BEAM CL 16756735 -' -DBAND2=2 -PRF=-25000*((VSRPOS-_TPF)/4096);'CALC STEPS TO DESTINATION -SHF -BGF -AMF -JP #VSRMOVE, (@ABS[VSRPOS-_TPF]>DBAND2) -'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND2 -EN -' -' -'----------------------------------------------------------------------------- -#CHKDCEL -'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT -' -IF ((LSAHIT=1)&(_BGA=0));'WHEN MOTION STOPS AFTER A LIMIT HIT -DCA=OLDDCA;'RESET DECEL TO OLD VALUE -LSAHIT=0 -ENDIF -' -IF ((LSBHIT=1)&(_BGB=0)) -DCB=OLDDCB -LSBHIT=0 -ENDIF -' -IF ((LSCHIT=1)&(_BGC=0)) -DCC=OLDDCC -LSCHIT=0 -ENDIF -' -IF ((LSDHIT=1)&(_BGD=0)) -DCD=OLDDCD -LSDHIT=0 -ENDIF -' -IF ((LSEHIT=1)&(_BGE=0)) -DCE=OLDDCE -LSEHIT=0 -ENDIF -' -IF ((LSFHIT=1)&(_BGF=0)) -DCF=OLDDCF -LSFHIT=0 -ENDIF -' -IF ((LSGHIT=1)&(_BGG=0)) -DCG=OLDDCG -LSGHIT=0 -ENDIF -' -IF ((LSHHIT=1)&(_BGH=0)) -DCH=OLDDCH -LSHHIT=0 -ENDIF -EN -' -' -'-------------------------------------------------------------------------- -#CHKSPD -'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED -' -IF (_SPA>50000) -SPA=50000 -ENDIF -' -IF (_SPB>50000) -SPB=50000 -ENDIF -' -IF (_SPC>50000) -SPC=50000 -ENDIF -' -IF (_SPD>100000) -SPD=100000 -ENDIF -' -IF (_SPE>12500) -SPE=12500 -ENDIF -' -IF (_SPF>12500) -SPF=12500 -ENDIF -' -IF (_SPG>50000) -SPG=50000 -ENDIF -' -IF (_SPH>12500) -SPH=12500 -ENDIF -EN -' -' -'-------------------------------------------------------------------------- -#TCPERR -'EMPTY TCP ERROR ROUTINE -' -RE -' -' -'-------------------------------------------------------------------------- -#ININT -'INTERUPT ROUTINE TO STOP ALL AXES -'WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT -' -CN-1;'RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI -WT250 -CN1;'SETS LIMITS BACK TO NORMAL -RI -' -' -'-------------------------------------------------------------------------- -#CMDERR -'ROUTINE TO HANDLE COMMAND ERRORS -' -ZS0 -EN1 -' -' -'-------------------------------------------------------------------------- -#LIMSWI -'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT -' -IF ((_LFA=0)|(_LRA=0));'LIMIT HIT -IF ((LSAHIT=0)&(_BGA=1));'STILL MOVING, FIRST TIME -OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE -DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP -LSAHIT=1 -ENDIF -ENDIF -' -IF ((_LFB=0)|(_LRB=0)) -IF ((LSBHIT=0)&(_BGB=1)) -OLDDCB=_DCB -DCB=100000 -LSBHIT=1 -ENDIF -ENDIF -' -IF ((_LFC=0)|(_LRC=0)) -IF ((LSCHIT=0)&(_BGC=1)) -OLDDCC=_DCC -DCC=100000 -LSCHIT=1 -ENDIF -ENDIF -' -IF ((_LFD=0)|(_LRD=0)) -IF ((LSDHIT=0)&(_BGD=1)) -OLDDCD=_DCD -DCD=100000 -LSDHIT=1 -ENDIF -ENDIF -' -IF ((_LFE=0)|(_LRE=0)) -IF ((LSEHIT=0)&(_BGE=1)) -OLDDCE=_DCE -DCE=50000 -LSEHIT=1 -ENDIF -ENDIF -' -IF ((_LFF=0)|(_LRF=0)) -IF ((LSFHIT=0)&(_BGF=1)) -OLDDCF=_DCF -DCF=50000 -LSFHIT=1 -ENDIF -ENDIF -' -IF ((_LFG=0)|(_LRG=0)) -IF ((LSGHIT=0)&(_BGG=1)) -OLDDCG=_DCG -DCG=100000 -LSGHIT=1 -ENDIF -ENDIF -' -IF ((_LFH=0)|(_LRH=0)) -IF ((LSHHIT=0)&(_BGH=1)) -OLDDCH=_DCH -DCH=100000 -LSHHIT=1 -ENDIF -ENDIF -RE -' -' +'TAIPAN - CONTROLLER 4 +' +'$Revision:$ +'$Date:$ +'Author: Daniel Bartlett +'Last revision by: $author:$ +' +'A-ANALYSER TILT 1 +'B-ANALYSER TILT 2 +'C-ANALYSER TRANSLATE +'D-ANALYSER ROTATE LFD@24724763 LRD@25454179 +'E-VIRTUAL SOURCE LEFT, +VE OPEN, 6mm/TURN +'F-VIRTUAL SOURCE RIGHT, -VE OPEN, 6mm/TURN +'G-FILTER ROTATE +'H-PRIMARY COLLIMATOR TRANSLATE +' +' +'-------------------------------------------------------------------------- +#AUTO +'THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' +MT-2,-2,-2,-2.5,-2,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER +MO;'ALL MOTORS OFF +CN 1;'CONFIGURES LIMIT SWITCHES TO ACCEPT NC CONTACTS +II 8,,,0;'CONFIGURES THE 8TH INPUT TO ACTIVATE THE #ININT ROUTINE +OP 65280;'SETS OUTPUTS 9-16 ON = RELAYS OFF +IA 137,157,203,134;'CONFIGURES IP ADDRESS +AC 25000,25000,25000,25000,25000,25000,25000,25000;'SET ACELERATION +DC 25000,25000,25000,25000,25000,25000,25000,25000;'SET DECELERATION +SP 25000,25000,25000,25000,12500,12500,25000,12500;'SET SPEED +SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE +SIB=0 +SIC=0 +SID=0 +SIE=0 +SIF=0 +SIG=0 +SIH=0 +WT1000;'WAIT FOR ENCODER TO INITIALISE +SIA=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 +SIB=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 +SIC=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 +SID=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 +SIE=1,24,12,0<-10>1;'RESOLVER VIA VEGA 2790 BOARD +SIF=1,24,12,0<-10>1;'RESOLVER VIA VEGA 2790 BOARD +SIG=1,25,13,0<-13>2;'HEIDENHAIN ROQ425 +SIH=1,24,12,0<-10>1;'RESOLVER VIA VEGA 2790 BOARD +LSAHIT=0;'INITIALISE THE BIT SET AFTER A LIMIT IS HIT +LSBHIT=0 +LSCHIT=0 +LSDHIT=0 +LSEHIT=0 +LSFHIT=0 +LSGHIT=0 +LSHHIT=0 +JS #THREAD0 +EN +' +' +'-------------------------------------------------------------------------- +#THREAD0 +'THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK +' +JS #CHKDCEL +JS #CHKSPD +JP #THREAD0 +EN +' +' +'-------------------------------------------------------------------------- +#VSLMOVE +'ROUTINE TO MOVE THE VIRTUAL SOURCE RIGHT USING A CLOSED LOOP SSI POSITION +' +'E AXIS +'TPE AT LIMIT 16752106 +'TPE AT BEAM CL 16773946 +' +DBAND1=2 +PRE=-25000*((VSLPOS-_TPE)/4096);'CALC STEPS TO DESTINATION +SHE +BGE +AME +JP #VSLMOVE, (@ABS[VSLPOS-_TPE]>DBAND1) +'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND1 +EN +' +' +'----------------------------------------------------------------------------- +#VSRMOVE +'ROUTINE TO MOVE THE VIRTUAL SOURCE RIGHT USING A CLOSED LOOP SSI POSITION +' +'F AXIS +'TPF AT LIMIT 16775162 +'TPF AT BEAM CL 16756735 +' +DBAND2=2 +PRF=-25000*((VSRPOS-_TPF)/4096);'CALC STEPS TO DESTINATION +SHF +BGF +AMF +JP #VSRMOVE, (@ABS[VSRPOS-_TPF]>DBAND2) +'JUMP BACK FOR MORE TRIES IF OUTSIDE DEADBAND2 +EN +' +' +'----------------------------------------------------------------------------- +#CHKDCEL +'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT +' +IF ((LSAHIT=1)&(_BGA=0));'WHEN MOTION STOPS AFTER A LIMIT HIT +DCA=OLDDCA;'RESET DECEL TO OLD VALUE +LSAHIT=0 +ENDIF +' +IF ((LSBHIT=1)&(_BGB=0)) +DCB=OLDDCB +LSBHIT=0 +ENDIF +' +IF ((LSCHIT=1)&(_BGC=0)) +DCC=OLDDCC +LSCHIT=0 +ENDIF +' +IF ((LSDHIT=1)&(_BGD=0)) +DCD=OLDDCD +LSDHIT=0 +ENDIF +' +IF ((LSEHIT=1)&(_BGE=0)) +DCE=OLDDCE +LSEHIT=0 +ENDIF +' +IF ((LSFHIT=1)&(_BGF=0)) +DCF=OLDDCF +LSFHIT=0 +ENDIF +' +IF ((LSGHIT=1)&(_BGG=0)) +DCG=OLDDCG +LSGHIT=0 +ENDIF +' +IF ((LSHHIT=1)&(_BGH=0)) +DCH=OLDDCH +LSHHIT=0 +ENDIF +EN +' +' +'-------------------------------------------------------------------------- +#CHKSPD +'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED +' +IF (_SPA>50000) +SPA=50000 +ENDIF +' +IF (_SPB>50000) +SPB=50000 +ENDIF +' +IF (_SPC>50000) +SPC=50000 +ENDIF +' +IF (_SPD>100000) +SPD=100000 +ENDIF +' +IF (_SPE>12500) +SPE=12500 +ENDIF +' +IF (_SPF>12500) +SPF=12500 +ENDIF +' +IF (_SPG>50000) +SPG=50000 +ENDIF +' +IF (_SPH>12500) +SPH=12500 +ENDIF +EN +' +' +'-------------------------------------------------------------------------- +#TCPERR +'EMPTY TCP ERROR ROUTINE +' +RE +' +' +'-------------------------------------------------------------------------- +#ININT +'INTERUPT ROUTINE TO STOP ALL AXES +'WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' +CN-1;'RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI +WT250 +CN1;'SETS LIMITS BACK TO NORMAL +RI +' +' +'-------------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' +'-------------------------------------------------------------------------- +#LIMSWI +'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT +' +IF ((_LFA=0)|(_LRA=0));'LIMIT HIT +IF ((LSAHIT=0)&(_BGA=1));'STILL MOVING, FIRST TIME +OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE +DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP +LSAHIT=1 +ENDIF +ENDIF +' +IF ((_LFB=0)|(_LRB=0)) +IF ((LSBHIT=0)&(_BGB=1)) +OLDDCB=_DCB +DCB=100000 +LSBHIT=1 +ENDIF +ENDIF +' +IF ((_LFC=0)|(_LRC=0)) +IF ((LSCHIT=0)&(_BGC=1)) +OLDDCC=_DCC +DCC=100000 +LSCHIT=1 +ENDIF +ENDIF +' +IF ((_LFD=0)|(_LRD=0)) +IF ((LSDHIT=0)&(_BGD=1)) +OLDDCD=_DCD +DCD=100000 +LSDHIT=1 +ENDIF +ENDIF +' +IF ((_LFE=0)|(_LRE=0)) +IF ((LSEHIT=0)&(_BGE=1)) +OLDDCE=_DCE +DCE=50000 +LSEHIT=1 +ENDIF +ENDIF +' +IF ((_LFF=0)|(_LRF=0)) +IF ((LSFHIT=0)&(_BGF=1)) +OLDDCF=_DCF +DCF=50000 +LSFHIT=1 +ENDIF +ENDIF +' +IF ((_LFG=0)|(_LRG=0)) +IF ((LSGHIT=0)&(_BGG=1)) +OLDDCG=_DCG +DCG=100000 +LSGHIT=1 +ENDIF +ENDIF +' +IF ((_LFH=0)|(_LRH=0)) +IF ((LSHHIT=0)&(_BGH=1)) +OLDDCH=_DCH +DCH=100000 +LSHHIT=1 +ENDIF +ENDIF +RE +' +' diff --git a/site_ansto/instrument/tas/DMC2280/controller5.txt b/site_ansto/instrument/tas/DMC2280/controller5.txt index cdaa55df..82f15fa6 100644 --- a/site_ansto/instrument/tas/DMC2280/controller5.txt +++ b/site_ansto/instrument/tas/DMC2280/controller5.txt @@ -1,75 +1,75 @@ -'TAIPAN - CONTROLLER 5 -' -'$Revision:$ -'$Date$ -'Author: Dan Bartlett -'Last revision by: $Author:$ -' -'A-SECONDARY SHUTTER, +VE OPEN, 6mm/TURN -'ONE AXIS CONTROLLER ONLY -' -' -'----------------------------------------------------------------------------- -#AUTO -NO TE: THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP -' -MO;'MOTOR OFF -SIA=1,24,12,0<-2>1;'RESOLVER VIA VEGA 2790 BOARD -MTA=-2;'CONFIGURES AXIS AS STEPPER -CN 1;' CONFIGURES LIMIT SWITCH TO ACCEPT NC CONTACTS -IA 137,157,203,135;' CONFIGURES IP ADDRESS -ACA=100000;' SET ACELERATION -DCA=100000;' SET DECELERATION -SPA=50000;' SET SPEED -JS #THREAD0 -EN -' -' -'----------------------------------------------------------------------------- -#THREAD0 -'CONTROLS THE SECONDARY SHUTTER -' -'INPUT 5=SECONDARY SHUTTER CLOSE SIGNAL 1 -'INPUT 6=SECONDARY SHUTTER CLOSE SIGNAL 2 -'INPUT 7=SECONDARY SHUTTER OPEN SIGNAL 1 -'INPUT 8=SECONDARY SHUTTER OPEN SIGNAL 2 -IF ((@IN[5]=1)&(@IN[6]=1)&(@IN[7]=0)&(@IN[8]=0)&(_BGA=0)&(_LFA=1)) -'INPUTS 5&6 INACTIVE(1) & INPUT 7&8 ACTIVE(0) & NOT MOVING & NOT ALREADY OPEN -'SECONDARY SHUTTER COMMANDED TO OPEN -JGA=50000;' JOG OPEN AT 12mm/s -SHA;' TURN ON MOTOR -BGA;' DRIVE SHUTTER OPEN -ENDIF -IF (((@IN[7]=1)|(@IN[8]=1))&(_LRA=1)) -'EITHER OF INPUTS 7 OR 8 INACTIVE(1) & NOT ALREADY CLOSED -'SECONDARY SHUTTER COMMANDED TO CLOSE -STA;' STOP ANY MOTION -MCA;' AFTER MOTION IS STOPPED -JGA=-50000;' JOG CLOSED AT 12mm/s -SHA;' TURN ON MOTOR -BGA;' DRIVE SHUTTER CLOSED -MCA -ENDIF -IF (((_LFA=0)|(_LRA=0))&(_BGA=0)) -'AT EITHER LIMIT AND NOT MOVING -MOA;' TURN OFF MOTOR -ENDIF -JP #THREAD0 -EN -' -' -'----------------------------------------------------------------------------- -#TCPERR -'EMPTY TCP ERROR ROUTINE -' -RE -' -' -'----------------------------------------------------------------------------- -#CMDERR -'ROUTINE TO HANDLE COMMAND ERRORS -' -ZS0 -EN1 -' -' +'TAIPAN - CONTROLLER 5 +' +'$Revision:$ +'$Date$ +'Author: Dan Bartlett +'Last revision by: $Author:$ +' +'A-SECONDARY SHUTTER, +VE OPEN, 6mm/TURN +'ONE AXIS CONTROLLER ONLY +' +' +'----------------------------------------------------------------------------- +#AUTO +NO TE: THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' +MO;'MOTOR OFF +SIA=1,24,12,0<-2>1;'RESOLVER VIA VEGA 2790 BOARD +MTA=-2;'CONFIGURES AXIS AS STEPPER +CN 1;' CONFIGURES LIMIT SWITCH TO ACCEPT NC CONTACTS +IA 137,157,203,135;' CONFIGURES IP ADDRESS +ACA=100000;' SET ACELERATION +DCA=100000;' SET DECELERATION +SPA=50000;' SET SPEED +JS #THREAD0 +EN +' +' +'----------------------------------------------------------------------------- +#THREAD0 +'CONTROLS THE SECONDARY SHUTTER +' +'INPUT 5=SECONDARY SHUTTER CLOSE SIGNAL 1 +'INPUT 6=SECONDARY SHUTTER CLOSE SIGNAL 2 +'INPUT 7=SECONDARY SHUTTER OPEN SIGNAL 1 +'INPUT 8=SECONDARY SHUTTER OPEN SIGNAL 2 +IF ((@IN[5]=1)&(@IN[6]=1)&(@IN[7]=0)&(@IN[8]=0)&(_BGA=0)&(_LFA=1)) +'INPUTS 5&6 INACTIVE(1) & INPUT 7&8 ACTIVE(0) & NOT MOVING & NOT ALREADY OPEN +'SECONDARY SHUTTER COMMANDED TO OPEN +JGA=50000;' JOG OPEN AT 12mm/s +SHA;' TURN ON MOTOR +BGA;' DRIVE SHUTTER OPEN +ENDIF +IF (((@IN[7]=1)|(@IN[8]=1))&(_LRA=1)) +'EITHER OF INPUTS 7 OR 8 INACTIVE(1) & NOT ALREADY CLOSED +'SECONDARY SHUTTER COMMANDED TO CLOSE +STA;' STOP ANY MOTION +MCA;' AFTER MOTION IS STOPPED +JGA=-50000;' JOG CLOSED AT 12mm/s +SHA;' TURN ON MOTOR +BGA;' DRIVE SHUTTER CLOSED +MCA +ENDIF +IF (((_LFA=0)|(_LRA=0))&(_BGA=0)) +'AT EITHER LIMIT AND NOT MOVING +MOA;' TURN OFF MOTOR +ENDIF +JP #THREAD0 +EN +' +' +'----------------------------------------------------------------------------- +#TCPERR +'EMPTY TCP ERROR ROUTINE +' +RE +' +' +'----------------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' diff --git a/site_ansto/instrument/tas/DMC2280/controller6.txt b/site_ansto/instrument/tas/DMC2280/controller6.txt index 608f633b..f399b608 100755 --- a/site_ansto/instrument/tas/DMC2280/controller6.txt +++ b/site_ansto/instrument/tas/DMC2280/controller6.txt @@ -1,426 +1,426 @@ -'TAIPAN - CONTROLLER 6 -' -'AUTHOR - DANIEL BARTLETT -'DATE - 23.02.2011 -' -'A-SLIT S1 LEFT BLADE -'B-SLIT S1 RIGHT BLADE -'C-SLIT S1 TOP BLADE -'D-SLIT S1 BOTTOM BLADE -'E-SLIT S2 LEFT BLADE -'F-SLIT S2 RIGHT BLADE -'G-SLIT S2 TOP BLADE -'H-SLIT S2 BOTTOM BLADE -' -' -'----------------------------------------------------------------------------- -#AUTO -'THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP -' -MT-2,-2,-2,-2,-2,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER -MO;'ALL MOTORS OFF -CN1;'CONFIGURES LIMIT SWITCHES. NC CONTACTS USE CN1. NO CONTACT USE CN-1 -II 8,,,0;'CONFIGURES THE 8TH INPUT TO ACTIVATE THE #ININT ROUTINE -OP 65281;'SETS OUTPUTS 9-16 ON = RELAYS OFF -IA 137,157,203,136;'CONFIGURES IP ADDRESS -AC 60416,60416,60416,60416,60416,60416,60416,60416;' SET ACELERATION -DC 60416,60416,60416,60416,60416,60416,60416,60416;' SET DECELERATION -SP 30000,30000,30000,30000,30000,30000,30000,30000;' SET SPEED -SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE -SIB=0 -SIC=0 -SID=0 -SIE=0 -SIF=0 -SIG=0 -SIH=0 -WT1000;'WAIT FOR ENCODER TO INITIALISE -'SIA=1,25,13,0<-26>2;'HEIDENHAIN ROQ425 -'SIA=1,25,25,0<-26>2;'HEIDENHAIN RCN226 -'SIA=1,25,12,-1<-26>1;'VEGA RESOLVER TO SSI CONVERTER -'SIA=1,25,13,0<-26>1;'IVO GXM2H -'SIA=1,25,13,0<-26>2;'KUEBLER 5863 -'SIA=1,31,13,0<26>2;'IVO STRING PULL, 31 BIT CONTROLLER REQUIRED -'SIA=1,24,18,6<-26>2;'IVO PLATYPUS COLLIMATION TILT -'SIA=1,15,15,0<-26>2;'GURLEY 15BIT -LSAHIT=0;'INITIALISE THE BIT SET AFTER A LIMIT IS HIT -LSBHIT=0 -LSCHIT=0 -LSDHIT=0 -LSEHIT=0 -LSFHIT=0 -LSGHIT=0 -LSHHIT=0 -S1HOMED=0;'SLIT S1 NOT HOMED -S2HOMED=0;'SLIT S2 NOT HOMED -JS #THREAD0 -EN -' -' -'----------------------------------------------------------------------------- -#THREAD0 -'THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -' -JS #CHKDCEL -JS #CHKSPD -JP #THREAD0 -EN -' -' -'----------------------------------------------------------------------------- -#CHKDCEL -'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT -' -IF (LSAHIT=1)&(_BGA=0);'WHEN MOTION STOPS AFTER A LIMIT HIT -DCA=OLDDCA;'RESET DECEL TO OLD VALUE -LSAHIT=0 -ENDIF -' -IF (LSBHIT=1)&(_BGB=0) -DCB=OLDDCB -LSBHIT=0 -ENDIF -' -IF (LSCHIT=1)&(_BGC=0) -DCC=OLDDCC -LSCHIT=0 -ENDIF -' -IF (LSDHIT=1)&(_BGD=0) -DCD=OLDDCD -LSDHIT=0 -ENDIF -' -IF (LSEHIT=1)&(_BGE=0) -DCE=OLDDCE -LSEHIT=0 -ENDIF -' -IF (LSFHIT=1)&(_BGF=0) -DCF=OLDDCF -LSFHIT=0 -ENDIF -' -IF (LSGHIT=1)&(_BGG=0) -DCG=OLDDCG -LSGHIT=0 -ENDIF -' -IF (LSHHIT=1)&(_BGH=0) -DCH=OLDDCH -LSHHIT=0 -ENDIF -EN -' -' -'----------------------------------------------------------------------------- -#CHKSPD -'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED -' -IF (_SPA>30000) -SPA=30000 -ENDIF -' -IF (_SPB>30000) -SPB=30000 -ENDIF -' -IF (_SPC>30000) -SPC=30000 -ENDIF -' -IF (_SPD>30000) -SPD=30000 -ENDIF -' -IF (_SPE>30000) -SPE=30000 -ENDIF -' -IF (_SPF>30000) -SPF=30000 -ENDIF -' -IF (_SPG>30000) -SPG=30000 -ENDIF -' -IF (_SPH>30000) -SPH=30000 -ENDIF -EN -' -' -'----------------------------------------------------------------------------- -#TCPERR -'EMPTY TCP ERROR ROUTINE -' -RE -' -' -'----------------------------------------------------------------------------- -#ININT -'INTERUPT ROUTINE TO STOP ALL AXES -'WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT -CN-1;'RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI -WT250 -CN1;'SETS LIMITS BACK TO NORMAL -RI -' -' -'----------------------------------------------------------------------------- -#CMDERR -'ROUTINE TO HANDLE COMMAND ERRORS -' -ZS0 -EN1 -' -' -'----------------------------------------------------------------------------- -#LIMSWI -'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT -' -IF (_LFA=0)|(_LRA=0);'LIMIT HIT -IF (LSAHIT=0)&(_BGA=1);'STILL MOVING, FIRST TIME -OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE -DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP -LSAHIT=1 -ENDIF -ENDIF -' -IF (_LFB=0)|(_LRB=0) -IF (LSBHIT=0)&(_BGB=1) -OLDDCB=_DCB -DCB=60000 -LSBHIT=1 -ENDIF -ENDIF -' -IF (_LFC=0)|(_LRC=0) -IF (LSCHIT=0)&(_BGC=1) -OLDDCC=_DCC -DCC=60000 -LSCHIT=1 -ENDIF -ENDIF -' -IF (_LFD=0)|(_LRD=0) -IF (LSDHIT=0)&(_BGD=1) -OLDDCD=_DCD -DCD=60000 -LSDHIT=1 -ENDIF -ENDIF -' -IF (_LFE=0)|(_LRE=0) -IF (LSEHIT=0)&(_BGE=1) -OLDDCE=_DCE -DCE=60000 -LSEHIT=1 -ENDIF -ENDIF -' -IF (_LFF=0)|(_LRF=0) -IF (LSFHIT=0)&(_BGF=1) -OLDDCF=_DCF -DCF=60000 -LSFHIT=1 -ENDIF -ENDIF -' -IF (_LFG=0)|(_LRG=0) -IF (LSGHIT=0)&(_BGG=1) -OLDDCG=_DCG -DCG=60000 -LSGHIT=1 -ENDIF -ENDIF -' -IF (_LFH=0)|(_LRH=0) -IF (LSHHIT=0)&(_BGH=1) -OLDDCH=_DCH -DCH=60000 -LSHHIT=1 -ENDIF -ENDIF -RE -' -' -'----------------------------------------------------------------------------- -#MOVE -'THIS ROUTINE IS USED TO MOVE AN AXIS WITH A SSI ENCODER -'USING A MOVE-CHECK-CORRECT METHOD -'THE FOLLOWING VARIABLES MUST BE INITIALISED FIRST -'~a=0 TO 7 SETS THE MOTOR, 0=A AXIS 1=B AXIS ETC -'~b=0 TO 7 SETS THE ENCODER, 0=1ST SSI CHANNEL 1=2ND CHANNEL ETC -'TRIES= MAXIMUM NUMBER OF TRIES -'POS=DESIRED ENCODER POSITION -' -'~a=0:~b=0:TRIES=5:POS=12345678:XQ #MOVE,1 -' -DBAND=3 -SH~a -WT500;'WAIT TO STABILISE -IF (_BG~a=1);'MOVING, FORCE STOP. PRA WHEN MOVING CAUSES THREAD CRASH -ST~a -MC~a -ENDIF -TEMP=_TP~b;'SET TEMPORARY VARIABLE -PR~a=2500 -IF (_LF~a=0);'ALREADY ON LIMIT -MG "Forward limit actuated" {EA} -MG "Ratio not calculated" {EA} -JP #MOVEEND -ENDIF -BG~a;'PERFORM A SMALL MOVE TO DETERMIN MOTOR:ENCODER RATIO -MC~a -WT500;'WAIT TO STABILISE -IF (TEMP=_TP~b);'FAILED TO MOVE -MG "No movement detected" {EA} -MG "Ratio not calculated" {EA} -JP #MOVEEND -ENDIF -RATIO=(TEMP-_TP~b)*10;'SETS ENCODER/MOTOR RATIO -' -#LOOP -IF (_BG~a=1);'MOVING, FORCE STOP. PRA WHEN MOVING CAUSES THREAD CRASH -ST~a -MC~a -ENDIF -PR~a=25000*((_TP~b-POS)/RATIO);'CALC STEPS TO DESTINATION -IF ((_PR~a>0)&(_LF~a=0));'IF POSITIVE MOVE AND ALREADY ON LIMIT -MG "Forward limit actuated" {EA} -MG "Positive move aborted" {EA} -JP #MOVEEND -ENDIF -IF ((_PR~a<0)&(_LR~a=0));'IF NEGATIVE MOVE AND ALREADY ON LIMIT -MG "Reverse limit actuated" {EA} -MG "Negative move aborted" {EA} -JP #MOVEEND -ENDIF -IF (_BG~a=1);'ALREADY MOVING -ST~a -MC~a -ENDIF -SH~a -BG~a -MC~a;'WAIT FOR MOTION TO COMPLETE -TRIES=TRIES-1;'INCREMENT ATTEMPT COUNTER -MG "Attempts to go: " {N} {EA} -MG TRIES {F1.0} {EA} -JP #LOOP, ((@ABS[_TP~b-POS]>DBAND)&(TRIES>0)) -'HAVE ANOTHER GO IF OUTSIDE DEAD BAND AND NOT TOO MANY ATTEMPTS -#MOVEEND -MG "TARGET :" {N} {EA} -MG POS {F8.0} {EA} -MG "POSITION :" {N} {EA} -MG _TP~b {F8.0} {EA} -MG "Program ends" {EA} -EN -' -' -'----------------------------------------------------------------------------- -#HOMES1 -'THIS ROUTINE HOMES THE S1 SLIT PACKAGE -' -IF (S1HOMED=1);'ALREADY HOMED -JP #ENDS1 -ENDIF -' -IF (_LFA=0)&(_LRA=0) -'BOTH LIMITS ACTUATED. SLIT PACKAGE PROBABLY NOT PLUGGED IN. -JP #ENDS1 -ENDIF -' -SHABCD;'TURN ON THE MOTORS -SP 30000,30000,30000,30000,,,,;'SET SPEED -IF (_LRA=0);'ON THE REVERSE LIMIT SWITCH -PRA=250*161/2*10;'MOVE AWAY 10mm -BGA -ENDIF -' -IF (_LRB=0);'ON THE REVERSE LIMIT SWITCH -PRB=250*161/2*10;'MOVE AWAY 10mm -BGB -ENDIF -' -IF (_LRC=0);'ON THE REVERSE LIMIT SWITCH -PRC=250*161/2*10;'MOVE AWAY 10mm -BGC -ENDIF -' -IF (_LRD=0);'ON THE REVERSE LIMIT SWITCH -PRD=250*161/2*10;'MOVE AWAY 10mm -BGD -ENDIF -' -MCABCD;'WAIT FOR MOTION TO BE COMPLETE -JG -30000,-30000,-30000,-30000,,,,;'JOG INTO REVERSE LIMIT -BGABCD -MCABCD -PR 80500,80500,80500,80500,,,,;'MOVE AWAY 4MM -BGABCD -MCABCD -JG -5000,-5000,-5000,-5000,,,,;'JOG SLOWLY INTO LIMITS -BGABCD -MCABCD -DP 0,0,0,0,,,,;'DEFINE HOME POSITION -SP 30000,30000,30000,30000,,,,;'SET SPEED BACK TO NORMAL -S1HOMED=1;'HOMING OF SLIT S1 COMPLETE -#ENDS1 -EN -' -' -'----------------------------------------------------------------------------- -#HOMES2 -'THIS ROUTINE HOMES THE S2 SLIT PACKAGE -' -IF (S2HOMED=1);'ALREADY HOMED -JP #ENDS2 -ENDIF -' -IF (_LFE=0)&(_LRE=0) -'BOTH LIMITS ACTUATED. SLIT PACKAGE PROBABLY NOT PLUGGED IN. -JP #ENDS2 -ENDIF -' -SHEFGH;'TURN ON THE MOTORS -SP ,,,,30000,30000,30000,30000;'SET SPEED -IF (_LRE=0);'ON THE REVERSE LIMIT SWITCH -PRE=250*161/2*10;'MOVE AWAY 10mm -BGE -ENDIF -' -IF (_LRF=0);'ON THE REVERSE LIMIT SWITCH -PRF=250*161/2*10;'MOVE AWAY 10mm -BGF -ENDIF -' -IF (_LRG=0);'ON THE REVERSE LIMIT SWITCH -PRG=250*161/2*10;'MOVE AWAY 10mm -BGG -ENDIF -' -IF (_LRH=0);'ON THE REVERSE LIMIT SWITCH -PRH=250*161/2*10;'MOVE AWAY 10mm -BGH -ENDIF -' -MCEFGH;'WAIT FOR MOTION TO BE COMPLETE -JG ,,,,-30000,-30000,-30000,-30000;'JOG INTO REVERSE LIMIT -BGEFGH -MCEFGH -PR ,,,,80500,80500,80500,80500;'MOVE AWAY 4MM -BGEFGH -MCEFGH -JG ,,,,-5000,-5000,-5000,-5000;'JOG SLOWLY INTO LIMITS -BGEFGH -MCEFGH -DP ,,,,0,0,0,0;'DEFINE HOME POSITION -SP ,,,,30000,30000,30000,30000;'SET SPEED BACK TO NORMAL -S2HOMED=1;'HOMING OF SLIT S1 COMPLETE -#ENDS2 -EN -' -' -'----------------------------------------------------------------------------- +'TAIPAN - CONTROLLER 6 +' +'AUTHOR - DANIEL BARTLETT +'DATE - 23.02.2011 +' +'A-SLIT S1 LEFT BLADE +'B-SLIT S1 RIGHT BLADE +'C-SLIT S1 TOP BLADE +'D-SLIT S1 BOTTOM BLADE +'E-SLIT S2 LEFT BLADE +'F-SLIT S2 RIGHT BLADE +'G-SLIT S2 TOP BLADE +'H-SLIT S2 BOTTOM BLADE +' +' +'----------------------------------------------------------------------------- +#AUTO +'THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' +MT-2,-2,-2,-2,-2,-2,-2,-2;'CONFIGURES ALL AXES AS STEPPER +MO;'ALL MOTORS OFF +CN1;'CONFIGURES LIMIT SWITCHES. NC CONTACTS USE CN1. NO CONTACT USE CN-1 +II 8,,,0;'CONFIGURES THE 8TH INPUT TO ACTIVATE THE #ININT ROUTINE +OP 65281;'SETS OUTPUTS 9-16 ON = RELAYS OFF +IA 137,157,203,136;'CONFIGURES IP ADDRESS +AC 60416,60416,60416,60416,60416,60416,60416,60416;' SET ACELERATION +DC 60416,60416,60416,60416,60416,60416,60416,60416;' SET DECELERATION +SP 30000,30000,30000,30000,30000,30000,30000,30000;' SET SPEED +SIA=0;'TURN OFF CLOCK PULSES TO ALLOW ENCODER TO INITIALISE +SIB=0 +SIC=0 +SID=0 +SIE=0 +SIF=0 +SIG=0 +SIH=0 +WT1000;'WAIT FOR ENCODER TO INITIALISE +'SIA=1,25,13,0<-26>2;'HEIDENHAIN ROQ425 +'SIA=1,25,25,0<-26>2;'HEIDENHAIN RCN226 +'SIA=1,25,12,-1<-26>1;'VEGA RESOLVER TO SSI CONVERTER +'SIA=1,25,13,0<-26>1;'IVO GXM2H +'SIA=1,25,13,0<-26>2;'KUEBLER 5863 +'SIA=1,31,13,0<26>2;'IVO STRING PULL, 31 BIT CONTROLLER REQUIRED +'SIA=1,24,18,6<-26>2;'IVO PLATYPUS COLLIMATION TILT +'SIA=1,15,15,0<-26>2;'GURLEY 15BIT +LSAHIT=0;'INITIALISE THE BIT SET AFTER A LIMIT IS HIT +LSBHIT=0 +LSCHIT=0 +LSDHIT=0 +LSEHIT=0 +LSFHIT=0 +LSGHIT=0 +LSHHIT=0 +S1HOMED=0;'SLIT S1 NOT HOMED +S2HOMED=0;'SLIT S2 NOT HOMED +JS #THREAD0 +EN +' +' +'----------------------------------------------------------------------------- +#THREAD0 +'THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK +' +JS #CHKDCEL +JS #CHKSPD +JP #THREAD0 +EN +' +' +'----------------------------------------------------------------------------- +#CHKDCEL +'ROUTINE TO RESET DECELERATIONS AFTER A LIMIT HIT +' +IF (LSAHIT=1)&(_BGA=0);'WHEN MOTION STOPS AFTER A LIMIT HIT +DCA=OLDDCA;'RESET DECEL TO OLD VALUE +LSAHIT=0 +ENDIF +' +IF (LSBHIT=1)&(_BGB=0) +DCB=OLDDCB +LSBHIT=0 +ENDIF +' +IF (LSCHIT=1)&(_BGC=0) +DCC=OLDDCC +LSCHIT=0 +ENDIF +' +IF (LSDHIT=1)&(_BGD=0) +DCD=OLDDCD +LSDHIT=0 +ENDIF +' +IF (LSEHIT=1)&(_BGE=0) +DCE=OLDDCE +LSEHIT=0 +ENDIF +' +IF (LSFHIT=1)&(_BGF=0) +DCF=OLDDCF +LSFHIT=0 +ENDIF +' +IF (LSGHIT=1)&(_BGG=0) +DCG=OLDDCG +LSGHIT=0 +ENDIF +' +IF (LSHHIT=1)&(_BGH=0) +DCH=OLDDCH +LSHHIT=0 +ENDIF +EN +' +' +'----------------------------------------------------------------------------- +#CHKSPD +'ROUTINE TO CHECK THE SPEED OF THE AXES IS NOT GREATER THAN MAX ALLOWED +' +IF (_SPA>30000) +SPA=30000 +ENDIF +' +IF (_SPB>30000) +SPB=30000 +ENDIF +' +IF (_SPC>30000) +SPC=30000 +ENDIF +' +IF (_SPD>30000) +SPD=30000 +ENDIF +' +IF (_SPE>30000) +SPE=30000 +ENDIF +' +IF (_SPF>30000) +SPF=30000 +ENDIF +' +IF (_SPG>30000) +SPG=30000 +ENDIF +' +IF (_SPH>30000) +SPH=30000 +ENDIF +EN +' +' +'----------------------------------------------------------------------------- +#TCPERR +'EMPTY TCP ERROR ROUTINE +' +RE +' +' +'----------------------------------------------------------------------------- +#ININT +'INTERUPT ROUTINE TO STOP ALL AXES +'WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +CN-1;'RECONFIGURES LIMITS. RESULT:ALL LIMITS SEEN AS HIT. WILL RUN #LIMSWI +WT250 +CN1;'SETS LIMITS BACK TO NORMAL +RI +' +' +'----------------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' +'----------------------------------------------------------------------------- +#LIMSWI +'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT +' +IF (_LFA=0)|(_LRA=0);'LIMIT HIT +IF (LSAHIT=0)&(_BGA=1);'STILL MOVING, FIRST TIME +OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE +DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP +LSAHIT=1 +ENDIF +ENDIF +' +IF (_LFB=0)|(_LRB=0) +IF (LSBHIT=0)&(_BGB=1) +OLDDCB=_DCB +DCB=60000 +LSBHIT=1 +ENDIF +ENDIF +' +IF (_LFC=0)|(_LRC=0) +IF (LSCHIT=0)&(_BGC=1) +OLDDCC=_DCC +DCC=60000 +LSCHIT=1 +ENDIF +ENDIF +' +IF (_LFD=0)|(_LRD=0) +IF (LSDHIT=0)&(_BGD=1) +OLDDCD=_DCD +DCD=60000 +LSDHIT=1 +ENDIF +ENDIF +' +IF (_LFE=0)|(_LRE=0) +IF (LSEHIT=0)&(_BGE=1) +OLDDCE=_DCE +DCE=60000 +LSEHIT=1 +ENDIF +ENDIF +' +IF (_LFF=0)|(_LRF=0) +IF (LSFHIT=0)&(_BGF=1) +OLDDCF=_DCF +DCF=60000 +LSFHIT=1 +ENDIF +ENDIF +' +IF (_LFG=0)|(_LRG=0) +IF (LSGHIT=0)&(_BGG=1) +OLDDCG=_DCG +DCG=60000 +LSGHIT=1 +ENDIF +ENDIF +' +IF (_LFH=0)|(_LRH=0) +IF (LSHHIT=0)&(_BGH=1) +OLDDCH=_DCH +DCH=60000 +LSHHIT=1 +ENDIF +ENDIF +RE +' +' +'----------------------------------------------------------------------------- +#MOVE +'THIS ROUTINE IS USED TO MOVE AN AXIS WITH A SSI ENCODER +'USING A MOVE-CHECK-CORRECT METHOD +'THE FOLLOWING VARIABLES MUST BE INITIALISED FIRST +'~a=0 TO 7 SETS THE MOTOR, 0=A AXIS 1=B AXIS ETC +'~b=0 TO 7 SETS THE ENCODER, 0=1ST SSI CHANNEL 1=2ND CHANNEL ETC +'TRIES= MAXIMUM NUMBER OF TRIES +'POS=DESIRED ENCODER POSITION +' +'~a=0:~b=0:TRIES=5:POS=12345678:XQ #MOVE,1 +' +DBAND=3 +SH~a +WT500;'WAIT TO STABILISE +IF (_BG~a=1);'MOVING, FORCE STOP. PRA WHEN MOVING CAUSES THREAD CRASH +ST~a +MC~a +ENDIF +TEMP=_TP~b;'SET TEMPORARY VARIABLE +PR~a=2500 +IF (_LF~a=0);'ALREADY ON LIMIT +MG "Forward limit actuated" {EA} +MG "Ratio not calculated" {EA} +JP #MOVEEND +ENDIF +BG~a;'PERFORM A SMALL MOVE TO DETERMIN MOTOR:ENCODER RATIO +MC~a +WT500;'WAIT TO STABILISE +IF (TEMP=_TP~b);'FAILED TO MOVE +MG "No movement detected" {EA} +MG "Ratio not calculated" {EA} +JP #MOVEEND +ENDIF +RATIO=(TEMP-_TP~b)*10;'SETS ENCODER/MOTOR RATIO +' +#LOOP +IF (_BG~a=1);'MOVING, FORCE STOP. PRA WHEN MOVING CAUSES THREAD CRASH +ST~a +MC~a +ENDIF +PR~a=25000*((_TP~b-POS)/RATIO);'CALC STEPS TO DESTINATION +IF ((_PR~a>0)&(_LF~a=0));'IF POSITIVE MOVE AND ALREADY ON LIMIT +MG "Forward limit actuated" {EA} +MG "Positive move aborted" {EA} +JP #MOVEEND +ENDIF +IF ((_PR~a<0)&(_LR~a=0));'IF NEGATIVE MOVE AND ALREADY ON LIMIT +MG "Reverse limit actuated" {EA} +MG "Negative move aborted" {EA} +JP #MOVEEND +ENDIF +IF (_BG~a=1);'ALREADY MOVING +ST~a +MC~a +ENDIF +SH~a +BG~a +MC~a;'WAIT FOR MOTION TO COMPLETE +TRIES=TRIES-1;'INCREMENT ATTEMPT COUNTER +MG "Attempts to go: " {N} {EA} +MG TRIES {F1.0} {EA} +JP #LOOP, ((@ABS[_TP~b-POS]>DBAND)&(TRIES>0)) +'HAVE ANOTHER GO IF OUTSIDE DEAD BAND AND NOT TOO MANY ATTEMPTS +#MOVEEND +MG "TARGET :" {N} {EA} +MG POS {F8.0} {EA} +MG "POSITION :" {N} {EA} +MG _TP~b {F8.0} {EA} +MG "Program ends" {EA} +EN +' +' +'----------------------------------------------------------------------------- +#HOMES1 +'THIS ROUTINE HOMES THE S1 SLIT PACKAGE +' +IF (S1HOMED=1);'ALREADY HOMED +JP #ENDS1 +ENDIF +' +IF (_LFA=0)&(_LRA=0) +'BOTH LIMITS ACTUATED. SLIT PACKAGE PROBABLY NOT PLUGGED IN. +JP #ENDS1 +ENDIF +' +SHABCD;'TURN ON THE MOTORS +SP 30000,30000,30000,30000,,,,;'SET SPEED +IF (_LRA=0);'ON THE REVERSE LIMIT SWITCH +PRA=250*161/2*10;'MOVE AWAY 10mm +BGA +ENDIF +' +IF (_LRB=0);'ON THE REVERSE LIMIT SWITCH +PRB=250*161/2*10;'MOVE AWAY 10mm +BGB +ENDIF +' +IF (_LRC=0);'ON THE REVERSE LIMIT SWITCH +PRC=250*161/2*10;'MOVE AWAY 10mm +BGC +ENDIF +' +IF (_LRD=0);'ON THE REVERSE LIMIT SWITCH +PRD=250*161/2*10;'MOVE AWAY 10mm +BGD +ENDIF +' +MCABCD;'WAIT FOR MOTION TO BE COMPLETE +JG -30000,-30000,-30000,-30000,,,,;'JOG INTO REVERSE LIMIT +BGABCD +MCABCD +PR 80500,80500,80500,80500,,,,;'MOVE AWAY 4MM +BGABCD +MCABCD +JG -5000,-5000,-5000,-5000,,,,;'JOG SLOWLY INTO LIMITS +BGABCD +MCABCD +DP 0,0,0,0,,,,;'DEFINE HOME POSITION +SP 30000,30000,30000,30000,,,,;'SET SPEED BACK TO NORMAL +S1HOMED=1;'HOMING OF SLIT S1 COMPLETE +#ENDS1 +EN +' +' +'----------------------------------------------------------------------------- +#HOMES2 +'THIS ROUTINE HOMES THE S2 SLIT PACKAGE +' +IF (S2HOMED=1);'ALREADY HOMED +JP #ENDS2 +ENDIF +' +IF (_LFE=0)&(_LRE=0) +'BOTH LIMITS ACTUATED. SLIT PACKAGE PROBABLY NOT PLUGGED IN. +JP #ENDS2 +ENDIF +' +SHEFGH;'TURN ON THE MOTORS +SP ,,,,30000,30000,30000,30000;'SET SPEED +IF (_LRE=0);'ON THE REVERSE LIMIT SWITCH +PRE=250*161/2*10;'MOVE AWAY 10mm +BGE +ENDIF +' +IF (_LRF=0);'ON THE REVERSE LIMIT SWITCH +PRF=250*161/2*10;'MOVE AWAY 10mm +BGF +ENDIF +' +IF (_LRG=0);'ON THE REVERSE LIMIT SWITCH +PRG=250*161/2*10;'MOVE AWAY 10mm +BGG +ENDIF +' +IF (_LRH=0);'ON THE REVERSE LIMIT SWITCH +PRH=250*161/2*10;'MOVE AWAY 10mm +BGH +ENDIF +' +MCEFGH;'WAIT FOR MOTION TO BE COMPLETE +JG ,,,,-30000,-30000,-30000,-30000;'JOG INTO REVERSE LIMIT +BGEFGH +MCEFGH +PR ,,,,80500,80500,80500,80500;'MOVE AWAY 4MM +BGEFGH +MCEFGH +JG ,,,,-5000,-5000,-5000,-5000;'JOG SLOWLY INTO LIMITS +BGEFGH +MCEFGH +DP ,,,,0,0,0,0;'DEFINE HOME POSITION +SP ,,,,30000,30000,30000,30000;'SET SPEED BACK TO NORMAL +S2HOMED=1;'HOMING OF SLIT S1 COMPLETE +#ENDS2 +EN +' +' +'-----------------------------------------------------------------------------