Files
sics/site_ansto/instrument/tas/DMC2280/controller2.txt
Douglas Clowes bd2f7a6853 Implement Echidna Airpad Control
r3295 | dcl | 2011-11-29 18:52:18 +1100 (Tue, 29 Nov 2011) | 1 line
2012-11-15 17:19:26 +11:00

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
'
'