diff --git a/site_ansto/instrument/hipd/DMC2280/controller1.txt b/site_ansto/instrument/hipd/DMC2280/controller1.txt index 742aa4b9..55e36345 100644 --- a/site_ansto/instrument/hipd/DMC2280/controller1.txt +++ b/site_ansto/instrument/hipd/DMC2280/controller1.txt @@ -1,11 +1,11 @@ ' WOMBAT - CONTROLLER 1 -' -' $Revision: 1.8 $ -' $Date: 2008-03-05 04:25:02 $ +' +' $Revision: 1.9 $ +' $Date: 2008-03-07 05:12:47 $ ' Author: Dan Bartlett ' Airpad control added by Doug Clowes ' Last revision by: $Author: dcl $ -' +' ' A-MONOCHROMATOR UPPER TILT ' B-MONOCHROMATOR LOWER TILT ' C-MONOCHROMATOR UPPER TRANSLATION @@ -47,8 +47,8 @@ HLTC=0 HLTD=0 HLTE=0 HLTF=0 -' HLTG=0 -' HLTH=0 +HLTG=0 +HLTH=0 ' FIRST TIME THROUGH RESET LIMIT CONTROL LSAHIT=0 LSBHIT=0 @@ -56,8 +56,8 @@ LSCHIT=0 LSDHIT=0 LSEHIT=0 LSFHIT=0 -' LSGHIT=0 -' LSHHIT=0 +LSGHIT=0 +LSHHIT=0 JS #THREAD0 EN ' @@ -67,134 +67,105 @@ EN ' MAIN THREAD ' THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK ' +JS #CHKSPD JS #CHKDCEL JS #AIRPAD -JS #CHKSPD JP #THREAD0 EN ' ' '----------------------------------------------------------------------- #CHKDCEL -'ROUTINE TO CHECK DECELERATION AFTER A LIMIT HIT +'ROUTINE TO RESET DECELERATION AFTER AN EMERGENCY STOP ' -IF (LSAHIT=1)&(_BGA=0);'WHEN MOTION STOPS AFTER A LIMIT HIT +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 -IF (HLTA=1) -MOA -HLTA=0 -ENDIF LSAHIT=0 ENDIF -IF (LSBHIT=1)&(_BGB=0) -DCB=OLDDCB -IF (HLTB=1) -MOB -HLTB=0 +IF (HLTA=1) +HLTA=0 ENDIF +ENDIF +' +IF (_BGB=0) +IF (LSBHIT=1) +DCB=OLDDCB LSBHIT=0 ENDIF -IF (LSCHIT=1)&(_BGC=0) -DCC=OLDDCC -IF (HLTC=1) -MOC -HLTC=0 +IF (HLTB=1) +HLTB=0 ENDIF +ENDIF +' +IF (_BGC=0) +IF (LSCHIT=1) +DCC=OLDDCC LSCHIT=0 ENDIF -IF (LSDHIT=1)&(_BGD=0) -DCD=OLDDCD -IF (HLTD=1) -MOD -HLTD=0 +IF (HLTC=1) +HLTC=0 ENDIF +ENDIF +' +IF (_BGD=0) +IF (LSDHIT=1) +DCD=OLDDCD LSDHIT=0 ENDIF -IF (LSEHIT=1)&(_BGE=0) -DCE=OLDDCE -IF (HLTE=1) -MOE -HLTE=0 +IF (HLTD=1) +HLTD=0 ENDIF +ENDIF +' +IF (_BGE=0) +IF (LSEHIT=1) +DCE=OLDDCE LSEHIT=0 ENDIF -IF (LSFHIT=1)&(_BGF=0) +IF (HLTE=1) +HLTE=0 +ENDIF +ENDIF +' +IF (_BGF=0) +IF (LSFHIT=1) DCF=OLDDCF -IF (HLTF=1) -MOF -HLTF=0 -ENDIF;' LSFHIT=0 ENDIF -' IF (LSGHIT=1)&(_BGG=0) -' DCG=OLDDCG -' IF (HLTG=1) -' MOG -' HLTG=0 -' ENDIF -' LSGHIT=0 -' ENDIF -' IF (LSHHIT=1)&(_BGH=0) -' DCH=OLDDCH -' IF (HLTH=1) -' MOH -' HLTH=0 -' ENDIF -' LSHHIT=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 -' -' -'----------------------------------------------------------------------- -#AIRPAD -' ROUTINE TO CONTROL THE AIRPADS -' SET REQF=1 TO MAKE FLIGHT TUBE AVAILABLE FOR MOVE -' THE RSPF BIT IS USED SO THAT THE CODE ONLY RUNS WHEN THE -' STATE OF FTUBE CHANGES - THE DELAYS ARENT RUNNING EVERY CYCLE -' IN THE 2ND IF, THE OFF-SOLENOIDS ARENT HELD ENERGISED IN CASE THE -' VALVE MANUAL OVER RIDE IS NEEDED. -' -' FOLLOW SHF/MOF COMMANDS ENTERED MANUALLY -IF (_MOF=0)&(RSPF=0);'FLIGHT TUBE MOTOR IS ON BUT AIR IS OFF -REQF=1 -ENDIF -IF (_MOF=1)&(RSPF=1);'FLIGHT TUBE 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 FLIGHT TUBE BE MOVABLE -SHF;' TURN MOTOR ON -WT500;' WAIT FOR MOTOR TO STABILISE -SB 12;' DRIVE WHEEL UP-SOLENOID OFF -CB 11;' DRIVE WHEEL DOWN-SOLENOID ON -WT1000;' WAIT FOR DRIVE WHEEL TO LOWER -SB 10;' SAMPLE STAGE AIR PAD OFF-SOLENOID OFF -CB 9;' SAMPLE STAGE AIR PAD ON-SOLENOID ON -WT1000; -RSPF=1 -ENDIF -IF (REQF=0)&(RSPF=1);'FLIGHT TUBE MOTION FINISHED -WT1000;' WAIT FOR FLIGHT TUBE TO SETTLE -SB 9;' SAMPLE STAGE AIR PAD ON-SOLENOID OFF -CB 10;' SAMPLE STAGE AIR PAD OFF-SOLENOID ON -WT500; -SB 10;' SAMPLE STAGE AIR PAD OFF-SOLENOID OFF -SB 11;' DRIVE WHEEL DOWN-SOLENOID OFF -CB 12;' DRIVE WHEEL UP-SOLENOID ON -WT500;' WAIT 1/2 SEC -SB 12;' DRIVE WHEEL UP-SOLENOID OFF -MOF;' TURN MOTOR OFF -RSPF=0 -ENDIF +JS #SETDCEL,((HLTG=1)&(LSGHIT=0)) +JS #SETDCEL,((HLTH=1)&(LSHHIT=0)) EN ' ' @@ -220,12 +191,12 @@ ENDIF IF (_SPF>75000) SPF=75000 ENDIF -' IF (_SPG>50000) -' SPG=50000 -' ENDIF -' IF (_SPH>50000) -' SPH=50000 -' ENDIF +IF (_SPG>50000) +SPG=50000 +ENDIF +IF (_SPH>50000) +SPH=50000 +ENDIF EN ' ' @@ -256,8 +227,8 @@ HLTC=1 HLTD=1 HLTE=1 HLTF=1 -' HLTG=1 -' HLTH=1 +HLTG=1 +HLTH=1 JS #SETDCEL RI ' @@ -271,74 +242,142 @@ RE ' '----------------------------------------------------------------------- #SETDCEL -'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT +'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS ' -IF (_LFA=0)|(_LRA=0)|(HLTA=1);'LIMIT HIT -IF (LSAHIT=0)&(_BGA=1);'STILL MOVING, FIRST TIME -OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE +IF (_BGA=1) +IF (((_SCA=2)&(_LFA=0))|((_SCA=3)&(_LRA=0))|(HLTA=1)) STA -DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP +IF (LSAHIT=0) +OLDDCA=_DCA +DCA=100000 LSAHIT=1 ENDIF ENDIF -IF (_LFB=0)|(_LRB=0)|(HLTB=1) -IF (LSBHIT=0)&(_BGB=1) -OLDDCB=_DCB +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 -IF (_LFC=0)|(_LRC=0)|(HLTC=1) -IF (LSCHIT=0)&(_BGC=1) -OLDDCC=_DCC +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 -IF (_LFD=0)|(_LRD=0)|(HLTD=1) -IF (LSDHIT=0)&(_BGD=1) -OLDDCD=_DCD +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 -IF (_LFE=0)|(_LRE=0)|(HLTE=1) -IF (LSEHIT=0)&(_BGE=1) -OLDDCE=_DCE +ENDIF +' +IF (_BGE=1) +IF (((_SCE=2)&(_LFE=0))|((_SCE=3)&(_LRE=0))|(HLTE=1)) STE +IF (LSEHIT=0) +OLDDCE=_DCE DCE=100000 LSEHIT=1 ENDIF ENDIF -IF (_LFF=0)|(_LRF=0)|(HLTF=1) -IF (LSFHIT=0)&(_BGF=1) -OLDDCF=_DCF +ENDIF +' +IF (_BGF=1) +IF (((_SCF=2)&(_LFF=0))|((_SCF=3)&(_LRF=0))|(HLTF=1)) STF +IF (LSFHIT=0) +OLDDCF=_DCF DCF=50000 LSFHIT=1 ENDIF ENDIF -' IF (_LFG=0)|(_LRG=0)|(HLTG=1) -' IF (LSGHIT=0)&(_BGG=1) -' OLDDCG=_DCG -' STG -' DCG=100000 -' LSGHIT=1 -' ENDIF -' ENDIF -' IF (_LFH=0)|(_LRH=0)|(HLTH=1) -' IF (LSHHIT=0)&(_BGH=1) -' OLDDCH=_DCH -' STH -' DCH=100000 -' LSHHIT=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 AIRPADS +' SET REQF=1 TO MAKE FLIGHT TUBE AVAILABLE FOR MOVE +' THE RSPF BIT IS USED SO THAT THE CODE ONLY RUNS WHEN THE +' STATE OF FTUBE CHANGES - THE DELAYS ARENT RUNNING EVERY CYCLE +' IN THE 2ND IF, THE OFF-SOLENOIDS ARENT HELD ENERGISED IN CASE THE +' VALVE MANUAL OVER RIDE IS NEEDED. +' +' FOLLOW SHF/MOF COMMANDS ENTERED MANUALLY +IF (_MOF=0)&(RSPF=0);'FLIGHT TUBE MOTOR IS ON BUT AIR IS OFF +REQF=1 +ENDIF +IF (_MOF=1)&(RSPF=1);'FLIGHT TUBE 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 FLIGHT TUBE BE MOVABLE +SHF;' TURN MOTOR ON +WT500;' WAIT FOR MOTOR TO STABILISE +SB 12;' DRIVE WHEEL UP-SOLENOID OFF +CB 11;' DRIVE WHEEL DOWN-SOLENOID ON +WT1000;' WAIT FOR DRIVE WHEEL TO LOWER +SB 10;' AIR PAD OFF-SOLENOID OFF +CB 9;' AIR PAD ON-SOLENOID ON +WT1000; +RSPF=1 +ENDIF +IF (REQF=0)&(RSPF=1);'FLIGHT TUBE MOTION FINISHED +WT1000;' WAIT FOR FLIGHT TUBE TO SETTLE +SB 9;' AIR PAD ON-SOLENOID OFF +CB 10;' AIR PAD OFF-SOLENOID ON +WT500; +SB 10;' AIR PAD OFF-SOLENOID OFF +SB 11;' DRIVE WHEEL DOWN-SOLENOID OFF +CB 12;' DRIVE WHEEL UP-SOLENOID ON +WT500;' WAIT 1/2 SEC +SB 12;' DRIVE WHEEL UP-SOLENOID OFF +MOF;' TURN MOTOR OFF +RSPF=0 +ENDIF EN ' ' '----------------------------------------------------------------------- - diff --git a/site_ansto/instrument/hipd/DMC2280/controller2.txt b/site_ansto/instrument/hipd/DMC2280/controller2.txt index 1ea9fd54..deec8ec1 100644 --- a/site_ansto/instrument/hipd/DMC2280/controller2.txt +++ b/site_ansto/instrument/hipd/DMC2280/controller2.txt @@ -1,11 +1,11 @@ ' WOMBAT - CONTROLLER 2 -' -' $Revision: 1.5 $ -' $Date: 2008-03-05 04:25:32 $ +' +' $Revision: 1.6 $ +' $Date: 2008-03-07 05:12:47 $ ' Author: Dan Bartlett ' Airpad control added by Doug Clowes ' Last revision by: $Author: dcl $ -' +' ' A-SAMPLE UPPER TILT ' B-SAMPLE LOWER TILT ' C-SAMPLE UPPER LINEAR @@ -48,7 +48,7 @@ HLTD=0 HLTE=0 HLTF=0 HLTG=0 -' HLTH=0 +HLTH=0 ' FIRST TIME THROUGH RESET LIMIT CONTROL LSAHIT=0 LSBHIT=0 @@ -57,7 +57,7 @@ LSDHIT=0 LSEHIT=0 LSFHIT=0 LSGHIT=0 -' LSHHIT=0 +LSHHIT=0 JS #THREAD0 EN ' @@ -67,81 +67,97 @@ EN ' MAIN THREAD ' THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK ' +JS #CHKSPD JS #CHKDCEL JS #AIRPAD -JS #CHKSPD JP #THREAD0 EN ' ' '----------------------------------------------------------------------- #CHKDCEL -'ROUTINE TO CHECK DECELERATION AFTER A LIMIT HIT +'ROUTINE TO RESET DECELERATION AFTER AN EMERGENCY STOP ' -IF (LSAHIT=1)&(_BGA=0);'WHEN MOTION STOPS AFTER A LIMIT HIT +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 -IF (HLTA=1) -MOA -HLTA=0 -ENDIF LSAHIT=0 ENDIF -IF (LSBHIT=1)&(_BGB=0) -DCB=OLDDCB -IF (HLTB=1) -MOB -HLTB=0 +IF (HLTA=1) +HLTA=0 ENDIF +ENDIF +' +IF (_BGB=0) +IF (LSBHIT=1) +DCB=OLDDCB LSBHIT=0 ENDIF -IF (LSCHIT=1)&(_BGC=0) -DCC=OLDDCC -IF (HLTC=1) -MOC -HLTC=0 +IF (HLTB=1) +HLTB=0 ENDIF +ENDIF +' +IF (_BGC=0) +IF (LSCHIT=1) +DCC=OLDDCC LSCHIT=0 ENDIF -IF (LSDHIT=1)&(_BGD=0) -DCD=OLDDCD -IF (HLTD=1) -MOD -HLTD=0 +IF (HLTC=1) +HLTC=0 ENDIF +ENDIF +' +IF (_BGD=0) +IF (LSDHIT=1) +DCD=OLDDCD LSDHIT=0 ENDIF -IF (LSEHIT=1)&(_BGE=0) -DCE=OLDDCE -IF (HLTE=1) -MOE -HLTE=0 +IF (HLTD=1) +HLTD=0 ENDIF +ENDIF +' +IF (_BGE=0) +IF (LSEHIT=1) +DCE=OLDDCE LSEHIT=0 ENDIF -IF (LSFHIT=1)&(_BGF=0) +IF (HLTE=1) +HLTE=0 +ENDIF +ENDIF +' +IF (_BGF=0) +IF (LSFHIT=1) DCF=OLDDCF -IF (HLTF=1) -MOF -HLTF=0 -ENDIF;' LSFHIT=0 ENDIF -IF (LSGHIT=1)&(_BGG=0) -DCG=OLDDCG -IF (HLTG=1) -MOG -HLTG=0 +IF (HLTF=1) +HLTF=0 ENDIF +ENDIF +' +IF (_BGG=0) +IF (LSGHIT=1) +DCG=OLDDCG LSGHIT=0 ENDIF -' IF (LSHHIT=1)&(_BGH=0) -' DCH=OLDDCH -' IF (HLTH=1) -' MOH -' HLTH=0 -' ENDIF -' LSHHIT=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)) @@ -149,45 +165,7 @@ 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 -' -' -'----------------------------------------------------------------------- -#AIRPAD -' ROUTINE TO CONTROL THE AIRPADS -' SET REQF=1 TO MAKE FLIGHT TUBE AVAILABLE FOR MOVE -' THE RSPF BIT IS USED SO THAT THE CODE ONLY RUNS WHEN THE -' STATE OF FTUBE CHANGES - THE DELAYS ARENT RUNNING EVERY CYCLE -' IN THE 2ND IF, THE OFF-SOLENOIDS ARENT HELD ENERGISED IN CASE THE -' VALVE MANUAL OVER RIDE IS NEEDED. -' -' FOLLOW SHF/MOF COMMANDS ENTERED MANUALLY -IF (_MOF=0)&(RSPF=0);'FLIGHT TUBE MOTOR IS ON BUT AIR IS OFF -REQF=1 -ENDIF -IF (_MOF=1)&(RSPF=1);'FLIGHT TUBE 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 FLIGHT TUBE BE MOVABLE -SHF;' TURN MOTOR ON -WT500;' WAIT FOR MOTOR TO STABILISE -SB 10;' DETECTOR AIR PAD OFF-SOLENOID OFF -CB 9;' DETECTOR AIR PAD ON-SOLENOID ON -WT1000; -RSPF=1 -ENDIF -IF (REQF=0)&(RSPF=1);'FLIGHT TUBE MOTION FINISHED -WT1000;' WAIT FOR FLIGHT TUBE TO SETTLE -SB 9;' DETECTOR AIR PAD ON-SOLENOID OFF -CB 10;' DETECTOR AIR PAD OFF-SOLENOID ON -WT500; -SB 10;' DETECTOR AIR PAD OFF-SOLENOID OFF -MOF;' TURN MOTOR OFF -RSPF=0 -ENDIF +JS #SETDCEL,((HLTH=1)&(LSHHIT=0)) EN ' ' @@ -216,9 +194,9 @@ ENDIF IF (_SPG>500000) SPG=500000 ENDIF -' IF (_SPH>50000) -' SPH=50000 -' ENDIF +IF (_SPH>50000) +SPH=50000 +ENDIF EN ' ' @@ -250,7 +228,7 @@ HLTD=1 HLTE=1 HLTF=1 HLTG=1 -' HLTH=1 +HLTH=1 JS #SETDCEL RI ' @@ -264,72 +242,134 @@ RE ' '----------------------------------------------------------------------- #SETDCEL -'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS WHEN A LIMIT SWITCH IS HIT +'ROUTINE TO HASTEN THE DECELERATION OF AN AXIS ' -IF (_LFA=0)|(_LRA=0)|(HLTA=1);'LIMIT HIT -IF (LSAHIT=0)&(_BGA=1);'STILL MOVING, FIRST TIME -OLDDCA=_DCA;'REMEMBER OLD DECEL VALUE +IF (_BGA=1) +IF (((_SCA=2)&(_LFA=0))|((_SCA=3)&(_LRA=0))|(HLTA=1)) STA -DCA=100000;'INCREASE DECEL VALUE FOR RAPID STOP +IF (LSAHIT=0) +OLDDCA=_DCA +DCA=100000 LSAHIT=1 ENDIF ENDIF -IF (_LFB=0)|(_LRB=0)|(HLTB=1) -IF (LSBHIT=0)&(_BGB=1) -OLDDCB=_DCB +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 -IF (_LFC=0)|(_LRC=0)|(HLTC=1) -IF (LSCHIT=0)&(_BGC=1) -OLDDCC=_DCC +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 -IF (_LFD=0)|(_LRD=0)|(HLTD=1) -IF (LSDHIT=0)&(_BGD=1) -OLDDCD=_DCD +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 -IF (_LFE=0)|(_LRE=0)|(HLTE=1) -IF (LSEHIT=0)&(_BGE=1) -OLDDCE=_DCE +ENDIF +' +IF (_BGE=1) +IF (((_SCE=2)&(_LFE=0))|((_SCE=3)&(_LRE=0))|(HLTE=1)) STE +IF (LSEHIT=0) +OLDDCE=_DCE DCE=100000 LSEHIT=1 ENDIF ENDIF -IF (_LFF=0)|(_LRF=0)|(HLTF=1) -IF (LSFHIT=0)&(_BGF=1) -OLDDCF=_DCF +ENDIF +' +IF (_BGF=1) +IF (((_SCF=2)&(_LFF=0))|((_SCF=3)&(_LRF=0))|(HLTF=1)) STF +IF (LSFHIT=0) +OLDDCF=_DCF DCF=50000 LSFHIT=1 ENDIF ENDIF -IF (_LFG=0)|(_LRG=0)|(HLTG=1) -IF (LSGHIT=0)&(_BGG=1) -OLDDCG=_DCG +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 -' IF (_LFH=0)|(_LRH=0)|(HLTH=1) -' IF (LSHHIT=0)&(_BGH=1) -' OLDDCH=_DCH -' STH -' DCH=100000 -' LSHHIT=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 AIRPADS +' SET REQF=1 TO MAKE FLIGHT TUBE AVAILABLE FOR MOVE +' THE RSPF BIT IS USED SO THAT THE CODE ONLY RUNS WHEN THE +' STATE OF FTUBE CHANGES - THE DELAYS ARENT RUNNING EVERY CYCLE +' IN THE 2ND IF, THE OFF-SOLENOIDS ARENT HELD ENERGISED IN CASE THE +' VALVE MANUAL OVER RIDE IS NEEDED. +' +' FOLLOW SHF/MOF COMMANDS ENTERED MANUALLY +IF (_MOF=0)&(RSPF=0);'FLIGHT TUBE MOTOR IS ON BUT AIR IS OFF +REQF=1 +ENDIF +IF (_MOF=1)&(RSPF=1);'FLIGHT TUBE 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 FLIGHT TUBE BE MOVABLE +SHF;' TURN MOTOR ON +WT500;' WAIT FOR MOTOR TO STABILISE +SB 10;' AIR PAD OFF-SOLENOID OFF +CB 9;' AIR PAD ON-SOLENOID ON +WT1000; +RSPF=1 +ENDIF +IF (REQF=0)&(RSPF=1)&(_BGF=0);'FLIGHT TUBE MOTION FINISHED +WT1000;' WAIT FOR FLIGHT TUBE TO SETTLE +SB 9;' AIR PAD ON-SOLENOID OFF +CB 10;' AIR PAD OFF-SOLENOID ON +WT500; +SB 10;' AIR PAD OFF-SOLENOID OFF +MOF;' TURN MOTOR OFF +RSPF=0 +ENDIF EN ' ' @@ -354,7 +394,7 @@ SPG=500000 ACG=750000 DCG=750000 #LOOP -PRG=225000;' MOVE FORWARD DISTANCE AS PER ANGLE VALUE +PRG=225000;' MOVE FORWARD DISTANCE AS PER ANGLE VALUE BGG AMG PRG=-225000;' MOVE BACK DISTANCE AS PER ANGLE VALUE @@ -375,3 +415,6 @@ ENDIF JP #ACCVETO,(_XQ1<>-1) ' JUMP BACK TO START UNLESS #OSC IS NOT RUNNING EN +' +' +'----------------------------------------------------------------------- diff --git a/site_ansto/instrument/hipd/DMC2280/controller3.txt b/site_ansto/instrument/hipd/DMC2280/controller3.txt index ae64154e..b9feaba2 100644 --- a/site_ansto/instrument/hipd/DMC2280/controller3.txt +++ b/site_ansto/instrument/hipd/DMC2280/controller3.txt @@ -1,22 +1,25 @@ -NO TE: WOMBAT - CONTROLLER 3 -NO TE: -NO TE: $Revision: 1.3 $ -NO TE: $Date: 2007-02-22 07:36:59 $ -NO TE: Author: Dan Bartlett -NO TE: Limit switch HOME routine added by Ferdi Franceschini -NO TE: Last revision by: $Author: dbx $ -NO TE: -NO TE: A-MONOCHROMATOR FOCUS -NO TE: B-MONOCHROMATOR FOCUS -NO TE: C-SPARE -NO TE: D-SPARE -NO TE: E-SLIT 1 LEFT BLADE -NO TE: F-SLIT 1 RIGHT BLADE -NO TE: G-SLIT 1 TOP BLADE -NO TE: H-SLIT 1 BOTTOM BLADE -NO ---------------------------------------- +' WOMBAT - CONTROLLER 3 +' +' $Revision: 1.4 $ +' $Date: 2008-03-07 05:12:47 $ +' Author: Dan Bartlett +' Limit switch HOME routine added by Ferdi Franceschini +' Last revision by: $Author: dcl $ +' +' A-MONOCHROMATOR FOCUS +' B-MONOCHROMATOR FOCUS +' C-SPARE +' D-SPARE +' E-SLIT 1 LEFT BLADE +' F-SLIT 1 RIGHT BLADE +' G-SLIT 1 TOP BLADE +' H-SLIT 1 BOTTOM BLADE +' +' +'----------------------------------------------------------------------- #AUTO -NO TE: THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' 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 @@ -27,24 +30,151 @@ AC 1250,,,,60000,60000,60000,60000;' SET ACELERATION DC 1250,,,,60000,60000,60000,60000;' SET DECELERATION SP 2500,,,,30000,30000,30000,30000;' SET SPEED HOMERUN=0;' HOMING PROCEDURE HAS NOT BEEN RUN +' 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 JS #THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #THREAD0 -NO TE: THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -NO TE: CHECKS IF SPEEDS ARE ABOVE MAXIMUM ALLOWED +' MAIN THREAD +' THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK +' +JS #CHKSPD +JS #CHKDCEL +JS #RESLVR +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 -NO IF (_SPC>50000) AXES NOT USED, COMMENTED OUT -NO SPC=50000 -NO ENDIF -NO IF (_SPD>50000) -NO SPD=50000 -NO ENDIF +IF (_SPC>50000) +SPC=50000 +ENDIF +IF (_SPD>50000) +SPD=50000 +ENDIF IF (_SPE>30000) SPE=30000 ENDIF @@ -57,79 +187,217 @@ ENDIF IF (_SPH>30000) SPH=30000 ENDIF -NO TE: THIS FOLLOWING CODE UPDATES THE RESOLVER DATA -NO TE: AND LOADS IT INTO TPA WITH THE DEA= COMMAND +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=100000 +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=100000 +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 +' +' +'----------------------------------------------------------------------- +#HOME +IF (HOMERUN = 1) +JP #ENDHOME +ENDIF +SH EFGH +ST EFGH +MC EFGH +SP ,,,,30000,30000,30000,30000 +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRE = 0) +PRE=200000 +BGE +ENDIF +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRF = 0) +PRF=200000 +BGF +ENDIF +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRG = 0) +PRG=200000 +BGG +ENDIF +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRH = 0) +PRH=200000 +BGH +ENDIF +MC EFGH +WT 100 +' DRIVE ALL SLITS INTO REVERSE LIMIT SWITCH +JG ,,,,-25000,-25000,-25000,-25000 +BG EFGH +MC EFGH +WT 100 +' MOVE AWAY FROM SWITCHES BY 2MM AND DRIVE BACK SLOWLY +PR ,,,,40000,40000,40000,40000 +BG EFGH +MC EFGH +WT 100 +JG ,,,,-5000,-5000,-5000,-5000 +BG EFGH +MC EFGH +WT 100 +' MOVE FORWARD FROM SWITCH BY 2MM AND SET ZERO +PR ,,,,40000,40000,40000,40000 +BG EFGH +MC EFGH +WT 100 +MO EFGH +DP ,,,,0,0,0,0 +SP ,,,,30000,30000,30000,30000 +HOMERUN=1;'HOMING PROCEDURE HAS BEEN RUN +#ENDHOME +EN +' +' +'----------------------------------------------------------------------- +#RESLVR +' THIS FOLLOWING CODE UPDATES THE RESOLVER DATA +' AND LOADS IT INTO TPA WITH THE DEA= COMMAND SB1;' DRIVE INHIBIT BIT HIGH CB1;' DRIVE INHIBIT BIT LOW TO LOCK DATA -AI31;' WAIT FOR XBUSY BIT +AI31;' WAIT FOR XBUSY BIT +' IOBYTE1=_TI2;' LOAD FIRST BYTE OF DATA IOBYTE2=_TI3;' LOAD SECOND BYTE OF DATA IOBYTE2=(IOBYTE2&63);' MASK OUT XBUSY AND UNUSED BITS IOBYTE2=(IOBYTE2*256);' SHIFT REMAINING BITS 8 BITS DEA=(IOBYTE1+IOBYTE2);' ADD BYTES TOGETHER AND LOAD INTO DEA SB1;' DRIVE INHIBIT HIGH -JP#THREAD0 -EN -NO ---------------------------------------- -#TCPERR -NO TE: EMPTY ROUTINE FOR A TCP ERROR -RE -NO ---------------------------------------- -#ININT -NO TE: INTERUPT ROUTINE TO STOP ALL AXES -NO TE: WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT -STA,B,C,D,E,F,G,H -AM -MO -RI -NO ---------------------------------------- -#HOME -IF (HOMERUN = 1) -JP #ENDHOME -ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSE & 4) = 0) -SHE -PRE=200000 -BGE -ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSF & 4) = 0) -SHF -PRF=200000 -BGF -ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSG & 4) = 0) -SHG -PRG=200000 -BGG -ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSH & 4) = 0) -SHH -PRH=200000 -BGH -ENDIF -AMEFGH -NO TE: DRIVE ALL SLITS INTO REVERSE LIMIT SWITCH -SHEFGH -JG ,,,,-25000,-25000,-25000,-25000 -BGEFGH -AMEFGH -NO TE: MOVE AWAY FROM SWITCHES BY 2MM AND DRIVE BACK SLOWLY -PR ,,,,80000,80000,80000,80000 -BGEFGH -AMEFGH -JG,,,,-5000,-5000,-5000,-5000 -BGEFGH -AMEFGH -NO TE: MOVE FORWARD FROM SWITCH BY 2MM AND SET ZERO -PR ,,,,40000,40000,40000,40000 -BGEFGH -AMEFGH -DP ,,,,0,0,0,0 -SP ,,,,30000,30000,30000,30000 -HOMERUN=1;'HOMING PROCEDURE HAS BEEN RUN -#ENDHOME EN +' +' +'----------------------------------------------------------------------- diff --git a/site_ansto/instrument/hipd/DMC2280/controller4.txt b/site_ansto/instrument/hipd/DMC2280/controller4.txt index d1e2c2fa..5d648451 100644 --- a/site_ansto/instrument/hipd/DMC2280/controller4.txt +++ b/site_ansto/instrument/hipd/DMC2280/controller4.txt @@ -1,22 +1,25 @@ -NO TE: WOMBAT - CONTROLLER 4 -NO TE: -NO TE: $Revision: 1.2 $ -NO TE: $Date: 2007-01-31 03:39:19 $ -NO TE: Author: Dan Bartlett -NO TE: Limit switch HOME routine added by Ferdi Franceschini -NO TE: Last revision by: $Author: dbx $ -NO TE: -NO TE: A-SPARE -NO TE: B-SPARE -NO TE: C-SPARE -NO TE: D-SPARE -NO TE: E-SLIT 1 LEFT BLADE -NO TE: F-SLIT 1 RIGHT BLADE -NO TE: G-SLIT 1 TOP BLADE -NO TE: H-SLIT 1 BOTTOM BLADE -NO ---------------------------------------- +' WOMBAT - CONTROLLER 4 +' +' $Revision: 1.3 $ +' $Date: 2008-03-07 05:12:47 $ +' Author: Dan Bartlett +' Limit switch HOME routine added by Ferdi Franceschini +' Last revision by: $Author: dcl $ +' +' A-SPARE +' B-SPARE +' C-SPARE +' D-SPARE +' E-SLIT 1 LEFT BLADE +' F-SLIT 1 RIGHT BLADE +' G-SLIT 1 TOP BLADE +' H-SLIT 1 BOTTOM BLADE +' +' +'----------------------------------------------------------------------- #AUTO -NO TE: THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' 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 @@ -26,24 +29,150 @@ AC ,,,,60000,60000,60000,60000;' SET ACELERATION DC ,,,,60000,60000,60000,60000;' SET DECELERATION SP ,,,,30000,30000,30000,30000;' SET SPEED HOMERUN=0;' HOMING PROCEDURE HAS NOT BEEN RUN +' 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 JS #THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #THREAD0 -NO TE: THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -NO TE: CHECKS IF SPEEDS ARE ABOVE MAXIMUM ALLOWED -NO IF (_SPA>50000) AXES NOT USED, COMMENTED OUT -NO SPA=50000 -NO ENDIF -NO IF (_SPB>50000) -NO SPB=50000 -NO ENDIF -NO IF (_SPC>50000) -NO SPC=50000 -NO ENDIF -NO IF (_SPD>50000) -NO SPD=50000 -NO ENDIF +' MAIN THREAD +' THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK +' +JS #CHKSPD +JS #CHKDCEL +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>50000) +SPD=50000 +ENDIF IF (_SPE>30000) SPE=30000 ENDIF @@ -56,68 +185,200 @@ ENDIF IF (_SPH>30000) SPH=30000 ENDIF -JP#THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #TCPERR -NO TE: EMPTY ROUTINE FOR A TCP ERROR +' EMPTY ROUTINE FOR A TCP ERROR +' RE -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' +'----------------------------------------------------------------------- #ININT -NO TE: INTERUPT ROUTINE TO STOP ALL AXES -NO TE: WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' INTERUPT ROUTINE TO STOP ALL AXES +' WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' STA,B,C,D,E,F,G,H -AM -MO +HLTA=1 +HLTB=1 +HLTC=1 +HLTD=1 +HLTE=1 +HLTF=1 +HLTG=1 +HLTH=1 +JS #SETDCEL RI -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- +#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=100000 +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=100000 +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 +' +' +'----------------------------------------------------------------------- #HOME IF (HOMERUN = 1) JP #ENDHOME ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSE & 4) = 0) -SHE +SH EFGH +ST EFGH +MC EFGH +SP ,,,,30000,30000,30000,30000 +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRE = 0) PRE=200000 BGE ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSF & 4) = 0) -SHF +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRF = 0) PRF=200000 BGF ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSG & 4) = 0) -SHG +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRG = 0) PRG=200000 BGG ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSH & 4) = 0) -SHH +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRH = 0) PRH=200000 BGH ENDIF -AMEFGH -NO TE: DRIVE ALL SLITS INTO REVERSE LIMIT SWITCH -SHEFGH +MC EFGH +WT 100 +' DRIVE ALL SLITS INTO REVERSE LIMIT SWITCH JG ,,,,-25000,-25000,-25000,-25000 -BGEFGH -AMEFGH -NO TE: MOVE AWAY FROM SWITCHES BY 2MM AND DRIVE BACK SLOWLY -PR ,,,,80000,80000,80000,80000 -BGEFGH -AMEFGH -JG,,,,-5000,-5000,-5000,-5000 -BGEFGH -AMEFGH -NO TE: MOVE FORWARD FROM SWITCH BY 2MM AND SET ZERO +BG EFGH +MC EFGH +WT 100 +' MOVE AWAY FROM SWITCHES BY 2MM AND DRIVE BACK SLOWLY PR ,,,,40000,40000,40000,40000 -BGEFGH -AMEFGH +BG EFGH +MC EFGH +WT 100 +JG ,,,,-5000,-5000,-5000,-5000 +BG EFGH +MC EFGH +WT 100 +' MOVE FORWARD FROM SWITCH BY 2MM AND SET ZERO +PR ,,,,40000,40000,40000,40000 +BG EFGH +MC EFGH +WT 100 +MO EFGH DP ,,,,0,0,0,0 SP ,,,,30000,30000,30000,30000 HOMERUN=1;'HOMING PROCEDURE HAS BEEN RUN #ENDHOME -EN \ No newline at end of file +EN +' +' +'----------------------------------------------------------------------- diff --git a/site_ansto/instrument/hrpd/DMC2280/controller1.txt b/site_ansto/instrument/hrpd/DMC2280/controller1.txt index 97df60c7..be571f9a 100644 --- a/site_ansto/instrument/hrpd/DMC2280/controller1.txt +++ b/site_ansto/instrument/hrpd/DMC2280/controller1.txt @@ -1,21 +1,25 @@ -NO TE: ECHIDNA - CONTROLLER 1 -NO TE: -NO TE: $Revision: 1.6 $ -NO TE: $Date: 2007-01-31 03:38:33 $ -NO TE: Author: Dan Bartlett -NO TE: Last revision by: $Author: dbx $ -NO TE: -NO TE: A-MONOCHROMATOR UPPER TILT (mphi) - TILT 1 -NO TE: B-MONOCHROMATOR LOWER TILT (mchi) - TILT 2 -NO TE: C-MONOCHROMATOR UPPER TRANSLATION (mz:nexus, mx:KDL) - LINEAR 1 -NO TE: D-MONOCHROMATOR LOWER TRANSLATION (mx:nexus, my:KDL) - LINEAR 2 -NO TE: E-MONOCHROMATOR ROTATION (mom) -NO TE: F-FLIGHT TUBE ROTATION -NO TE: G-PRIMARY COLLIMATOR 1 -NO TE: H-PRIMARY COLLIMATOR 2 -NO ---------------------------------------- +' ECHIDNA - CONTROLLER 1 +' +' $Revision: 1.7 $ +' $Date: 2008-03-07 05:12:47 $ +' Author: Dan Bartlett +' Airpad control added by Doug Clowes +' Last revision by: $Author: dcl $ +' +' A-MONOCHROMATOR UPPER TILT (mphi) - TILT 1 +' B-MONOCHROMATOR LOWER TILT (mchi) - TILT 2 +' C-MONOCHROMATOR UPPER TRANSLATION (mz:nexus, mx:KDL) - LINEAR 1 +' D-MONOCHROMATOR LOWER TRANSLATION (mx:nexus, my:KDL) - LINEAR 2 +' E-MONOCHROMATOR ROTATION (mom) +' F-FLIGHT TUBE ROTATION +' G-PRIMARY COLLIMATOR 1 +' H-PRIMARY COLLIMATOR 2 +' +' +'----------------------------------------------------------------------- #AUTO -NO TE: THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' 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 @@ -33,13 +37,142 @@ SIE=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 SIF=1,25,25,0<-2>2;'HEIDENHAIN RCN226 SIG=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 SIH=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 -APDONE=0;' FIRST TIME THROUGH AIRPAD CONTROL NOT DONE +' FIRST TIME THROUGH RESET AIRPAD CONTROL +REQF=0 +RSPF=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 JS #THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #THREAD0 -NO TE: THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -NO TE: CHECKS IF SPEEDS ARE ABOVE MAXIMUM ALLOWED +' 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 @@ -64,88 +197,187 @@ ENDIF IF (_SPH>50000) SPH=50000 ENDIF -NO TE: CONTROLS THE AIRPAD SOLENOID VALVES -IF (_MOF=0);'FLIGHT TUBE MOTOR IS ON -SB 10;'SAMPLE STAGE AIR PAD OFF-SOLENOID OFF -SB 12;'DRIVE WHEEL UP-SOLENOID OFF -CB 9;'SAMPLE STAGE AIR PAD ON-SOLENOID ON -CB 11;'DRIVE WHEEL DOWN-SOLENOID ON -APDONE=0 -ENDIF -IF (_MOF=1)&(APDONE=0);'FLIGHT TUBE MOTOR IS OFF -SB 9;'SAMPLE STAGE AIR PAD ON-SOLENOID OFF -SB 11;'DRIVE WHEEL DOWN-SOLENOID OFF -CB 10;'SAMPLE STAGE AIR PAD OFF-SOLENOID ON -CB 12;'DRIVE WHEEL UP-SOLENOID ON -WT500;'WAIT 1/2 SEC -SB 10;'SAMPLE STAGE AIR PAD OFF-SOLENOID OFF -SB 12;'DRIVE WHEEL UP-SOLENOID OFF -APDONE=1 -ENDIF -JP #THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #TCPERR -NO TE: EMPTY ROUTINE FOR A TCP ERROR +' EMPTY ROUTINE FOR A TCP ERROR +' RE -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' +'----------------------------------------------------------------------- #ININT -NO TE: INTERUPT ROUTINE TO STOP ALL AXES -NO TE: WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' INTERUPT ROUTINE TO STOP ALL AXES +' WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' STA,B,C,D,E,F,G,H -AM -MO +HLTA=1 +HLTB=1 +HLTC=1 +HLTD=1 +HLTE=1 +HLTF=1 +HLTG=1 +HLTH=1 +JS #SETDCEL RI -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #LIMSWI -NO TE: LIMIT SWITCH ROUTINE WHICH SHORTENS DECEL TIME WHEN A LIMIT IS HIT -OLDDCA=_DCA;' REMEMBERS CURRENT DECEL -OLDDCB=_DCB -OLDDCC=_DCC -OLDDCD=_DCD -OLDDCE=_DCE -OLDDCF=_DCF -OLDDCG=_DCG -OLDDCH=_DCH -IF (_LFA = 0) | (_LRA = 0) -DCA=100000;' DECEL FOR LIMIT HIT OCCURENCE +'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 -IF (_LFB = 0) | (_LRB = 0) -DCB=100000;' DECEL FOR LIMIT HIT OCCURENCE +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 -IF (_LFC = 0) | (_LRC = 0) -DCC=100000;' DECEL FOR LIMIT HIT OCCURENCE +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 -IF (_LFD = 0) | (_LRD = 0) -DCD=100000;' DECEL FOR LIMIT HIT OCCURENCE +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 -IF (_LFE = 0) | (_LRE = 0) -DCE=100000;' DECEL FOR LIMIT HIT OCCURENCE +ENDIF +ENDIF +' +IF (_BGE=1) +IF (((_SCE=2)&(_LFE=0))|((_SCE=3)&(_LRE=0))|(HLTE=1)) STE +IF (LSEHIT=0) +OLDDCE=_DCE +DCE=100000 +LSEHIT=1 ENDIF -IF (_LFF = 0) | (_LRF = 0) -DCF=50000;' DECEL FOR LIMIT HIT OCCURENCE +ENDIF +ENDIF +' +IF (_BGF=1) +IF (((_SCF=2)&(_LFF=0))|((_SCF=3)&(_LRF=0))|(HLTF=1)) STF +IF (LSFHIT=0) +OLDDCF=_DCF +DCF=50000 +LSFHIT=1 ENDIF -IF (_LFG = 0) | (_LRG = 0) -DCG=100000;' DECEL FOR LIMIT HIT OCCURENCE +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 -IF (_LFH = 0) | (_LRH = 0) -DCH=100000;' DECEL FOR LIMIT HIT OCCURENCE +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 -AM ABCDEFGH;' AFTER ALL AXES STOPPED -DCA=OLDDCA;' RESET DECEL TO OLD VALUE -DCB=OLDDCB -DCC=OLDDCC -DCD=OLDDCD -DCE=OLDDCE -DCF=OLDDCF -DCG=OLDDCG -DCH=OLDDCH -RE \ No newline at end of file +ENDIF +ENDIF +' +EN +' +' +'----------------------------------------------------------------------- +#AIRPAD +' ROUTINE TO CONTROL THE AIRPADS +' SET REQF=1 TO MAKE FLIGHT TUBE AVAILABLE FOR MOVE +' THE RSPF BIT IS USED SO THAT THE CODE ONLY RUNS WHEN THE +' STATE OF FTUBE CHANGES - THE DELAYS ARENT RUNNING EVERY CYCLE +' IN THE 2ND IF, THE OFF-SOLENOIDS ARENT HELD ENERGISED IN CASE THE +' VALVE MANUAL OVER RIDE IS NEEDED. +' +' FOLLOW SHF/MOF COMMANDS ENTERED MANUALLY +IF (_MOF=0)&(RSPF=0);'FLIGHT TUBE MOTOR IS ON BUT AIR IS OFF +REQF=1 +ENDIF +IF (_MOF=1)&(RSPF=1);'FLIGHT TUBE 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 FLIGHT TUBE BE MOVABLE +SHF;' TURN MOTOR ON +WT500;' WAIT FOR MOTOR TO STABILISE +SB 12;' DRIVE WHEEL UP-SOLENOID OFF +CB 11;' DRIVE WHEEL DOWN-SOLENOID ON +WT1000;' WAIT FOR DRIVE WHEEL TO LOWER +SB 10;' AIR PAD OFF-SOLENOID OFF +CB 9;' AIR PAD ON-SOLENOID ON +WT1000; +RSPF=1 +ENDIF +IF (REQF=0)&(RSPF=1);'FLIGHT TUBE MOTION FINISHED +WT1000;' WAIT FOR FLIGHT TUBE TO SETTLE +SB 9;' AIR PAD ON-SOLENOID OFF +CB 10;' AIR PAD OFF-SOLENOID ON +WT500; +SB 10;' AIR PAD OFF-SOLENOID OFF +SB 11;' DRIVE WHEEL DOWN-SOLENOID OFF +CB 12;' DRIVE WHEEL UP-SOLENOID ON +WT500;' WAIT 1/2 SEC +SB 12;' DRIVE WHEEL UP-SOLENOID OFF +MOF;' TURN MOTOR OFF +RSPF=0 +ENDIF +EN +' +' +'----------------------------------------------------------------------- diff --git a/site_ansto/instrument/hrpd/DMC2280/controller2.txt b/site_ansto/instrument/hrpd/DMC2280/controller2.txt index a16344f6..d5db83bb 100644 --- a/site_ansto/instrument/hrpd/DMC2280/controller2.txt +++ b/site_ansto/instrument/hrpd/DMC2280/controller2.txt @@ -1,21 +1,25 @@ -NO TE: ECHIDNA - CONTROLLER 2 -NO TE: -NO TE: $Revision: 1.4 $ -NO TE: $Date: 2007-01-31 03:38:33 $ -NO TE: Author: Dan Bartlett -NO TE: Last revision by: $Author: dbx $ -NO TE: -NO TE: A-SAMPLE UPPER TILT (sphi) - TILT 1 -NO TE: B-SAMPLE LOWER TILT (schi) - TILT 2 -NO TE: C-SAMPLE UPPER TRANSLATION (sz:nexus, sx:KDL) - LINEAR 1 -NO TE: D-SAMPLE LOWER TRANSLATION (sx:nexus, sy:KDL) - LINEAR 2 -NO TE: E-SAMPLE ROTATION (som) -NO TE: F-DETECTOR ROTATION -NO TE: G-SPARE -NO TE: H-SPARE -NO ---------------------------------------- +' ECHIDNA - CONTROLLER 2 +' +' $Revision: 1.5 $ +' $Date: 2008-03-07 05:12:47 $ +' Author: Dan Bartlett +' Airpad control added by Doug Clowes +' Last revision by: $Author: dcl $ +' +' A-SAMPLE UPPER TILT (sphi) - TILT 1 +' B-SAMPLE LOWER TILT (schi) - TILT 2 +' C-SAMPLE UPPER TRANSLATION (sz:nexus, sx:KDL) - LINEAR 1 +' D-SAMPLE LOWER TRANSLATION (sx:nexus, sy:KDL) - LINEAR 2 +' E-SAMPLE ROTATION (som) +' F-DETECTOR ROTATION +' G-SPARE +' H-SPARE +' +' +'----------------------------------------------------------------------- #AUTO -NO TE: THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' 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 @@ -33,13 +37,142 @@ SIE=1,25,13,0<-2>2;'HEIDENHAIN ROQ425 SIF=1,25,25,0<-2>2;'HEIDENHAIN RCN226 SIG=0,25,13,0<-2>2;'NOT USED SIH=0,25,13,0<-2>2;'NOT USED -APDONE=0;' FIRST TIME THROUGH AIRPAD CONTROL NOT DONE +' FIRST TIME THROUGH RESET AIRPAD CONTROL +REQF=0 +RSPF=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 JS #THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #THREAD0 -NO TE: THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -NO TE: CHECKS IF SPEEDS ARE ABOVE MAXIMUM ALLOWED +' 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 @@ -58,89 +191,186 @@ ENDIF IF (_SPF>150000) SPF=150000 ENDIF -NO IF (_SPG>50000) AXES NOT IN USE, COMMENTED OUT -NO SPG=50000 -NO ENDIF -NO IF (_SPH>50000) -NO SPH=50000 -NO ENDIF -NO TE: CONTROLS THE AIRPAD SOLENOID VALVES -IF (_MOF=0);'DETECTOR MOTOR IS ON -SB 10;'DETECTOR AIR PAD OFF-SOLENOID OFF -CB 9;'DETECTOR AIR PAD ON-SOLENOID ON -APDONE=0 +IF (_SPG>50000) +SPG=50000 ENDIF -IF (_MOF=1)&(APDONE=0);'DETECTOR MOTOR IS OFF -SB 9;'DETECTOR AIR PAD ON-SOLENOID OFF -CB 10;'DETECTOR AIR PAD OFF-SOLENOID ON -WT500;'WAIT 1/2 SEC -SB 10;'DETECTOR AIR PAD OFF-SOLENOID OFF -APDONE=1 +IF (_SPH>50000) +SPH=50000 ENDIF -JP #THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #TCPERR -NO TE: EMPTY ROUTINE FOR A TCP ERROR +' EMPTY ROUTINE FOR A TCP ERROR +' RE -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' +'----------------------------------------------------------------------- #ININT -NO TE: INTERUPT ROUTINE TO STOP ALL AXES -NO TE: WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' INTERUPT ROUTINE TO STOP ALL AXES +' WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' STA,B,C,D,E,F,G,H -AM -MO +HLTA=1 +HLTB=1 +HLTC=1 +HLTD=1 +HLTE=1 +HLTF=1 +HLTG=1 +HLTH=1 +JS #SETDCEL RI -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #LIMSWI -NO TE: LIMIT SWITCH ROUTINE WHICH SHORTENS DECEL TIME WHEN A LIMIT IS HIT -OLDDCA=_DCA;' REMEMBERS CURRENT DECEL -OLDDCB=_DCB -OLDDCC=_DCC -OLDDCD=_DCD -OLDDCE=_DCE -OLDDCF=_DCF -OLDDCG=_DCG -OLDDCH=_DCH -IF (_LFA = 0) | (_LRA = 0) -DCA=100000;' DECEL FOR LIMIT HIT OCCURENCE +'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 -IF (_LFB = 0) | (_LRB = 0) -DCB=100000;' DECEL FOR LIMIT HIT OCCURENCE +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 -IF (_LFC = 0) | (_LRC = 0) -DCC=100000;' DECEL FOR LIMIT HIT OCCURENCE +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 -IF (_LFD = 0) | (_LRD = 0) -DCD=100000;' DECEL FOR LIMIT HIT OCCURENCE +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 -IF (_LFE = 0) | (_LRE = 0) -DCE=100000;' DECEL FOR LIMIT HIT OCCURENCE +ENDIF +ENDIF +' +IF (_BGE=1) +IF (((_SCE=2)&(_LFE=0))|((_SCE=3)&(_LRE=0))|(HLTE=1)) STE +IF (LSEHIT=0) +OLDDCE=_DCE +DCE=100000 +LSEHIT=1 ENDIF -IF (_LFF = 0) | (_LRF = 0) -DCF=50000;' DECEL FOR LIMIT HIT OCCURENCE +ENDIF +ENDIF +' +IF (_BGF=1) +IF (((_SCF=2)&(_LFF=0))|((_SCF=3)&(_LRF=0))|(HLTF=1)) STF +IF (LSFHIT=0) +OLDDCF=_DCF +DCF=50000 +LSFHIT=1 ENDIF -NO IF (_LFG = 0) | (_LRG = 0) AXES NOT IN USE, COMMENTED OUT -NO DCG=100000;' DECEL FOR LIMIT HIT OCCURENCE -NO STG -NO ENDIF -NO IF (_LFH = 0) | (_LRH = 0) -NO DCH=100000;' DECEL FOR LIMIT HIT OCCURENCE -NO STH -NO ENDIF -AM ABCDEFGH;' AFTER ALL AXES STOPPED -DCA=OLDDCA;' RESET DECEL TO OLD VALUE -DCB=OLDDCB -DCC=OLDDCC -DCD=OLDDCD -DCE=OLDDCE -DCF=OLDDCF -NO DCG=OLDDCG AXIS NOT IN USE, COMMENTED OUT -NO DCH=OLDDCH AXIS NOT IN USE, COMMENTED OUT -RE \ No newline at end of file +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 AIRPADS +' SET REQF=1 TO MAKE FLIGHT TUBE AVAILABLE FOR MOVE +' THE RSPF BIT IS USED SO THAT THE CODE ONLY RUNS WHEN THE +' STATE OF FTUBE CHANGES - THE DELAYS ARENT RUNNING EVERY CYCLE +' IN THE 2ND IF, THE OFF-SOLENOIDS ARENT HELD ENERGISED IN CASE THE +' VALVE MANUAL OVER RIDE IS NEEDED. +' +' FOLLOW SHF/MOF COMMANDS ENTERED MANUALLY +IF (_MOF=0)&(RSPF=0);'FLIGHT TUBE MOTOR IS ON BUT AIR IS OFF +REQF=1 +ENDIF +IF (_MOF=1)&(RSPF=1);'FLIGHT TUBE 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 FLIGHT TUBE BE MOVABLE +SHF;' TURN MOTOR ON +WT500;' WAIT FOR MOTOR TO STABILISE +SB 10;' AIR PAD OFF-SOLENOID OFF +CB 9;' AIR PAD ON-SOLENOID ON +WT1000; +RSPF=1 +ENDIF +IF (REQF=0)&(RSPF=1);'FLIGHT TUBE MOTION FINISHED +WT1000;' WAIT FOR FLIGHT TUBE TO SETTLE +SB 9;' AIR PAD ON-SOLENOID OFF +CB 10;' AIR PAD OFF-SOLENOID ON +WT500; +SB 10;' AIR PAD OFF-SOLENOID OFF +MOF;' TURN MOTOR OFF +RSPF=0 +ENDIF +EN +' +' +'----------------------------------------------------------------------- diff --git a/site_ansto/instrument/hrpd/DMC2280/controller3.txt b/site_ansto/instrument/hrpd/DMC2280/controller3.txt index 8eed61c0..d2781c4c 100644 --- a/site_ansto/instrument/hrpd/DMC2280/controller3.txt +++ b/site_ansto/instrument/hrpd/DMC2280/controller3.txt @@ -1,22 +1,25 @@ -NO TE: ECHIDNA - CONTROLLER 3 -NO TE: -NO TE: $Revision: 1.7 $ -NO TE: $Date: 2007-01-31 03:38:33 $ -NO TE: Author: Dan Bartlett -NO TE: Limit switch HOME routine added by Ferdi Franceschini -NO TE: Last revision by: $Author: dbx $ -NO TE: -NO TE: A-MONOCHROMATOR FOCUS -NO TE: B-SPARE -NO TE: C-SPARE -NO TE: D-SPARE -NO TE: E-SLIT 1 LEFT BLADE (ss1l) -NO TE: F-SLIT 1 RIGHT BLADE (ss1r) -NO TE: G-SLIT 1 TOP BLADE (ss1u) -NO TE: H-SLIT 1 BOTTOM BLADE (ss1d) -NO ---------------------------------------- +' ECHIDNA - CONTROLLER 3 +' +' $Revision: 1.8 $ +' $Date: 2008-03-07 05:12:47 $ +' Author: Dan Bartlett +' Limit switch HOME routine added by Ferdi Franceschini +' Last revision by: $Author: dcl $ +' +' A-MONOCHROMATOR FOCUS +' B-SPARE +' C-SPARE +' D-SPARE +' E-SLIT 1 LEFT BLADE (ss1l) +' F-SLIT 1 RIGHT BLADE (ss1r) +' G-SLIT 1 TOP BLADE (ss1u) +' H-SLIT 1 BOTTOM BLADE (ss1d) +' +' +'----------------------------------------------------------------------- #AUTO -NO TE: THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' 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 @@ -26,24 +29,151 @@ AC 12500,,,,60000,60000,60000,60000;' SET ACELERATION DC 12500,,,,60000,60000,60000,60000;' SET DECELERATION SP 25000,,,,30000,30000,30000,30000;' SET SPEED HOMERUN=0;' HOMING PROCEDURE HAS NOT BEEN RUN +' 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 JS #THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #THREAD0 -NO TE: THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -NO TE: CHECKS IF SPEEDS ARE ABOVE MAXIMUM ALLOWED +' MAIN THREAD +' THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK +' +JS #CHKSPD +JS #CHKDCEL +JS #RESLVR +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>25000) SPA=25000 ENDIF -NO IF (_SPB>50000) AXES NOT IN USE, COMMENTED OUT -NO SPB=50000 -NO ENDIF -NO IF (_SPC>50000) -NO SPC=50000 -NO ENDIF -NO IF (_SPD>50000) -NO SPD=50000 -NO ENDIF +IF (_SPB>50000) +SPB=50000 +ENDIF +IF (_SPC>50000) +SPC=50000 +ENDIF +IF (_SPD>50000) +SPD=50000 +ENDIF IF (_SPE>30000) SPE=30000 ENDIF @@ -56,12 +186,206 @@ ENDIF IF (_SPH>30000) SPH=30000 ENDIF -JP#THREAD0 EN -NO ---------------------------------------- -#RES -NO TE: PROCEDURE TO UPDATE THE RESOLVER FEEDBACK. -NO TE: MUST BE EXCUTED EACH TIME FOR AN UPDATE +' +' +'----------------------------------------------------------------------- +#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=100000 +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=100000 +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 +' +' +'----------------------------------------------------------------------- +#HOME +IF (HOMERUN = 1) +JP #ENDHOME +ENDIF +SH EFGH +ST EFGH +MC EFGH +SP ,,,,30000,30000,30000,30000 +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRE = 0) +PRE=200000 +BGE +ENDIF +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRF = 0) +PRF=200000 +BGF +ENDIF +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRG = 0) +PRG=200000 +BGG +ENDIF +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRH = 0) +PRH=200000 +BGH +ENDIF +MC EFGH +WT 100 +' DRIVE ALL SLITS INTO REVERSE LIMIT SWITCH +JG ,,,,-25000,-25000,-25000,-25000 +BG EFGH +MC EFGH +WT 100 +' MOVE AWAY FROM SWITCHES BY 2MM AND DRIVE BACK SLOWLY +PR ,,,,40000,40000,40000,40000 +BG EFGH +MC EFGH +WT 100 +JG ,,,,-5000,-5000,-5000,-5000 +BG EFGH +MC EFGH +WT 100 +' MOVE FORWARD FROM SWITCH BY 2MM AND SET ZERO +PR ,,,,40000,40000,40000,40000 +BG EFGH +MC EFGH +WT 100 +MO EFGH +DP ,,,,0,0,0,0 +SP ,,,,30000,30000,30000,30000 +HOMERUN=1;'HOMING PROCEDURE HAS BEEN RUN +#ENDHOME +EN +' +' +'----------------------------------------------------------------------- +#RESLVR +' PROCEDURE TO UPDATE THE RESOLVER FEEDBACK. +' MUST BE EXCUTED EACH TIME FOR AN UPDATE SB1 CB1;' OUTPUT WITH FALLING EDGE TO TRIGGER EMPIRE RESOLVER BOX AI31;' LOCK DATA @@ -72,66 +396,6 @@ IOBYTE2=(IOBYTE2*256);' SHIFT REMAINING BITS 8 POSITIONS TO RIGHT FOCUS=(IOBYTE1+IOBYTE2);' ADD WORDS TOGETHER, READ FOCUS VARIABLE FOR DATA SB1 EN -NO ---------------------------------------- -#TCPERR -NO TE: EMPTY ROUTINE FOR A TCP ERROR -RE -NO ---------------------------------------- -#ININT -NO TE: INTERUPT ROUTINE TO STOP ALL AXES -NO TE: WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT -STA,B,C,D,E,F,G,H -AM -MO -RI -NO ---------------------------------------- -#HOME -IF (HOMERUN = 1) -JP #ENDHOME -ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSE & 4) = 0) -SHE -PRE=200000 -BGE -ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSF & 4) = 0) -SHF -PRF=200000 -BGF -ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSG & 4) = 0) -SHG -PRG=200000 -BGG -ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSH & 4) = 0) -SHH -PRH=200000 -BGH -ENDIF -AMEFGH -NO TE: DRIVE ALL SLITS INTO REVERSE LIMIT SWITCH -SHEFGH -JG ,,,,-25000,-25000,-25000,-25000 -BGEFGH -AMEFGH -NO TE: MOVE AWAY FROM SWITCHES BY 2MM AND DRIVE BACK SLOWLY -PR ,,,,80000,80000,80000,80000 -BGEFGH -AMEFGH -JG,,,,-5000,-5000,-5000,-5000 -BGEFGH -AMEFGH -NO TE: MOVE FORWARD FROM SWITCH BY 2MM AND SET ZERO -PR ,,,,40000,40000,40000,40000 -BGEFGH -AMEFGH -DP ,,,,0,0,0,0 -SP ,,,,30000,30000,30000,30000 -HOMERUN=1;'HOMING PROCEDURE HAS BEEN RUN -#ENDHOME -EN \ No newline at end of file +' +' +'----------------------------------------------------------------------- diff --git a/site_ansto/instrument/hrpd/DMC2280/controller4.txt b/site_ansto/instrument/hrpd/DMC2280/controller4.txt index b7a6f86b..c2a299bb 100644 --- a/site_ansto/instrument/hrpd/DMC2280/controller4.txt +++ b/site_ansto/instrument/hrpd/DMC2280/controller4.txt @@ -1,22 +1,25 @@ -NO TE: ECHIDNA - CONTROLLER 4 -NO TE: -NO TE: $Revision: 1.8 $ -NO TE: $Date: 2007-01-31 03:38:33 $ -NO TE: Author: Dan Bartlett -NO TE: Limit switch HOME routine added by Ferdi Franceschini -NO TE: Last revision by: $Author: dbx $ -NO TE: -NO TE: A-SPARE -NO TE: B-SPARE -NO TE: C-SPARE -NO TE: D-SPARE -NO TE: E-SLIT 1 LEFT BLADE (ss1l) -NO TE: F-SLIT 1 RIGHT BLADE (ss1r) -NO TE: G-SLIT 1 TOP BLADE (ss1u) -NO TE: H-SLIT 1 BOTTOM BLADE (ss1d) -NO ---------------------------------------- +' ECHIDNA - CONTROLLER 4 +' +' $Revision: 1.9 $ +' $Date: 2008-03-07 05:12:47 $ +' Author: Dan Bartlett +' Limit switch HOME routine added by Ferdi Franceschini +' Last revision by: $Author: dcl $ +' +' A-SPARE +' B-SPARE +' C-SPARE +' D-SPARE +' E-SLIT 1 LEFT BLADE (ss1l) +' F-SLIT 1 RIGHT BLADE (ss1r) +' G-SLIT 1 TOP BLADE (ss1u) +' H-SLIT 1 BOTTOM BLADE (ss1d) +' +' +'----------------------------------------------------------------------- #AUTO -NO TE: THIS IS THE PROGRAM THAT RUNS AUTOMATICALLY ON CONTROLLER STARTUP +' 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 @@ -26,24 +29,150 @@ AC ,,,,60000,60000,60000,60000;' SET ACELERATION DC ,,,,60000,60000,60000,60000;' SET DECELERATION SP ,,,,30000,30000,30000,30000;' SET SPEED HOMERUN=0;' HOMING PROCEDURE HAS NOT BEEN RUN +' 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 JS #THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #THREAD0 -NO TE: THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK -NO TE: CHECKS IF SPEEDS ARE ABOVE MAXIMUM ALLOWED -NO IF (_SPA>25000) AXES NOT IN USE, COMMENTED OUT -NO SPA=25000 -NO ENDIF -NO IF (_SPB>50000) -NO SPB=50000 -NO ENDIF -NO IF (_SPC>50000) -NO SPC=50000 -NO ENDIF -NO IF (_SPD>50000) -NO SPD=50000 -NO ENDIF +' MAIN THREAD +' THERE MUST BE A THREAD RUNNING FOR #LIMSWI, #TCPERR AND #ININT TO WORK +' +JS #CHKSPD +JS #CHKDCEL +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>50000) +SPD=50000 +ENDIF IF (_SPE>30000) SPE=30000 ENDIF @@ -56,68 +185,200 @@ ENDIF IF (_SPH>30000) SPH=30000 ENDIF -JP#THREAD0 EN -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- #TCPERR -NO TE: EMPTY ROUTINE FOR A TCP ERROR +' EMPTY ROUTINE FOR A TCP ERROR +' RE -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- +#CMDERR +'ROUTINE TO HANDLE COMMAND ERRORS +' +ZS0 +EN1 +' +' +'----------------------------------------------------------------------- #ININT -NO TE: INTERUPT ROUTINE TO STOP ALL AXES -NO TE: WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' INTERUPT ROUTINE TO STOP ALL AXES +' WHEN SAFETY & INTERLOCK SYSTEM REQUESTS IT +' STA,B,C,D,E,F,G,H -AM -MO +HLTA=1 +HLTB=1 +HLTC=1 +HLTD=1 +HLTE=1 +HLTF=1 +HLTG=1 +HLTH=1 +JS #SETDCEL RI -NO ---------------------------------------- +' +' +'----------------------------------------------------------------------- +#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=100000 +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=100000 +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 +' +' +'----------------------------------------------------------------------- #HOME IF (HOMERUN = 1) JP #ENDHOME ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSE & 4) = 0) -SHE +SH EFGH +ST EFGH +MC EFGH +SP ,,,,30000,30000,30000,30000 +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRE = 0) PRE=200000 BGE ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSF & 4) = 0) -SHF +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRF = 0) PRF=200000 BGF ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSG & 4) = 0) -SHG +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRG = 0) PRG=200000 BGG ENDIF -NO TE: MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH -IF ((_TSH & 4) = 0) -SHH +' MOVE SLIT FORWARD 10MM IF IT IS AGAINST THE REVERSE LIMIT SWITCH +IF (_LRH = 0) PRH=200000 BGH ENDIF -AMEFGH -NO TE: DRIVE ALL SLITS INTO REVERSE LIMIT SWITCH -SHEFGH +MC EFGH +WT 100 +' DRIVE ALL SLITS INTO REVERSE LIMIT SWITCH JG ,,,,-25000,-25000,-25000,-25000 -BGEFGH -AMEFGH -NO TE: MOVE AWAY FROM SWITCHES BY 2MM AND DRIVE BACK SLOWLY -PR ,,,,80000,80000,80000,80000 -BGEFGH -AMEFGH -JG,,,,-5000,-5000,-5000,-5000 -BGEFGH -AMEFGH -NO TE: MOVE FORWARD FROM SWITCH BY 2MM AND SET ZERO +BG EFGH +MC EFGH +WT 100 +' MOVE AWAY FROM SWITCHES BY 2MM AND DRIVE BACK SLOWLY PR ,,,,40000,40000,40000,40000 -BGEFGH -AMEFGH +BG EFGH +MC EFGH +WT 100 +JG ,,,,-5000,-5000,-5000,-5000 +BG EFGH +MC EFGH +WT 100 +' MOVE FORWARD FROM SWITCH BY 2MM AND SET ZERO +PR ,,,,40000,40000,40000,40000 +BG EFGH +MC EFGH +WT 100 +MO EFGH DP ,,,,0,0,0,0 SP ,,,,30000,30000,30000,30000 -HOMERUN=1 +HOMERUN=1;'HOMING PROCEDURE HAS BEEN RUN #ENDHOME -EN \ No newline at end of file +EN +' +' +'-----------------------------------------------------------------------