' PLATYPUS - CONTROLLER 1 ' ' $Revision: 1.12 $ ' $Name: not supported by cvs2svn $ ' $Date: 2008-05-30 00:26:56 $ ' Author: Dan Bartlett ' Last revision by: $Author: ffr $ ' ' A-BEAM SHADE RAISE ' B-COLLIMATOR TRANSLATE A=7350364, B=6529772, C=6941582 ' C-COLLIMATOR TILT, LEVEL=134660 ' D-BEAM ATTENUATOR, BEAM CENTRE=8375078 ' E-SLIT TOWER S3 RAISE ' F-SLIT TOWER S4 RAISE ' G-DETECTOR TRANSLATION Y (ALONG BEAM) ' H-SPARE ' ' '----------------------------------------------------------------------- #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;' FIRST TIME MOTOR 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,202,131;' CONFIGURES IP ADDRESS AC 25000,25000,25000,25000,25000,25000,12500,;' SET ACELERATION DC 25000,25000,25000,25000,25000,25000,12500,;' SET DECELERATION SP 50000,25000,25000,25000,75000,75000,12500,;' SET SPEED SIA=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 SIB=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 SIC=1,24,18,6<-2>2;'IVO SID=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 SIE=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 SIF=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 SIG=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 SIH=0,25,13,0<-2>2;'SPARE ' FIRST TIME THROUGH BRAKE CONTROL NOT DONE REQA=0 RSPA=0 ' FIRST TIME THROUGH RESET HALT CONTROL HLTA=0 HLTB=0 HLTC=0 HLTD=0 HLTE=0 HLTF=0 HLTG=0 HLTH=0 ' FIRST TIME THROUGH RESET LIMIT CONTROL LSAHIT=0 LSBHIT=0 LSCHIT=0 LSDHIT=0 LSEHIT=0 LSFHIT=0 LSGHIT=0 LSHHIT=0 POS=0;' INITIAL BEAM ATTENUATOR FREQUENCY IS 0, PARKED IN THE BEAM XQ #ATTEN,1 JS #THREAD0 EN ' ' '----------------------------------------------------------------------- #THREAD0 ' MAIN THREAD ' THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK ' JS #CHKSPD JS #CHKDCEL JS #AIRPAD JP #THREAD0 EN ' ' '----------------------------------------------------------------------- #CHKDCEL 'ROUTINE TO RESET DECELERATION AFTER AN EMERGENCY STOP ' IF (_BGA=0);'WHEN MOTION STOPS AFTER A LIMIT HIT IF (LSAHIT=1);'WHEN MOTION STOPS AFTER A LIMIT HIT DCA=OLDDCA;' RESET DECEL TO OLD VALUE LSAHIT=0 ENDIF IF (HLTA=1) HLTA=0 ENDIF ENDIF ' IF (_BGB=0) IF (LSBHIT=1) DCB=OLDDCB LSBHIT=0 ENDIF IF (HLTB=1) HLTB=0 ENDIF ENDIF ' IF (_BGC=0) IF (LSCHIT=1) DCC=OLDDCC LSCHIT=0 ENDIF IF (HLTC=1) HLTC=0 ENDIF ENDIF ' IF (_BGD=0) IF (LSDHIT=1) DCD=OLDDCD LSDHIT=0 ENDIF IF (HLTD=1) HLTD=0 ENDIF ENDIF ' IF (_BGE=0) IF (LSEHIT=1) DCE=OLDDCE LSEHIT=0 ENDIF IF (HLTE=1) HLTE=0 ENDIF ENDIF ' IF (_BGF=0) IF (LSFHIT=1) DCF=OLDDCF LSFHIT=0 ENDIF IF (HLTF=1) HLTF=0 ENDIF ENDIF ' IF (_BGG=0) IF (LSGHIT=1) DCG=OLDDCG LSGHIT=0 ENDIF IF (HLTG=1) HLTG=0 ENDIF ENDIF ' IF (_BGH=0) IF (LSHHIT=1) DCH=OLDDCH LSHHIT=0 ENDIF IF (HLTH=1) HLTH=0 ENDIF ENDIF ' JS #SETDCEL,((HLTA=1)&(LSAHIT=0)) JS #SETDCEL,((HLTB=1)&(LSBHIT=0)) JS #SETDCEL,((HLTC=1)&(LSCHIT=0)) JS #SETDCEL,((HLTD=1)&(LSDHIT=0)) JS #SETDCEL,((HLTE=1)&(LSEHIT=0)) JS #SETDCEL,((HLTF=1)&(LSFHIT=0)) JS #SETDCEL,((HLTG=1)&(LSGHIT=0)) JS #SETDCEL,((HLTH=1)&(LSHHIT=0)) EN ' ' '----------------------------------------------------------------------- #CHKSPD ' ROUTINE TO CHECK IF SPEEDS ARE ABOVE MAXIMUM ALLOWED ' IF (_SPA>50000) SPA=50000 ENDIF IF (_SPB>50000) SPB=50000 ENDIF IF (_SPC>50000) SPC=50000 ENDIF IF (_SPD>200000) SPD=200000 ENDIF IF (_SPE>50000) SPE=50000 ENDIF IF (_SPF>100000) SPF=100000 ENDIF IF (_SPG>50000) SPG=50000 ENDIF IF (_SPH>50000) SPH=50000 ENDIF EN ' ' '----------------------------------------------------------------------- #TCPERR ' EMPTY ROUTINE FOR A TCP ERROR ' RE ' ' '----------------------------------------------------------------------- #CMDERR 'ROUTINE TO HANDLE COMMAND ERRORS ' ZS0 EN1 ' ' '----------------------------------------------------------------------- #ININT ' INTERUPT ROUTINE TO STOP ALL AXES ' WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT ' STA,B,C,D,E,F,G,H HLTA=1 HLTB=1 HLTC=1 HLTD=1 HLTE=1 HLTF=1 HLTG=1 HLTH=1 JS #SETDCEL RI ' ' '----------------------------------------------------------------------- #LIMSWI 'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT ' JS #SETDCEL RE ' '----------------------------------------------------------------------- #SETDCEL 'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS ' IF (_BGA=1) IF (((_SCA=2)&(_LFA=0))|((_SCA=3)&(_LRA=0))|(HLTA=1)) STA IF (LSAHIT=0) OLDDCA=_DCA DCA=100000 LSAHIT=1 ENDIF ENDIF ENDIF ' IF (_BGB=1) IF (((_SCB=2)&(_LFB=0))|((_SCB=3)&(_LRB=0))|(HLTB=1)) STB IF (LSBHIT=0) OLDDCB=_DCB DCB=100000 LSBHIT=1 ENDIF ENDIF ENDIF ' IF (_BGC=1) IF (((_SCC=2)&(_LFC=0))|((_SCC=3)&(_LRC=0))|(HLTC=1)) STC IF (LSCHIT=0) OLDDCC=_DCC DCC=100000 LSCHIT=1 ENDIF ENDIF ENDIF ' IF (_BGD=1) IF (((_SCD=2)&(_LFD=0))|((_SCD=3)&(_LRD=0))|(HLTD=1)) STD IF (LSDHIT=0) OLDDCD=_DCD DCD=100000 LSDHIT=1 ENDIF ENDIF ENDIF ' IF (_BGE=1) IF (((_SCE=2)&(_LFE=0))|((_SCE=3)&(_LRE=0))|(HLTE=1)) STE IF (LSEHIT=0) OLDDCE=_DCE DCE=150000 LSEHIT=1 ENDIF ENDIF ENDIF ' IF (_BGF=1) IF (((_SCF=2)&(_LFF=0))|((_SCF=3)&(_LRF=0))|(HLTF=1)) STF IF (LSFHIT=0) OLDDCF=_DCF DCF=150000 LSFHIT=1 ENDIF ENDIF ENDIF ' IF (_BGG=1) IF (((_SCG=2)&(_LFG=0))|((_SCG=3)&(_LRG=0))|(HLTG=1)) STG IF (LSGHIT=0) OLDDCG=_DCG DCG=100000 LSGHIT=1 ENDIF ENDIF ENDIF ' IF (_BGH=1) IF (((_SCH=2)&(_LFH=0))|((_SCH=3)&(_LRH=0))|(HLTH=1)) STH IF (LSHHIT=0) OLDDCH=_DCH DCH=100000 LSHHIT=1 ENDIF ENDIF ENDIF ' EN ' ' '----------------------------------------------------------------------- #AIRPAD ' ROUTINE TO CONTROL THE BRAKE ON BEAM SHADE RAISE AXIS IF (_MOA=0)&(RSPA=0);'MOTOR IS ON REQA=1 ENDIF IF (_MOA=1)&(RSPA=1);'MOTOR IS OFF REQA=0 ENDIF ' IF (REQA=1)&(RSPA=0);'MOTOR IS REQUIRED SHA WT 200;' WAIT FOR MOTOR TO STABILISE CB 9;'RELAY ON = BRAKE COIL ENERGISED = BRAKE DISENGAGED WT 300 RSPA=1 ENDIF IF (REQA=0)&(RSPA=1);'MOTOR IS NOT REQUIRED SB 9;'RELAY OFF = BRAKE COIL DE-ENERGISED = BRAKE ENGAGED WT 400 MOA WT 100 RSPA=0 ENDIF EN ' ' '----------------------------------------------------------------------- #ATTEN ' THIS IS A PROGRAM FOR CONTROLING THE BEAM ATTENUATOR ' ITS STATE IS SET BY THE VARIABLE POS ' IF POS=-1 THEN ITS OUT OF THE BEAM ' IF POS=0 THEN ITS IN THE BEAM, LIKE A SHUTTER ' IF POS=1 THEN ITS OSCILLATING DEADBD=20 PARKPOS=8308518; 'PARKING ENCODER POSITION SHUTPOS=8359718; 'BEAM SHUT ENCODER POSITION STRTPOS=8395558; 'OSCILLATING START ENCODER POSITION IF (POS=-1)&(@ABS[_TPD - PARKPOS]>DEADBD) ' PARK ATTENUATOR OUT OF BEAM - NO ATTENUATION SPD=75000 ACD=50000 DCD=50000 SHD PRD=(_TPD - PARKPOS)/8192*25000 BGD AMD MOD ENDIF IF (POS=0)&(@ABS[_TPD - SHUTPOS]>DEADBD) ' PARK ATTENUATOR IN BEAM - LIKE A SHUTTER SPD=75000 ACD=50000 DCD=50000 SHD PRD=(_TPD - SHUTPOS)/8192*25000 BGD AMD MOD ENDIF IF (POS=1) ' OSCILLATE ATTENUATOR SHD SPD=75000 ACD=50000 DCD=50000 PRD=(_TPD - STRTPOS)/8192*25000 BGD AMD SPD=180000 ACD=_SPD*4;' 0.25S TO ACCELERATE DCD=_ACD #LOOP PRD=125000;' 80MM = 60MM IN THE BEAM, 10MM FOR ACCEL AND 10MM FOR DECEL BGD AMD PRD=-125000 BGD AMD ENDIF JP #LOOP,(POS=1) JP #ATTEN EN ' ' '-----------------------------------------------------------------------