369 lines
7.1 KiB
Plaintext
Executable File
369 lines
7.1 KiB
Plaintext
Executable File
'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
|
|
'
|
|
'
|
|
|
|
|