'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 ' INITIALISE THE BIT FOR AXIS F AIRPAD CONTROL REQF=0 RSPF=0 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 ' FOLLOW SHF/MOF COMMANDS ENTERED MANUALLY IF (_MOF=0)&(RSPF=0);'MOTOR IS ON BUT AIR IS OFF REQF=1 ENDIF IF (_MOF=1)&(RSPF=1);'MOTOR IS OFF BUT AIR IS ON SHF;' FOLLOWING STEPS MUST BE RUN BEFORE MOTOR CAN BE TURNED OFF REQF=0 ENDIF ' IF (REQF=1)&(RSPF=0);'REQUESTING ANALYSER MOTOR BE MOVABLE SHF;' TURN ANALYSER MOTOR ON WT500;' WAIT FOR MOTOR TO STABILISE SB 10;'ANALYSER AIR PAD OFF-SOLENOID OFF CB 9;'ANALYSER AIR PAD ON-SOLENOID ON WT1000; RSPF=1 ENDIF IF (REQF=0)&(RSPF=1)&(_BGF=0);'MOTION FINISHED WT1000;' WAIT FOR MOTOR TO SETTLE 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 MOF;' TURN ANALYSER MOTOR OFF RSPF=0 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 ' '