diff --git a/6040-003上下料 V2.1.project b/6040-003上下料 V2.1.project index 6adff5a..9c4e3cc 100644 Binary files a/6040-003上下料 V2.1.project and b/6040-003上下料 V2.1.project differ diff --git a/KUKA/Connections.xml b/KUKA/Connections.xml new file mode 100644 index 0000000..3f588d3 --- /dev/null +++ b/KUKA/Connections.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/KUKA/KRC/R1/KUKA/CollDetect_UserAction.dat b/KUKA/KRC/R1/KUKA/CollDetect_UserAction.dat new file mode 100644 index 0000000..c32e56d --- /dev/null +++ b/KUKA/KRC/R1/KUKA/CollDetect_UserAction.dat @@ -0,0 +1,5 @@ +&ACCESS R1 +DEFDAT CollDetect_UserAction + + +ENDDAT diff --git a/KUKA/KRC/R1/KUKA/CollDetect_UserAction.src b/KUKA/KRC/R1/KUKA/CollDetect_UserAction.src new file mode 100644 index 0000000..b0a5633 --- /dev/null +++ b/KUKA/KRC/R1/KUKA/CollDetect_UserAction.src @@ -0,0 +1,5 @@ +&ACCESS R1 +DEF CollDetect_UserAction( ) + + +END diff --git a/KUKA/KRC/R1/KUKA/masref_user.dat b/KUKA/KRC/R1/KUKA/masref_user.dat new file mode 100644 index 0000000..b2a7b8c --- /dev/null +++ b/KUKA/KRC/R1/KUKA/masref_user.dat @@ -0,0 +1,25 @@ +&ACCESS RV +&REL 1 +&COMMENT Mastering Reference User Program +&PARAM DISKPATH = KRC:\R1\Program +DEFDAT MasRef_User PUBLIC +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P + EXT BAS (BAS_COMMAND :IN,REAL :IN ) +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make here your modifications + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +;FOLD reference groups +; order of master reference group number in array is of no relevance, but group "1" is required +; "0" means no master reference test +; "1" means group number for robot axes and robroot kinematic axes +; "2", "3" means group number of external kinematic axes +DECL GLOBAL CONST INT MASREFg_GroupSequence[3] ; contains reference groups to test +MASREFg_GroupSequence[1]=1 +MASREFg_GroupSequence[2]=0 +MASREFg_GroupSequence[3]=0 +;ENDFOLD (reference groups) +ENDDAT diff --git a/KUKA/KRC/R1/KUKA/masref_user.src b/KUKA/KRC/R1/KUKA/masref_user.src new file mode 100644 index 0000000..06a315a --- /dev/null +++ b/KUKA/KRC/R1/KUKA/masref_user.src @@ -0,0 +1,42 @@ +&ACCESS RV +&REL 1 +&COMMENT Mastering Reference User Program +&PARAM DISKPATH = KRC:\R1\Program +DEF MasRef_USER() +END + +GLOBAL DEF MASREFSTARTG1() +;FOLD Teach path and position for reference group 1 +;ENDFOLD + +END + +GLOBAL DEF MASREFBACKG1() +;FOLD Teach path back for reference group 1 +;ENDFOLD + +END + +GLOBAL DEF MASREFSTARTG2() +;FOLD Teach path and position for reference group 2 +;ENDFOLD + +END + +GLOBAL DEF MASREFBACKG2() +;FOLD Teach path back for reference group 2 +;ENDFOLD + +END + +GLOBAL DEF MASREFSTARTG3() +;FOLD Teach path and position for reference group 3 +;ENDFOLD + +END + +GLOBAL DEF MASREFBACKG3() +;FOLD Teach path back for reference group 3 +;ENDFOLD + +END diff --git a/KUKA/KRC/R1/Mada/$machine.dat b/KUKA/KRC/R1/Mada/$machine.dat new file mode 100644 index 0000000..cbbbcba --- /dev/null +++ b/KUKA/KRC/R1/Mada/$machine.dat @@ -0,0 +1,642 @@ +&ACCESS RV$ +&PARAM VERSION = 1.0.0 +DEFDAT $MACHINE PUBLIC +CHAR $V_R1MADA[32] +$V_R1MADA[]="V42.601.8.1/KUKA8.7" ;VERSIONSKENNUNG +INT $TECH_MAX=6 ;MAX. ANZAHL FUNKTIONSGENERATOREN +INT $NUM_AX=6 ;ACHSEN DES ROBOTERSYSTEMS +INT $AXIS_TYPE[12] ;ACHSENKENNUNG +$AXIS_TYPE[1]=3 ;1 = LINEAR, 3 = ROTATORISCH, 5 = ENDLOS +$AXIS_TYPE[2]=3 +$AXIS_TYPE[3]=3 +$AXIS_TYPE[4]=3 +$AXIS_TYPE[5]=3 +$AXIS_TYPE[6]=3 +$AXIS_TYPE[7]=3 +$AXIS_TYPE[8]=3 +$AXIS_TYPE[9]=3 +$AXIS_TYPE[10]=3 +$AXIS_TYPE[11]=3 +$AXIS_TYPE[12]=3 +DECL FRA $COUP_COMP[6,6] ;ACHSKOPPLUNGSFAKTOR N = ZAEHLER, D = NENNER +$COUP_COMP[1,2]={N 0,D 1} +$COUP_COMP[1,3]={N 0,D 1} +$COUP_COMP[1,4]={N 0,D 1} +$COUP_COMP[1,5]={N 0,D 1} +$COUP_COMP[1,6]={N 0,D 1} +$COUP_COMP[2,1]={N 0,D 1} +$COUP_COMP[2,3]={N 0,D 1} +$COUP_COMP[2,4]={N 0,D 1} +$COUP_COMP[2,5]={N 0,D 1} +$COUP_COMP[2,6]={N 0,D 1} +$COUP_COMP[3,1]={N 0,D 1} +$COUP_COMP[3,2]={N 0,D 1} +$COUP_COMP[3,4]={N 0,D 1} +$COUP_COMP[3,5]={N 0,D 1} +$COUP_COMP[3,6]={N 0,D 1} +$COUP_COMP[4,1]={N 0,D 1} +$COUP_COMP[4,2]={N 0,D 1} +$COUP_COMP[4,3]={N 0,D 1} +$COUP_COMP[4,5]={N -161,D 12580} +$COUP_COMP[4,6]={N -172,D 22917} +$COUP_COMP[5,1]={N 0,D 1} +$COUP_COMP[5,2]={N 0,D 1} +$COUP_COMP[5,3]={N 0,D 1} +$COUP_COMP[5,4]={N 0,D 1} +$COUP_COMP[5,6]={N -188,D 21461} +$COUP_COMP[6,1]={N 0,D 1} +$COUP_COMP[6,2]={N 0,D 1} +$COUP_COMP[6,3]={N 0,D 1} +$COUP_COMP[6,4]={N 0,D 1} +$COUP_COMP[6,5]={N 0,D 1} +DECL FRA $EXCOUP_COMP[6,6] ;KOPPLUNGSFAKTOREN ACHSE 7 (INDEX 1) BIS ACHSE 12 (INDEX 6), N = ZAEHLER, D =NENNER +$EXCOUP_COMP[1,2]={N 0,D 1} +$EXCOUP_COMP[1,3]={N 0,D 1} +$EXCOUP_COMP[1,4]={N 0,D 1} +$EXCOUP_COMP[1,5]={N 0,D 1} +$EXCOUP_COMP[1,6]={N 0,D 1} +$EXCOUP_COMP[2,1]={N 0,D 1} +$EXCOUP_COMP[2,3]={N 0,D 1} +$EXCOUP_COMP[2,4]={N 0,D 1} +$EXCOUP_COMP[2,5]={N 0,D 1} +$EXCOUP_COMP[2,6]={N 0,D 1} +$EXCOUP_COMP[3,1]={N 0,D 1} +$EXCOUP_COMP[3,2]={N 0,D 1} +$EXCOUP_COMP[3,4]={N 0,D 1} +$EXCOUP_COMP[3,5]={N 0,D 1} +$EXCOUP_COMP[3,6]={N 0,D 1} +$EXCOUP_COMP[4,1]={N 0,D 1} +$EXCOUP_COMP[4,2]={N 0,D 1} +$EXCOUP_COMP[4,3]={N 0,D 1} +$EXCOUP_COMP[4,5]={N 0,D 1} +$EXCOUP_COMP[4,6]={N 0,D 1} +$EXCOUP_COMP[5,1]={N 0,D 1} +$EXCOUP_COMP[5,2]={N 0,D 1} +$EXCOUP_COMP[5,3]={N 0,D 1} +$EXCOUP_COMP[5,4]={N 0,D 1} +$EXCOUP_COMP[5,6]={N 0,D 1} +$EXCOUP_COMP[6,1]={N 0,D 1} +$EXCOUP_COMP[6,2]={N 0,D 1} +$EXCOUP_COMP[6,3]={N 0,D 1} +$EXCOUP_COMP[6,4]={N 0,D 1} +$EXCOUP_COMP[6,5]={N 0,D 1} +REAL $MAMES[12] ;VERSCHIEBUNG ZW. MECH. UND MATH. NULLPUNKT ACHSE[I] (I=1:A1,I=7:E1) [MM,GRAD] +$MAMES[1]=-25.0000 +$MAMES[2]=-100.000 +$MAMES[3]=100.000 +$MAMES[4]=0.0 +$MAMES[5]=0.0 +$MAMES[6]=0.0 +$MAMES[7]=0.0 +$MAMES[8]=0.0 +$MAMES[9]=0.0 +$MAMES[10]=0.0 +$MAMES[11]=0.0 +$MAMES[12]=0.0 +DECL INDIVIDUAL_MAMES $INDIVIDUAL_MAMES=#RDC ; Existenz individueller MAMES-Werte +FRAME $ROBROOT={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ROBOTER IM WELTKOORDINATENSYSTEM [MM,GRAD] +FRAME $ERSYSROOT={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ROBOTERFUSSPUNKTKINEMATIK IM WELTKOORDINATENSYSTEM [MM,GRAD] +DECL FRA $RAT_MOT_AX[12] ;UEBERSETZUNG MOTOR-ACHSE N = ZAEHLER, D = NENNER +$RAT_MOT_AX[1]={N -1798,D 7} +$RAT_MOT_AX[2]={N -4576,D 17} +$RAT_MOT_AX[3]={N 754,D 3} +$RAT_MOT_AX[4]={N -10387,D 55} +$RAT_MOT_AX[5]={N -91834,D 483} +$RAT_MOT_AX[6]={N 6485103,D 49400} +$RAT_MOT_AX[7]={N 0,D 1} +$RAT_MOT_AX[8]={N 0,D 1} +$RAT_MOT_AX[9]={N 0,D 1} +$RAT_MOT_AX[10]={N 0,D 1} +$RAT_MOT_AX[11]={N 0,D 1} +$RAT_MOT_AX[12]={N 0,D 1} +REAL $VEL_AXIS_MA[12] ;NENNDREHZAHL DES MOTORS ACHSE[I] (I=1:A1,I=7:E1) [U/MIN] +$VEL_AXIS_MA[1]=4999.99 +$VEL_AXIS_MA[2]=4999.99 +$VEL_AXIS_MA[3]=4999.99 +$VEL_AXIS_MA[4]=5980.39 +$VEL_AXIS_MA[5]=5703.97 +$VEL_AXIS_MA[6]=5688.68 +$VEL_AXIS_MA[7]=0.0 +$VEL_AXIS_MA[8]=0.0 +$VEL_AXIS_MA[9]=0.0 +$VEL_AXIS_MA[10]=0.0 +$VEL_AXIS_MA[11]=0.0 +$VEL_AXIS_MA[12]=0.0 +INT $VEL_CPT1_MA[12] +$VEL_CPT1_MA[1]=29 +$VEL_CPT1_MA[2]=29 +$VEL_CPT1_MA[3]=29 +$VEL_CPT1_MA[4]=29 +$VEL_CPT1_MA[5]=29 +$VEL_CPT1_MA[6]=29 +$VEL_CPT1_MA[7]=29 +$VEL_CPT1_MA[8]=29 +$VEL_CPT1_MA[9]=29 +$VEL_CPT1_MA[10]=29 +$VEL_CPT1_MA[11]=29 +$VEL_CPT1_MA[12]=29 +INT $VEL_MOT_MON[12] ;achsweise Ueberwachungsgrenzen der Geschwindigkeit +$VEL_MOT_MON[1]=136 +$VEL_MOT_MON[2]=136 +$VEL_MOT_MON[3]=136 +$VEL_MOT_MON[4]=136 +$VEL_MOT_MON[5]=136 +$VEL_MOT_MON[6]=136 +$VEL_MOT_MON[7]=136 +$VEL_MOT_MON[8]=136 +$VEL_MOT_MON[9]=136 +$VEL_MOT_MON[10]=136 +$VEL_MOT_MON[11]=136 +$VEL_MOT_MON[12]=136 +INT $RED_VEL_AXC[12] ;REDUZIERFAKTOR FUER AXIALE GESCHWINDIGKEIT BEI ACHSSPEZ. HANDVERFAHREN UND KOMMANDOBETRIEB (PTP) ACHSE[I] (I=1:A1,I=7:E1) [%] +$RED_VEL_AXC[1]=13 +$RED_VEL_AXC[2]=12 +$RED_VEL_AXC[3]=11 +$RED_VEL_AXC[4]=9 +$RED_VEL_AXC[5]=10 +$RED_VEL_AXC[6]=5 +$RED_VEL_AXC[7]=0 +$RED_VEL_AXC[8]=0 +$RED_VEL_AXC[9]=0 +$RED_VEL_AXC[10]=0 +$RED_VEL_AXC[11]=0 +$RED_VEL_AXC[12]=0 +INT $RED_ACC_AXC[12] ;REDUZIERFAKTOR FUER AXIALE BESCHLEUNIGUNG BEI ACHSSPEZ. HANDVERFAHREN UND KOMMANDOBETRIEB (PTP) ACHSE[I] (I=1:A1,I=7:E1) [%] +$RED_ACC_AXC[1]=15 +$RED_ACC_AXC[2]=15 +$RED_ACC_AXC[3]=15 +$RED_ACC_AXC[4]=15 +$RED_ACC_AXC[5]=15 +$RED_ACC_AXC[6]=15 +$RED_ACC_AXC[7]=0 +$RED_ACC_AXC[8]=0 +$RED_ACC_AXC[9]=0 +$RED_ACC_AXC[10]=0 +$RED_ACC_AXC[11]=0 +$RED_ACC_AXC[12]=0 +INT $RED_ACC_DYN=100 +REAL $RED_VEL_CPC=6.67000 ;REDUZIERFAKTOR FUER BAHN-UND ORIENTIERUNGSGESCHWINDIGKEIT BEI KARTESISCHEM HANDVERFAHREN UND KOMMANDOBETRIEB [CP] [%] +REAL $RED_ACC_CPC=8.00000 ;REDUZIERFAKTOR FUER BAHN-UND ORIENTIERUNGSBESCHLEUNIGUNGEN BEI KARTESISCHEM HANDVERFAHREN UND KOMMANDOBETRIEB [CP] [%] +REAL $VEL_CP_T1=0.229000 ;BAHNGESCHWINDIGKEIT IN T1 [M/S] MAX: 0.25 +REAL $SPEED_LIMIT_TEACH_MODE=0.229000 ;REDUZIERUNG DER TCP- UND FLANSCHGESCHWINDIGKEIT IN [M/S] MAX: 0.25 +REAL $RED_JUS_UEB=100.000 ;REDUZIERFAKTOR FUER UEBERNAHMEFAHRT [%] +INT $RED_ACC_OV[12] ;AXIALE REDUZIERUNG DER BESCHLEUNIGUNG FUER OVERRIDE ACHSE[I] (I=1:A1,I=7:E1) [%] +$RED_ACC_OV[1]=100 +$RED_ACC_OV[2]=100 +$RED_ACC_OV[3]=100 +$RED_ACC_OV[4]=100 +$RED_ACC_OV[5]=100 +$RED_ACC_OV[6]=100 +$RED_ACC_OV[7]=0 +$RED_ACC_OV[8]=0 +$RED_ACC_OV[9]=0 +$RED_ACC_OV[10]=0 +$RED_ACC_OV[11]=0 +$RED_ACC_OV[12]=0 +FRAME $ACC_CAR_TOOL={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;FRAME (ACCORDING TO FLANGE) FOR CARTESIAN ACCELERATION MONITORING +DECL ACC_CAR $ACC_CAR_LIMIT={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,ABS 0.0} ;LIMITS FOR THE CARTESIAN ACCELERATION $ACC_CAR_ACT +BOOL $ACC_CAR_STOP=FALSE ;ENABLE (TRUE) OR DISABLE (FALSE) CARTESIAN ACCELERATION MONITORING +INT $RED_ACC_EMX[12] ;REDUZIERFAKTOR FUER BAHNTREUE NOT-AUS-RAMPE [ % ] +$RED_ACC_EMX[1]=165 +$RED_ACC_EMX[2]=280 +$RED_ACC_EMX[3]=200 +$RED_ACC_EMX[4]=250 +$RED_ACC_EMX[5]=250 +$RED_ACC_EMX[6]=250 +$RED_ACC_EMX[7]=0 +$RED_ACC_EMX[8]=0 +$RED_ACC_EMX[9]=0 +$RED_ACC_EMX[10]=0 +$RED_ACC_EMX[11]=0 +$RED_ACC_EMX[12]=0 +INT $RED_VEL_ECO_LEVEL[12] ; Reduzierfaktor der Achse [I] fuer Geschwindigkeit im EcoLevel (I=1: A1,I=7: E1) [%] +$RED_VEL_ECO_LEVEL[1]=100 +$RED_VEL_ECO_LEVEL[2]=100 +$RED_VEL_ECO_LEVEL[3]=100 +$RED_VEL_ECO_LEVEL[4]=100 +$RED_VEL_ECO_LEVEL[5]=100 +$RED_VEL_ECO_LEVEL[6]=100 +$RED_VEL_ECO_LEVEL[7]=100 +$RED_VEL_ECO_LEVEL[8]=100 +$RED_VEL_ECO_LEVEL[9]=100 +$RED_VEL_ECO_LEVEL[10]=100 +$RED_VEL_ECO_LEVEL[11]=100 +$RED_VEL_ECO_LEVEL[12]=100 +INT $RED_ACC_ECO_LEVEL[12] ; Reduzierfaktor der Achse [I] fuer Beschleunigung im EcoLevel (I=1: A1,I=7: E1) [%] +$RED_ACC_ECO_LEVEL[1]=100 +$RED_ACC_ECO_LEVEL[2]=100 +$RED_ACC_ECO_LEVEL[3]=100 +$RED_ACC_ECO_LEVEL[4]=100 +$RED_ACC_ECO_LEVEL[5]=100 +$RED_ACC_ECO_LEVEL[6]=100 +$RED_ACC_ECO_LEVEL[7]=100 +$RED_ACC_ECO_LEVEL[8]=100 +$RED_ACC_ECO_LEVEL[9]=100 +$RED_ACC_ECO_LEVEL[10]=100 +$RED_ACC_ECO_LEVEL[11]=100 +$RED_ACC_ECO_LEVEL[12]=100 +BOOL $WARMUP_RED_VEL=FALSE ;WARMFAHR-FUNKTIONALITAET EINGESCHALTET +REAL $WARMUP_TIME=30.0000 ;[MIN] +REAL $COOLDOWN_TIME=360.000 ;NACH DIESER ZEIT IM STILLSTAND [MIN] WIRD DER ROBOTER ALS KALT BETRACHTET +INT $WARMUP_CURR_LIMIT=99 ;[%] DES MAXIMAL STROM +INT $WARMUP_MIN_FAC=60 ;[%] +REAL $WARMUP_SLEW_RATE=5.00000 ;[%/sec] +REAL $ST_TOL_VEL[12] ;GESCHWINDIGKEITSTOLERANZ FUER STILLSTANDSERKENNUNG ACHSE[I] (I=1:A1,I=7:E1) [U_MOT/MIN] +$ST_TOL_VEL[1]=15.0000 +$ST_TOL_VEL[2]=15.0000 +$ST_TOL_VEL[3]=15.0000 +$ST_TOL_VEL[4]=15.0000 +$ST_TOL_VEL[5]=15.0000 +$ST_TOL_VEL[6]=15.0000 +$ST_TOL_VEL[7]=15.0000 +$ST_TOL_VEL[8]=15.0000 +$ST_TOL_VEL[9]=15.0000 +$ST_TOL_VEL[10]=15.0000 +$ST_TOL_VEL[11]=15.0000 +$ST_TOL_VEL[12]=15.0000 +INT $ST_TOL_TIME=200 ;ERKENNUNGSZEIT [MS] +REAL $VEL_AX_JUS[12] ;GESCHWINDIGKEIT BEI EMT-JUSTAGE ACHSE[I] (I=1:A1,I=7:E1) [GRAD/SEC] +$VEL_AX_JUS[1]=0.0520870 +$VEL_AX_JUS[2]=0.0563930 +$VEL_AX_JUS[3]=0.0757880 +$VEL_AX_JUS[4]=0.169510 +$VEL_AX_JUS[5]=0.572960 +$VEL_AX_JUS[6]=0.203180 +$VEL_AX_JUS[7]=0.0 +$VEL_AX_JUS[8]=0.0 +$VEL_AX_JUS[9]=0.0 +$VEL_AX_JUS[10]=0.0 +$VEL_AX_JUS[11]=0.0 +$VEL_AX_JUS[12]=0.0 +REAL $L_EMT_MAX[12] ;LAENGE JUSTAGE-WEG EMT ACHSE[I] (I=1:A1,I=7:E1) [GRAD] +$L_EMT_MAX[1]=1.60000 +$L_EMT_MAX[2]=1.76000 +$L_EMT_MAX[3]=2.40000 +$L_EMT_MAX[4]=4.32000 +$L_EMT_MAX[5]=11.0000 +$L_EMT_MAX[6]=4.80000 +$L_EMT_MAX[7]=0.0 +$L_EMT_MAX[8]=0.0 +$L_EMT_MAX[9]=0.0 +$L_EMT_MAX[10]=0.0 +$L_EMT_MAX[11]=0.0 +$L_EMT_MAX[12]=0.0 +REAL $TC_SYM=0.100000 ;ZEITKONST. SYMMETRIERFILTER +INT $TM_CON_VEL=0 ;MINIMALE KONSTANTFAHRPHASE [MS] +REAL $APO_DIS_PTP[12] ;MAXIMALER UEBERSCHLEIFWEG PTP ACHSE[I] (I=1:A1,I=7:E1) [MM,GRAD] +$APO_DIS_PTP[1]=90.0000 +$APO_DIS_PTP[2]=90.0000 +$APO_DIS_PTP[3]=90.0000 +$APO_DIS_PTP[4]=90.0000 +$APO_DIS_PTP[5]=90.0000 +$APO_DIS_PTP[6]=90.0000 +$APO_DIS_PTP[7]=0.0 +$APO_DIS_PTP[8]=0.0 +$APO_DIS_PTP[9]=0.0 +$APO_DIS_PTP[10]=0.0 +$APO_DIS_PTP[11]=0.0 +$APO_DIS_PTP[12]=0.0 +DECL CP $ACC_MA={CP 10.0000,ORI1 1000.00,ORI2 1000.00} ;CP = MAX. BAHNBESCHLEUNIGUNG [M/SEC2], ORI1 = MAX. SCHWENKBESCHLEUNIGUNG [GRAD/SEC2], ORI2 = MAX. DREHBESCHLEUNIGUNG [GRAD/SEC2] +DECL JERK_STRUC $JERK_MA={CP 500.000,ORI 50000.0,AX {A1 1000.00,A2 1000.00,A3 1000.00,A4 1000.00,A5 1000.00,A6 1000.00,E1 1000.00,E2 1000.00,E3 1000.00,E4 1000.00,E5 1000.00,E6 1000.00}} ;Maximaler Ruck CP: [m/s^3], ORI: [deg/^3], AX: [deg/s^3] (rotatorisch) bzw. [m/s^3] (linear) +DECL CP $VEL_MA={CP 3.00000,ORI1 400.000,ORI2 400.000} ;CP = MAX. BAHNGESCHWINDIGKEIT [M/SEC], ORI1 = MAX. SCHWENKGESCHWINDIGKEIT [GRAD/SEC], ORI2 = MAX. DREHGESCHWINDIGKEIT [GRAD/SEC] +DECL CP $ACC_OV={CP 4.60000,ORI1 200.000,ORI2 200.000} ;CP = BAHNBESCHL. BEI OV.-AEND. [M/SEC2], ORI1 = SCHWENKBESCHL. BEI OV.-AEND. [GRAD/SEC2], ORI2 = DREHBESCHL. BEI OV.-AEND. [GRAD/SEC2] +INT $RED_T1=7 ;REDUKTIONSFAKTOR T1 [%] MAX: 15% +INT $DEF_FLT_PTP=204 ;DEFAULTFILTER PTP +INT $DEF_FLT_CP=144 ;DEFAULTFILTER CP +INT $DEF_OV_JOG=10 ;VORBESETZUNG FUER OVERRIDE +INT $SEQ_CAL[12] ;REFERIER-REIHENFOLGE DER ACHSEN SCHRITT[I] +$SEQ_CAL[1]='B0001' +$SEQ_CAL[2]='B0010' +$SEQ_CAL[3]='B0100' +$SEQ_CAL[4]='B1000' +$SEQ_CAL[5]='B00010000' +$SEQ_CAL[6]='B00100000' +$SEQ_CAL[7]='B01000000' +$SEQ_CAL[8]='B10000000' +$SEQ_CAL[9]='B000100000000' +$SEQ_CAL[10]='B001000000000' +$SEQ_CAL[11]='B010000000000' +$SEQ_CAL[12]='B100000000000' +INT $DIR_CAL='B000111111111' ;REFERIER-RICHTUNG +INT $RECOVERY_MASTERING_AXES='B0000' ;Achsen die Recovery Justage unterstuetzen +INT $RED_CAL_SD=0 ;REDUKTIONSFAKTOR NACH ERREICHEN DES NOCKENS [%] +INT $RED_CAL_SF=0 ;REDUKTIONSFAKTOR VOR ERREICHEN DES NOCKENS [%] +INT $BRK_DEL=20000 ;BREMSVERZOEGERUNGSZEIT [MS] +BOOL $GEARTORQ_MON=TRUE ;GETRIEBEMOMENTENUEBERWACHUNG EIN/AUS +INT $ACC_ACT_MA=250 ;GRENZWERT SOLLBESCHLEUNIGUNG [%] +INT $VEL_ACT_MA=110 ;GRENZWERT SOLLGESCHWINDIGKEIT [%] +INT $ILLEGAL_SPEED=200 ; GRENZWERT GESCHWINDIGKEIT VOR FILTER [%] +BOOL $MONITOR_ILLEGAL_SPEED=TRUE ; GESCHWINDIGKEITSUEBERWACHUNG VOR FILTER +REAL $IN_POS_CAR=0.100000 ;KARTESISCHES POSITIONIERFENSTER (TRANSLATIONSSTEIL) [MM] +REAL $IN_POS_ORI=0.100000 ;KARTESISCHES POSITIONIERFENSTER (ORIENTIERUNGSTEIL) [DEG] +REAL $IN_POS_MA[12] ;POSITIONIERFENSTER ACHSE[I] (I=1:A1,I=7:E1) [MM,GRAD] +$IN_POS_MA[1]=0.100000 +$IN_POS_MA[2]=0.100000 +$IN_POS_MA[3]=0.100000 +$IN_POS_MA[4]=0.100000 +$IN_POS_MA[5]=0.100000 +$IN_POS_MA[6]=0.100000 +$IN_POS_MA[7]=0.0 +$IN_POS_MA[8]=0.0 +$IN_POS_MA[9]=0.0 +$IN_POS_MA[10]=0.0 +$IN_POS_MA[11]=0.0 +$IN_POS_MA[12]=0.0 +INT $TIME_POS[12] ;POSITIONIERZEIT ACHSE[I] (I=1:A1,I=7:E1) +$TIME_POS[1]=512 +$TIME_POS[2]=512 +$TIME_POS[3]=512 +$TIME_POS[4]=512 +$TIME_POS[5]=512 +$TIME_POS[6]=512 +$TIME_POS[7]=512 +$TIME_POS[8]=512 +$TIME_POS[9]=512 +$TIME_POS[10]=512 +$TIME_POS[11]=512 +$TIME_POS[12]=512 +INT $IN_STILL_MA=4 ;FAKTOR FUER STILLSTANDSFENSTER +INT $VEL_ENC_CO=50 ;DREHZAHLSOLLWERTSCHWELLE FUER GEBERUEBERWACHUNG [WANDLERINKR.] +REAL $COM_VAL_MI[12] ;SOLLDREHZAHLBEGRENZUNG ACHSE[I] (I=1:A1,I=7:E1) [%] +$COM_VAL_MI[1]=150.000 +$COM_VAL_MI[2]=150.000 +$COM_VAL_MI[3]=150.000 +$COM_VAL_MI[4]=150.000 +$COM_VAL_MI[5]=150.000 +$COM_VAL_MI[6]=150.000 +$COM_VAL_MI[7]=150.000 +$COM_VAL_MI[8]=150.000 +$COM_VAL_MI[9]=150.000 +$COM_VAL_MI[10]=150.000 +$COM_VAL_MI[11]=150.000 +$COM_VAL_MI[12]=150.000 +INT $TL_COM_VAL=50 ;TOLERANZZEIT SOLLDREHZAHLBEGRENZUNG [MS] +REAL $SOFTN_END[12] ;SOFTWARE-ENDSCHALTER NEGATIV ACHSE[I] (I=1:A1,I=7:E1) [MM,GRAD] +$SOFTN_END[1]=-185.000 +$SOFTN_END[2]=-140.000 +$SOFTN_END[3]=-120.000 +$SOFTN_END[4]=-350.000 +$SOFTN_END[5]=-125.000 +$SOFTN_END[6]=-350.000 +$SOFTN_END[7]=0.0 +$SOFTN_END[8]=0.0 +$SOFTN_END[9]=0.0 +$SOFTN_END[10]=0.0 +$SOFTN_END[11]=0.0 +$SOFTN_END[12]=0.0 +REAL $SOFTP_END[12] ;SOFTWARE-ENDSCHALTER POSITIV ACHSE[I] (I=1:A1,I=7:E1) [MM,GRAD] +$SOFTP_END[1]=185.000 +$SOFTP_END[2]=-5.00000 +$SOFTP_END[3]=168.000 +$SOFTP_END[4]=350.000 +$SOFTP_END[5]=125.000 +$SOFTP_END[6]=350.000 +$SOFTP_END[7]=0.0 +$SOFTP_END[8]=0.0 +$SOFTP_END[9]=0.0 +$SOFTP_END[10]=0.0 +$SOFTP_END[11]=0.0 +$SOFTP_END[12]=0.0 +DECL AXBOX $AXWORKSPACE[8] ;ACHSSPEZ. ARBEITSRAEUME +$AXWORKSPACE[1]={A1_N 0.0,A1_P 0.0,A2_N 0.0,A2_P 0.0,A3_N 0.0,A3_P 0.0,A4_N 0.0,A4_P 0.0,A5_N 0.0,A5_P 0.0,A6_N 0.0,A6_P 0.0,E1_N 0.0,E1_P 0.0,E2_N 0.0,E2_P 0.0,E3_N 0.0,E3_P 0.0,E4_N 0.0,E4_P 0.0,E5_N 0.0,E5_P 0.0,E6_N 0.0,E6_P 0.0,MODE #OFF,STATE FALSE} +$AXWORKSPACE[2]={A1_N 0.0,A1_P 0.0,A2_N 0.0,A2_P 0.0,A3_N 0.0,A3_P 0.0,A4_N 0.0,A4_P 0.0,A5_N 0.0,A5_P 0.0,A6_N 0.0,A6_P 0.0,E1_N 0.0,E1_P 0.0,E2_N 0.0,E2_P 0.0,E3_N 0.0,E3_P 0.0,E4_N 0.0,E4_P 0.0,E5_N 0.0,E5_P 0.0,E6_N 0.0,E6_P 0.0,MODE #OFF,STATE FALSE} +$AXWORKSPACE[3]={A1_N 0.0,A1_P 0.0,A2_N 0.0,A2_P 0.0,A3_N 0.0,A3_P 0.0,A4_N 0.0,A4_P 0.0,A5_N 0.0,A5_P 0.0,A6_N 0.0,A6_P 0.0,E1_N 0.0,E1_P 0.0,E2_N 0.0,E2_P 0.0,E3_N 0.0,E3_P 0.0,E4_N 0.0,E4_P 0.0,E5_N 0.0,E5_P 0.0,E6_N 0.0,E6_P 0.0,MODE #OFF,STATE FALSE} +$AXWORKSPACE[4]={A1_N 0.0,A1_P 0.0,A2_N 0.0,A2_P 0.0,A3_N 0.0,A3_P 0.0,A4_N 0.0,A4_P 0.0,A5_N 0.0,A5_P 0.0,A6_N 0.0,A6_P 0.0,E1_N 0.0,E1_P 0.0,E2_N 0.0,E2_P 0.0,E3_N 0.0,E3_P 0.0,E4_N 0.0,E4_P 0.0,E5_N 0.0,E5_P 0.0,E6_N 0.0,E6_P 0.0,MODE #OFF,STATE FALSE} +$AXWORKSPACE[5]={A1_N 0.0,A1_P 0.0,A2_N 0.0,A2_P 0.0,A3_N 0.0,A3_P 0.0,A4_N 0.0,A4_P 0.0,A5_N 0.0,A5_P 0.0,A6_N 0.0,A6_P 0.0,E1_N 0.0,E1_P 0.0,E2_N 0.0,E2_P 0.0,E3_N 0.0,E3_P 0.0,E4_N 0.0,E4_P 0.0,E5_N 0.0,E5_P 0.0,E6_N 0.0,E6_P 0.0,MODE #OFF,STATE FALSE} +$AXWORKSPACE[6]={A1_N 0.0,A1_P 0.0,A2_N 0.0,A2_P 0.0,A3_N 0.0,A3_P 0.0,A4_N 0.0,A4_P 0.0,A5_N 0.0,A5_P 0.0,A6_N 0.0,A6_P 0.0,E1_N 0.0,E1_P 0.0,E2_N 0.0,E2_P 0.0,E3_N 0.0,E3_P 0.0,E4_N 0.0,E4_P 0.0,E5_N 0.0,E5_P 0.0,E6_N 0.0,E6_P 0.0,MODE #OFF,STATE FALSE} +$AXWORKSPACE[7]={A1_N 0.0,A1_P 0.0,A2_N 0.0,A2_P 0.0,A3_N 0.0,A3_P 0.0,A4_N 0.0,A4_P 0.0,A5_N 0.0,A5_P 0.0,A6_N 0.0,A6_P 0.0,E1_N 0.0,E1_P 0.0,E2_N 0.0,E2_P 0.0,E3_N 0.0,E3_P 0.0,E4_N 0.0,E4_P 0.0,E5_N 0.0,E5_P 0.0,E6_N 0.0,E6_P 0.0,MODE #OFF,STATE FALSE} +$AXWORKSPACE[8]={A1_N 0.0,A1_P 0.0,A2_N 0.0,A2_P 0.0,A3_N 0.0,A3_P 0.0,A4_N 0.0,A4_P 0.0,A5_N 0.0,A5_P 0.0,A6_N 0.0,A6_P 0.0,E1_N 0.0,E1_P 0.0,E2_N 0.0,E2_P 0.0,E3_N 0.0,E3_P 0.0,E4_N 0.0,E4_P 0.0,E5_N 0.0,E5_P 0.0,E6_N 0.0,E6_P 0.0,MODE #OFF,STATE FALSE} +CHAR $AXWORKSPACE_NAME1[24] +$AXWORKSPACE_NAME1[]="AXWORKSPACE_NAME 1" +CHAR $AXWORKSPACE_NAME2[24] +$AXWORKSPACE_NAME2[]="AXWORKSPACE_NAME 2" +CHAR $AXWORKSPACE_NAME3[24] +$AXWORKSPACE_NAME3[]="AXWORKSPACE_NAME 3" +CHAR $AXWORKSPACE_NAME4[24] +$AXWORKSPACE_NAME4[]="AXWORKSPACE_NAME 4" +CHAR $AXWORKSPACE_NAME5[24] +$AXWORKSPACE_NAME5[]="AXWORKSPACE_NAME 5" +CHAR $AXWORKSPACE_NAME6[24] +$AXWORKSPACE_NAME6[]="AXWORKSPACE_NAME 6" +CHAR $AXWORKSPACE_NAME7[24] +$AXWORKSPACE_NAME7[]="AXWORKSPACE_NAME 7" +CHAR $AXWORKSPACE_NAME8[24] +$AXWORKSPACE_NAME8[]="AXWORKSPACE_NAME 8" +DECL CYLINDER $CYLWORKSPACE[8] ;ZYLINDRISCHE KARTESISCHE ARBEITSRAEUME +$CYLWORKSPACE[1]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,Z1 0.0,Z2 0.0,R 0.0,MODE #OFF,REFERENCE #WORLD,STATE FALSE} +$CYLWORKSPACE[2]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,Z1 0.0,Z2 0.0,R 0.0,MODE #OFF,REFERENCE #WORLD,STATE FALSE} +$CYLWORKSPACE[3]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,Z1 0.0,Z2 0.0,R 0.0,MODE #OFF,REFERENCE #WORLD,STATE FALSE} +$CYLWORKSPACE[4]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,Z1 0.0,Z2 0.0,R 0.0,MODE #OFF,REFERENCE #WORLD,STATE FALSE} +$CYLWORKSPACE[5]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,Z1 0.0,Z2 0.0,R 0.0,MODE #OFF,REFERENCE #WORLD,STATE FALSE} +$CYLWORKSPACE[6]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,Z1 0.0,Z2 0.0,R 0.0,MODE #OFF,REFERENCE #WORLD,STATE FALSE} +$CYLWORKSPACE[7]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,Z1 0.0,Z2 0.0,R 0.0,MODE #OFF,REFERENCE #WORLD,STATE FALSE} +$CYLWORKSPACE[8]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,Z1 0.0,Z2 0.0,R 0.0,MODE #OFF,REFERENCE #WORLD,STATE FALSE} +CHAR $CYLWORKSPACE_NAME1[24] +$CYLWORKSPACE_NAME1[]="CYLWORKSPACE_NAME 1" +CHAR $CYLWORKSPACE_NAME2[24] +$CYLWORKSPACE_NAME2[]="CYLWORKSPACE_NAME 2" +CHAR $CYLWORKSPACE_NAME3[24] +$CYLWORKSPACE_NAME3[]="CYLWORKSPACE_NAME 3" +CHAR $CYLWORKSPACE_NAME4[24] +$CYLWORKSPACE_NAME4[]="CYLWORKSPACE_NAME 4" +CHAR $CYLWORKSPACE_NAME5[24] +$CYLWORKSPACE_NAME5[]="CYLWORKSPACE_NAME 5" +CHAR $CYLWORKSPACE_NAME6[24] +$CYLWORKSPACE_NAME6[]="CYLWORKSPACE_NAME 6" +CHAR $CYLWORKSPACE_NAME7[24] +$CYLWORKSPACE_NAME7[]="CYLWORKSPACE_NAME 7" +CHAR $CYLWORKSPACE_NAME8[24] +$CYLWORKSPACE_NAME8[]="CYLWORKSPACE_NAME 8" +DECL DELTA_WORKSPACE $DELTA_WORKSPACE={Z1 0.0,Z2 0.0,Z3 0.0,R1 0.0,R2 0.0,MODE #OFF} ;KARTESISCHER ARBEITSRAUM FUER DELTA-ROBOTER +INT $BRK_MAX_TM=0 ;MAX. BREMSZEIT [MS] +INT $EMSTOP_TIME=100 ;ZEITUEBERWACHUNG FUER NOT_STOP [MS] +INT $ACT_VAL_DIF=0 ;GEBERISTWERTDIFFERENZ [INKR] +CHAR $TRAFONAME[32] ;NAME DER KOORDINATENTRANSFORMATION +$TRAFONAME[]="#KR120R3100_2 C4 FLR" ;MAXIMAL 32 ZEICHEN +DECL SUPPLY_VOLTAGE $SUPPLY_VOLTAGE=#SV380 ; NETZSPANNUNG [#SV120, #SV200, #SV230, #SV380 ;#SV400; #SV440; #SV480]; Netzspannung in [V] +DECL KINCLASS $KINCLASS=#STANDARD ;KINEMATIKKLASSEN (STANDARD,SPECIAL,TEST,NONE,DELTA_KIN) +INT $SIMULATED_AXIS='B0000' ;Simulation von Roboterachsen +INT $SIMULATED_COOP_ROBOTS='B0000' ;Simulierte Roboter im Roboteam-Verbund +INT $ACTIVE_AXIS_MASK='B00111111' ;Aktive Verfahrtasten, achsspez. +INT $ACTIVE_KAR_MASK='B00111111' ;Aktive Verfahrtasten, kartesisch +INT $TRAFO_AXIS=6 ;ANZAHL DER TRANSFORMIERTEN ACHSEN +DECL MAIN_AXIS $MAIN_AXIS=#NR ;GRUNDACHSENKENNUNG (SS = PORTAL, CC = SCARA, NR = GELENKROBOTER) +DECL WRIST_AXIS $WRIST_AXIS=#ZEH ;HANDACHSENKENNUNG (NOH = KEINE HAND, ZEH = ZENTRALHAND, SRH = SCHRAEGHAND DSH = DOPPELSCHRAEGHAND, WIH = WINKELHAND, WSH = WINKELSCHRAEGHAND +INT $A4PAR=0 ;0=ACHSE 4 NICHT PARALLEL, 1=ACHSE 4 PARALLEL ZUR LETZEN ROTATORISCHEN GRUNDACHSE, 2=SONDERKINEMATIK: ACHSE 4 IMMER PARALLEL ZUR Z-IRO ACHSE +BOOL $DEF_A4FIX=FALSE ;ACHSE 4 FIXIERT +BOOL $DEF_A5LINK=FALSE ;4-ACHS-PALETTIERER ( A4=0 GRAD; A5 WIRD UEBER PARALLELOGRAMM GEFUEHRT ) +INT $SPINDLE=0 ;SPINDELN (0 = NEIN, 1 = JA) +INT $AXIS_SEQ[6] ;UMORDNUNG VON ACHSE[I] (I=1:A1,I=7:E1) +$AXIS_SEQ[1]=1 +$AXIS_SEQ[2]=2 +$AXIS_SEQ[3]=3 +$AXIS_SEQ[4]=4 +$AXIS_SEQ[5]=5 +$AXIS_SEQ[6]=6 +INT $AXIS_DIR[12] ;DREHRICHTUNG DER ACHSE[I] (I=1:A1,I=7:E1) +$AXIS_DIR[1]=-1 +$AXIS_DIR[2]=1 +$AXIS_DIR[3]=1 +$AXIS_DIR[4]=-1 +$AXIS_DIR[5]=-1 +$AXIS_DIR[6]=-1 +$AXIS_DIR[7]=0 +$AXIS_DIR[8]=0 +$AXIS_DIR[9]=0 +$AXIS_DIR[10]=0 +$AXIS_DIR[11]=0 +$AXIS_DIR[12]=0 +REAL $INC_AXIS[6] ;SCHRITTMASS ACHSSPEZIFISCH +$INC_AXIS[1]=0.00500000 +$INC_AXIS[2]=0.000500000 +$INC_AXIS[3]=0.000500000 +$INC_AXIS[4]=0.00200000 +$INC_AXIS[5]=0.00200000 +$INC_AXIS[6]=0.00200000 +REAL $INC_EXTAX[6] ;SCHRITTMASS ACHSSPEZIFISCH EXTERNE ACHSEN +$INC_EXTAX[1]=10.0000 +$INC_EXTAX[2]=10.0000 +$INC_EXTAX[3]=10.0000 +$INC_EXTAX[4]=10.0000 +$INC_EXTAX[5]=10.0000 +$INC_EXTAX[6]=10.0000 +REAL $INC_CAR[6] ;SCHRITTMASS KARTESISCH WERKZEUGBEZOGEN +$INC_CAR[1]=50.0000 +$INC_CAR[2]=50.0000 +$INC_CAR[3]=50.0000 +$INC_CAR[4]=50.0000 +$INC_CAR[5]=50.0000 +$INC_CAR[6]=50.0000 +INT $POS_SWB[3] ;S-SCHALTBAR +$POS_SWB[1]=0 ;S-SCHALTBAR; UEBERKOPF (O = NEIN, 1 = JA) +$POS_SWB[2]=0 ;S-SCHALTBAR; ACHSE 2-3 (0 = NEIN, 1 = JA) +$POS_SWB[3]=0 ;S-SCHALTBAR; ACHSE 5 (0 = NEIN, 1 = JA) +INT $SINGUL_POS[3] ;BEHANDLUNG UNDEFINIERTER GELENKSTELLUNGEN BEI VORGABE EINES SINGULAEREN PTP-PUNKTES +$SINGUL_POS[1]=0 ;BEHANDLUNG EINER UNDEFINIERTER GELENKSTELLUNG (0 = THETA=0, 1 = THETA=THETA ALT) +$SINGUL_POS[2]=0 ;BEHANDLUNG EINER UNDEFINIERTER GELENKSTELLUNG (0 = THETA=0, 1 = THETA=THETA ALT) +$SINGUL_POS[3]=0 ;BEHANDLUNG EINER UNDEFINIERTER GELENKSTELLUNG (0 = THETA=0, 1 = THETA=THETA ALT) +REAL $DIS_WRP1=1635.00 ;MITTLERER ABSTAND HANDPUNKT ZUR SINGULARITAET 1 +REAL $DIS_WRP2=0.0 ;MITTLERER ABSTAND HANDPUNKT ZUR SINGULARITAET 2 +INT $ORI_CHECK=0 ;ORIENTIERUNGSPRUEFUNG AN CP-ENDPUNKTEN (NUR BEIM 5 ACHSER) +FRAME $TIRORO={X 0.0,Y 0.0,Z 645.000,A 0.0,B 0.0,C 0.0} ;FRAME ZWISCHEN INTERNEN ROBOTERKOORDINATENSYSTEM UND ROBOTERKOORDINATENSYSTEM +FRAME $TFLWP={X 0.0,Y 0.0,Z 215.000,A 0.0,B 0.0,C 0.0} ;FRAME ZWISCHEN FLANSCH- UND HANDPUNKTKOORDINATENSYSTEM +FRAME $TX3P3={X 1420.00,Y 0.0,Z 115.000,A 0.0,B 90.0000,C 0.0} ;ANBRINGUNG DER ROBOTERHAND +REAL $LENGTH_A=330.000 ;GRUNDACHSLAENGE A +REAL $LENGTH_B=1350.00 ;GRUNDACHSLAENGE B +DECL DHART $DH_4={DHART_A 0.0,DHART_D 0.0,DHART_ALPHA 90.0000} ;A = LAENGE A, D = LAENGE D, ALPHA = WINKEL ALPHA +DECL DHART $DH_5={DHART_A 0.0,DHART_D 0.0,DHART_ALPHA -90.0000} ;A = LAENGE A, D = LAENGE D, ALPHA = WINKEL ALPHA +DECL SPIN $SPIN_A={SPIN_AXIS 0,SPIN_RAD_G 0.0,SPIN_RAD_H 0.0,SPIN_SG 0,SPIN_BETA 0.0} ;AXIS = ACHSE,AUF DIE DIE SPINDEL WIRKT, RAD_G = RADIUS G, RAD_H = RADIUS H SG = VORZEICHEN, BETA = WINKELVERSATZ +DECL SPIN $SPIN_B={SPIN_AXIS 0,SPIN_RAD_G 0.0,SPIN_RAD_H 0.0,SPIN_SG 0,SPIN_BETA 0.0} +DECL SPIN $SPIN_C={SPIN_AXIS 0,SPIN_RAD_G 0.0,SPIN_RAD_H 0.0,SPIN_SG 0,SPIN_BETA 0.0} +DECL TRPSPIN $TRP_A={TRPSP_AXIS 0,TRPSP_COP_AX 0,TRPSP_A 0.0,TRPSP_B 0.0,TRPSP_C 0.0,TRPSP_D 0.0} ;AXIS = UEBER TRAPEZ ANGETRIEBENE ACHSE, COP_AXIS = KOPPELNDE ACHSE, A = TRAPEZLAENGE A, B= TRAPEZLAENGE B, C = TRAPEZLAENGE C, D = TRAPEZLAENGE D +REAL $SPC_KIN[30] ;SONDERKINEMATIKEN +$SPC_KIN[1]=0.0 ;A-PARAMETER FUER GRENZEBACHKINEMATIK +$SPC_KIN[2]=0.0 ;D-PARAMETER FUER GRENZEBACHKINEMATIK +$SPC_KIN[3]=0.0 ;W12-PARAMETER FUER ALLGEMEINE (NICHT-ORTHOGONALE) PORTALKINEMATIKEN +$SPC_KIN[4]=0.0 ;LG-PARAMETER FUER ALLGEMEINE (NICHT-ORTHOGONALE) PORTALKINEMATIKEN +$SPC_KIN[5]=0.0 ;BG-PARAMETER FUER ALLGEMEINE (NICHT-ORTHOGONALE) PORTALKINEMATIKEN +$SPC_KIN[6]=0.0 +$SPC_KIN[7]=0.0 +$SPC_KIN[8]=0.0 +$SPC_KIN[9]=0.0 +$SPC_KIN[10]=0.0 +$SPC_KIN[11]=0.0 +$SPC_KIN[12]=0.0 +$SPC_KIN[13]=0.0 +$SPC_KIN[14]=0.0 +$SPC_KIN[15]=0.0 +$SPC_KIN[16]=0.0 +$SPC_KIN[17]=0.0 +$SPC_KIN[18]=0.0 +$SPC_KIN[19]=0.0 +$SPC_KIN[20]=0.0 +$SPC_KIN[21]=0.0 +$SPC_KIN[22]=0.0 +$SPC_KIN[23]=0.0 +$SPC_KIN[24]=0.0 +$SPC_KIN[25]=0.0 +$SPC_KIN[26]=0.0 +$SPC_KIN[27]=0.0 +$SPC_KIN[28]=0.0 +$SPC_KIN[29]=0.0 +$SPC_KIN[30]=0.0 +INT $EX_AX_NUM=0 ;ANZAHL EXTERNER ACHSEN (0-6) +INT $EX_AX_ASYNC='B0000' ;EXTERNE ACHSEN ASYNCHRON +INT $ASYNC_T1_FAST='B0000' ;GESCHW.-RED. DEAKTIVIERT ( T1 ) +DECL EX_KIN $EX_KIN={ET1 #NONE,ET2 #NONE,ET3 #NONE,ET4 #NONE,ET5 #NONE,ET6 #NONE} ;EXTERNE KINEMATIKEN #NONE,#EASYS,#EBSYS,#ECSYS,#EDSYS,#EESYS,#EFSYS,#ERSYS +DECL ET_AX $ET1_AX={TR_A1 #NONE,TR_A2 #NONE,TR_A3 #NONE} ;EXTERNE ACHSEN #NONE, #E1, #E2, #E3, #E4, #E5, #E6 +CHAR $ET1_NAME[40] ;NAME DER TRANSFORMATION ET1 +$ET1_NAME[]=" " +FRAME $ET1_TA1KR={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;FRAME ZWISCHEN A1 UND FUSSPUNKT DER KIN IN TRAFO ET1 +FRAME $ET1_TA2A1={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A2 UND A1 +FRAME $ET1_TA3A2={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A3 UND A2 +FRAME $ET1_TFLA3={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN FL UND A3 +FRAME $ET1_TPINFL={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN MESSPUNKT UND FL +DECL ET_AX $ET2_AX={TR_A1 #NONE,TR_A2 #NONE,TR_A3 #NONE} ;EXTERNE ACHSEN #NONE, #E1, #E2, #E3, #E4, #E5, #E6 +CHAR $ET2_NAME[40] ;NAME DER TRANSFORMATION ET2 +$ET2_NAME[]=" " +FRAME $ET2_TA1KR={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;FRAME ZWISCHEN A1 UND FUSSPUNKT DER KIN IN TRAFO ET2 +FRAME $ET2_TA2A1={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A2 UND A1 +FRAME $ET2_TA3A2={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A3 UND A2 +FRAME $ET2_TFLA3={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN FL UND A3 +FRAME $ET2_TPINFL={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN MESSPUNKT UND FL +DECL ET_AX $ET3_AX={TR_A1 #NONE,TR_A2 #NONE,TR_A3 #NONE} ;EXTERNE ACHSEN #NONE, #E1, #E2, #E3, #E4, #E5, #E6 +CHAR $ET3_NAME[40] ;NAME DER TRANSFORMATION ET3 +$ET3_NAME[]=" " +FRAME $ET3_TA1KR={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;FRAME ZWISCHEN A1 UND FUSSPUNKT DER KIN IN TRAFO ET3 +FRAME $ET3_TA2A1={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A2 UND A1 +FRAME $ET3_TA3A2={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A3 UND A2 +FRAME $ET3_TFLA3={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN FL UND A3 +FRAME $ET3_TPINFL={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN MESSPUNKT UND FL +DECL ET_AX $ET4_AX={TR_A1 #NONE,TR_A2 #NONE,TR_A3 #NONE} ;EXTERNE ACHSEN #NONE, #E1, #E2, #E3, #E4, #E5, #E6 +CHAR $ET4_NAME[40] ;NAME DER TRANSFORMATION ET4 +$ET4_NAME[]=" " +FRAME $ET4_TA1KR={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;FRAME ZWISCHEN A1 UND FUSSPUNKT DER KIN IN TRAFO ET4 +FRAME $ET4_TA2A1={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A2 UND A1 +FRAME $ET4_TA3A2={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A3 UND A2 +FRAME $ET4_TFLA3={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN FL UND A3 +FRAME $ET4_TPINFL={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN MESSPUNKT UND FL +DECL ET_AX $ET5_AX={TR_A1 #NONE,TR_A2 #NONE,TR_A3 #NONE} ;EXTERNE ACHSEN #NONE, #E1, #E2, #E3, #E4, #E5, #E6 +CHAR $ET5_NAME[40] ;NAME DER TRANSFORMATION ET5 +$ET5_NAME[]=" " +FRAME $ET5_TA1KR={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;FRAME ZWISCHEN A1 UND FUSSPUNKT DER KIN IN TRAFO ET5 +FRAME $ET5_TA2A1={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A2 UND A1 +FRAME $ET5_TA3A2={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A3 UND A2 +FRAME $ET5_TFLA3={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN FL UND A3 +FRAME $ET5_TPINFL={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN MESSPUNKT UND FL +DECL ET_AX $ET6_AX={TR_A1 #NONE,TR_A2 #NONE,TR_A3 #NONE} ;EXTERNE ACHSEN #NONE, #E1, #E2, #E3, #E4, #E5, #E6 +CHAR $ET6_NAME[40] ;NAME DER TRANSFORMATION ET6 +$ET6_NAME[]=" " +FRAME $ET6_TA1KR={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;FRAME ZWISCHEN A1 UND FUSSPUNKT DER KIN IN TRAFO ET6 +FRAME $ET6_TA2A1={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A2 UND A1 +FRAME $ET6_TA3A2={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN A3 UND A2 +FRAME $ET6_TFLA3={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN FL UND A3 +FRAME $ET6_TPINFL={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} ;ZWISCHEN MESSPUNKT UND FL +E6AXIS $H_POS={A1 -21.6021271,A2 -99.3227234,A3 104.274384,A4 -0.793297172,A5 86.8444748,A6 -6.95475197,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +E6AXIS $AXIS_HOME[5] +$AXIS_HOME[1]={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +$AXIS_HOME[2]={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +$AXIS_HOME[3]={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +$AXIS_HOME[4]={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +$AXIS_HOME[5]={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +E6AXIS $H_POS_TOL={A1 2.00000,A2 2.00000,A3 2.00000,A4 2.00000,A5 2.00000,A6 2.00000,E1 2.00000,E2 2.00000,E3 2.00000,E4 2.00000,E5 2.00000,E6 2.00000} +E6AXIS $H_AXIS_TOL[5] ;TOLERANZFENSTER FUER ERREICHEN DER HOME-STELLUNG $AXIS_HOME[.] +$H_AXIS_TOL[1]={A1 2.00000,A2 2.00000,A3 2.00000,A4 2.00000,A5 2.00000,A6 2.00000,E1 2.00000,E2 2.00000,E3 2.00000,E4 2.00000,E5 2.00000,E6 2.00000} +$H_AXIS_TOL[2]={A1 2.00000,A2 2.00000,A3 2.00000,A4 2.00000,A5 2.00000,A6 2.00000,E1 2.00000,E2 2.00000,E3 2.00000,E4 2.00000,E5 2.00000,E6 2.00000} +$H_AXIS_TOL[3]={A1 2.00000,A2 2.00000,A3 2.00000,A4 2.00000,A5 2.00000,A6 2.00000,E1 2.00000,E2 2.00000,E3 2.00000,E4 2.00000,E5 2.00000,E6 2.00000} +$H_AXIS_TOL[4]={A1 2.00000,A2 2.00000,A3 2.00000,A4 2.00000,A5 2.00000,A6 2.00000,E1 2.00000,E2 2.00000,E3 2.00000,E4 2.00000,E5 2.00000,E6 2.00000} +$H_AXIS_TOL[5]={A1 2.00000,A2 2.00000,A3 2.00000,A4 2.00000,A5 2.00000,A6 2.00000,E1 2.00000,E2 2.00000,E3 2.00000,E4 2.00000,E5 2.00000,E6 2.00000} +REAL $AXIS_JERK[12] ; ERLAUBTER ACHSRUCK [DEG/S^3] / [M/S^3] +$AXIS_JERK[1]=11625.6270 +$AXIS_JERK[2]=9117.67188 +$AXIS_JERK[3]=31472.6113 +$AXIS_JERK[4]=89802.2109 +$AXIS_JERK[5]=50787.6 +$AXIS_JERK[6]=48245.1914 +$AXIS_JERK[7]=1.00000E+19 +$AXIS_JERK[8]=1.00000E+19 +$AXIS_JERK[9]=1.00000E+19 +$AXIS_JERK[10]=1.00000E+19 +$AXIS_JERK[11]=1.00000E+19 +$AXIS_JERK[12]=1.00000E+19 +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Mada/$robcor.dat b/KUKA/KRC/R1/Mada/$robcor.dat new file mode 100644 index 0000000..1ed98ab --- /dev/null +++ b/KUKA/KRC/R1/Mada/$robcor.dat @@ -0,0 +1,955 @@ +&ACCESS RV$ +&REL 2 +&PARAM VERSION = 1.0.0 +DEFDAT $ROBCOR PUBLIC +CHAR $V_ROBCOR[32] +$V_ROBCOR[]="V42.601.8.1/KUKA8.7" ;VERSIONSKENNUNG +CHAR $MODEL_NAME[32] +$MODEL_NAME[]="#KR120R3100_2 C4 FLR" +DECL ADAP_ACC $ADAP_ACC=#STEP2 ;BESCHLEUNIGUNGSANPASSUNG ( #NONE, #STEP1, #STEP2 ) +DECL ADAP_ACC $OPT_MOVE=#STEP2 ;HOEHERES FAHRPROFIL (#NONE, #STEP1, #STEP2) +DECL MODEL_TYPE $MODEL_TYPE=#STANDARD ;Dynamikmodelltyp (#STANDARD, #TORQUE_COUPLED) +DECL ADAP_ACC $EXT_DYN_DAT=#NONE ; Erweiterungsmodus Dynamikmodell (#NONE, #STEP1, #STEP2) +DECL BOOL $OPT_TIME_PTP=FALSE +DECL BOOL $OPT_FLT_PTP=FALSE +DECL CONTROL_PARAMETER $CONTROL_PARAMETER=#MODEL ; Zyklische Parameter fuer die Regelung +BOOL $SPECIAL_CONTROL_T1=FALSE ;Verwendung des konfigurierten Reglerparamters in T1 +BOOL $PROG_TORQ_MON=TRUE ;UEBERWACHUNG DER SOLL-MOMENTE MOTOR UND GETRIEBE +BOOL $ENERGY_MON=TRUE ;UEBERWACHUNG KINETISCHE ENERGIE BEI CRASH +BOOL $ENERGY_MODULE_ACTIVE=TRUE +INT $ITER=2 ;ANZAHL DER ITERATIONEN +INT $SYNC=1 ;PHASENANPASSUNG ( 1 = SYNCHRON, 0 = NICHT SYNCHRON ) +INT $OPT_APPROX=100 ;REDUZIERUNGSFAKTOR ZUR UEBERSCHLEIFPLANUNG +DECL EKO_MODE $EKO_MODE=#ON ;EKO-MODUS (#OFF,#ON,#OPT) +REAL $DEF_L_M=120.000 ;DEFAULTMASSE AM FLANSCH +FRAME $DEF_L_CM={X 270.000,Y 0.0,Z 240.000,A 0.0,B 0.0,C 0.0} ;MASSENSCHWERPUNKT-FRAME +DECL INERTIA $DEF_L_J={X 60.0000,Y 60.0000,Z 60.0000} ;EIGENTRAEGHEITSMOMENTE DER LAST +REAL $DEF_LA3_M=50.0000 ;DEFAULTMASSE AUF DER ACHSE 3 +FRAME $DEF_LA3_CM={X -200.000,Y 0.0,Z -1560.00,A 0.0,B 0.0,C 0.0} ;MASSENSCHWERPUNKT-FRAME A3 +DECL INERTIA $DEF_LA3_J={X 10.0000,Y 10.0000,Z 10.0000} ;EIGENTRAEGHEITSMOMENTE DER LAST AUF A3 +REAL $COMPENSATED_LOAD=0.0 ;MASSENAEQUIVALENT FUER KONSTANTEN GEWICHTSAUSGLEICH EINER LINEARACHSE +REAL $DYN_DAT[500] +$DYN_DAT[1]=31.5035782 +$DYN_DAT[2]=6.74725866 +$DYN_DAT[3]=82.8798370 +$DYN_DAT[4]=82.4939957 +$DYN_DAT[5]=3.72506523 +$DYN_DAT[6]=32.2409897 +$DYN_DAT[7]=31.8371220 +$DYN_DAT[8]=2.93833089 +$DYN_DAT[9]=2.83191609 +$DYN_DAT[10]=0.354919046 +$DYN_DAT[11]=305.600 +$DYN_DAT[12]=645.000 +$DYN_DAT[13]=330.000 +$DYN_DAT[14]=1350.00 +$DYN_DAT[15]=115.000 +$DYN_DAT[16]=1028.00 +$DYN_DAT[17]=1420.00 +$DYN_DAT[18]=215.000 +$DYN_DAT[19]=577.871155 +$DYN_DAT[20]=262.230225 +$DYN_DAT[21]=91.4090042 +$DYN_DAT[22]=250.560 +$DYN_DAT[23]=199.330 +$DYN_DAT[24]=66.0035248 +$DYN_DAT[25]=200.000 +$DYN_DAT[26]=800.041931 +$DYN_DAT[27]=1669.00 +$DYN_DAT[28]=1.67000 +$DYN_DAT[29]=130.000 +$DYN_DAT[30]=150.000 +$DYN_DAT[31]=607.433105 +$DYN_DAT[32]=505.850342 +$DYN_DAT[33]=434.668365 +$DYN_DAT[34]=63.7413063 +$DYN_DAT[35]=73.4352 +$DYN_DAT[36]=36.9605522 +$DYN_DAT[37]=7290.00 +$DYN_DAT[38]=8910.00 +$DYN_DAT[39]=7653.15039 +$DYN_DAT[40]=2462.39209 +$DYN_DAT[41]=1491.69885 +$DYN_DAT[42]=908.431213 +$DYN_DAT[43]=35.1000 +$DYN_DAT[44]=50.3100 +$DYN_DAT[45]=50.3100 +$DYN_DAT[46]=16.8100 +$DYN_DAT[47]=16.8100 +$DYN_DAT[48]=19.7500 +$DYN_DAT[49]=264.680420 +$DYN_DAT[50]=542.622803 +$DYN_DAT[51]=562.341858 +$DYN_DAT[52]=154.141571 +$DYN_DAT[53]=68.1906891 +$DYN_DAT[54]=22.8365917 +$DYN_DAT[55]=539.213867 +$DYN_DAT[56]=436.685333 +$DYN_DAT[57]=231.943405 +$DYN_DAT[58]=51.0789948 +$DYN_DAT[59]=96.4913254 +$DYN_DAT[60]=123.570305 +$DYN_DAT[61]=1.00000 +$DYN_DAT[62]=1.00000 +$DYN_DAT[63]=1.00000 +$DYN_DAT[64]=1.00000 +$DYN_DAT[65]=1.00000 +$DYN_DAT[66]=1.00000 +$DYN_DAT[67]=1.00000 +$DYN_DAT[68]=1.00000 +$DYN_DAT[69]=1.00000 +$DYN_DAT[70]=1.00000 +$DYN_DAT[71]=1.00000 +$DYN_DAT[72]=1.00000 +$DYN_DAT[73]=0.900000 +$DYN_DAT[74]=0.900000 +$DYN_DAT[75]=0.900000 +$DYN_DAT[76]=0.900000 +$DYN_DAT[77]=0.900000 +$DYN_DAT[78]=0.900000 +$DYN_DAT[79]=0.0 +$DYN_DAT[80]=0.0 +$DYN_DAT[81]=0.0 +$DYN_DAT[82]=-1.00000 +$DYN_DAT[83]=-4.99800 +$DYN_DAT[84]=0.0 +$DYN_DAT[85]=0.0 +$DYN_DAT[86]=0.0 +$DYN_DAT[87]=0.0 +$DYN_DAT[88]=0.0 +$DYN_DAT[89]=0.0 +$DYN_DAT[90]=0.0 +$DYN_DAT[91]=0.0 +$DYN_DAT[92]=0.0 +$DYN_DAT[93]=0.0 +$DYN_DAT[94]=0.0 +$DYN_DAT[95]=0.0 +$DYN_DAT[96]=0.0 +$DYN_DAT[97]=0.0 +$DYN_DAT[98]=1.00000 +$DYN_DAT[99]=0.0 +$DYN_DAT[100]=363.070 +$DYN_DAT[101]=28.7872 +$DYN_DAT[102]=-11.8752 +$DYN_DAT[103]=539.628296 +$DYN_DAT[104]=0.0 +$DYN_DAT[105]=0.0 +$DYN_DAT[106]=225.960 +$DYN_DAT[107]=1.33000 +$DYN_DAT[108]=0.0 +$DYN_DAT[109]=0.0 +$DYN_DAT[110]=0.0 +$DYN_DAT[111]=0.0 +$DYN_DAT[112]=0.0 +$DYN_DAT[113]=0.0 +$DYN_DAT[114]=0.0 +$DYN_DAT[115]=0.0 +$DYN_DAT[116]=165.000 +$DYN_DAT[117]=69.7000 +$DYN_DAT[118]=-125.571701 +$DYN_DAT[119]=137.627701 +$DYN_DAT[120]=0.0 +$DYN_DAT[121]=0.0 +$DYN_DAT[122]=0.0 +$DYN_DAT[123]=0.0 +$DYN_DAT[124]=0.0 +$DYN_DAT[125]=0.0 +$DYN_DAT[126]=0.0 +$DYN_DAT[127]=0.0 +$DYN_DAT[128]=0.0 +$DYN_DAT[129]=0.0 +$DYN_DAT[130]=0.0 +$DYN_DAT[131]=0.0 +$DYN_DAT[132]=0.0 +$DYN_DAT[133]=0.0 +$DYN_DAT[134]=0.0 +$DYN_DAT[135]=0.0 +$DYN_DAT[136]=0.0 +$DYN_DAT[137]=0.0 +$DYN_DAT[138]=0.0 +$DYN_DAT[139]=0.0 +$DYN_DAT[140]=0.0 +$DYN_DAT[141]=0.0 +$DYN_DAT[142]=0.0 +$DYN_DAT[143]=0.0 +$DYN_DAT[144]=0.0 +$DYN_DAT[145]=0.0 +$DYN_DAT[146]=0.0 +$DYN_DAT[147]=0.0 +$DYN_DAT[148]=0.0 +$DYN_DAT[149]=0.0 +$DYN_DAT[150]=0.0 +$DYN_DAT[151]=0.0 +$DYN_DAT[152]=0.0 +$DYN_DAT[153]=0.0 +$DYN_DAT[154]=0.0 +$DYN_DAT[155]=0.0 +$DYN_DAT[156]=0.0 +$DYN_DAT[157]=0.0 +$DYN_DAT[158]=0.0 +$DYN_DAT[159]=0.0 +$DYN_DAT[160]=0.0 +$DYN_DAT[161]=0.0 +$DYN_DAT[162]=0.0 +$DYN_DAT[163]=0.0 +$DYN_DAT[164]=0.0 +$DYN_DAT[165]=0.0 +$DYN_DAT[166]=0.0 +$DYN_DAT[167]=0.0 +$DYN_DAT[168]=0.0 +$DYN_DAT[169]=0.0 +$DYN_DAT[170]=0.0 +$DYN_DAT[171]=0.0 +$DYN_DAT[172]=0.0 +$DYN_DAT[173]=0.0 +$DYN_DAT[174]=0.0 +$DYN_DAT[175]=0.0 +$DYN_DAT[176]=0.0 +$DYN_DAT[177]=0.0 +$DYN_DAT[178]=0.0 +$DYN_DAT[179]=0.0 +$DYN_DAT[180]=0.0 +$DYN_DAT[181]=0.0 +$DYN_DAT[182]=0.0 +$DYN_DAT[183]=0.0 +$DYN_DAT[184]=0.0 +$DYN_DAT[185]=0.0 +$DYN_DAT[186]=0.0 +$DYN_DAT[187]=0.0 +$DYN_DAT[188]=0.0 +$DYN_DAT[189]=0.0 +$DYN_DAT[190]=0.0 +$DYN_DAT[191]=0.0 +$DYN_DAT[192]=0.0 +$DYN_DAT[193]=0.0 +$DYN_DAT[194]=0.0 +$DYN_DAT[195]=0.0 +$DYN_DAT[196]=0.0 +$DYN_DAT[197]=0.0 +$DYN_DAT[198]=0.0 +$DYN_DAT[199]=0.0 +$DYN_DAT[200]=0.0 +$DYN_DAT[201]=0.0 +$DYN_DAT[202]=0.0 +$DYN_DAT[203]=0.0 +$DYN_DAT[204]=0.0 +$DYN_DAT[205]=0.0 +$DYN_DAT[206]=0.0 +$DYN_DAT[207]=0.0 +$DYN_DAT[208]=0.0 +$DYN_DAT[209]=0.0 +$DYN_DAT[210]=0.0 +$DYN_DAT[211]=0.0 +$DYN_DAT[212]=0.0 +$DYN_DAT[213]=0.0 +$DYN_DAT[214]=0.0 +$DYN_DAT[215]=0.0 +$DYN_DAT[216]=0.0 +$DYN_DAT[217]=0.0 +$DYN_DAT[218]=0.0 +$DYN_DAT[219]=0.0 +$DYN_DAT[220]=0.0 +$DYN_DAT[221]=0.0 +$DYN_DAT[222]=0.0 +$DYN_DAT[223]=0.0 +$DYN_DAT[224]=1.00000 +$DYN_DAT[225]=3.00000 +$DYN_DAT[226]=5.00000 +$DYN_DAT[227]=0.0 +$DYN_DAT[228]=0.0 +$DYN_DAT[229]=0.0 +$DYN_DAT[230]=0.0 +$DYN_DAT[231]=250.000 +$DYN_DAT[232]=250.000 +$DYN_DAT[233]=250.000 +$DYN_DAT[234]=250.000 +$DYN_DAT[235]=250.000 +$DYN_DAT[236]=250.000 +$DYN_DAT[237]=0.0 +$DYN_DAT[238]=0.0 +$DYN_DAT[239]=0.0 +$DYN_DAT[240]=0.0 +$DYN_DAT[241]=0.0 +$DYN_DAT[242]=0.0 +$DYN_DAT[243]=6300.00 +$DYN_DAT[244]=3300.00 +$DYN_DAT[245]=1800.00 +$DYN_DAT[246]=750.000 +$DYN_DAT[247]=675.000 +$DYN_DAT[248]=600.000 +$DYN_DAT[249]=0.0 +$DYN_DAT[250]=0.0 +$DYN_DAT[251]=0.0 +$DYN_DAT[252]=0.0 +$DYN_DAT[253]=0.0 +$DYN_DAT[254]=0.0 +$DYN_DAT[255]=0.0 +$DYN_DAT[256]=0.0 +$DYN_DAT[257]=0.0 +$DYN_DAT[258]=0.0 +$DYN_DAT[259]=0.0 +$DYN_DAT[260]=0.0 +$DYN_DAT[261]=0.0 +$DYN_DAT[262]=0.0 +$DYN_DAT[263]=0.0 +$DYN_DAT[264]=0.0 +$DYN_DAT[265]=0.0 +$DYN_DAT[266]=0.0 +$DYN_DAT[267]=0.0 +$DYN_DAT[268]=71470.5859 +$DYN_DAT[269]=87352.9375 +$DYN_DAT[270]=75030.8828 +$DYN_DAT[271]=24141.1 +$DYN_DAT[272]=14624.4980 +$DYN_DAT[273]=8906.18848 +$DYN_DAT[274]=0.0 +$DYN_DAT[275]=0.0 +$DYN_DAT[276]=0.0 +$DYN_DAT[277]=0.0 +$DYN_DAT[278]=0.0 +$DYN_DAT[279]=0.0 +$DYN_DAT[280]=0.0 +$DYN_DAT[281]=0.0 +$DYN_DAT[282]=0.0 +$DYN_DAT[283]=0.0 +$DYN_DAT[284]=0.0 +$DYN_DAT[285]=0.0 +$DYN_DAT[286]=0.0 +$DYN_DAT[287]=0.0 +$DYN_DAT[288]=0.0 +$DYN_DAT[289]=0.0 +$DYN_DAT[290]=0.0 +$DYN_DAT[291]=0.0 +$DYN_DAT[292]=0.0 +$DYN_DAT[293]=0.0 +$DYN_DAT[294]=0.0 +$DYN_DAT[295]=0.0 +$DYN_DAT[296]=0.0 +$DYN_DAT[297]=0.0 +$DYN_DAT[298]=0.0 +$DYN_DAT[299]=0.0 +$DYN_DAT[300]=0.0 +$DYN_DAT[301]=0.0 +$DYN_DAT[302]=0.0 +$DYN_DAT[303]=0.0 +$DYN_DAT[304]=0.0 +$DYN_DAT[305]=0.0 +$DYN_DAT[306]=0.0 +$DYN_DAT[307]=0.0 +$DYN_DAT[308]=0.0 +$DYN_DAT[309]=0.0 +$DYN_DAT[310]=0.0 +$DYN_DAT[311]=0.0 +$DYN_DAT[312]=0.0 +$DYN_DAT[313]=0.0 +$DYN_DAT[314]=0.0 +$DYN_DAT[315]=0.0 +$DYN_DAT[316]=0.0 +$DYN_DAT[317]=0.0 +$DYN_DAT[318]=0.0 +$DYN_DAT[319]=0.0 +$DYN_DAT[320]=0.0 +$DYN_DAT[321]=0.0 +$DYN_DAT[322]=0.0 +$DYN_DAT[323]=0.0 +$DYN_DAT[324]=0.0 +$DYN_DAT[325]=0.0 +$DYN_DAT[326]=0.0 +$DYN_DAT[327]=0.0 +$DYN_DAT[328]=0.0 +$DYN_DAT[329]=0.0 +$DYN_DAT[330]=0.0 +$DYN_DAT[331]=0.0 +$DYN_DAT[332]=0.0 +$DYN_DAT[333]=0.0 +$DYN_DAT[334]=0.0 +$DYN_DAT[335]=0.0 +$DYN_DAT[336]=0.0 +$DYN_DAT[337]=0.0 +$DYN_DAT[338]=0.0 +$DYN_DAT[339]=0.0 +$DYN_DAT[340]=0.0 +$DYN_DAT[341]=0.0 +$DYN_DAT[342]=0.0 +$DYN_DAT[343]=0.0 +$DYN_DAT[344]=0.0 +$DYN_DAT[345]=0.0 +$DYN_DAT[346]=0.0 +$DYN_DAT[347]=0.0 +$DYN_DAT[348]=0.0 +$DYN_DAT[349]=0.0 +$DYN_DAT[350]=0.0 +$DYN_DAT[351]=221.356613 +$DYN_DAT[352]=375.734467 +$DYN_DAT[353]=575.960754 +$DYN_DAT[354]=576.061279 +$DYN_DAT[355]=0.0 +$DYN_DAT[356]=0.0 +$DYN_DAT[357]=35.1000 +$DYN_DAT[358]=20.8000 +$DYN_DAT[359]=12.9000 +$DYN_DAT[360]=0.0 +$DYN_DAT[361]=0.0 +$DYN_DAT[362]=0.0 +$DYN_DAT[363]=169.225037 +$DYN_DAT[364]=331.331207 +$DYN_DAT[365]=523.596680 +$DYN_DAT[366]=523.640686 +$DYN_DAT[367]=0.0 +$DYN_DAT[368]=0.0 +$DYN_DAT[369]=50.3100 +$DYN_DAT[370]=28.3900 +$DYN_DAT[371]=15.7300 +$DYN_DAT[372]=0.0 +$DYN_DAT[373]=0.0 +$DYN_DAT[374]=0.0 +$DYN_DAT[375]=169.225037 +$DYN_DAT[376]=331.331207 +$DYN_DAT[377]=523.596680 +$DYN_DAT[378]=523.640686 +$DYN_DAT[379]=0.0 +$DYN_DAT[380]=0.0 +$DYN_DAT[381]=50.3100 +$DYN_DAT[382]=28.3900 +$DYN_DAT[383]=15.7300 +$DYN_DAT[384]=0.0 +$DYN_DAT[385]=0.0 +$DYN_DAT[386]=0.0 +$DYN_DAT[387]=219.597321 +$DYN_DAT[388]=406.207916 +$DYN_DAT[389]=628.318542 +$DYN_DAT[390]=628.381348 +$DYN_DAT[391]=0.0 +$DYN_DAT[392]=0.0 +$DYN_DAT[393]=16.8100 +$DYN_DAT[394]=9.40000 +$DYN_DAT[395]=4.65000 +$DYN_DAT[396]=0.0 +$DYN_DAT[397]=0.0 +$DYN_DAT[398]=0.0 +$DYN_DAT[399]=219.597321 +$DYN_DAT[400]=406.207916 +$DYN_DAT[401]=628.318542 +$DYN_DAT[402]=628.381348 +$DYN_DAT[403]=0.0 +$DYN_DAT[404]=0.0 +$DYN_DAT[405]=16.8100 +$DYN_DAT[406]=6.40000 +$DYN_DAT[407]=1.00000 +$DYN_DAT[408]=0.0 +$DYN_DAT[409]=0.0 +$DYN_DAT[410]=0.0 +$DYN_DAT[411]=254.783157 +$DYN_DAT[412]=418.899963 +$DYN_DAT[413]=628.318542 +$DYN_DAT[414]=628.381348 +$DYN_DAT[415]=0.0 +$DYN_DAT[416]=0.0 +$DYN_DAT[417]=19.7500 +$DYN_DAT[418]=8.00000 +$DYN_DAT[419]=1.00000 +$DYN_DAT[420]=0.0 +$DYN_DAT[421]=0.0 +$DYN_DAT[422]=0.0 +$DYN_DAT[423]=1.26103401 +$DYN_DAT[424]=1.71415257 +$DYN_DAT[425]=1.95936179 +$DYN_DAT[426]=2.03848243 +$DYN_DAT[427]=0.0 +$DYN_DAT[428]=0.0 +$DYN_DAT[429]=5988.09668 +$DYN_DAT[430]=4502.76611 +$DYN_DAT[431]=2891.08862 +$DYN_DAT[432]=1215.00 +$DYN_DAT[433]=0.0 +$DYN_DAT[434]=0.0 +$DYN_DAT[435]=1.20332015 +$DYN_DAT[436]=1.63570070 +$DYN_DAT[437]=1.86968756 +$DYN_DAT[438]=1.94518697 +$DYN_DAT[439]=0.0 +$DYN_DAT[440]=0.0 +$DYN_DAT[441]=7318.78516 +$DYN_DAT[442]=5503.38086 +$DYN_DAT[443]=3533.55298 +$DYN_DAT[444]=1485.00 +$DYN_DAT[445]=0.0 +$DYN_DAT[446]=0.0 +$DYN_DAT[447]=1.28874850 +$DYN_DAT[448]=1.75182557 +$DYN_DAT[449]=2.00242400 +$DYN_DAT[450]=2.08328342 +$DYN_DAT[451]=0.0 +$DYN_DAT[452]=0.0 +$DYN_DAT[453]=6813.30957 +$DYN_DAT[454]=5855.14258 +$DYN_DAT[455]=4815.47070 +$DYN_DAT[456]=3734.24780 +$DYN_DAT[457]=0.0 +$DYN_DAT[458]=0.0 +$DYN_DAT[459]=2.05140209 +$DYN_DAT[460]=2.78851819 +$DYN_DAT[461]=3.18741512 +$DYN_DAT[462]=3.31612563 +$DYN_DAT[463]=0.0 +$DYN_DAT[464]=0.0 +$DYN_DAT[465]=2073.56714 +$DYN_DAT[466]=1629.96 +$DYN_DAT[467]=1148.61816 +$DYN_DAT[468]=648.039307 +$DYN_DAT[469]=0.0 +$DYN_DAT[470]=0.0 +$DYN_DAT[471]=1.94343352 +$DYN_DAT[472]=2.64175391 +$DYN_DAT[473]=3.01965642 +$DYN_DAT[474]=3.14159274 +$DYN_DAT[475]=0.0 +$DYN_DAT[476]=0.0 +$DYN_DAT[477]=1309.49817 +$DYN_DAT[478]=1101.62708 +$DYN_DAT[479]=876.073669 +$DYN_DAT[480]=641.506 +$DYN_DAT[481]=0.0 +$DYN_DAT[482]=0.0 +$DYN_DAT[483]=2.80718184 +$DYN_DAT[484]=3.81586695 +$DYN_DAT[485]=4.36172628 +$DYN_DAT[486]=4.53785610 +$DYN_DAT[487]=0.0 +$DYN_DAT[488]=0.0 +$DYN_DAT[489]=781.865356 +$DYN_DAT[490]=637.467468 +$DYN_DAT[491]=480.786652 +$DYN_DAT[492]=317.844 +$DYN_DAT[493]=0.0 +$DYN_DAT[494]=0.0 +$DYN_DAT[495]=0.0 +$DYN_DAT[496]=0.0 +$DYN_DAT[497]=0.0 +$DYN_DAT[498]=0.0 +$DYN_DAT[499]=0.0 +$DYN_DAT[500]=0.0 +REAL $EKO_DAT[400] ;MODELLPARAMETER FUER DIE ELASTIZITAETSKOMPENSATION +$EKO_DAT[1]=1.00000 +$EKO_DAT[2]=32.0000 +$EKO_DAT[3]=2.00000 +$EKO_DAT[4]=0.0 +$EKO_DAT[5]=1.00000 +$EKO_DAT[6]=0.0 +$EKO_DAT[7]=1.00000 +$EKO_DAT[8]=0.0 +$EKO_DAT[9]=0.0 +$EKO_DAT[10]=0.0 +$EKO_DAT[11]=0.0 +$EKO_DAT[12]=0.0 +$EKO_DAT[13]=1.00000 +$EKO_DAT[14]=1.00000 +$EKO_DAT[15]=1.00000 +$EKO_DAT[16]=0.0 +$EKO_DAT[17]=0.0 +$EKO_DAT[18]=0.0 +$EKO_DAT[19]=0.0 +$EKO_DAT[20]=0.0 +$EKO_DAT[21]=0.0 +$EKO_DAT[22]=0.0 +$EKO_DAT[23]=0.0 +$EKO_DAT[24]=0.0 +$EKO_DAT[25]=26.4680 +$EKO_DAT[26]=54.2623 +$EKO_DAT[27]=56.2342 +$EKO_DAT[28]=0.0 +$EKO_DAT[29]=0.0 +$EKO_DAT[30]=0.0 +$EKO_DAT[31]=0.0 +$EKO_DAT[32]=0.0 +$EKO_DAT[33]=0.0 +$EKO_DAT[34]=0.0 +$EKO_DAT[35]=0.0 +$EKO_DAT[36]=0.0 +$EKO_DAT[37]=53.9213905 +$EKO_DAT[38]=43.6685333 +$EKO_DAT[39]=23.1943398 +$EKO_DAT[40]=0.0 +$EKO_DAT[41]=0.0 +$EKO_DAT[42]=0.0 +$EKO_DAT[43]=0.0 +$EKO_DAT[44]=0.0 +$EKO_DAT[45]=0.0 +$EKO_DAT[46]=0.0 +$EKO_DAT[47]=0.0 +$EKO_DAT[48]=0.0 +$EKO_DAT[49]=100.000 +$EKO_DAT[50]=100.000 +$EKO_DAT[51]=100.000 +$EKO_DAT[52]=0.0 +$EKO_DAT[53]=0.0 +$EKO_DAT[54]=0.0 +$EKO_DAT[55]=0.0 +$EKO_DAT[56]=0.0 +$EKO_DAT[57]=0.0 +$EKO_DAT[58]=0.0 +$EKO_DAT[59]=0.0 +$EKO_DAT[60]=0.0 +$EKO_DAT[61]=2158993.00 +$EKO_DAT[62]=2893251.00 +$EKO_DAT[63]=3236854.75 +$EKO_DAT[64]=0.0 +$EKO_DAT[65]=0.0 +$EKO_DAT[66]=0.0 +$EKO_DAT[67]=0.0 +$EKO_DAT[68]=0.0 +$EKO_DAT[69]=0.0 +$EKO_DAT[70]=0.0 +$EKO_DAT[71]=0.0 +$EKO_DAT[72]=0.0 +$EKO_DAT[73]=2158994.00 +$EKO_DAT[74]=2893252.00 +$EKO_DAT[75]=3236855.75 +$EKO_DAT[76]=0.0 +$EKO_DAT[77]=0.0 +$EKO_DAT[78]=0.0 +$EKO_DAT[79]=0.0 +$EKO_DAT[80]=0.0 +$EKO_DAT[81]=0.0 +$EKO_DAT[82]=0.0 +$EKO_DAT[83]=0.0 +$EKO_DAT[84]=0.0 +$EKO_DAT[85]=0.000273910 +$EKO_DAT[86]=0.000376320 +$EKO_DAT[87]=0.000664540 +$EKO_DAT[88]=0.0 +$EKO_DAT[89]=0.0 +$EKO_DAT[90]=0.0 +$EKO_DAT[91]=0.0 +$EKO_DAT[92]=0.0 +$EKO_DAT[93]=0.0 +$EKO_DAT[94]=0.0 +$EKO_DAT[95]=0.0 +$EKO_DAT[96]=0.0 +$EKO_DAT[97]=0.000334920 +$EKO_DAT[98]=0.000141890 +$EKO_DAT[99]=0.000337550 +$EKO_DAT[100]=0.0 +$EKO_DAT[101]=0.0 +$EKO_DAT[102]=0.0 +$EKO_DAT[103]=0.0 +$EKO_DAT[104]=0.0 +$EKO_DAT[105]=0.0 +$EKO_DAT[106]=0.0 +$EKO_DAT[107]=0.0 +$EKO_DAT[108]=0.0 +$EKO_DAT[109]=5592.42285 +$EKO_DAT[110]=4180.37500 +$EKO_DAT[111]=6869.48438 +$EKO_DAT[112]=0.0 +$EKO_DAT[113]=0.0 +$EKO_DAT[114]=0.0 +$EKO_DAT[115]=0.0 +$EKO_DAT[116]=0.0 +$EKO_DAT[117]=0.0 +$EKO_DAT[118]=0.0 +$EKO_DAT[119]=0.0 +$EKO_DAT[120]=0.0 +$EKO_DAT[121]=1.00000 +$EKO_DAT[122]=1.00000 +$EKO_DAT[123]=1.00000 +$EKO_DAT[124]=0.0 +$EKO_DAT[125]=0.0 +$EKO_DAT[126]=0.0 +$EKO_DAT[127]=0.0 +$EKO_DAT[128]=0.0 +$EKO_DAT[129]=0.0 +$EKO_DAT[130]=0.0 +$EKO_DAT[131]=0.0 +$EKO_DAT[132]=0.0 +$EKO_DAT[133]=607.433105 +$EKO_DAT[134]=505.850342 +$EKO_DAT[135]=434.668365 +$EKO_DAT[136]=63.7413063 +$EKO_DAT[137]=73.4352 +$EKO_DAT[138]=36.9605522 +$EKO_DAT[139]=0.0 +$EKO_DAT[140]=0.0 +$EKO_DAT[141]=0.0 +$EKO_DAT[142]=0.0 +$EKO_DAT[143]=0.0 +$EKO_DAT[144]=0.0 +$EKO_DAT[145]=238.212402 +$EKO_DAT[146]=488.360504 +$EKO_DAT[147]=506.107697 +$EKO_DAT[148]=0.0 +$EKO_DAT[149]=0.0 +$EKO_DAT[150]=0.0 +$EKO_DAT[151]=0.0 +$EKO_DAT[152]=0.0 +$EKO_DAT[153]=0.0 +$EKO_DAT[154]=0.0 +$EKO_DAT[155]=0.0 +$EKO_DAT[156]=0.0 +$EKO_DAT[157]=485.292511 +$EKO_DAT[158]=393.016815 +$EKO_DAT[159]=208.749054 +$EKO_DAT[160]=0.0 +$EKO_DAT[161]=0.0 +$EKO_DAT[162]=0.0 +$EKO_DAT[163]=0.0 +$EKO_DAT[164]=0.0 +$EKO_DAT[165]=0.0 +$EKO_DAT[166]=0.0 +$EKO_DAT[167]=0.0 +$EKO_DAT[168]=0.0 +$EKO_DAT[169]=100.000 +$EKO_DAT[170]=100.000 +$EKO_DAT[171]=100.000 +$EKO_DAT[172]=0.0 +$EKO_DAT[173]=0.0 +$EKO_DAT[174]=0.0 +$EKO_DAT[175]=0.0 +$EKO_DAT[176]=0.0 +$EKO_DAT[177]=0.0 +$EKO_DAT[178]=0.0 +$EKO_DAT[179]=0.0 +$EKO_DAT[180]=0.0 +$EKO_DAT[181]=0.0 +$EKO_DAT[182]=0.0 +$EKO_DAT[183]=0.0 +$EKO_DAT[184]=0.0 +$EKO_DAT[185]=0.0 +$EKO_DAT[186]=0.0 +$EKO_DAT[187]=0.0 +$EKO_DAT[188]=0.0 +$EKO_DAT[189]=0.0 +$EKO_DAT[190]=0.0 +$EKO_DAT[191]=0.0 +$EKO_DAT[192]=0.0 +$EKO_DAT[193]=0.0 +$EKO_DAT[194]=0.0 +$EKO_DAT[195]=0.0 +$EKO_DAT[196]=0.0 +$EKO_DAT[197]=0.0 +$EKO_DAT[198]=0.0 +$EKO_DAT[199]=0.0 +$EKO_DAT[200]=0.0 +$EKO_DAT[201]=0.0 +$EKO_DAT[202]=0.0 +$EKO_DAT[203]=0.0 +$EKO_DAT[204]=0.0 +$EKO_DAT[205]=0.0 +$EKO_DAT[206]=0.0 +$EKO_DAT[207]=0.0 +$EKO_DAT[208]=0.0 +$EKO_DAT[209]=0.0 +$EKO_DAT[210]=0.0 +$EKO_DAT[211]=0.0 +$EKO_DAT[212]=0.0 +$EKO_DAT[213]=0.0 +$EKO_DAT[214]=0.0 +$EKO_DAT[215]=0.0 +$EKO_DAT[216]=0.0 +$EKO_DAT[217]=0.0 +$EKO_DAT[218]=0.0 +$EKO_DAT[219]=0.0 +$EKO_DAT[220]=0.0 +$EKO_DAT[221]=0.0 +$EKO_DAT[222]=0.0 +$EKO_DAT[223]=0.0 +$EKO_DAT[224]=0.0 +$EKO_DAT[225]=0.0 +$EKO_DAT[226]=0.0 +$EKO_DAT[227]=0.0 +$EKO_DAT[228]=0.0 +$EKO_DAT[229]=0.0 +$EKO_DAT[230]=0.0 +$EKO_DAT[231]=0.0 +$EKO_DAT[232]=0.0 +$EKO_DAT[233]=0.0 +$EKO_DAT[234]=0.0 +$EKO_DAT[235]=0.0 +$EKO_DAT[236]=0.0 +$EKO_DAT[237]=0.0 +$EKO_DAT[238]=0.0 +$EKO_DAT[239]=1406028.88 +$EKO_DAT[240]=2700795.25 +$EKO_DAT[241]=1.00100 +$EKO_DAT[242]=-49678.1406 +$EKO_DAT[243]=-17286.8516 +$EKO_DAT[244]=170667.734 +$EKO_DAT[245]=42144.5977 +$EKO_DAT[246]=154361.125 +$EKO_DAT[247]=318340.125 +$EKO_DAT[248]=-93479.8 +$EKO_DAT[249]=-129813.617 +$EKO_DAT[250]=110971.758 +$EKO_DAT[251]=-449806.719 +$EKO_DAT[252]=-1328978.88 +$EKO_DAT[253]=-246033.625 +$EKO_DAT[254]=-820159.063 +$EKO_DAT[255]=-2096703.00 +$EKO_DAT[256]=243348.875 +$EKO_DAT[257]=2740767.50 +$EKO_DAT[258]=0.0 +$EKO_DAT[259]=0.0 +$EKO_DAT[260]=0.0 +$EKO_DAT[261]=0.0 +$EKO_DAT[262]=0.0 +$EKO_DAT[263]=0.0 +$EKO_DAT[264]=0.0 +$EKO_DAT[265]=0.0 +$EKO_DAT[266]=0.0 +$EKO_DAT[267]=0.0 +$EKO_DAT[268]=0.0 +$EKO_DAT[269]=0.0 +$EKO_DAT[270]=0.0 +$EKO_DAT[271]=0.0 +$EKO_DAT[272]=0.0 +$EKO_DAT[273]=0.0 +$EKO_DAT[274]=0.0 +$EKO_DAT[275]=0.0 +$EKO_DAT[276]=0.0 +$EKO_DAT[277]=0.0 +$EKO_DAT[278]=0.0 +$EKO_DAT[279]=0.0 +$EKO_DAT[280]=0.0 +$EKO_DAT[281]=0.0 +$EKO_DAT[282]=0.0 +$EKO_DAT[283]=0.0 +$EKO_DAT[284]=0.0 +$EKO_DAT[285]=0.0 +$EKO_DAT[286]=0.0 +$EKO_DAT[287]=0.0 +$EKO_DAT[288]=0.0 +$EKO_DAT[289]=0.0 +$EKO_DAT[290]=0.0 +$EKO_DAT[291]=0.0 +$EKO_DAT[292]=0.0 +$EKO_DAT[293]=0.0 +$EKO_DAT[294]=0.0 +$EKO_DAT[295]=0.0 +$EKO_DAT[296]=0.0 +$EKO_DAT[297]=0.0 +$EKO_DAT[298]=0.0 +$EKO_DAT[299]=0.0 +$EKO_DAT[300]=0.0 +$EKO_DAT[301]=0.0 +$EKO_DAT[302]=0.0 +$EKO_DAT[303]=0.0 +$EKO_DAT[304]=0.0 +$EKO_DAT[305]=0.0 +$EKO_DAT[306]=0.0 +$EKO_DAT[307]=0.0 +$EKO_DAT[308]=0.0 +$EKO_DAT[309]=0.0 +$EKO_DAT[310]=0.0 +$EKO_DAT[311]=0.0 +$EKO_DAT[312]=0.0 +$EKO_DAT[313]=0.0 +$EKO_DAT[314]=0.0 +$EKO_DAT[315]=0.0 +$EKO_DAT[316]=0.0 +$EKO_DAT[317]=0.0 +$EKO_DAT[318]=0.0 +$EKO_DAT[319]=0.0 +$EKO_DAT[320]=0.0 +$EKO_DAT[321]=0.0 +$EKO_DAT[322]=0.0 +$EKO_DAT[323]=0.0 +$EKO_DAT[324]=0.0 +$EKO_DAT[325]=0.0 +$EKO_DAT[326]=0.0 +$EKO_DAT[327]=0.0 +$EKO_DAT[328]=0.0 +$EKO_DAT[329]=0.0 +$EKO_DAT[330]=0.0 +$EKO_DAT[331]=0.0 +$EKO_DAT[332]=0.0 +$EKO_DAT[333]=0.0 +$EKO_DAT[334]=0.0 +$EKO_DAT[335]=0.0 +$EKO_DAT[336]=0.0 +$EKO_DAT[337]=0.0 +$EKO_DAT[338]=0.0 +$EKO_DAT[339]=0.0 +$EKO_DAT[340]=0.0 +$EKO_DAT[341]=0.0 +$EKO_DAT[342]=0.0 +$EKO_DAT[343]=0.0 +$EKO_DAT[344]=0.0 +$EKO_DAT[345]=0.0 +$EKO_DAT[346]=0.0 +$EKO_DAT[347]=0.0 +$EKO_DAT[348]=0.0 +$EKO_DAT[349]=0.0 +$EKO_DAT[350]=0.0 +$EKO_DAT[351]=0.0 +$EKO_DAT[352]=0.0 +$EKO_DAT[353]=0.0 +$EKO_DAT[354]=0.0 +$EKO_DAT[355]=0.0 +$EKO_DAT[356]=0.0 +$EKO_DAT[357]=0.0 +$EKO_DAT[358]=0.0 +$EKO_DAT[359]=0.0 +$EKO_DAT[360]=0.0 +$EKO_DAT[361]=0.0 +$EKO_DAT[362]=0.0 +$EKO_DAT[363]=0.0 +$EKO_DAT[364]=0.0 +$EKO_DAT[365]=0.0 +$EKO_DAT[366]=0.0 +$EKO_DAT[367]=0.0 +$EKO_DAT[368]=0.0 +$EKO_DAT[369]=0.0 +$EKO_DAT[370]=0.0 +$EKO_DAT[371]=0.0 +$EKO_DAT[372]=0.0 +$EKO_DAT[373]=0.0 +$EKO_DAT[374]=0.0 +$EKO_DAT[375]=0.0 +$EKO_DAT[376]=0.0 +$EKO_DAT[377]=0.0 +$EKO_DAT[378]=0.0 +$EKO_DAT[379]=0.0 +$EKO_DAT[380]=0.0 +$EKO_DAT[381]=0.0 +$EKO_DAT[382]=0.0 +$EKO_DAT[383]=0.0 +$EKO_DAT[384]=0.0 +$EKO_DAT[385]=0.0 +$EKO_DAT[386]=0.0 +$EKO_DAT[387]=0.0 +$EKO_DAT[388]=0.0 +$EKO_DAT[389]=0.0 +$EKO_DAT[390]=0.0 +$EKO_DAT[391]=0.0 +$EKO_DAT[392]=0.0 +$EKO_DAT[393]=0.0 +$EKO_DAT[394]=0.0 +$EKO_DAT[395]=0.0 +$EKO_DAT[396]=0.0 +$EKO_DAT[397]=0.0 +$EKO_DAT[398]=0.0 +$EKO_DAT[399]=0.0 +$EKO_DAT[400]=0.0 +BOOL $EMSTOP_ADAP=TRUE ;NOT-AUS MIT DYNAMIKMODELL +REAL $EMSTOP_GEARTORQ[6] ;MAX. GETRIEBEMOMENT BEI NOT-AUS [Nm] +$EMSTOP_GEARTORQ[1]=17496.0 +$EMSTOP_GEARTORQ[2]=21384.0 +$EMSTOP_GEARTORQ[3]=18367.5605 +$EMSTOP_GEARTORQ[4]=5909.74121 +$EMSTOP_GEARTORQ[5]=3580.07715 +$EMSTOP_GEARTORQ[6]=2180.23486 +REAL $EMSTOP_TORQRATE=187.578903 ;MAX. AENDERUNG DER MOMENTE BEI NOT-AUS MIT DYNAMIKMODELL [Nm/msec] +DECL SPO_REACTION $SPO_REACTION=#MODEL_RAMP_STOP ; REAKTION AUF SAFE POWER OFF +REAL $SPO_GEARTORQ[6] ;MAX. GETRIEBEMOMENT BEI SAFE POWER OFF [Nm] +$SPO_GEARTORQ[1]=0.0 +$SPO_GEARTORQ[2]=0.0 +$SPO_GEARTORQ[3]=0.0 +$SPO_GEARTORQ[4]=0.0 +$SPO_GEARTORQ[5]=0.0 +$SPO_GEARTORQ[6]=0.0 +BOOL $USE_CUSTOM_MODEL=FALSE ;NACHLADBARES MODELL ZUR KINEMATISCHEN TRANSFORMATION +CHAR $CUSTOM_MODEL_NAME[32] ;NAME DES NACHLADBAREN ROBOTER-MODELS +$CUSTOM_MODEL_NAME[]=" " +CHAR $CUSTOM_MODEL_VERSION[32] ;VERSION DES NACHLADBAREN ROBOTERMODEL +$CUSTOM_MODEL_VERSION[]=" " +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/ActionReturn.src b/KUKA/KRC/R1/Program/ActionReturn.src new file mode 100644 index 0000000..aa0108f --- /dev/null +++ b/KUKA/KRC/R1/Program/ActionReturn.src @@ -0,0 +1,9 @@ +&ACCESS RV +DEF ActionReturn (nRet:IN ) + DECL INT nRet + END_POS=$POS_ACT + Q_CmdCountRet=CmdCountLast + Q_CmdResult=nRet + Q_CmdRet=CmdSave + Q_Cmd_Running=0 +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Config.dat b/KUKA/KRC/R1/Program/Config.dat new file mode 100644 index 0000000..69d594f --- /dev/null +++ b/KUKA/KRC/R1/Program/Config.dat @@ -0,0 +1,16 @@ +&ACCESS RV +DEFDAT CONFIG PUBLIC + +GLOBAL INT PdtTypeLast=0 +GLOBAL INT CmdCountLast=5 +GLOBAL INT CmdSave=10 +GLOBAL INT OffsetX_Save=0 +GLOBAL INT OffsetY_Save=0 +GLOBAL INT CountX_Save=1 +GLOBAL INT CountY_Save=4 + +GLOBAL BOOL ConfMessSave=FALSE + +DECL GLOBAL E6POS END_POS={X 3447.50732,Y 2180.00269,Z 1194.16223,A 179.028702,B -19.9683552,C 89.8567,S 6,T 19,E1 3545.58130,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} + +ENDDAT diff --git a/KUKA/KRC/R1/Program/Grip/GripClose.src b/KUKA/KRC/R1/Program/Grip/GripClose.src new file mode 100644 index 0000000..4ba3dd5 --- /dev/null +++ b/KUKA/KRC/R1/Program/Grip/GripClose.src @@ -0,0 +1,10 @@ +&ACCESS RV +DEF GripClose ( ) + Q_GripPosIndex=102 + Q_GripPosCount=I_GripPosCountRet+1 + IF Q_GripPosCount>1000 THEN + Q_GripPosCount=1 + ENDIF + WAIT FOR (I_GripPosIndexRet==Q_GripPosIndex) AND (I_GripPosCountRet==Q_GripPosCount) AND I_GripClose + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Grip/GripOpen.src b/KUKA/KRC/R1/Program/Grip/GripOpen.src new file mode 100644 index 0000000..3036f35 --- /dev/null +++ b/KUKA/KRC/R1/Program/Grip/GripOpen.src @@ -0,0 +1,11 @@ +&ACCESS RV +DEF GripOpen ( ) + + Q_GripPosIndex=101 + Q_GripPosCount=I_GripPosCountRet+1 + IF Q_GripPosCount>1000 THEN + Q_GripPosCount=1 + ENDIF + WAIT FOR (I_GripPosIndexRet==Q_GripPosIndex) AND (I_GripPosCountRet==Q_GripPosCount) AND I_GripOpen + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Home/HomeModule.dat b/KUKA/KRC/R1/Program/Home/HomeModule.dat new file mode 100644 index 0000000..19b24d0 --- /dev/null +++ b/KUKA/KRC/R1/Program/Home/HomeModule.dat @@ -0,0 +1,13 @@ +&ACCESS RV +DEFDAT HomeModule +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Home/HomeModule.src b/KUKA/KRC/R1/Program/Home/HomeModule.src new file mode 100644 index 0000000..f1ac251 --- /dev/null +++ b/KUKA/KRC/R1/Program/Home/HomeModule.src @@ -0,0 +1,27 @@ +&ACCESS RV +DEF HomeModule ( ) + ;FOLD INI;%{PE} + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) + ;ENDFOLD (INI) + + PTP $POS_ACT + IF $POS_ACT.Z<1600 THEN + LIN {Z 1600} + ENDIF + + ;FOLD SPTP HOME Vel=100 % DEFAULT ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=HOME; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=DEFAULT; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP + ;ENDFOLD + SPTP XHOME WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FHOME), $BASE = SBASE(FHOME.BASE_NO), $IPO_MODE = SIPO_MODE(FHOME.IPO_FRAME), $LOAD = SLOAD(FHOME.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PDEFAULT), $APO = SAPO_PTP(PDEFAULT), $GEAR_JERK[1] = SGEAR_JERK(PDEFAULT), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) + ;ENDFOLD + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/MainModule.dat b/KUKA/KRC/R1/Program/MainModule.dat new file mode 100644 index 0000000..292e6f9 --- /dev/null +++ b/KUKA/KRC/R1/Program/MainModule.dat @@ -0,0 +1,14 @@ +&ACCESS RVO +&REL 1 +DEFDAT MainModule +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/MainModule.src b/KUKA/KRC/R1/Program/MainModule.src new file mode 100644 index 0000000..a50fe9f --- /dev/null +++ b/KUKA/KRC/R1/Program/MainModule.src @@ -0,0 +1,75 @@ +&ACCESS RVO +&REL 1 +DEF MainModule() + ;FOLD INI + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS == TRUE DO IR_STOPM() + INTERRUPT ON 3 + ;ENDFOLD + ;FOLD USER INI + ;Make your modifications here + ;ENDFOLD + ;ENDFOLD + + $CYCFLAG[1]=(I_GripSafty1 == FALSE) OR (I_GripSafty2==FALSE) + INTERRUPT DECL 24 WHEN $CYCFLAG[1] DO StopSafty() + INTERRUPT ON 24 + + + ;FOLD PTP $POS_ACT Tool[0] Base[0] + BAS(#INITMOV, 0) + BAS(#BASE, 0) + BAS(#TOOL, 0) + PTP $POS_ACT + ;ENDFOLD + $ov_pro=40 + + LOOP + AutoRun() + ENDLOOP +END + +DEF AutoRun() + IF I_ProductType <> PdtTypeLast THEN + MsgNotify("PdtType is Change", "SafeErr") + Q_Error1=TRUE + $FLAG[10]=TRUE + HALT + ENDIF + PdtTypeLast=I_ProductType + WAIT FOR (I_Cmd > 0) AND (I_CmdCount <> CmdCountLast) AND (Q_Cmd_Running==0) + CmdSave = I_Cmd + CmdCountLast = I_CmdCount + Q_Cmd_Running=CmdSave + OffsetX_Save=I_OffsetX + OffsetY_Save=I_OffsetY + CountX_Save=I_CountX + CountY_Save=I_CountY + + SWITCH CmdSave + CASE 1 + FeedBelt1Pick() + CASE 2 + FeedBelt2Pick() + CASE 3 + ReFeedBeltPick() + CASE 4 + WaterBeltPick() + CASE 5 + NgBeltPlace() + CASE 10 + Pallet1Place() + CASE 11 + Pallet2Place() + ENDSWITCH + +END + + +DEF StopSafty() + INTERRUPT OFF 24 + BRAKE F + PTP $POS_INT:{z 20} + $FLAG[10]=TRUE + INTERRUPT ON 24 +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Mylib/CheckInPos.src b/KUKA/KRC/R1/Program/Mylib/CheckInPos.src new file mode 100644 index 0000000..7d5f646 --- /dev/null +++ b/KUKA/KRC/R1/Program/Mylib/CheckInPos.src @@ -0,0 +1,19 @@ +&ACCESS RVO +DEFFCT BOOL CheckInPos (R_offset:IN,EndPos:IN ) + DECL REAL R_offset + DECL BOOL b_Pok + DECL E6POS ACT_Point + DECL E6POS EndPos + ACT_Point = $POS_ACT + IF (ABS(ACT_Point.X - EndPos.X) > R_offset) OR (ABS(ACT_Point.Y - EndPos.Y) > R_offset) OR (ABS(ACT_Point.Z - EndPos.Z) > R_offset) OR (ABS(ACT_Point.A - EndPos.A) > 0.5) OR (ABS(ACT_Point.B - EndPos.B) > 0.5) OR (ABS(ACT_Point.C - EndPos.C) > 0.5) OR (ABS(ACT_Point.E1 - EndPos.E1) > R_offset) THEN + b_Pok=FALSE + ELSE + b_Pok=TRUE + ENDIF + IF NOT b_Pok THEN + MsgNotify("CheckInPosError", "OutArea", , , 1) + ;HALT + ENDIF + + RETURN b_Pok +ENDFCT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Mylib/INT_TO_STR.src b/KUKA/KRC/R1/Program/Mylib/INT_TO_STR.src new file mode 100644 index 0000000..9de3b0a --- /dev/null +++ b/KUKA/KRC/R1/Program/Mylib/INT_TO_STR.src @@ -0,0 +1,12 @@ +&ACCESS RVO +DEFFCT CHAR[32] INT_TO_STR(iVal:IN) + DECL INT iVal,I,offset + DECL CHAR Ret[32] + DECL STATE_T state + offset=0 + FOR I=1 TO 32 + Ret[I]=0 + ENDFOR + SWRITE(Ret[],state,offset,"%d",iVal) + Return (Ret[]) +ENDFCT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Mylib/Initmove.src b/KUKA/KRC/R1/Program/Mylib/Initmove.src new file mode 100644 index 0000000..4676b62 --- /dev/null +++ b/KUKA/KRC/R1/Program/Mylib/Initmove.src @@ -0,0 +1,12 @@ +&ACCESS RV +DEF Initmove ( ) +CONTINUE +IF ($T1 OR $T2) AND NOT $NEAR_POSRET THEN + CONTINUE + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + CONTINUE + PTP $POS_ACT C_DIS + ENDIF +END diff --git a/KUKA/KRC/R1/Program/Mylib/OffsetByBase.src b/KUKA/KRC/R1/Program/Mylib/OffsetByBase.src new file mode 100644 index 0000000..f63b468 --- /dev/null +++ b/KUKA/KRC/R1/Program/Mylib/OffsetByBase.src @@ -0,0 +1,64 @@ +&ACCESS RV +&REL 1 +DEFFCT E6POS OffsetByBase(Position:IN, rRelX:IN, rRelY:IN, rRelZ:IN, rRelA:IN, rRelB:IN, rRelC:IN) + DECL E6POS Position, rPosition + DECL REAL rRelX, rRelY, rRelZ, rRelA, rRelB, rRelC + DECL FRAME FrameTrans, FrameRot, PosTrans, PosRot + + IF VARSTATE("rRelX") <> #INITIALIZED THEN + rRelX = 0 + ENDIF + IF VARSTATE("rRelY") <> #INITIALIZED THEN + rRelY = 0 + ENDIF + IF VARSTATE("rRelZ") <> #INITIALIZED THEN + rRelZ = 0 + ENDIF + IF VARSTATE("rRelA") <> #INITIALIZED THEN + rRelA = 0 + ENDIF + IF VARSTATE("rRelB") <> #INITIALIZED THEN + rRelB = 0 + ENDIF + IF VARSTATE("rRelC") <> #INITIALIZED THEN + rRelC = 0 + ENDIF + + rPosition = Position + + FrameTrans = $NULLFRAME + FrameTrans.X = rRelX + FrameTrans.Y = rRelY + FrameTrans.Z = rRelZ + + FrameRot = $NULLFRAME + FrameRot.A = rRelA + FrameRot.B = rRelB + FrameRot.C = rRelC + + PosTrans = $NULLFRAME + PosTrans.X = rPosition.X + PosTrans.y = rPosition.Y + PosTrans.Z = rPosition.Z + + PosRot = $NULLFRAME + PosRot.A = rPosition.A + PosRot.B = rPosition.B + PosRot.C = rPosition.C + + ;Positionstransformation durchfuehren + rPosition = FrameTrans:PosTrans:FrameRot:PosRot + + ;Status & Turn der Originalposition uebernehmen + + ;Werte der externen Achse der Orignalposition + ;uebernehmen + rPosition.E1 = Position.E1 + rPosition.E2 = Position.E2 + rPosition.E3 = Position.E3 + rPosition.E4 = Position.E4 + rPosition.E5 = Position.E5 + rPosition.E6 = Position.E6 + + RETURN(rPosition) +ENDFCT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Mylib/OffsetByTool.src b/KUKA/KRC/R1/Program/Mylib/OffsetByTool.src new file mode 100644 index 0000000..00da12f --- /dev/null +++ b/KUKA/KRC/R1/Program/Mylib/OffsetByTool.src @@ -0,0 +1,45 @@ +&ACCESS RV +&REL 1 +DEFFCT E6POS OffsetByTool(Position:IN, rRelX:IN, rRelY:IN, rRelZ:IN, rRelA:IN, rRelB:IN, rRelC:IN) + DECL E6POS Position,rPosition + DECL REAL rRelX, rRelY, rRelZ, rRelA, rRelB, rRelC + DECL FRAME FrameTmp + + IF VARSTATE("rRelX") <> #INITIALIZED THEN + rRelX = 0 + ENDIF + IF VARSTATE("rRelY") <> #INITIALIZED THEN + rRelY = 0 + ENDIF + IF VARSTATE("rRelZ") <> #INITIALIZED THEN + rRelZ = 0 + ENDIF + IF VARSTATE("rRelA") <> #INITIALIZED THEN + rRelA = 0 + ENDIF + IF VARSTATE("rRelB") <> #INITIALIZED THEN + rRelB = 0 + ENDIF + IF VARSTATE("rRelC") <> #INITIALIZED THEN + rRelC = 0 + ENDIF + + FrameTmp = $NULLFRAME + FrameTmp.X = rRelX + FrameTmp.Y = rRelY + FrameTmp.Z = rRelZ + FrameTmp.A = rRelA + FrameTmp.B = rRelB + FrameTmp.C = rRelC + + rPosition = Position:FrameTmp + + rPosition.E1 = Position.E1 + rPosition.E2 = Position.E2 + rPosition.E3 = Position.E3 + rPosition.E4 = Position.E4 + rPosition.E5 = Position.E5 + rPosition.E6 = Position.E6 + + RETURN(rPosition) +ENDFCT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Mylib/REAL_TO_Output.src b/KUKA/KRC/R1/Program/Mylib/REAL_TO_Output.src new file mode 100644 index 0000000..b1019ed --- /dev/null +++ b/KUKA/KRC/R1/Program/Mylib/REAL_TO_Output.src @@ -0,0 +1,19 @@ +&ACCESS RV +DEFFCT INT REAL_TO_Output (rVal:IN ) + DECL REAL rVal + DECL INT Offset,Ret + DECL INT INTS[4] + DECL CHAR Bytes[4] + Offset=0 + Ret=0 + CAST_TO(Bytes[],Offset,rVal) + INTS[1] = Bytes[1] + INTS[2] = Bytes[2] + INTS[2] = INTS[2]*256 + INTS[3] = Bytes[3] + INTS[3] = INTS[3]*65536 + INTS[4] = Bytes[4] + INTS[4] = INTS[4]*16777216 + Ret=INTS[1]+INTS[2]+INTS[3]+INTS[4] + RETURN Ret +ENDFCT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/Mylib/REAL_TO_STR.src b/KUKA/KRC/R1/Program/Mylib/REAL_TO_STR.src new file mode 100644 index 0000000..e2a548c --- /dev/null +++ b/KUKA/KRC/R1/Program/Mylib/REAL_TO_STR.src @@ -0,0 +1,22 @@ +&ACCESS RVO +DEFFCT CHAR[32] REAL_TO_STR(iVal:IN) + DECL REAL iVal + DECL INT I,offset + DECL CHAR Ret[32] + DECL STATE_T state + offset=0 + FOR I=1 TO 32 + Ret[I]=0 + ENDFOR + SWRITE(Ret[],state,offset,"%.3f",iVal) + Return (Ret[]) +ENDFCT + + + + + + + + + \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/FeedBelt1Pick.dat b/KUKA/KRC/R1/Program/PL/FeedBelt1Pick.dat new file mode 100644 index 0000000..6b21df3 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/FeedBelt1Pick.dat @@ -0,0 +1,24 @@ +&ACCESS RV +DEFDAT FEEDBELT1PICK +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) + +DECL MODULEPARAM_T LAST_TP_PARAMS={PARAMS[] "Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.MovementParameterFieldEnabled=True; Kuka.IsAngleEnabled=False; Kuka.PointName=PickH; Kuka.FrameData.base_no=0; Kuka.FrameData.tool_no=1; Kuka.FrameData.ipo_frame=#BASE; Kuka.isglobalpoint=False; Kuka.MoveDataPtpName=PDAT1; Kuka.MovementDataPdat.apo_mode=#CDIS; Kuka.MovementDataPdat.apo_dist=500; Kuka.MovementData.vel=2; Kuka.MovementData.acc=100; Kuka.MovementData.exax_ign=0; Kuka.VelocityPtp=100; Kuka.BlendingEnabled=False; Kuka.APXEnabled=False; Kuka.CurrentCDSetIndex=0; Kuka.MoveDataName=CPDAT2; Kuka.MovementData.cb={AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}; Kuka.MovementData.apo_fac=50; Kuka.MovementData.apo_dist=500; Kuka.MovementData.axis_acc=100; Kuka.MovementData.axis_vel=100; Kuka.MovementData.circ_typ=#BASE; Kuka.MovementData.jerk_fac=50; Kuka.MovementData.ori_typ=#VAR; Kuka.VelocityPath=2; Kuka.FrameData.point2= "} +DECL FDAT FPickH={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPickH={X 1797.49475,Y 1360.66516,Z 1167.60986,A -165.399490,B -1.87913013,C 179.432770,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT1={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} +DECL FDAT FPick={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPick={X 1797.49475,Y 1360.66516,Z 667.609802,A -165.399490,B -1.87913013,C 179.432770,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT2={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} + +DECL PDAT PPDAT1={VEL 100.000,ACC 100.000,APO_DIST 500.000,APO_MODE #CDIS,GEAR_JERK 100.000,EXAX_IGN 0} + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/FeedBelt1Pick.src b/KUKA/KRC/R1/Program/PL/FeedBelt1Pick.src new file mode 100644 index 0000000..31681d8 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/FeedBelt1Pick.src @@ -0,0 +1,44 @@ +&ACCESS RV +DEF FeedBelt1Pick ( ) +;FOLD INI;%{PE} + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) +;ENDFOLD (INI) + + WAIT FOR $IN_HOME OR $IN_HOME1 OR $IN_HOME2 OR CheckInPos(20.0, END_POS) + XPickH=XPick + XPickH.Z=XPick.Z+500 +;FOLD SPTP PickH CONT Vel=100 % PDAT1 Tool[1] Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PickH; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP + ;ENDFOLD + SPTP XPickH WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FPickH), $BASE = SBASE(FPickH.BASE_NO), $IPO_MODE = SIPO_MODE(FPickH.IPO_FRAME), $LOAD = SLOAD(FPickH.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT1), $APO = SAPO_PTP(PPDAT1), $GEAR_JERK[1] = SGEAR_JERK(PPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_Spl +;ENDFOLD + CONTINUE + WAIT FOR I_GripOpen AND I_Signal1 AND I_AreaReady1 AND I_AreaReady4 AND NOT I_GripExist AND I_GripSafty1 AND I_GripSafty2 + CONTINUE + Q_AreaEnter1=TRUE +;FOLD SLIN Pick Vel=2 m/s CPDAT1 Tool[1] Base[0] ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=Pick; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN +;ENDFOLD +SLIN XPick WITH $VEL = SVEL_CP(2.0, , LCPDAT1), $TOOL = STOOL2(FPick), $BASE = SBASE(FPick.BASE_NO), $IPO_MODE = SIPO_MODE(FPick.IPO_FRAME), $LOAD = SLOAD(FPick.TOOL_NO), $ACC = SACC_CP(LCPDAT1), $ORI_TYPE = SORI_TYP(LCPDAT1), $APO = SAPO(LCPDAT1), $JERK = SJERK(LCPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + GripClose() +;FOLD SLIN PickH Vel=2 m/s CPDAT2 Tool[1] Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PickH; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT2; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPickH WITH $VEL = SVEL_CP(2.0, , LCPDAT2), $TOOL = STOOL2(FPickH), $BASE = SBASE(FPickH.BASE_NO), $IPO_MODE = SIPO_MODE(FPickH.IPO_FRAME), $LOAD = SLOAD(FPickH.TOOL_NO), $ACC = SACC_CP(LCPDAT2), $ORI_TYPE = SORI_TYP(LCPDAT2), $APO = SAPO(LCPDAT2), $JERK = SJERK(LCPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + Q_AreaEnter1=FALSE + ActionReturn(1) + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/FeedBelt2Pick.dat b/KUKA/KRC/R1/Program/PL/FeedBelt2Pick.dat new file mode 100644 index 0000000..4886a02 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/FeedBelt2Pick.dat @@ -0,0 +1,22 @@ +&ACCESS RV +DEFDAT FeedBelt2Pick +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +DECL LDAT LCPDAT2={CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}},APO_FAC 50.0,APO_DIST 500,AXIS_ACC 100.0,AXIS_VEL 100.0,CIRC_TYP #BASE,JERK_FAC 50.0,ORI_TYP #VAR,VEL 2,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL FDAT FPick_1={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL LDAT LCPDAT1={CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}},APO_FAC 50.0,APO_DIST 500,AXIS_ACC 100.0,AXIS_VEL 100.0,CIRC_TYP #BASE,JERK_FAC 50.0,ORI_TYP #VAR,VEL 2,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL PDAT PPDAT1={APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL FDAT FPickH={BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL MODULEPARAM_T LAST_TP_PARAMS = {PARAMS[] "Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.MovementParameterFieldEnabled=True; Kuka.IsAngleEnabled=False; Kuka.PointName=PickH; Kuka.FrameData.base_no=0; Kuka.FrameData.tool_no=1; Kuka.FrameData.ipo_frame=#BASE; Kuka.isglobalpoint=False; Kuka.MoveDataPtpName=PDAT1; Kuka.MovementDataPdat.apo_mode=#CDIS; Kuka.MovementDataPdat.apo_dist=500; Kuka.MovementData.vel=2; Kuka.MovementData.acc=100; Kuka.MovementData.exax_ign=0; Kuka.VelocityPtp=100; Kuka.BlendingEnabled=False; Kuka.APXEnabled=False; Kuka.CurrentCDSetIndex=0; Kuka.MoveDataName=CPDAT2; Kuka.MovementData.cb={AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}; Kuka.MovementData.apo_fac=50; Kuka.MovementData.apo_dist=500; Kuka.MovementData.axis_acc=100; Kuka.MovementData.axis_vel=100; Kuka.MovementData.circ_typ=#BASE; Kuka.MovementData.jerk_fac=50; Kuka.MovementData.ori_typ=#VAR; Kuka.VelocityPath=2; Kuka.FrameData.point2= "} +DECL E6POS XPickH = {A -165.39949,B -1.87913013,C 179.43277,S 2,T 43,X 1797.49475,Y 1360.66516,Z 1167.60986,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL E6POS XPick = {A -165.39949,B -1.87913013,C 179.43277,S 2,T 43,X 1797.49475,Y 1360.66516,Z 667.609802,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL FDAT FPick = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/FeedBelt2Pick.src b/KUKA/KRC/R1/Program/PL/FeedBelt2Pick.src new file mode 100644 index 0000000..2fd2cb0 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/FeedBelt2Pick.src @@ -0,0 +1,45 @@ +&ACCESS RV +DEF FeedBelt2Pick ( ) +;FOLD INI;%{PE} + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) +;ENDFOLD (INI) + + WAIT FOR $IN_HOME OR $IN_HOME1 OR $IN_HOME2 OR CheckInPos(20.0, END_POS) + XPickH=XPick + XPickH.Z=XPick.Z+500 +;FOLD SPTP PickH CONT Vel=100 % PDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PickH; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP + ;ENDFOLD + SPTP XPickH WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FPickH), $BASE = SBASE(FPickH.BASE_NO), $IPO_MODE = SIPO_MODE(FPickH.IPO_FRAME), $LOAD = SLOAD(FPickH.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT1), $APO = SAPO_PTP(PPDAT1), $GEAR_JERK[1] = SGEAR_JERK(PPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_Spl +;ENDFOLD + CONTINUE + WAIT FOR I_GripOpen AND I_Signal2 AND I_AreaReady1 AND I_AreaReady4 AND NOT I_GripExist AND I_GripSafty1 AND I_GripSafty2 + CONTINUE + Q_AreaEnter1=TRUE +;FOLD SLIN Pick Vel=2 m/s CPDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=Pick; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPick WITH $VEL = SVEL_CP(2.0, , LCPDAT1), $TOOL = STOOL2(FPick), $BASE = SBASE(FPick.BASE_NO), $IPO_MODE = SIPO_MODE(FPick.IPO_FRAME), $LOAD = SLOAD(FPick.TOOL_NO), $ACC = SACC_CP(LCPDAT1), $ORI_TYPE = SORI_TYP(LCPDAT1), $APO = SAPO(LCPDAT1), $JERK = SJERK(LCPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + GripClose() +;FOLD SLIN PickH Vel=2 m/s CPDAT2 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PickH; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT2; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPickH WITH $VEL = SVEL_CP(2.0, , LCPDAT2), $TOOL = STOOL2(FPickH), $BASE = SBASE(FPickH.BASE_NO), $IPO_MODE = SIPO_MODE(FPickH.IPO_FRAME), $LOAD = SLOAD(FPickH.TOOL_NO), $ACC = SACC_CP(LCPDAT2), $ORI_TYPE = SORI_TYP(LCPDAT2), $APO = SAPO(LCPDAT2), $JERK = SJERK(LCPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + Q_AreaEnter1=FALSE + ActionReturn(1) + + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/NgBeltPlace.dat b/KUKA/KRC/R1/Program/PL/NgBeltPlace.dat new file mode 100644 index 0000000..c5ba9f6 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/NgBeltPlace.dat @@ -0,0 +1,23 @@ +&ACCESS RV +DEFDAT NgBeltPlace +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +DECL MODULEPARAM_T LAST_TP_PARAMS = {PARAMS[] "Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.MovementParameterFieldEnabled=True; Kuka.IsAngleEnabled=False; Kuka.PointName=PlaceH; Kuka.FrameData.base_no=0; Kuka.FrameData.tool_no=1; Kuka.FrameData.ipo_frame=#BASE; Kuka.isglobalpoint=False; Kuka.MoveDataPtpName=PDAT2; Kuka.MovementDataPdat.apo_mode=#CDIS; Kuka.MovementDataPdat.apo_dist=500; Kuka.MovementData.vel=2; Kuka.MovementData.acc=100; Kuka.MovementData.exax_ign=0; Kuka.VelocityPtp=100; Kuka.BlendingEnabled=True; Kuka.APXEnabled=False; Kuka.CurrentCDSetIndex=0; Kuka.MoveDataName=CPDAT2; Kuka.MovementData.cb={AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}; Kuka.MovementData.apo_fac=50; Kuka.MovementData.apo_dist=500; Kuka.MovementData.axis_acc=100; Kuka.MovementData.axis_vel=100; Kuka.MovementData.circ_typ=#BASE; Kuka.MovementData.jerk_fac=50; Kuka.MovementData.ori_typ=#VAR; Kuka.VelocityPath=2; Kuka.FrameData.point2= "} +DECL FDAT FPlaceH={BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPlaceH={X 1800.64709,Y -146.362045,Z 1228.85449,A -165.397675,B -1.88142359,C 179.427,S 2,T 2,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT1={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} +DECL FDAT FPlace={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPlace={X 1800.64709,Y -146.362045,Z 728.854492,A -165.397675,B -1.88142359,C 179.427,S 2,T 2,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT2={CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}},APO_FAC 50.0,APO_DIST 500,AXIS_ACC 100.0,AXIS_VEL 100.0,CIRC_TYP #BASE,JERK_FAC 50.0,ORI_TYP #VAR,VEL 2,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL PDAT PPDAT1={VEL 100.000,ACC 100.000,APO_DIST 500.000,APO_MODE #CDIS,GEAR_JERK 100.000,EXAX_IGN 0} +DECL FDAT FHOME1 = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL PDAT PPDAT2 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/NgBeltPlace.src b/KUKA/KRC/R1/Program/PL/NgBeltPlace.src new file mode 100644 index 0000000..1e69694 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/NgBeltPlace.src @@ -0,0 +1,52 @@ +&ACCESS RV +DEF NgBeltPlace ( ) +;FOLD INI;%{PE} + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) +;ENDFOLD (INI) + + WAIT FOR $IN_HOME OR $IN_HOME1 OR $IN_HOME2 OR CheckInPos(20.0, END_POS) + XPlaceH=XPlace + XPlaceH.Z=XPlace.Z+500 +;FOLD SPTP PlaceH CONT Vel=100 % PDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PlaceH; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP + ;ENDFOLD + SPTP XPlaceH WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FPlaceH), $BASE = SBASE(FPlaceH.BASE_NO), $IPO_MODE = SIPO_MODE(FPlaceH.IPO_FRAME), $LOAD = SLOAD(FPlaceH.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT1), $APO = SAPO_PTP(PPDAT1), $GEAR_JERK[1] = SGEAR_JERK(PPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_Spl +;ENDFOLD + CONTINUE + WAIT FOR I_AreaReady4 AND NOT I_Signal5 AND NOT I_GripBelowExist AND I_GripSafty1 AND I_GripSafty2 + CONTINUE + Q_AreaEnter2=TRUE +;FOLD SLIN Place Vel=2 m/s CPDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=Place; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPlace WITH $VEL = SVEL_CP(2.0, , LCPDAT1), $TOOL = STOOL2(FPlace), $BASE = SBASE(FPlace.BASE_NO), $IPO_MODE = SIPO_MODE(FPlace.IPO_FRAME), $LOAD = SLOAD(FPlace.TOOL_NO), $ACC = SACC_CP(LCPDAT1), $ORI_TYPE = SORI_TYP(LCPDAT1), $APO = SAPO(LCPDAT1), $JERK = SJERK(LCPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + GripOpen() +;FOLD SLIN PlaceH CONT Vel=2 m/s CPDAT2 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PlaceH; Kuka.BlendingEnabled=True; Kuka.MoveDataName=CPDAT2; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPlaceH WITH $VEL = SVEL_CP(2.0, , LCPDAT2), $TOOL = STOOL2(FPlaceH), $BASE = SBASE(FPlaceH.BASE_NO), $IPO_MODE = SIPO_MODE(FPlaceH.IPO_FRAME), $LOAD = SLOAD(FPlaceH.TOOL_NO), $ACC = SACC_CP(LCPDAT2), $ORI_TYPE = SORI_TYP(LCPDAT2), $APO = SAPO(LCPDAT2), $JERK = SJERK(LCPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_Spl +;ENDFOLD + CONTINUE + Q_AreaEnter2=FALSE + +;FOLD SPTP HOME1 Vel=100 % PDAT2 ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=HOME1; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT2; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XHOME1 WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FHOME1), $BASE = SBASE(FHOME1.BASE_NO), $IPO_MODE = SIPO_MODE(FHOME1.IPO_FRAME), $LOAD = SLOAD(FHOME1.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT2), $APO = SAPO_PTP(PPDAT2), $GEAR_JERK[1] = SGEAR_JERK(PPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + ActionReturn(1) + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/Pallet1Place.dat b/KUKA/KRC/R1/Program/PL/Pallet1Place.dat new file mode 100644 index 0000000..bc74519 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/Pallet1Place.dat @@ -0,0 +1,26 @@ +&ACCESS RV +DEFDAT PALLET1PLACE +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) + + + +DECL MODULEPARAM_T LAST_TP_PARAMS = {PARAMS[] "Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.MovementParameterFieldEnabled=True; Kuka.IsAngleEnabled=False; Kuka.PointName=PlaceH; Kuka.FrameData.base_no=0; Kuka.FrameData.tool_no=1; Kuka.FrameData.ipo_frame=#BASE; Kuka.isglobalpoint=False; Kuka.MoveDataPtpName=PDAT2; Kuka.MovementDataPdat.apo_mode=#CDIS; Kuka.MovementDataPdat.apo_dist=500; Kuka.MovementData.vel=100; Kuka.MovementData.acc=100; Kuka.MovementData.exax_ign=0; Kuka.VelocityPtp=100; Kuka.BlendingEnabled=False; Kuka.APXEnabled=False; Kuka.CurrentCDSetIndex=0; Kuka.MoveDataName=CPDAT2; Kuka.MovementData.cb={AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}; Kuka.MovementData.apo_fac=50; Kuka.MovementData.apo_dist=500; Kuka.MovementData.axis_acc=100; Kuka.MovementData.axis_vel=100; Kuka.MovementData.circ_typ=#BASE; Kuka.MovementData.jerk_fac=50; Kuka.MovementData.ori_typ=#VAR; Kuka.VelocityPath=2; Kuka.FrameData.point2="} +DECL FDAT FPlaceH={BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPlaceH={X 1800.64709,Y -146.362045,Z 1228.85449,A -165.397675,B -1.88142359,C 179.427,S 2,T 2,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT1={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} +DECL FDAT FPlace={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPlace={X 1800.64709,Y -146.362045,Z 728.854492,A -165.397675,B -1.88142359,C 179.427,S 2,T 2,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT2={CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}},APO_FAC 50.0,APO_DIST 500,AXIS_ACC 100.0,AXIS_VEL 100.0,CIRC_TYP #BASE,JERK_FAC 50.0,ORI_TYP #VAR,VEL 2,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL PDAT PPDAT1={VEL 100.000,ACC 100.000,APO_DIST 500.000,APO_MODE #CDIS,GEAR_JERK 100.000,EXAX_IGN 0} +DECL FDAT FHOME1 = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL PDAT PPDAT2 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/Pallet1Place.src b/KUKA/KRC/R1/Program/PL/Pallet1Place.src new file mode 100644 index 0000000..8ee7e0b --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/Pallet1Place.src @@ -0,0 +1,53 @@ +&ACCESS RV +DEF Pallet1Place ( ) +;FOLD INI;%{PE} + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) + ;ENDFOLD (INI) + + WAIT FOR $IN_HOME OR $IN_HOME1 OR $IN_HOME2 OR CheckInPos(20.0, END_POS) + XPlace=XPallet1PlaceB + XPlace.X=XPallet1PlaceB.X - CountY_Save*OffsetY_Save + XPlace.Y=XPallet1PlaceB.Y - CountX_Save*OffsetX_Save + XPlaceH=XPlace + XPlaceH.Z=XPlace.Z+500 +;FOLD SPTP PlaceH CONT Vel=100 % PDAT1 Tool[1] Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PlaceH; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP + ;ENDFOLD + SPTP XPlaceH WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FPlaceH), $BASE = SBASE(FPlaceH.BASE_NO), $IPO_MODE = SIPO_MODE(FPlaceH.IPO_FRAME), $LOAD = SLOAD(FPlaceH.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT1), $APO = SAPO_PTP(PPDAT1), $GEAR_JERK[1] = SGEAR_JERK(PPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_Spl +;ENDFOLD + CONTINUE + WAIT FOR I_AreaReady2 AND NOT I_GripBelowExist AND I_GripSafty1 AND I_GripSafty2 + CONTINUE + Q_AreaEnter2=TRUE +;FOLD SLIN Place Vel=2 m/s CPDAT1 Tool[1] Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=Place; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPlace WITH $VEL = SVEL_CP(2.0, , LCPDAT1), $TOOL = STOOL2(FPlace), $BASE = SBASE(FPlace.BASE_NO), $IPO_MODE = SIPO_MODE(FPlace.IPO_FRAME), $LOAD = SLOAD(FPlace.TOOL_NO), $ACC = SACC_CP(LCPDAT1), $ORI_TYPE = SORI_TYP(LCPDAT1), $APO = SAPO(LCPDAT1), $JERK = SJERK(LCPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + GripOpen() +;FOLD SLIN PlaceH CONT Vel=2 m/s CPDAT2 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PlaceH; Kuka.BlendingEnabled=True; Kuka.MoveDataName=CPDAT2; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPlaceH WITH $VEL = SVEL_CP(2.0, , LCPDAT2), $TOOL = STOOL2(FPlaceH), $BASE = SBASE(FPlaceH.BASE_NO), $IPO_MODE = SIPO_MODE(FPlaceH.IPO_FRAME), $LOAD = SLOAD(FPlaceH.TOOL_NO), $ACC = SACC_CP(LCPDAT2), $ORI_TYPE = SORI_TYP(LCPDAT2), $APO = SAPO(LCPDAT2), $JERK = SJERK(LCPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_Spl +;ENDFOLD + CONTINUE + Q_AreaEnter2=FALSE +;FOLD SPTP HOME1 Vel=100 % PDAT2 ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=HOME1; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT2; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XHOME1 WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FHOME1), $BASE = SBASE(FHOME1.BASE_NO), $IPO_MODE = SIPO_MODE(FHOME1.IPO_FRAME), $LOAD = SLOAD(FHOME1.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT2), $APO = SAPO_PTP(PPDAT2), $GEAR_JERK[1] = SGEAR_JERK(PPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + ActionReturn(1) +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/Pallet2Place.dat b/KUKA/KRC/R1/Program/PL/Pallet2Place.dat new file mode 100644 index 0000000..775aa78 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/Pallet2Place.dat @@ -0,0 +1,23 @@ +&ACCESS RV +DEFDAT Pallet2Place +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +DECL MODULEPARAM_T LAST_TP_PARAMS = {PARAMS[] "Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.MovementParameterFieldEnabled=True; Kuka.IsAngleEnabled=False; Kuka.PointName=PlaceH; Kuka.FrameData.base_no=0; Kuka.FrameData.tool_no=1; Kuka.FrameData.ipo_frame=#BASE; Kuka.isglobalpoint=False; Kuka.MoveDataPtpName=PDAT2; Kuka.MovementDataPdat.apo_mode=#CDIS; Kuka.MovementDataPdat.apo_dist=500; Kuka.MovementData.vel=100; Kuka.MovementData.acc=100; Kuka.MovementData.exax_ign=0; Kuka.VelocityPtp=100; Kuka.BlendingEnabled=False; Kuka.APXEnabled=False; Kuka.CurrentCDSetIndex=0; Kuka.MoveDataName=CPDAT2; Kuka.MovementData.cb={AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}; Kuka.MovementData.apo_fac=50; Kuka.MovementData.apo_dist=500; Kuka.MovementData.axis_acc=100; Kuka.MovementData.axis_vel=100; Kuka.MovementData.circ_typ=#BASE; Kuka.MovementData.jerk_fac=50; Kuka.MovementData.ori_typ=#VAR; Kuka.VelocityPath=2; Kuka.FrameData.point2="} +DECL FDAT FPlaceH={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPlaceH={X 1800.64709,Y -146.362045,Z 1228.85449,A -165.397675,B -1.88142359,C 179.427,S 2,T 2,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT1={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} +DECL FDAT FPlace={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPlace={X 1800.64709,Y -146.362045,Z 728.854492,A -165.397675,B -1.88142359,C 179.427,S 2,T 2,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT2={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} +DECL PDAT PPDAT1={VEL 100.000,ACC 100.000,APO_DIST 500.000,APO_MODE #CDIS,GEAR_JERK 100.000,EXAX_IGN 0} +DECL FDAT FHOME1 = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL PDAT PPDAT2 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/Pallet2Place.src b/KUKA/KRC/R1/Program/PL/Pallet2Place.src new file mode 100644 index 0000000..0d38712 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/Pallet2Place.src @@ -0,0 +1,53 @@ +&ACCESS RV +DEF Pallet2Place ( ) +;FOLD INI;%{PE} + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) +;ENDFOLD (INI) + WAIT FOR $IN_HOME OR $IN_HOME1 OR $IN_HOME2 OR CheckInPos(20.0, END_POS) + XPlace=XPallet1PlaceB + XPlace.X=XPallet1PlaceB.X - CountY_Save*OffsetY_Save + XPlace.Y=XPallet1PlaceB.Y - CountX_Save*OffsetX_Save + XPlaceH=XPlace + XPlaceH.Z=XPlace.Z+500 +;FOLD SPTP PlaceH CONT Vel=100 % PDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PlaceH; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP + ;ENDFOLD + SPTP XPlaceH WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FPlaceH), $BASE = SBASE(FPlaceH.BASE_NO), $IPO_MODE = SIPO_MODE(FPlaceH.IPO_FRAME), $LOAD = SLOAD(FPlaceH.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT1), $APO = SAPO_PTP(PPDAT1), $GEAR_JERK[1] = SGEAR_JERK(PPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_Spl +;ENDFOLD + CONTINUE + WAIT FOR I_AreaReady2 AND NOT I_GripBelowExist AND I_GripSafty1 AND I_GripSafty2 + CONTINUE + Q_AreaEnter2=TRUE +;FOLD SLIN Place Vel=2 m/s CPDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=Place; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPlace WITH $VEL = SVEL_CP(2.0, , LCPDAT1), $TOOL = STOOL2(FPlace), $BASE = SBASE(FPlace.BASE_NO), $IPO_MODE = SIPO_MODE(FPlace.IPO_FRAME), $LOAD = SLOAD(FPlace.TOOL_NO), $ACC = SACC_CP(LCPDAT1), $ORI_TYPE = SORI_TYP(LCPDAT1), $APO = SAPO(LCPDAT1), $JERK = SJERK(LCPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + GripOpen() +;FOLD SLIN PlaceH Vel=2 m/s CPDAT2 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PlaceH; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT2; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPlaceH WITH $VEL = SVEL_CP(2.0, , LCPDAT2), $TOOL = STOOL2(FPlaceH), $BASE = SBASE(FPlaceH.BASE_NO), $IPO_MODE = SIPO_MODE(FPlaceH.IPO_FRAME), $LOAD = SLOAD(FPlaceH.TOOL_NO), $ACC = SACC_CP(LCPDAT2), $ORI_TYPE = SORI_TYP(LCPDAT2), $APO = SAPO(LCPDAT2), $JERK = SJERK(LCPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) + ;ENDFOLD + CONTINUE + Q_AreaEnter2=FALSE +;FOLD SPTP HOME1 Vel=100 % PDAT2 ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=HOME1; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT2; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XHOME1 WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FHOME1), $BASE = SBASE(FHOME1.BASE_NO), $IPO_MODE = SIPO_MODE(FHOME1.IPO_FRAME), $LOAD = SLOAD(FHOME1.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT2), $APO = SAPO_PTP(PPDAT2), $GEAR_JERK[1] = SGEAR_JERK(PPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + ActionReturn(1) + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/PosBase.dat b/KUKA/KRC/R1/Program/PL/PosBase.dat new file mode 100644 index 0000000..3ba055a --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/PosBase.dat @@ -0,0 +1,21 @@ +&ACCESS RV +&REL 7 +&PARAM DISKPATH = KRC:\R1\Program\TP +DEFDAT POSBASE PUBLIC + +;*************************************************** +; * +;*************************************************** +DECL GLOBAL E6POS XPallet1PlaceB={X 1800.64709,Y -146.362045,Z 728.854492,A -165.397675,B -1.88142359,C 179.427,S 2,T 2,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL GLOBAL E6POS XPallet2PlaceB={X 1800.64709,Y -146.362045,Z 728.854492,A -165.397675,B -1.88142359,C 179.427,S 2,T 2,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL GLOBAL E6POS XFeedBelt1Pick={X 1797.49475,Y 1360.66516,Z 667.609802,A -165.399490,B -1.87913013,C 179.432770,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL GLOBAL E6POS XFeedBelt2Pick={X 1797.49353,Y 1360.66553,Z 667.598755,A -165.400482,B -1.87961507,C 179.432861,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL GLOBAL E6POS XNgBeltPlace={X 1797.49353,Y 1360.66553,Z 667.598755,A -165.400482,B -1.87961507,C 179.432861,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL GLOBAL E6POS XWaterBeltPick={X 1797.49353,Y 1360.66553,Z 667.598755,A -165.400482,B -1.87961507,C 179.432861,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL GLOBAL E6POS XReFeedBeltPick={X 1797.49353,Y 1360.66553,Z 667.598755,A -165.400482,B -1.87961507,C 179.432861,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} + + + + + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/ReFeedBeltPick.dat b/KUKA/KRC/R1/Program/PL/ReFeedBeltPick.dat new file mode 100644 index 0000000..aa51342 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/ReFeedBeltPick.dat @@ -0,0 +1,23 @@ +&ACCESS RV +DEFDAT ReFeedBeltPick +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +DECL MODULEPARAM_T LAST_TP_PARAMS={PARAMS[] "Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.MovementParameterFieldEnabled=True; Kuka.IsAngleEnabled=False; Kuka.PointName=PickH; Kuka.FrameData.base_no=0; Kuka.FrameData.tool_no=1; Kuka.FrameData.ipo_frame=#BASE; Kuka.isglobalpoint=False; Kuka.MoveDataPtpName=PDAT1; Kuka.MovementDataPdat.apo_mode=#CDIS; Kuka.MovementDataPdat.apo_dist=500; Kuka.MovementData.vel=2; Kuka.MovementData.acc=100; Kuka.MovementData.exax_ign=0; Kuka.VelocityPtp=100; Kuka.BlendingEnabled=False; Kuka.APXEnabled=False; Kuka.CurrentCDSetIndex=0; Kuka.MoveDataName=CPDAT2; Kuka.MovementData.cb={AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}; Kuka.MovementData.apo_fac=50; Kuka.MovementData.apo_dist=500; Kuka.MovementData.axis_acc=100; Kuka.MovementData.axis_vel=100; Kuka.MovementData.circ_typ=#BASE; Kuka.MovementData.jerk_fac=50; Kuka.MovementData.ori_typ=#VAR; Kuka.VelocityPath=2; Kuka.FrameData.point2= "} +DECL FDAT FPickH={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPickH={X 1797.49475,Y 1360.66516,Z 1167.60986,A -165.399490,B -1.87913013,C 179.432770,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT1={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} +DECL FDAT FPick={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPick={X 1797.49475,Y 1360.66516,Z 667.609802,A -165.399490,B -1.87913013,C 179.432770,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT2={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} + +DECL PDAT PPDAT1={VEL 100.000,ACC 100.000,APO_DIST 500.000,APO_MODE #CDIS,GEAR_JERK 100.000,EXAX_IGN 0} + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/ReFeedBeltPick.src b/KUKA/KRC/R1/Program/PL/ReFeedBeltPick.src new file mode 100644 index 0000000..ea87c24 --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/ReFeedBeltPick.src @@ -0,0 +1,44 @@ +&ACCESS RV +DEF ReFeedBeltPick ( ) +;FOLD INI;%{PE} + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) +;ENDFOLD (INI) + + WAIT FOR $IN_HOME OR $IN_HOME1 OR $IN_HOME2 OR CheckInPos(20.0, END_POS) + XPickH=XPick + XPickH.Z=XPick.Z+500 +;FOLD SPTP PickH CONT Vel=100 % PDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PickH; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP + ;ENDFOLD + SPTP XPickH WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FPickH), $BASE = SBASE(FPickH.BASE_NO), $IPO_MODE = SIPO_MODE(FPickH.IPO_FRAME), $LOAD = SLOAD(FPickH.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT1), $APO = SAPO_PTP(PPDAT1), $GEAR_JERK[1] = SGEAR_JERK(PPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_Spl +;ENDFOLD + CONTINUE + WAIT FOR I_GripOpen AND I_Signal1 AND I_AreaReady1 AND I_AreaReady4 AND NOT I_GripExist AND I_GripSafty1 AND I_GripSafty2 + CONTINUE + Q_AreaEnter1=TRUE +;FOLD SLIN Pick Vel=2 m/s CPDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=Pick; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPick WITH $VEL = SVEL_CP(2.0, , LCPDAT1), $TOOL = STOOL2(FPick), $BASE = SBASE(FPick.BASE_NO), $IPO_MODE = SIPO_MODE(FPick.IPO_FRAME), $LOAD = SLOAD(FPick.TOOL_NO), $ACC = SACC_CP(LCPDAT1), $ORI_TYPE = SORI_TYP(LCPDAT1), $APO = SAPO(LCPDAT1), $JERK = SJERK(LCPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + GripClose() +;FOLD SLIN PickH Vel=2 m/s CPDAT2 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PickH; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT2; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPickH WITH $VEL = SVEL_CP(2.0, , LCPDAT2), $TOOL = STOOL2(FPickH), $BASE = SBASE(FPickH.BASE_NO), $IPO_MODE = SIPO_MODE(FPickH.IPO_FRAME), $LOAD = SLOAD(FPickH.TOOL_NO), $ACC = SACC_CP(LCPDAT2), $ORI_TYPE = SORI_TYP(LCPDAT2), $APO = SAPO(LCPDAT2), $JERK = SJERK(LCPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + Q_AreaEnter1=FALSE + ActionReturn(1) + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/WaterBeltPick.dat b/KUKA/KRC/R1/Program/PL/WaterBeltPick.dat new file mode 100644 index 0000000..063eacd --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/WaterBeltPick.dat @@ -0,0 +1,23 @@ +&ACCESS RV +DEFDAT WaterBeltPick +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +DECL MODULEPARAM_T LAST_TP_PARAMS={PARAMS[] "Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.MovementParameterFieldEnabled=True; Kuka.IsAngleEnabled=False; Kuka.PointName=PickH; Kuka.FrameData.base_no=0; Kuka.FrameData.tool_no=1; Kuka.FrameData.ipo_frame=#BASE; Kuka.isglobalpoint=False; Kuka.MoveDataPtpName=PDAT1; Kuka.MovementDataPdat.apo_mode=#CDIS; Kuka.MovementDataPdat.apo_dist=500; Kuka.MovementData.vel=2; Kuka.MovementData.acc=100; Kuka.MovementData.exax_ign=0; Kuka.VelocityPtp=100; Kuka.BlendingEnabled=False; Kuka.APXEnabled=False; Kuka.CurrentCDSetIndex=0; Kuka.MoveDataName=CPDAT2; Kuka.MovementData.cb={AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}; Kuka.MovementData.apo_fac=50; Kuka.MovementData.apo_dist=500; Kuka.MovementData.axis_acc=100; Kuka.MovementData.axis_vel=100; Kuka.MovementData.circ_typ=#BASE; Kuka.MovementData.jerk_fac=50; Kuka.MovementData.ori_typ=#VAR; Kuka.VelocityPath=2; Kuka.FrameData.point2= "} +DECL FDAT FPickH={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPickH={X 1797.49475,Y 1360.66516,Z 1167.60986,A -165.399490,B -1.87913013,C 179.432770,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT1={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} +DECL FDAT FPick={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +DECL E6POS XPick={X 1797.49475,Y 1360.66516,Z 667.609802,A -165.399490,B -1.87913013,C 179.432770,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +DECL LDAT LCPDAT2={VEL 2.00000,ACC 100.000,APO_DIST 500.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0,CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} + +DECL PDAT PPDAT1={VEL 100.000,ACC 100.000,APO_DIST 500.000,APO_MODE #CDIS,GEAR_JERK 100.000,EXAX_IGN 0} + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PL/WaterBeltPick.src b/KUKA/KRC/R1/Program/PL/WaterBeltPick.src new file mode 100644 index 0000000..558f79f --- /dev/null +++ b/KUKA/KRC/R1/Program/PL/WaterBeltPick.src @@ -0,0 +1,44 @@ +&ACCESS RV +DEF WaterBeltPick ( ) +;FOLD INI;%{PE} + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) +;ENDFOLD (INI) + + WAIT FOR $IN_HOME OR $IN_HOME1 OR $IN_HOME2 OR CheckInPos(20.0, END_POS) + XPickH=XPick + XPickH.Z=XPick.Z+500 +;FOLD SPTP PickH CONT Vel=100 % PDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PickH; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP + ;ENDFOLD + SPTP XPickH WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FPickH), $BASE = SBASE(FPickH.BASE_NO), $IPO_MODE = SIPO_MODE(FPickH.IPO_FRAME), $LOAD = SLOAD(FPickH.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT1), $APO = SAPO_PTP(PPDAT1), $GEAR_JERK[1] = SGEAR_JERK(PPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) C_Spl +;ENDFOLD + CONTINUE + WAIT FOR I_GripOpen AND I_Signal1 AND I_AreaReady1 AND I_AreaReady4 AND NOT I_GripExist AND I_GripSafty1 AND I_GripSafty2 + CONTINUE + Q_AreaEnter1=TRUE +;FOLD SLIN Pick Vel=2 m/s CPDAT1 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=Pick; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPick WITH $VEL = SVEL_CP(2.0, , LCPDAT1), $TOOL = STOOL2(FPick), $BASE = SBASE(FPick.BASE_NO), $IPO_MODE = SIPO_MODE(FPick.IPO_FRAME), $LOAD = SLOAD(FPick.TOOL_NO), $ACC = SACC_CP(LCPDAT1), $ORI_TYPE = SORI_TYP(LCPDAT1), $APO = SAPO(LCPDAT1), $JERK = SJERK(LCPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + GripClose() +;FOLD SLIN PickH Vel=2 m/s CPDAT2 Tool[1]:Tool1 Base[0] ;%{PE} + ;FOLD Parameters ;%{h} + ;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=PickH; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT2; Kuka.VelocityPath=2; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SLIN + ;ENDFOLD + SLIN XPickH WITH $VEL = SVEL_CP(2.0, , LCPDAT2), $TOOL = STOOL2(FPickH), $BASE = SBASE(FPickH.BASE_NO), $IPO_MODE = SIPO_MODE(FPickH.IPO_FRAME), $LOAD = SLOAD(FPickH.TOOL_NO), $ACC = SACC_CP(LCPDAT2), $ORI_TYPE = SORI_TYP(LCPDAT2), $APO = SAPO(LCPDAT2), $JERK = SJERK(LCPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + Q_AreaEnter1=FALSE + ActionReturn(1) + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/PLC.sub b/KUKA/KRC/R1/Program/PLC.sub new file mode 100644 index 0000000..d411411 --- /dev/null +++ b/KUKA/KRC/R1/Program/PLC.sub @@ -0,0 +1,44 @@ +&ACCESS RVO +&COMMENT USER specified PLC program +&ACCESS RVP +&COMMENT USER specified PLC program +DEF PLC ( ) + DECL STATE_T STAT + DECL MODUS_T MODE + LOOP + + IF $FLAG[10] THEN + CWRITE($CMD,STAT,MODE,"RESET/R1/cell()") + ;CWRITE($CMD,STAT,MODE,"RESET/R1/MainModule()") + $FLAG[10]=FALSE + ENDIF + IF $FLAG[11] THEN + CWRITE($CMD,STAT,MODE,"STOP 1") + $FLAG[11]=FALSE + ENDIF + IF $FLAG[12] THEN + CWRITE($CMD,STAT,MODE,"CANCEL 1") + $FLAG[12]=FALSE + ENDIF + IF $CONF_MESS AND NOT ConfMessSave THEN + Q_Error1=FALSE + Q_Error2=FALSE + Q_Error3=FALSE + Q_Error4=FALSE + Q_Error5=FALSE + Q_Error6=FALSE + Q_Error7=FALSE + Q_Error8=FALSE + Q_Error9=FALSE + Q_Error10=FALSE + Q_Error11=FALSE + Q_Error12=FALSE + Q_Error13=FALSE + Q_Error14=FALSE + Q_Error15=FALSE + Q_Error16=FALSE + ENDIF + ConfMessSave=$CONF_MESS + ON_ERROR_PROCEED + ENDLOOP +END diff --git a/KUKA/KRC/R1/Program/SignalIO.dat b/KUKA/KRC/R1/Program/SignalIO.dat new file mode 100644 index 0000000..7e0bdf9 --- /dev/null +++ b/KUKA/KRC/R1/Program/SignalIO.dat @@ -0,0 +1,129 @@ +&ACCESS RV +&REL 1 +DEFDAT SignalIO PUBLIC + +;FOLD PLC_TO_KUKA + +GLOBAL SIGNAL I_AreaReady1 $IN[17] +GLOBAL SIGNAL I_AreaReady2 $IN[18] +GLOBAL SIGNAL I_AreaReady3 $IN[19] +GLOBAL SIGNAL I_AreaReady4 $IN[20] +GLOBAL SIGNAL I_AreaReady5 $IN[21] +GLOBAL SIGNAL I_AreaReady6 $IN[22] +GLOBAL SIGNAL I_AreaReady7 $IN[23] +GLOBAL SIGNAL I_AreaReady8 $IN[24] +GLOBAL SIGNAL I_AreaReady9 $IN[25] +GLOBAL SIGNAL I_AreaReady10 $IN[26] +GLOBAL SIGNAL I_AreaReady11 $IN[27] +GLOBAL SIGNAL I_AreaReady12 $IN[28] +GLOBAL SIGNAL I_AreaReady13 $IN[29] +GLOBAL SIGNAL I_AreaReady14 $IN[30] +GLOBAL SIGNAL I_AreaReady15 $IN[31] +GLOBAL SIGNAL I_AreaReady16 $IN[32] + +GLOBAL SIGNAL I_Signal1 $IN[33] +GLOBAL SIGNAL I_Signal2 $IN[34] +GLOBAL SIGNAL I_Signal3 $IN[35] +GLOBAL SIGNAL I_Signal4 $IN[36] +GLOBAL SIGNAL I_Signal5 $IN[37] +GLOBAL SIGNAL I_Signal6 $IN[38] +GLOBAL SIGNAL I_Signal7 $IN[39] +GLOBAL SIGNAL I_Signal8 $IN[40] +GLOBAL SIGNAL I_Signal9 $IN[41] +GLOBAL SIGNAL I_Signal10 $IN[42] +GLOBAL SIGNAL I_Signal11 $IN[43] +GLOBAL SIGNAL I_Signal12 $IN[44] +GLOBAL SIGNAL I_Signal13 $IN[45] +GLOBAL SIGNAL I_Signal14 $IN[46] +GLOBAL SIGNAL I_Signal15 $IN[47] +GLOBAL SIGNAL I_Signal16 $IN[48] + +GLOBAL SIGNAL I_GripSafty1 $IN[49] +GLOBAL SIGNAL I_GripSafty2 $IN[50] +GLOBAL SIGNAL I_GripBelowExist $IN[51] +GLOBAL SIGNAL I_GripExist $IN[52] +GLOBAL SIGNAL I_GripOpen $IN[53] +GLOBAL SIGNAL I_GripClose $IN[54] + +GLOBAL SIGNAL I_ProductType $IN[65] TO $IN[80] +GLOBAL SIGNAL I_Cmd $IN[81] TO $IN[96] +GLOBAL SIGNAL I_CmdCount $IN[97] TO $IN[112] +GLOBAL SIGNAL I_GripPosIndexRet $IN[113] TO $IN[128] +GLOBAL SIGNAL I_GripPosCountRet $IN[129] TO $IN[144] +GLOBAL SIGNAL I_GripPosResult $IN[145] TO $IN[160] +GLOBAL SIGNAL I_OffsetX $IN[161] TO $IN[176] +GLOBAL SIGNAL I_OffsetY $IN[177] TO $IN[192] +GLOBAL SIGNAL I_CountX $IN[193] TO $IN[208] +GLOBAL SIGNAL I_CountY $IN[209] TO $IN[224] +;ENDFOLD + +;FOLD KUKA_TO_PLC + +GLOBAL SIGNAL Q_PickDone $OUT[33] +GLOBAL SIGNAL Q_PlaceDone $OUT[34] + + +GLOBAL SIGNAL Q_InHome1 $OUT[49] +GLOBAL SIGNAL Q_InHome2 $OUT[50] +GLOBAL SIGNAL Q_InHome3 $OUT[51] +GLOBAL SIGNAL Q_InHome4 $OUT[52] +GLOBAL SIGNAL Q_InHome5 $OUT[53] +GLOBAL SIGNAL Q_InHome6 $OUT[54] +GLOBAL SIGNAL Q_InHome7 $OUT[55] +GLOBAL SIGNAL Q_InHome8 $OUT[56] +GLOBAL SIGNAL Q_InHome9 $OUT[57] +GLOBAL SIGNAL Q_InHome10 $OUT[58] +GLOBAL SIGNAL Q_InHome11 $OUT[59] +GLOBAL SIGNAL Q_InHome12 $OUT[60] +GLOBAL SIGNAL Q_InHome13 $OUT[61] +GLOBAL SIGNAL Q_InHome14 $OUT[62] +GLOBAL SIGNAL Q_InHome15 $OUT[63] +GLOBAL SIGNAL Q_InHome16 $OUT[64] + +GLOBAL SIGNAL Q_AreaEnter1 $OUT[65] +GLOBAL SIGNAL Q_AreaEnter2 $OUT[66] +GLOBAL SIGNAL Q_AreaEnter3 $OUT[67] +GLOBAL SIGNAL Q_AreaEnter4 $OUT[68] +GLOBAL SIGNAL Q_AreaEnter5 $OUT[69] +GLOBAL SIGNAL Q_AreaEnter6 $OUT[70] +GLOBAL SIGNAL Q_AreaEnter7 $OUT[71] +GLOBAL SIGNAL Q_AreaEnter8 $OUT[72] +GLOBAL SIGNAL Q_AreaEnter9 $OUT[73] +GLOBAL SIGNAL Q_AreaEnter10 $OUT[74] +GLOBAL SIGNAL Q_AreaEnter11 $OUT[75] +GLOBAL SIGNAL Q_AreaEnter12 $OUT[76] +GLOBAL SIGNAL Q_AreaEnter13 $OUT[77] +GLOBAL SIGNAL Q_AreaEnter14 $OUT[78] +GLOBAL SIGNAL Q_AreaEnter15 $OUT[79] +GLOBAL SIGNAL Q_AreaEnter16 $OUT[80] + +GLOBAL SIGNAL Q_Error1 $OUT[81] +GLOBAL SIGNAL Q_Error2 $OUT[82] +GLOBAL SIGNAL Q_Error3 $OUT[83] +GLOBAL SIGNAL Q_Error4 $OUT[84] +GLOBAL SIGNAL Q_Error5 $OUT[85] +GLOBAL SIGNAL Q_Error6 $OUT[86] +GLOBAL SIGNAL Q_Error7 $OUT[87] +GLOBAL SIGNAL Q_Error8 $OUT[88] +GLOBAL SIGNAL Q_Error9 $OUT[89] +GLOBAL SIGNAL Q_Error10 $OUT[90] +GLOBAL SIGNAL Q_Error11 $OUT[91] +GLOBAL SIGNAL Q_Error12 $OUT[92] +GLOBAL SIGNAL Q_Error13 $OUT[93] +GLOBAL SIGNAL Q_Error14 $OUT[94] +GLOBAL SIGNAL Q_Error15 $OUT[95] +GLOBAL SIGNAL Q_Error16 $OUT[96] + +GLOBAL SIGNAL Q_CmdRet $OUT[97] TO $OUT[112] +GLOBAL SIGNAL Q_CmdCountRet $OUT[113] TO $OUT[128] +GLOBAL SIGNAL Q_CmdResult $OUT[129] TO $OUT[144] +GLOBAL SIGNAL Q_Cmd_Running $OUT[145] TO $OUT[160] +GLOBAL SIGNAL Q_GripPosIndex $OUT[161] TO $OUT[176] +GLOBAL SIGNAL Q_GripPosCount $OUT[177] TO $OUT[192] + + +;ENDFOLD + + + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/TP/TestModule.dat b/KUKA/KRC/R1/Program/TP/TestModule.dat new file mode 100644 index 0000000..63a6106 --- /dev/null +++ b/KUKA/KRC/R1/Program/TP/TestModule.dat @@ -0,0 +1,29 @@ +&ACCESS RVO +&REL 14 +DEFDAT TestModule +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make your modifications here + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLARATIONS) +DECL FDAT FPallet1PlaceB = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL PDAT PPDAT1 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL MODULEPARAM_T LAST_TP_PARAMS = {PARAMS[] "Kuka.VelocityFieldEnabled=False; Kuka.ColDetectFieldEnabled=False; Kuka.MovementParameterFieldEnabled=False; Kuka.IsAngleEnabled=False; Kuka.PointName=ReFeedBeltPick; Kuka.FrameData.base_no=0; Kuka.FrameData.tool_no=1; Kuka.FrameData.ipo_frame=#BASE; Kuka.isglobalpoint=False; Kuka.MoveDataPtpName=PDAT7; Kuka.MovementDataPdat.apo_mode=#CDIS; Kuka.MovementDataPdat.apo_dist=500; Kuka.MovementData.vel=100; Kuka.MovementData.acc=100; Kuka.MovementData.exax_ign=0; Kuka.VelocityPtp=100; Kuka.BlendingEnabled=False; Kuka.APXEnabled=False; Kuka.CurrentCDSetIndex=0"} +DECL FDAT FPallet2PlaceB = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL PDAT PPDAT2 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL FDAT FFeedBelt1Pick = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL PDAT PPDAT3 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL FDAT FFeedBelt2Pick = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL PDAT PPDAT4 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL PDAT PPDAT5 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL FDAT FNgBeltPlace = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL PDAT PPDAT6 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL FDAT FWaterBeltPick = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +DECL PDAT PPDAT7 = {APO_MODE #CDIS,APO_DIST 500,VEL 100,ACC 100,GEAR_JERK 100.0,EXAX_IGN 0} +DECL FDAT FReFeedBeltPick = {BASE_NO 0,TOOL_NO 1,IPO_FRAME #BASE,POINT2[] " "} +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/Program/TP/TestModule.src b/KUKA/KRC/R1/Program/TP/TestModule.src new file mode 100644 index 0000000..0ea9e95 --- /dev/null +++ b/KUKA/KRC/R1/Program/TP/TestModule.src @@ -0,0 +1,58 @@ +&ACCESS RVO +&REL 14 +DEF TestModule ( ) +;FOLD INI;%{PE} + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) +;ENDFOLD (INI) +;FOLD SPTP Pallet1PlaceB Vel=100 % PDAT1 Tool[1] Base[0] ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=Pallet1PlaceB; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT1; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XPallet1PlaceB WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FPallet1PlaceB), $BASE = SBASE(FPallet1PlaceB.BASE_NO), $IPO_MODE = SIPO_MODE(FPallet1PlaceB.IPO_FRAME), $LOAD = SLOAD(FPallet1PlaceB.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT1), $APO = SAPO_PTP(PPDAT1), $GEAR_JERK[1] = SGEAR_JERK(PPDAT1), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD +;FOLD SPTP Pallet2PlaceB Vel=100 % PDAT2 Tool[1] Base[0] ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=Pallet2PlaceB; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT2; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XPallet2PlaceB WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FPallet2PlaceB), $BASE = SBASE(FPallet2PlaceB.BASE_NO), $IPO_MODE = SIPO_MODE(FPallet2PlaceB.IPO_FRAME), $LOAD = SLOAD(FPallet2PlaceB.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT2), $APO = SAPO_PTP(PPDAT2), $GEAR_JERK[1] = SGEAR_JERK(PPDAT2), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD +;FOLD SPTP FeedBelt1Pick Vel=100 % PDAT3 Tool[1] Base[0] ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=FeedBelt1Pick; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT3; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XFeedBelt1Pick WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FFeedBelt1Pick), $BASE = SBASE(FFeedBelt1Pick.BASE_NO), $IPO_MODE = SIPO_MODE(FFeedBelt1Pick.IPO_FRAME), $LOAD = SLOAD(FFeedBelt1Pick.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT3), $APO = SAPO_PTP(PPDAT3), $GEAR_JERK[1] = SGEAR_JERK(PPDAT3), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD +;FOLD SPTP FeedBelt2Pick Vel=100 % PDAT4 Tool[1] Base[0] ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=FeedBelt2Pick; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT4; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XFeedBelt2Pick WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FFeedBelt2Pick), $BASE = SBASE(FFeedBelt2Pick.BASE_NO), $IPO_MODE = SIPO_MODE(FFeedBelt2Pick.IPO_FRAME), $LOAD = SLOAD(FFeedBelt2Pick.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT4), $APO = SAPO_PTP(PPDAT4), $GEAR_JERK[1] = SGEAR_JERK(PPDAT4), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD +;FOLD SPTP NgBeltPlace Vel=100 % PDAT5 Tool[1] Base[0] ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=NgBeltPlace; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT5; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XNgBeltPlace WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FNgBeltPlace), $BASE = SBASE(FNgBeltPlace.BASE_NO), $IPO_MODE = SIPO_MODE(FNgBeltPlace.IPO_FRAME), $LOAD = SLOAD(FNgBeltPlace.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT5), $APO = SAPO_PTP(PPDAT5), $GEAR_JERK[1] = SGEAR_JERK(PPDAT5), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD +;FOLD SPTP WaterBeltPick Vel=100 % PDAT6 Tool[1] Base[0] ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=WaterBeltPick; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT6; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XWaterBeltPick WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FWaterBeltPick), $BASE = SBASE(FWaterBeltPick.BASE_NO), $IPO_MODE = SIPO_MODE(FWaterBeltPick.IPO_FRAME), $LOAD = SLOAD(FWaterBeltPick.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT6), $APO = SAPO_PTP(PPDAT6), $GEAR_JERK[1] = SGEAR_JERK(PPDAT6), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD +;FOLD SPTP ReFeedBeltPick Vel=100 % PDAT7 Tool[1] Base[0] ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=ReFeedBeltPick; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=PDAT7; Kuka.VelocityPtp=100; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XReFeedBeltPick WITH $VEL_AXIS[1] = SVEL_JOINT(100.0), $TOOL = STOOL2(FReFeedBeltPick), $BASE = SBASE(FReFeedBeltPick.BASE_NO), $IPO_MODE = SIPO_MODE(FReFeedBeltPick.IPO_FRAME), $LOAD = SLOAD(FReFeedBeltPick.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PPDAT7), $APO = SAPO_PTP(PPDAT7), $GEAR_JERK[1] = SGEAR_JERK(PPDAT7), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/System/$config.dat b/KUKA/KRC/R1/System/$config.dat new file mode 100644 index 0000000..f9fedcf --- /dev/null +++ b/KUKA/KRC/R1/System/$config.dat @@ -0,0 +1,835 @@ +&ACCESS RV$1 +DEFDAT $CONFIG +;FOLD BASISTECH GLOBALS +;================================== +; Default parameters for movement +; These values shouldn't be changed +;================================== + +;---------------------------------- +; general MOVEMENT - parameters: +;---------------------------------- + +INT DEF_OV_PRO=100 +INT DEF_ADVANCE=3 + +; PTP - MOVEMENTS +;---------------------------------- +INT DEF_VEL_PTP=100 ; ptp velocity [%] +INT DEF_ACC_PTP=50 ; ptp acceleration [%] + +; CP - MOVEMENTS +;---------------------------------- +DECL CIRC_TYPE DEF_CIRC_TYP=#BASE +DECL JERK_STRUC DEF_JERK_STRUC={CP 500.000,ORI 50000.0,AX {A1 1000.00,A2 1000.00,A3 1000.00,A4 1000.00,A5 1000.00,A6 1000.00,E1 1000.00,E2 1000.00,E3 1000.00,E4 1000.00,E5 1000.00,E6 1000.00}} ; jerk value for the spline. CP: [m/Sec3], ORI: [[GRAD/Sec3], AX: [[GRAD/Sec3] (rotatory) resp. [m/Sec3] (linear) +REAL DEF_GEAR_JERK=100.000 ; gear jerk of axes [%] +REAL DEF_VEL_CP=2.00000 ; path velocity [M/SEC] +REAL DEF_VEL_ORI1=200.000 ; swivel velocity [GRAD/Sec] +REAL DEF_VEL_ORI2=200.000 ; rotation velocity [GRAD/Sec] +REAL DEF_VEL_ORIS=200.000 ; spline swivel velocity [GRAD/Sec] +REAL DEF_ACC_CP=2.30000 ; path acceleration [m/Sec2] +REAL DEF_ACC_ORI1=100.000 ; swivel acceleration [GRAD/Sec2] +REAL DEF_ACC_ORI2=100.000 ; rotation acceleration [GRAD/Sec2] +REAL DEF_ACC_ORIS=200.000 ; spline swivel acceleration [GRAD/Sec2] +REAL DEF_VEL_FACT=1.00000 +REAL DEF_ACC_SPTP=100.000 ; ptp spline acceleration [%] + +; APO - parameters +;-------------------------------- +INT DEF_APO_CPTP=50 ; PTP-Approximation [%] +INT DEF_APO_CVEL=100 ; Speed-Approximation [%] +REAL DEF_APO_CDIS=3.00000 ; Distance-Approximation [mm] +REAL DEF_APO_CORI=5.00000 ; Orientation-Approximation [Grad] +REAL DEF_APO_CORIS=80.0000 ; spline Orientation-Approximation [Grad] + +;================================== +; Structures: +;================================== +ENUM BAS_COMMAND INITMOV,ACC_CP,ACC_PTP,VEL_CP,VEL_PTP,ACC_GLUE,TOOL,BASE,EX_BASE,PTP_DAT,CP_DAT,OUT_SYNC,OUT_ASYNC,GROUP,FRAMES,PTP_PARAMS,CP_PARAMS +ENUM OUT_MODETYPE TRIGGER_,CONT_,STOP_ +ENUM IPO_M_T NONE,TCP,BASE +ENUM APO_MODE_T CPTP,CDIS +ENUM LDD_MODE_T NONE,CAD,T1,T2,AUT,EX,MANUAL +ENUM LDD_RESULT_T NONE,APP,STATOVL,DYNOVL,CTCHCK,OVL,APPSLOOR,SLOOR +STRUC DIG_OUT_TYPE INT FIRST_BIT,LENGTH,PARITY,CODING +STRUC CTRL_IN_T INT IN_NR,CHAR NAME_NAT[20] +STRUC CTRL_OUT_T INT OUT_NR,BOOL INI,CHAR NAME_NAT[20] +STRUC FCT_OUT_T INT NO,REAL PULS_TIME,BOOL STATE +STRUC FCT_IN_T INT NO,BOOL STATE +STRUC PDAT REAL VEL,ACC,APO_DIST,APO_MODE_T APO_MODE,REAL GEAR_JERK,INT EXAX_IGN +STRUC LDAT REAL VEL,ACC,APO_DIST,APO_FAC,AXIS_VEL,AXIS_ACC,ORI_TYPE ORI_TYP,CIRC_TYPE CIRC_TYP,REAL JERK_FAC,GEAR_JERK,INT EXAX_IGN,CIRC_MODE CB +STRUC FDAT INT TOOL_NO,BASE_NO,IPO_MODE IPO_FRAME,CHAR POINT2[24],BOOL TQ_STATE +STRUC ODAT INT OUT_NO,BOOL STATE,REAL PULSE_TIME,OUT_MODETYPE OUT_MODE,REAL TIME_DELAY,OFFSET +STRUC BASIS_SUGG_T CHAR POINT1[24],POINT2[24],CP_PARAMS[24],PTP_PARAMS[24],CONT[24],CP_VEL[24],PTP_VEL[24],SYNC_PARAMS[24],SPL_NAME[24],A_PARAMS[24],PC_SYNCSTRING[24],GL_SYNCSTRING[24] +STRUC HDAT REAL HT_START,HT_DEST,APO_START,APO_DEST,ACC_START,ACC_DEST,VEL_START,VEL_DEST + +STRUC OUT_SUGG_T CHAR PARAMS[24] +STRUC MACHINE_DEF_T CHAR NAME[40],INT COOP_KRC_INDEX,CHAR PARENT[40],FRAME ROOT,ESYS MECH_TYPE,CHAR GEOMETRY[255] +STRUC MACHINE_TOOL_T INT MACH_DEF_INDEX,CHAR PARENT[40],CHAR GEOMETRY[255] +STRUC MACHINE_FRAME_T INT MACH_DEF_INDEX,CHAR PARENT[40],CHAR GEOMETRY[255] + +STRUC TRIGGER_PARA INT TriggerPath,BOOL TriggerOnStart,INT TriggerDelay,CHAR TriggerTask[40] +STRUC CONSTVEL_PARA INT ConstVelTyp,INT ConstVelPath,BOOL ConstVelOnStart +STRUC CONDSTOP_PARA INT CondStopPath,BOOL CondStopOnStart,CHAR StopCondition[40] +STRUC ADAT TRIGGER_PARA TriggerPara,CONSTVEL_PARA ConstVelPara,CONDSTOP_PARA CondStopPara + +STRUC MODULEPARAM_T CHAR PARAMS[2000] +STRUC TRACECACHE_T CHAR NAME[64],INT ACT_ITER,INT MAX_ITER + +;FOLD OLD TORQUE MONITORING - Do not remove! Needed to prevent syntax errors in old user modules! +STRUC TM_SUGG_T CHAR TM_ID[24] +STRUC TQM_TQDAT_T INT T11,T12,T13,T14,T15,T16,T21,T22,T23,T24,T25,T26,K1,K2,K3,K4,K5,K6,O1,O2,ID,OVM,REAL TMF +;ENDFOLD +;================================== +; External declarations: +;================================== +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +EXT IR_STOPM ( ) + +;==================== +; Signal declarations +; Do not change !!!!! +;==================== +SIGNAL CHANNEL_1 $ANOUT[1] +SIGNAL CHANNEL_2 $ANOUT[2] +SIGNAL CHANNEL_3 $ANOUT[3] +SIGNAL CHANNEL_4 $ANOUT[4] +SIGNAL CHANNEL_5 $ANOUT[5] +SIGNAL CHANNEL_6 $ANOUT[6] +SIGNAL CHANNEL_7 $ANOUT[7] +SIGNAL CHANNEL_8 $ANOUT[8] +SIGNAL CHANNEL_9 $ANOUT[9] +SIGNAL CHANNEL_10 $ANOUT[10] +SIGNAL CHANNEL_11 $ANOUT[11] +SIGNAL CHANNEL_12 $ANOUT[12] +SIGNAL CHANNEL_13 $ANOUT[13] +SIGNAL CHANNEL_14 $ANOUT[14] +SIGNAL CHANNEL_15 $ANOUT[15] +SIGNAL CHANNEL_16 $ANOUT[16] +SIGNAL CHANNEL_17 $ANOUT[17] +SIGNAL CHANNEL_18 $ANOUT[18] +SIGNAL CHANNEL_19 $ANOUT[19] +SIGNAL CHANNEL_20 $ANOUT[20] +SIGNAL CHANNEL_21 $ANOUT[21] +SIGNAL CHANNEL_22 $ANOUT[22] +SIGNAL CHANNEL_23 $ANOUT[23] +SIGNAL CHANNEL_24 $ANOUT[24] +SIGNAL CHANNEL_25 $ANOUT[25] +SIGNAL CHANNEL_26 $ANOUT[26] +SIGNAL CHANNEL_27 $ANOUT[27] +SIGNAL CHANNEL_28 $ANOUT[28] +SIGNAL CHANNEL_29 $ANOUT[29] +SIGNAL CHANNEL_30 $ANOUT[30] +SIGNAL CHANNEL_31 $ANOUT[31] +SIGNAL CHANNEL_32 $ANOUT[32] + +;================================== +; ID external user log-on: +;================================== +SIGNAL ExtUserID $IN[1026] TO $IN[1026] +SIGNAL ExtUserIDWatchDog $IN[1026] + +;================================== +; Variables: +;================================== +DECL PDAT PDEFAULT={VEL 100.000,ACC 100.000,APO_DIST 100.000,GEAR_JERK 100.000,EXAX_IGN 0} +DECL LDAT LDEFAULT={VEL 2.00000,ACC 100.000,APO_DIST 100.000,APO_FAC 50.0000,AXIS_VEL 100.000,AXIS_ACC 100.000,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC 50.0000,GEAR_JERK 100.000,EXAX_IGN 0} +DECL LDAT CDEFAULT={CB {AUX_PT {ORI #CONSIDER,E1 #CONSIDER,E2 #CONSIDER,E3 #CONSIDER,E4 #CONSIDER,E5 #CONSIDER,E6 #CONSIDER},TARGET_PT {ORI #INTERPOLATE,E1 #INTERPOLATE,E2 #INTERPOLATE,E3 #INTERPOLATE,E4 #INTERPOLATE,E5 #INTERPOLATE,E6 #INTERPOLATE}}} +DECL FDAT FDEFAULT={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " ",TQ_STATE FALSE} +DECL FDAT FHOME={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " ",TQ_STATE FALSE} +DECL ODAT ODEFAULT={OUT_NO 1,STATE TRUE,PULSE_TIME 0.0,OUT_MODE #STOP_,TIME_DELAY 0.0,OFFSET 0.0} +DECL HDAT HDEFAULT={HT_START 250.000,HT_DEST 250.000,APO_START 200.000,APO_DEST 200.000,ACC_START 100.000,ACC_DEST 100.000,VEL_START 2.00000,VEL_DEST 2.00000} + +DECL ADAT TDEFAULT={TriggerPara {TriggerPath 0,TriggerOnStart FALSE,TriggerDelay 0,TriggerTask[] " "}} +DECL ADAT CVDEFAULT={ConstVelPara {ConstVelTyp 0,ConstVelPath 0,ConstVelOnStart FALSE}} +DECL ADAT CSDEFAULT={CondStopPara {CondStopPath 0,CondStopOnStart FALSE,StopCondition[] " "}} + +DECL PDAT PDAT_ACT +DECL LDAT LDAT_ACT +DECL FDAT FDAT_ACT +DECL ODAT ODAT_ACT +DECL INT ACT_FILTER +DECL INT ACT_DELAY +DECL INT ACT_DISTANCE + +DECL CHAR SPL_NAME[24] +DECL MSGBUF_T TouchUpCheckMsgBuffer[100] + +;GROUP-Definitions +;---------------------------------- +INT COMPL_GROUP='B0001' + +INT DEF_GROUP[10] +DEF_GROUP[1]='B1111' ; complete +DEF_GROUP[2]='B0001' ; robot only +DEF_GROUP[3]='B0011' ; robot and track +DEF_GROUP[4]='B0111' ; robot, track and ext. axis2 +DEF_GROUP[5]='B1011' ; robot, track and ext. axis3 +DEF_GROUP[6]='B1111' ; robot, track and ext. axis2+3 +DEF_GROUP[7]='B1111' ; complete +DEF_GROUP[8]='B1111' ; complete +DEF_GROUP[9]='B1111' ; complete +DEF_GROUP[10]='B1111' ; complete + +INT $ACT_GROUP='B0001' + +; HOME POSITION +;---------------------------------- +E6AXIS XHOME={A1 -21.6021271,A2 -99.3227234,A3 104.274384,A4 -0.793297172,A5 86.8444748,A6 -6.95475197,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +E6AXIS XHOME1={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +E6AXIS XHOME2={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +E6AXIS XHOME3={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +E6AXIS XHOME4={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} +E6AXIS XHOME5={A1 0.0,A2 -90.0000,A3 90.0000,A4 0.0,A5 0.0,A6 0.0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} + +; REFERENCE POINTS +;---------------------------------- +DECL FRAME REF_PT[16] +REF_PT[1]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[2]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[3]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[4]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[5]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[6]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[7]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[8]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[9]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[10]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[11]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[12]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[13]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[14]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[15]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +REF_PT[16]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} + +FRAME REF_TOOL={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} + +; TOOL and BASE data +;---------------------------------- +BOOL AUTO_IPO_M=FALSE +BOOL STOPM_FLAG=FALSE +BOOL TOOL_CORR_ON=FALSE +BOOL TOOL_CORR_W_ON=FALSE +BOOL BASE_CORR_ON=FALSE +BOOL M_BAS_COR_ON=FALSE +FRAME TOOL_CORR={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +FRAME TOOL_CORR_W={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +FRAME BASE_CORR={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +FRAME M_BASE_CORR={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +INT COR_TOOL_NO=0 + +INT MAX_TOOL=16 +DECL FRAME TOOL_DATA[16] +TOOL_DATA[1]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[2]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[3]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[4]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[5]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[6]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[7]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[8]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[9]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[10]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[11]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[12]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[13]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[14]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[15]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +TOOL_DATA[16]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} + +DECL CHAR TOOL_NAME[16,24] +TOOL_NAME[1,]="Tool1" +TOOL_NAME[2,]=" " +TOOL_NAME[3,]=" " +TOOL_NAME[4,]=" " +TOOL_NAME[5,]=" " +TOOL_NAME[6,]=" " +TOOL_NAME[7,]=" " +TOOL_NAME[8,]=" " +TOOL_NAME[9,]=" " +TOOL_NAME[10,]=" " +TOOL_NAME[11,]=" " +TOOL_NAME[12,]=" " +TOOL_NAME[13,]=" " +TOOL_NAME[14,]=" " +TOOL_NAME[15,]=" " +TOOL_NAME[16,]=" " + +INT MAX_LOAD=16 +DECL LOAD LOAD_DATA[16] +LOAD_DATA[1]={M 20.0000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[2]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[3]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[4]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[5]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[6]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[7]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[8]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[9]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[10]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[11]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[12]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[13]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[14]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[15]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +LOAD_DATA[16]={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} + +DECL CHAR LOAD_NAME[16,24] +LOAD_NAME[1,]=" " +LOAD_NAME[2,]=" " +LOAD_NAME[3,]=" " +LOAD_NAME[4,]=" " +LOAD_NAME[5,]=" " +LOAD_NAME[6,]=" " +LOAD_NAME[7,]=" " +LOAD_NAME[8,]=" " +LOAD_NAME[9,]=" " +LOAD_NAME[10,]=" " +LOAD_NAME[11,]=" " +LOAD_NAME[12,]=" " +LOAD_NAME[13,]=" " +LOAD_NAME[14,]=" " +LOAD_NAME[15,]=" " +LOAD_NAME[16,]=" " + +DECL LDD_MODE_T LOAD_MODE[16] +LOAD_MODE[1]=#MANUAL +LOAD_MODE[2]=#NONE +LOAD_MODE[3]=#NONE +LOAD_MODE[4]=#NONE +LOAD_MODE[5]=#NONE +LOAD_MODE[6]=#NONE +LOAD_MODE[7]=#NONE +LOAD_MODE[8]=#NONE +LOAD_MODE[9]=#NONE +LOAD_MODE[10]=#NONE +LOAD_MODE[11]=#NONE +LOAD_MODE[12]=#NONE +LOAD_MODE[13]=#NONE +LOAD_MODE[14]=#NONE +LOAD_MODE[15]=#NONE +LOAD_MODE[16]=#NONE + +DECL LDD_RESULT_T LOAD_RESULT[16] +LOAD_RESULT[1]=#NONE +LOAD_RESULT[2]=#NONE +LOAD_RESULT[3]=#NONE +LOAD_RESULT[4]=#NONE +LOAD_RESULT[5]=#NONE +LOAD_RESULT[6]=#NONE +LOAD_RESULT[7]=#NONE +LOAD_RESULT[8]=#NONE +LOAD_RESULT[9]=#NONE +LOAD_RESULT[10]=#NONE +LOAD_RESULT[11]=#NONE +LOAD_RESULT[12]=#NONE +LOAD_RESULT[13]=#NONE +LOAD_RESULT[14]=#NONE +LOAD_RESULT[15]=#NONE +LOAD_RESULT[16]=#NONE + +DECL IPO_M_T TOOL_TYPE[16] +TOOL_TYPE[1]=#BASE +TOOL_TYPE[2]=#NONE +TOOL_TYPE[3]=#NONE +TOOL_TYPE[4]=#NONE +TOOL_TYPE[5]=#NONE +TOOL_TYPE[6]=#NONE +TOOL_TYPE[7]=#NONE +TOOL_TYPE[8]=#NONE +TOOL_TYPE[9]=#NONE +TOOL_TYPE[10]=#NONE +TOOL_TYPE[11]=#NONE +TOOL_TYPE[12]=#NONE +TOOL_TYPE[13]=#NONE +TOOL_TYPE[14]=#NONE +TOOL_TYPE[15]=#NONE +TOOL_TYPE[16]=#NONE + +DECL LOAD LOAD_A1_DATA={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +DECL LOAD LOAD_A2_DATA={M -1.00000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} +DECL LOAD LOAD_A3_DATA={M 50.0000,CM {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},J {X 0.0,Y 0.0,Z 0.0}} + +INT MAX_BASE=32 +DECL FRAME BASE_DATA[32] +BASE_DATA[1]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[2]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[3]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[4]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[5]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[6]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[7]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[8]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[9]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[10]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[11]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[12]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[13]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[14]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[15]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[16]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[17]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[18]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[19]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[20]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[21]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[22]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[23]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[24]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[25]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[26]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[27]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[28]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[29]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[30]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[31]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} +BASE_DATA[32]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0} + +DECL CHAR BASE_NAME[32,24] +BASE_NAME[1,]=" " +BASE_NAME[2,]=" " +BASE_NAME[3,]=" " +BASE_NAME[4,]=" " +BASE_NAME[5,]=" " +BASE_NAME[6,]=" " +BASE_NAME[7,]=" " +BASE_NAME[8,]=" " +BASE_NAME[9,]=" " +BASE_NAME[10,]=" " +BASE_NAME[11,]=" " +BASE_NAME[12,]=" " +BASE_NAME[13,]=" " +BASE_NAME[14,]=" " +BASE_NAME[15,]=" " +BASE_NAME[16,]=" " +BASE_NAME[17,]=" " +BASE_NAME[18,]=" " +BASE_NAME[19,]=" " +BASE_NAME[20,]=" " +BASE_NAME[21,]=" " +BASE_NAME[22,]=" " +BASE_NAME[23,]=" " +BASE_NAME[24,]=" " +BASE_NAME[25,]=" " +BASE_NAME[26,]=" " +BASE_NAME[27,]=" " +BASE_NAME[28,]=" " +BASE_NAME[29,]=" " +BASE_NAME[30,]=" " +BASE_NAME[31,]=" " +BASE_NAME[32,]=" " + +DECL IPO_M_T BASE_TYPE[32] +BASE_TYPE[1]=#NONE +BASE_TYPE[2]=#NONE +BASE_TYPE[3]=#NONE +BASE_TYPE[4]=#NONE +BASE_TYPE[5]=#NONE +BASE_TYPE[6]=#NONE +BASE_TYPE[7]=#NONE +BASE_TYPE[8]=#NONE +BASE_TYPE[9]=#NONE +BASE_TYPE[10]=#NONE +BASE_TYPE[11]=#NONE +BASE_TYPE[12]=#NONE +BASE_TYPE[13]=#NONE +BASE_TYPE[14]=#NONE +BASE_TYPE[15]=#NONE +BASE_TYPE[16]=#NONE +BASE_TYPE[17]=#NONE +BASE_TYPE[18]=#NONE +BASE_TYPE[19]=#NONE +BASE_TYPE[20]=#NONE +BASE_TYPE[21]=#NONE +BASE_TYPE[22]=#NONE +BASE_TYPE[23]=#NONE +BASE_TYPE[24]=#NONE +BASE_TYPE[25]=#NONE +BASE_TYPE[26]=#NONE +BASE_TYPE[27]=#NONE +BASE_TYPE[28]=#NONE +BASE_TYPE[29]=#NONE +BASE_TYPE[30]=#NONE +BASE_TYPE[31]=#NONE +BASE_TYPE[32]=#NONE + +;****************************************** +; Variables for CELL DEFINITION +;****************************************** + +INT MAX_MACHINES=16 +DECL MACHINE_DEF_T MACHINE_DEF[16] +MACHINE_DEF[1]={NAME[] "KR 120 R3100-2",COOP_KRC_INDEX 1,PARENT[] "WORLD",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #ROBOT,GEOMETRY[] "ObjectId = 1232261811"} +MACHINE_DEF[2]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[3]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[4]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[5]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[6]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[7]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[8]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[9]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[10]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[11]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[12]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[13]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[14]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[15]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} +MACHINE_DEF[16]={NAME[] " ",COOP_KRC_INDEX 0,PARENT[] " ",ROOT {X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0},MECH_TYPE #NONE,GEOMETRY[] " "} + +DECL MACHINE_TOOL_T MACHINE_TOOL_DAT[16] +MACHINE_TOOL_DAT[1]={MACH_DEF_INDEX 1,PARENT[] "KR 120 R3100-2",GEOMETRY[] " "} +MACHINE_TOOL_DAT[2]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[3]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[4]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[5]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[6]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[7]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[8]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[9]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[10]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[11]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[12]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[13]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[14]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[15]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_TOOL_DAT[16]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} + +DECL MACHINE_FRAME_T MACHINE_FRAME_DAT[32] +MACHINE_FRAME_DAT[1]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[2]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[3]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[4]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[5]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[6]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[7]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[8]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[9]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[10]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[11]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[12]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[13]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[14]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[15]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[16]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[17]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[18]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[19]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[20]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[21]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[22]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[23]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[24]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[25]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[26]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[27]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[28]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[29]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[30]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[31]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} +MACHINE_FRAME_DAT[32]={MACH_DEF_INDEX 0,PARENT[] " ",GEOMETRY[] " "} + +;****************************************** +; Variables for axis CALIBRATING +;****************************************** +DECL INT CAL_AXIS +BOOL CONST_SPEED + +;****************************************** +; Variables for added TechPackages +;****************************************** +INT POWER + +;****************************************** +; General purpose return value of functions +; like INVERSE, FORWARD +;****************************************** +INT ERR_STATUS=-1 + +;****************************************** +; Variables for TOUCHUP user limit +;****************************************** +BOOL UM_TOUCHUP=FALSE +REAL CARTESIAN_TOL=5.00000 +REAL ROTATION_ANGLE=10.0000 +REAL EXTAX_TOL[6] +EXTAX_TOL[1]=10.0000 +EXTAX_TOL[2]=10.0000 +EXTAX_TOL[3]=10.0000 +EXTAX_TOL[4]=10.0000 +EXTAX_TOL[5]=10.0000 +EXTAX_TOL[6]=10.0000 + +;****************************************** +; Variables for Displaying and Konfiguring +;****************************************** +DECL INT I[20] + +I[1]=0 +I[2]=0 +I[3]=0 +I[4]=0 +I[5]=0 +I[6]=0 +I[7]=0 +I[8]=0 +I[9]=0 +I[10]=0 +I[11]=0 +I[12]=0 +I[13]=0 +I[14]=0 +I[15]=0 +I[16]=0 +I[17]=0 +I[18]=0 +I[19]=0 +I[20]=0 + +;****************************************** +; Variables for Tracing +;****************************************** +DECL TRACECACHE_T TRACE_CACHE[10] +TRACE_CACHE[1]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} +TRACE_CACHE[2]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} +TRACE_CACHE[3]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} +TRACE_CACHE[4]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} +TRACE_CACHE[5]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} +TRACE_CACHE[6]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} +TRACE_CACHE[7]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} +TRACE_CACHE[8]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} +TRACE_CACHE[9]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} +TRACE_CACHE[10]={NAME[] " ",ACT_ITER 0,MAX_ITER 1} + +DECL INT TraceOverflowIndex=1 + +;****************************************** +; all for InterBus Mapping on optional segments +;****************************************** + +DECL INT IBUS_SEGMENT[16] +IBUS_SEGMENT[1]=0 +IBUS_SEGMENT[2]=0 +IBUS_SEGMENT[3]=0 +IBUS_SEGMENT[4]=0 +IBUS_SEGMENT[5]=0 +IBUS_SEGMENT[6]=0 +IBUS_SEGMENT[7]=0 +IBUS_SEGMENT[8]=0 +IBUS_SEGMENT[9]=0 +IBUS_SEGMENT[10]=0 +IBUS_SEGMENT[11]=0 +IBUS_SEGMENT[12]=0 +IBUS_SEGMENT[13]=0 +IBUS_SEGMENT[14]=0 +IBUS_SEGMENT[15]=0 +IBUS_SEGMENT[16]=0 + +;****************************************** +; Reduction factors +;****************************************** +DECL REAL RedVelExAx[6] +RedVelExAx[1]=100.000 +RedVelExAx[2]=100.000 +RedVelExAx[3]=100.000 +RedVelExAx[4]=100.000 +RedVelExAx[5]=100.000 +RedVelExAx[6]=100.000 +DECL REAL RedAccExAx[6] +RedAccExAx[1]=100.000 +RedAccExAx[2]=100.000 +RedAccExAx[3]=100.000 +RedAccExAx[4]=100.000 +RedAccExAx[5]=100.000 +RedAccExAx[6]=100.000 + +;****************************************** +; Joint offset +;****************************************** +STRUC JOINT_DEVICE_T CHAR NAME[39],REAL OFFSET,INT AXIS_INDEX +DECL JOINT_DEVICE_T JOINT_DEVICE[32] +JOINT_DEVICE[1]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[2]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[3]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[4]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[5]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[6]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[7]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[8]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[9]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[10]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[11]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[12]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[13]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[14]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[15]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[16]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[17]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[18]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[19]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[20]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[21]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[22]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[23]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[24]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[25]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[26]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[27]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[28]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[29]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[30]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[31]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} +JOINT_DEVICE[32]={NAME[] " ",OFFSET 0.0,AXIS_INDEX -1} + +DECL INT JOINT_DEVICE_INDEX[32] +JOINT_DEVICE_INDEX[1]=-1 +JOINT_DEVICE_INDEX[2]=-1 +JOINT_DEVICE_INDEX[3]=-1 +JOINT_DEVICE_INDEX[4]=-1 +JOINT_DEVICE_INDEX[5]=-1 +JOINT_DEVICE_INDEX[6]=-1 +JOINT_DEVICE_INDEX[7]=-1 +JOINT_DEVICE_INDEX[8]=-1 +JOINT_DEVICE_INDEX[9]=-1 +JOINT_DEVICE_INDEX[10]=-1 +JOINT_DEVICE_INDEX[11]=-1 +JOINT_DEVICE_INDEX[12]=-1 +JOINT_DEVICE_INDEX[13]=-1 +JOINT_DEVICE_INDEX[14]=-1 +JOINT_DEVICE_INDEX[15]=-1 +JOINT_DEVICE_INDEX[16]=-1 +JOINT_DEVICE_INDEX[17]=-1 +JOINT_DEVICE_INDEX[18]=-1 +JOINT_DEVICE_INDEX[19]=-1 +JOINT_DEVICE_INDEX[20]=-1 +JOINT_DEVICE_INDEX[21]=-1 +JOINT_DEVICE_INDEX[22]=-1 +JOINT_DEVICE_INDEX[23]=-1 +JOINT_DEVICE_INDEX[24]=-1 +JOINT_DEVICE_INDEX[25]=-1 +JOINT_DEVICE_INDEX[26]=-1 +JOINT_DEVICE_INDEX[27]=-1 +JOINT_DEVICE_INDEX[28]=-1 +JOINT_DEVICE_INDEX[29]=-1 +JOINT_DEVICE_INDEX[30]=-1 +JOINT_DEVICE_INDEX[31]=-1 +JOINT_DEVICE_INDEX[32]=-1 +BOOL bJointOffsetHasBeenSet=FALSE +INT iLastAxisNo=0 + +ENUM TIMER_ACTIONTYPE TimerStart,TimerStop,TimeOut +BOOL EasyTeachKeepOriWarning=FALSE +INT EasyTeachKeepOriHandle=0 +;ENDFOLD (BASISTECH GLOBALS) +;FOLD AUTOEXT GLOBALS +;================================== +; Structures: +;================================== +ENUM FUNCT_TYPE PGNO_GET,PGNO_ACKN,PGNO_FAULT +ENUM P00_COMMAND INIT_EXT,EXT_PGNO,CHK_HOME,EXT_ERR + +STRUC SPS_PROG_TYPE INT PROG_NR,CHAR PROG_NAME[12] +;================================== +; External declarations: +;================================== +EXT P00 (P00_COMMAND :IN,FUNCT_TYPE :IN,CHAR [] :OUT,INT :IN ) +;External declaration for Submit controlled AutoExt +EXT P00_SUBM (P00_COMMAND :IN,FUNCT_TYPE :IN ) + +;================================== +; Variables: +;================================== +; Variables for internal +; Communication: +;---------------------------------- +BOOL ERROR_FLAG +BOOL CHECK_HOME=TRUE +BOOL PROG_CONTROL=FALSE +DECL CHAR PRO_NAME1_L[8] +PRO_NAME1_L[]=" " +DECL CHAR PRO_NAME1_A[8] +PRO_NAME1_A[]=" " + +INT PGNO=0 ;copy of ext. pgno +INT PGNO_ERROR=0 ;transmission error +INT PGNO_TYPE=1 ;coding type of ext. pgno +INT REFLECT_PROG_NR=0 ; enable mirroring of program number inputs (1=enabled, 0=disabled) + +; Variables for External +; Communication: I/O-Interface +;---------------------------------- +INT PGNO_FBIT=9 ;first bit of ext. pgno input $IN[] +INT PGNO_FBIT_REFL=999 ;first bit of ext. pgno reflection output $OUT[] +INT PGNO_LENGTH=8 ;length of ext. pgno (max. 16) +INT PGNO_PARITY=1 ;parity bit of ext. pgno +INT PGNO_REQ=6 ;request ext. pgno input +INT PGNO_VALID=2 ;validate ext. pgno input +INT APPL_RUN=7 ;application program is running output +INT ERR_TO_PLC=35 ;error output to PLC +INT P01_STEP +INT CHK_STEP +INT PGNO_FLAG + +; Table for assign SPS program number to program name +INT MAX_SPS_PROG=12 +DECL SPS_PROG_TYPE SPS_PROG[12] +SPS_PROG[1]={PROG_NR 1,PROG_NAME[] "HP01() "} +SPS_PROG[2]={PROG_NR 2,PROG_NAME[] "HP02() "} +SPS_PROG[3]={PROG_NR 3,PROG_NAME[] "HP03() "} +SPS_PROG[4]={PROG_NR 4,PROG_NAME[] "HP04() "} +SPS_PROG[5]={PROG_NR 5,PROG_NAME[] "HP05() "} +SPS_PROG[6]={PROG_NR 6,PROG_NAME[] "HP06() "} +SPS_PROG[7]={PROG_NR 7,PROG_NAME[] "HP07() "} +SPS_PROG[8]={PROG_NR 8,PROG_NAME[] "HP08() "} +SPS_PROG[9]={PROG_NR 9,PROG_NAME[] "HP09() "} +SPS_PROG[10]={PROG_NR 10,PROG_NAME[] "HP10() "} +SPS_PROG[11]={PROG_NR 62,PROG_NAME[] "HP62() "} +SPS_PROG[12]={PROG_NR 63,PROG_NAME[] "HP63() "} +DECL CHAR TMPNAME[128] +TMPNAME[]=" " +;ENDFOLD (AUTOEXT GLOBALS) +;FOLD BackupManagerConfig +BOOL BM_ENABLED +INT BM_OUTPUTVALUE +SIGNAL BM_OutputSignal $OUT[4095] TO $OUT[4096] +SIGNAL BM_InputSignal $IN[1026] TO $IN[1026] +;ENDFOLD BackupManagerConfig +;FOLD Conveyor +DECL INT CONV_PART_NBR[16] +CONV_PART_NBR[1]=0 +CONV_PART_NBR[2]=0 +CONV_PART_NBR[3]=0 +CONV_PART_NBR[4]=0 +CONV_PART_NBR[5]=0 +CONV_PART_NBR[6]=0 +CONV_PART_NBR[7]=0 +CONV_PART_NBR[8]=0 +CONV_PART_NBR[9]=0 +CONV_PART_NBR[10]=0 +CONV_PART_NBR[11]=0 +CONV_PART_NBR[12]=0 +CONV_PART_NBR[13]=0 +CONV_PART_NBR[14]=0 +CONV_PART_NBR[15]=0 +CONV_PART_NBR[16]=0 + +ENUM CONV_MODE_TYPE Absolute,Relative +DECL CONV_MODE_TYPE ActualConveyorMode=#Relative +;ENDFOLD Conveyor +;FOLD USER GLOBALS +;******************************************* +;Make your modifications -ONLY- here +;******************************************* +;================================== +; Userdefined Types +;================================== + +;================================== +; Userdefined Externals +;================================== + +;================================== +; Userdefined Variables +;================================== + +;ENDFOLD (USER GLOBALS) +ENDDAT diff --git a/KUKA/KRC/R1/System/Global_Points.dat b/KUKA/KRC/R1/System/Global_Points.dat new file mode 100644 index 0000000..e8765c0 --- /dev/null +++ b/KUKA/KRC/R1/System/Global_Points.dat @@ -0,0 +1,5 @@ +&ACCESS R +&COMMENT global points +DEFDAT GLOBAL_POINTS PUBLIC + +ENDDAT diff --git a/KUKA/KRC/R1/System/MqttConfig.dat b/KUKA/KRC/R1/System/MqttConfig.dat new file mode 100644 index 0000000..9ddf9a2 --- /dev/null +++ b/KUKA/KRC/R1/System/MqttConfig.dat @@ -0,0 +1,12 @@ +&ACCESS RV +DEFDAT MqttConfig PUBLIC + +; Publisher IP address for KukaConnect data-set configuration. +; Should either start with "mqtt://" or "mqtts://". +GLOBAL CHAR KUKACONNECT_BROKERIP[100] +KUKACONNECT_BROKERIP[]="mqtts://broker-ip:8883" + +; Publisher for KukaConnect data-set only starts if enabled. +GLOBAL BOOL KUKACONNECT_ENABLED=FALSE; + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/System/MsgLib.dat b/KUKA/KRC/R1/System/MsgLib.dat new file mode 100644 index 0000000..845922f --- /dev/null +++ b/KUKA/KRC/R1/System/MsgLib.dat @@ -0,0 +1,7 @@ +&ACCESS R1 +&COMMENT Message library +DEFDAT MsgLib PUBLIC + +DECL INT lnHandle=0 + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/System/MsgLib.src b/KUKA/KRC/R1/System/MsgLib.src new file mode 100644 index 0000000..999fbb8 --- /dev/null +++ b/KUKA/KRC/R1/System/MsgLib.src @@ -0,0 +1,753 @@ +&ACCESS R1 +&COMMENT Message library +DEF MsgLib ( ) +;************************************************** +;Creation Date: 7.12.2007 +;Change: 23.06.2012 additional properties possible +; for logging and advance stop control +;************************************************** +;FOLD Interfaces and message examples within this fold +;----------Global subroutines and functions: ------- + +;MsgNotify(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN) +;MsgNotifyTextPar(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, sTextPar2[]:IN, nMsgNr:IN,MsgOpt:IN) +;MsgQuit(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN) +;MsgState(nHandle:OUT, sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN) +;MsgLoop(sText[]:IN,sModul[]:IN) +;MsgDialog(nAnswer:OUT,sText[]:IN,sModul[]:IN,sTextPar[]:IN,sDialogSK1[]:IN,sDialogSK2[]:IN,sDialogSK3[]:IN,sDialogSK4[]:IN,sDialogSK5[]:IN,sDialogSK6[]:IN,sDialogSK7[]:IN,NoBrakes:IN, nMsgNr:IN,MsgOpt:IN) + +;----------Explainations for parameters: ----------- + +;CHAR sText[] message text or message DB-key (80 chars) +;CHAR sModul[] (option) modulname or key (24 char) +;INT nNumPar (option)numeric value inserted in sText[] at the position %1 +;CHAR sTextPar[] (option)text or message DB-key inserted in sText[] at the position %1 (26 char) +;MsgOpt (option) Structure KrlMsgOpt_T BOOL VL_Stop,Clear_P_Reset,Log_To_DB +; (option) VL_Stop=TRUE => Creates an advance stop | FALSE avoids this behavior +; (option) Clear_P_Reset=TRUE (Default) deletes Messages at program reset / cancelled +; (option) Log_To_DB=TRUE => entry into logbook => enfluence to system performance + +;----------Examples: ------------------------------- + +;MsgNotifyTextPar("Error", "CrossMeld", 0, "Error message 1", "Error message 2", 511) +;MsgNotify("this is a notify message") +;MsgQuit("this is a quit message", "myMod") +;MsgQuit("this is a quit message", "myMod",,,12345) +;INT myInt=123 +;MsgQuit("this is the %1 quit message", "Module", myInt) +;MsgNotify("this is a %1 notify message", "Tech", , "asd") +;MsgLoop("this is the loop message") +;MsgLoop(" "); cancels loop message +;MsgDialog(DialogAnswer, "DBKEY" OR "dialog message", "Module", "TextPar for %1 in DBKey", "DialogKey1", "DialogKey2", "DialogKey3",,,,,,12345) +;MsgDialog(DialogAnswer, "StartPTP", "CrossMeld", "Achse 3", "YES", "NO", "Cancel") +;MsgNotifyTextPar("DBKEY" OR "notify message", "Module", 0 OR >0, "TextPar for %1", "TextPar for %2") +;nNumPar = 0: TextPar will be send as %1 %2 nNumPar > 0: nNumPar will be send as %1 +;ENDFOLD +END +;*************************** +;Execution of notify message +;*************************** +GLOBAL DEF MsgNotify(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN) +DECL CHAR sText[], sModul[], sTextPar[] +DECL KrlMsg_T Msg +DECL KrlMsgParType_T MsgParType +DECL KrlMsgPar_T MsgPar[3] +DECL KrlMsgOpt_T MsgOpt ;Bool-elements: VL_Stop,Clear_P_Reset,Log_To_DB +DECL KrlMsgOpt_T DummyMsgOpt +DECL State_T State +DECL INT count, len, offset, nNumPar, nHandle, nMsgNr + + ;Default Values: MsgOpt={ VL_Stop TRUE, Clear_P_Reset TRUE, Log_To_DB False } + ON_ERROR_PROCEED + DummyMsgOpt=MsgOpt + + IF ($ERR.Number<>0) THEN + MsgOpt.VL_Stop=TRUE ;DEFAULT setting TRUE + MsgOpt.Clear_P_Reset=TRUE + MsgOpt.Log_To_DB=FALSE + ERR_CLEAR($ERR) + ENDIF + + ;Creates default values in case of none availability + MsgOpt=CheckOfMsgOpt(MsgOpt) + + Msg.Nr=1 + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + Msg.Nr=nMsgNr + len=STRLEN(sText[]) + IF len>0 THEN + IF len>80 THEN + len=80 + ENDIF + FOR count=1 TO len + Msg.Msg_txt[count]=sText[count] + ENDFOR + ELSE + Msg.Msg_txt[]="parameter sText[] is missing" + ENDIF + len=STRLEN(sModul[]) + IF len>0 THEN + IF len>24 THEN + len=24 + ENDIF + FOR count=1 TO len + Msg.Modul[count]=sModul[count] + ENDFOR + ELSE + Msg.Modul[]="Appl" + ENDIF + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + offset=nNumPar + IF $ERR.Number==0 THEN + offset=0 + MsgPar[1].Par_Txt[]=" " + SWRITE(MsgPar[1].Par_Txt[], State, Offset, "%d", nNumPar) + MsgPar[1].Par_type=#Value + ELSE + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + len=STRLEN(sTextPar[]) + IF len>0 THEN + IF len>26 THEN + len=26 + ENDIF + FOR count=1 TO len + MsgPar[1].Par_Txt[count]=sTextPar[count] + ENDFOR + MsgPar[1].Par_type=#Value + ENDIF + ENDIF + + nHandle=Set_KrlMsg (#NOTIFY, Msg, MsgPar[], MsgOpt) + +END ;(MsgNotify) +;***************************** +;Execution of the quit message +;***************************** +GLOBAL DEF MsgQuit(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN) +DECL CHAR sText[], sModul[], sTextPar[] +DECL KrlMsg_T Msg +DECL KrlMsgParType_T MsgParType +DECL KrlMsgPar_T MsgPar[3] +DECL KrlMsgOpt_T MsgOpt +DECL KrlMsgOpt_T DummyMsgOpt +DECL State_T State +DECL INT count, len, offset, nNumPar, nHandle, nMsgNr + + ON_ERROR_PROCEED + DummyMsgOpt=MsgOpt + + IF ($ERR.Number<>0) THEN + MsgOpt.VL_Stop=TRUE ;DEFAULT setting TRUE + MsgOpt.Clear_P_Reset=TRUE + MsgOpt.Log_To_DB=FALSE + ERR_CLEAR($ERR) + ENDIF + + ;Creates default values in case of none availability + MsgOpt=CheckOfMsgOpt(MsgOpt) + + Msg.Nr=1 + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + Msg.Nr=nMsgNr + len=STRLEN(sText[]) + IF len>0 THEN + IF len>80 THEN + len=80 + ENDIF + FOR count=1 TO len + Msg.Msg_txt[count]=sText[count] + ENDFOR + ELSE + Msg.Msg_txt[]="parameter sText[] is missing" + ENDIF + len=STRLEN(sModul[]) + IF len>0 THEN + IF len>24 THEN + len=24 + ENDIF + FOR count=1 TO len + Msg.Modul[count]=sModul[count] + ENDFOR + ELSE + Msg.Modul[]="Appl" + ENDIF + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + offset=nNumPar + IF $ERR.Number==0 THEN + offset=0 + MsgPar[1].Par_Txt[]=" " + SWRITE(MsgPar[1].Par_Txt[], State, offset, "%d", nNumPar) + MsgPar[1].Par_type=#Value + ELSE + ERR_CLEAR($ERR) + len=STRLEN(sTextPar[]) + IF len>0 THEN + IF len>26 THEN + len=26 + ENDIF + FOR count=1 TO len + MsgPar[1].Par_Txt[count]=sTextPar[count] + ENDFOR + MsgPar[1].Par_type=#Value + ENDIF + ENDIF + + nHandle=Set_KrlMsg (#QUIT, Msg, MsgPar[], MsgOpt) + + WHILE ( Exists_KrlMsg(nHandle) ) + WAIT sec 0.1 + ENDWHILE + +END ;(MsgQuit) +;****************************** +;Execution of the state message +;****************************** +GLOBAL DEF MsgState(nHandle:OUT, sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN) +DECL CHAR sText[], sModul[], sTextPar[] +DECL KrlMsg_T Msg +DECL KrlMsgParType_T MsgParType +DECL KrlMsgPar_T MsgPar[3] +DECL KrlMsgOpt_T MsgOpt +DECL KrlMsgOpt_T DummyMsgOpt +DECL State_T State +DECL INT count, len, offset, nNumPar, nHandle, nMsgNr + + ON_ERROR_PROCEED + DummyMsgOpt=MsgOpt + + IF ($ERR.Number<>0) THEN + MsgOpt.VL_Stop=TRUE ;DEFAULT setting TRUE + MsgOpt.Clear_P_Reset=TRUE + MsgOpt.Log_To_DB=FALSE + ERR_CLEAR($ERR) + ENDIF + + ;Creates default values in case of none availability + MsgOpt=CheckOfMsgOpt(MsgOpt) + + Msg.Nr=1 + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + Msg.Nr=nMsgNr + len=STRLEN(sText[]) + IF len>0 THEN + IF len>80 THEN + len=80 + ENDIF + FOR count=1 TO len + Msg.Msg_txt[count]=sText[count] + ENDFOR + ELSE + Msg.Msg_txt[]="parameter sText[] is missing" + ENDIF + len=STRLEN(sModul[]) + IF len>0 THEN + IF len>24 THEN + len=24 + ENDIF + FOR count=1 TO len + Msg.Modul[count]=sModul[count] + ENDFOR + ELSE + Msg.Modul[]="Appl" + ENDIF + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + offset=nNumPar + IF $ERR.Number==0 THEN + offset=0 + MsgPar[1].Par_Txt[]=" " + SWRITE(MsgPar[1].Par_Txt[], State, offset, "%d", nNumPar) + MsgPar[1].Par_type=#Value + ELSE + ERR_CLEAR($ERR) + len=STRLEN(sTextPar[]) + IF len>0 THEN + IF len>26 THEN + len=26 + ENDIF + FOR count=1 TO len + MsgPar[1].Par_Txt[count]=sTextPar[count] + ENDFOR + MsgPar[1].Par_type=#Value + ENDIF + ENDIF + + nHandle=Set_KrlMsg (#STATE, Msg, MsgPar[], MsgOpt) + +END ;(MsgState) +;*************************** +;Execution of loop message +;*************************** +GLOBAL DEF MsgLoop(sText[]:IN,sModul[]:IN) +DECL CHAR sText[], sModul[] +DECL CHAR sMsg[80] +DECL CHAR sMod[24] +DECL INT count,len + + len=STRLEN(sText[]) + IF len>0 THEN + IF len>80 THEN + len=80 + ENDIF + FOR count=1 TO len + sMsg[count]=sText[count] + ENDFOR + ENDIF + len=STRLEN(sModul[]) + IF len>0 THEN + IF len>24 THEN + len=24 + ENDIF + FOR count=1 TO len + sMod[count]=sModul[count] + ENDFOR + ELSE + sMod[]="Appl" + ENDIF + IF (STRLEN(sMsg[])>0) THEN + IF lnHandle>0 THEN + WAIT FoR Clear_KrlMsg (lnHandle) OR TRUE + lnHandle=0 + ENDIF + FOR count=1 TO STRLEN(sMsg[]) + IF sMsg[count]<>" " THEN + MsgState(lnHandle, sMsg[], sMod[]) + EXIT + ENDIF + ENDFOR + ENDIF +END ;(MsgLoop) +;************************************************* +;Execution of dialog message +;parameter NoBrakes: Robot leaves brakes open +;************************************************* +GLOBAL DEF MsgDialog(nAnswer:OUT,sText[]:IN,sModul[]:IN,sTextPar[]:IN,sDialogSK1[]:IN,sDialogSK2[]:IN,sDialogSK3[]:IN,sDialogSK4[]:IN,sDialogSK5[]:IN,sDialogSK6[]:IN,sDialogSK7[]:IN,NoBrakes:IN, nMsgNr:IN,MsgOpt:IN) +DECL KrlMsg_T Msg +DECL KrlMsgPar_T MsgPar[3] +DECL KrlMsgOpt_T MsgOpt +DECL KrlMsgOpt_T DummyMsgOpt +DECL KrlMsgDlgSK_T Msg_SOFTKEY[7] +DECL INT count, len, nHandle, nAnswer, nMsgNr +DECL BOOL NoBrakes +DECL CHAR sText[], sModul[], sTextPar[], sDialogSK1[], sDialogSK2[], sDialogSK3[], sDialogSK4[], sDialogSK5[], sDialogSK6[], sDialogSK7[] +DECL CHAR sMsg[80] + + ON_ERROR_PROCEED + DummyMsgOpt=MsgOpt + + IF ($ERR.Number<>0) THEN + MsgOpt.VL_Stop=TRUE ;DEFAULT setting TRUE + MsgOpt.Clear_P_Reset=TRUE + MsgOpt.Log_To_DB=FALSE + ERR_CLEAR($ERR) + ENDIF + + ;Creates default values in case of none availability + MsgOpt=CheckOfMsgOpt(MsgOpt) + + Msg.Nr=1 + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + Msg.Nr=nMsgNr + len=STRLEN(sText[]) + IF len>0 THEN + IF len>80 THEN + len=80 + ENDIF + FOR count=1 TO len + Msg.Msg_txt[count]=sText[count] + ENDFOR + ELSE + Msg.Msg_txt[]="parameter sText[] is missing" + ENDIF + len=STRLEN(sModul[]) + IF len>0 THEN + IF len>24 THEN + len=24 + ENDIF + FOR count=1 TO len + Msg.Modul[count]=sModul[count] + ENDFOR + ELSE + Msg.Modul[]="Appl" + ENDIF + + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + len=STRLEN(sDialogSK1[]) + IF $ERR.Number==0 THEN + IF len > 0 THEN + IF len>24 THEN + len=24 + ENDIF + Msg_SOFTKEY[7].Sk_Type = #KEY + FOR count=1 TO len + Msg_SOFTKEY[7].Sk_txt[count] = sDialogSK1[count] + ENDFOR + ENDIF + ELSE + FOR count=1 TO 24 + Msg_SOFTKEY[7].Sk_txt[count] = " " + ENDFOR + ENDIF + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + len=STRLEN(sDialogSK2[]) + IF $ERR.Number==0 THEN + len=STRLEN(sDialogSK2[]) + IF len > 0 THEN + IF len>24 THEN + len=24 + ENDIF + Msg_SOFTKEY[6].Sk_Type = #KEY + FOR count=1 TO len + Msg_SOFTKEY[6].Sk_txt[count] = sDialogSK2[count] + ENDFOR + ENDIF + ELSE + FOR count=1 TO 24 + Msg_SOFTKEY[6].Sk_txt[count] = " " + ENDFOR + ENDIF + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + len=STRLEN(sDialogSK3[]) + IF $ERR.Number==0 THEN + len=STRLEN(sDialogSK3[]) + IF len > 0 THEN + IF len>24 THEN + len=24 + ENDIF + Msg_SOFTKEY[5].Sk_Type = #KEY + FOR count=1 TO len + Msg_SOFTKEY[5].Sk_txt[count] = sDialogSK3[count] + ENDFOR + ENDIF + ELSE + FOR count=1 TO 24 + Msg_SOFTKEY[5].Sk_txt[count] = " " + ENDFOR + ENDIF + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + len=STRLEN(sDialogSK4[]) + IF $ERR.Number==0 THEN + len=STRLEN(sDialogSK4[]) + IF len > 0 THEN + IF len>24 THEN + len=24 + ENDIF + Msg_SOFTKEY[4].Sk_Type = #KEY + FOR count=1 TO len + Msg_SOFTKEY[4].Sk_txt[count] = sDialogSK4[count] + ENDFOR + ENDIF + ELSE + FOR count=1 TO 24 + Msg_SOFTKEY[4].Sk_txt[count] = " " + ENDFOR + ENDIF + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + len=STRLEN(sDialogSK5[]) + IF $ERR.Number==0 THEN + len=STRLEN(sDialogSK5[]) + IF len > 0 THEN + IF len>24 THEN + len=24 + ENDIF + Msg_SOFTKEY[3].Sk_Type = #KEY + FOR count=1 TO len + Msg_SOFTKEY[3].Sk_txt[count] = sDialogSK5[count] + ENDFOR + ENDIF + ELSE + FOR count=1 TO 24 + Msg_SOFTKEY[3].Sk_txt[count] = " " + ENDFOR + ENDIF + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + len=STRLEN(sDialogSK6[]) + IF $ERR.Number==0 THEN + len=STRLEN(sDialogSK6[]) + IF len > 0 THEN + IF len>24 THEN + len=24 + ENDIF + Msg_SOFTKEY[2].Sk_Type = #KEY + FOR count=1 TO len + Msg_SOFTKEY[2].Sk_txt[count] = sDialogSK6[count] + ENDFOR + ENDIF + ELSE + FOR count=1 TO 24 + Msg_SOFTKEY[2].Sk_txt[count] = " " + ENDFOR + ENDIF + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + len=STRLEN(sDialogSK7[]) + IF $ERR.Number==0 THEN + len=STRLEN(sDialogSK7[]) + IF len > 0 THEN + IF len>24 THEN + len=24 + ENDIF + Msg_SOFTKEY[1].Sk_Type = #KEY + FOR count=1 TO len + Msg_SOFTKEY[1].Sk_txt[count] = sDialogSK7[count] + ENDFOR + ENDIF + ELSE + FOR count=1 TO 24 + Msg_SOFTKEY[1].Sk_txt[count] = " " + ENDFOR + ENDIF + len=STRLEN(sTextPar[]) + IF len>0 THEN + IF len>26 THEN + len=26 + ENDIF + FOR count=1 TO len + MsgPar[1].Par_Txt[count]=sTextPar[count] + ENDFOR + MsgPar[1].Par_type=#Value + ENDIF + + nHandle=SET_KRLDLG(Msg, MsgPar[], Msg_SOFTKEY[], MsgOpt) + + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + NoBrakes=NoBrakes + IF NOT($ERR.Number==0) THEN + NoBrakes=FALSE + ENDIF + IF (nHandle > 0) THEN + WHILE (Exists_KrlDlg(nHandle, nAnswer)) + WAIT SEC 0.5 + IF NoBrakes THEN + PTP $AXIS_ACT + ENDIF + ENDWHILE + ENDIF +END ;(MsgDialog) +;************************************************* +;Execution of notify message with text parameter +;************************************************* +GLOBAL DEF MsgNotifyTextPar(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, sTextPar2[]:IN, nMsgNr:IN,MsgOpt:IN) +DECL CHAR sText[], sModul[], sTextPar[], sTextPar2[] +DECL KrlMsg_T Msg +DECL EKrlMsgType MsgType +DECL KrlMsgParType_T MsgParType +DECL KrlMsgPar_T MsgPar[3] +DECL KrlMsgOpt_T MsgOpt +DECL KrlMsgOpt_T DummyMsgOpt +DECL State_T State +DECL INT count, len, offset, nNumPar, nHandle, nMsgNr + + ON_ERROR_PROCEED + DummyMsgOpt=MsgOpt + + IF ($ERR.Number<>0) THEN + MsgOpt.VL_Stop=TRUE ;DEFAULT setting TRUE + MsgOpt.Clear_P_Reset=TRUE + MsgOpt.Log_To_DB=FALSE + ERR_CLEAR($ERR) + ENDIF + + ;Creates default values in case of none availability + MsgOpt=CheckOfMsgOpt(MsgOpt) + + MsgType=#Notify + Msg.Nr=1 + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + Msg.Nr=nMsgNr + len=STRLEN(sText[]) + IF len>0 THEN + IF len>80 THEN + len=80 + ENDIF + FOR count=1 TO len + Msg.Msg_txt[count]=sText[count] + ENDFOR + ELSE + Msg.Msg_txt[]="parameter sText[] is missing" + ENDIF + len=STRLEN(sModul[]) + IF len>0 THEN + IF len>24 THEN + len=24 + ENDIF + FOR count=1 TO len + Msg.Modul[count]=sModul[count] + ENDFOR + ELSE + Msg.Modul[]="Appl" + ENDIF + offset=nNumPar + IF nNumPar==0 THEN + ; 1st Parameter + len=STRLEN(sTextPar[]) + IF len>0 THEN + IF len>26 THEN + len=26 + ENDIF + FOR count=1 TO len + MsgPar[1].Par_Txt[count]=sTextPar[count] + ENDFOR + MsgPar[1].Par_type=#Value + ENDIF + ; 2nd Parameter + len=STRLEN(sTextPar2[]) + IF len>0 THEN + IF len>26 THEN + len=26 + ENDIF + FOR count=1 TO len + MsgPar[2].Par_Txt[count]=sTextPar2[count] + ENDFOR + MsgPar[2].Par_type=#Value + ENDIF + ELSE + offset=0 + MsgPar[1].Par_Txt[]=" " + SWRITE(MsgPar[1].Par_Txt[], State, Offset, "%d", nNumPar) + MsgPar[1].Par_type=#Value + ENDIF + + nHandle=Set_KrlMsg (MsgType, Msg, MsgPar[], MsgOpt) + +END ;(MsgNotifyTextPar) + +;************************************************* +;Execution of quit message with text parameter +;************************************************* +GLOBAL DEF MsgQuitTextPar(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, sTextPar2[]:IN, nMsgNr:IN,MsgOpt:IN) +DECL CHAR sText[], sModul[], sTextPar[], sTextPar2[] +DECL KrlMsg_T Msg +DECL EKrlMsgType MsgType +DECL KrlMsgParType_T MsgParType +DECL KrlMsgPar_T MsgPar[3] +DECL KrlMsgOpt_T MsgOpt +DECL KrlMsgOpt_T DummyMsgOpt +DECL State_T State +DECL INT count, len, offset, nNumPar, nHandle, nMsgNr + + ON_ERROR_PROCEED + DummyMsgOpt=MsgOpt + + IF ($ERR.Number<>0) THEN + MsgOpt.VL_Stop=TRUE ;DEFAULT setting TRUE + MsgOpt.Clear_P_Reset=TRUE + MsgOpt.Log_To_DB=FALSE + ERR_CLEAR($ERR) + ELSE + ERR_RAISE($ERR) + ENDIF + + ;Creates default values in case of none availability + MsgOpt=CheckOfMsgOpt(MsgOpt) + + MsgType=#QUIT + Msg.Nr=1 + ERR_CLEAR($ERR) + ON_ERROR_PROCEED + Msg.Nr=nMsgNr + len=STRLEN(sText[]) + IF len>0 THEN + IF len>80 THEN + len=80 + ENDIF + FOR count=1 TO len + Msg.Msg_txt[count]=sText[count] + ENDFOR + ELSE + Msg.Msg_txt[]="parameter sText[] is missing" + ENDIF + len=STRLEN(sModul[]) + IF len>0 THEN + IF len>24 THEN + len=24 + ENDIF + FOR count=1 TO len + Msg.Modul[count]=sModul[count] + ENDFOR + ELSE + Msg.Modul[]="Appl" + ENDIF + offset=nNumPar + IF nNumPar==0 THEN + ; 1st Parameter + len=STRLEN(sTextPar[]) + IF len>0 THEN + IF len>26 THEN + len=26 + ENDIF + FOR count=1 TO len + MsgPar[1].Par_Txt[count]=sTextPar[count] + ENDFOR + MsgPar[1].Par_type=#Value + ENDIF + ; 2nd Parameter + len=STRLEN(sTextPar2[]) + IF len>0 THEN + IF len>26 THEN + len=26 + ENDIF + FOR count=1 TO len + MsgPar[2].Par_Txt[count]=sTextPar2[count] + ENDFOR + MsgPar[2].Par_type=#Value + ENDIF + ELSE + offset=0 + MsgPar[1].Par_Txt[]=" " + SWRITE(MsgPar[1].Par_Txt[], State, Offset, "%d", nNumPar) + MsgPar[1].Par_type=#Value + ENDIF + + nHandle=Set_KrlMsg (MsgType, Msg, MsgPar[], MsgOpt) + +END ;(MsgQuitTextPar) + +;***************************** +;* Check of missing elements * +;***************************** +DEFFCT KrlMsgOpt_T CheckOfMsgOpt(LocalMsgOpt:IN) +DECL KrlMsgOpt_T LocalMsgOpt ;Bool-elements: VL_Stop,Clear_P_Reset,Log_To_DB +DECL KrlMsgOpt_T DummyMsgOpt + + ;Default Values: MsgOpt={ VL_Stop TRUE, Clear_P_Reset TRUE, Log_To_DB False } + + ON_ERROR_PROCEED + DummyMsgOpt.VL_Stop=LocalMsgOpt.VL_Stop + IF ($ERR.Number<>0) THEN + LocalMsgOpt.VL_Stop=TRUE ;DEFAULT setting TRUE + ERR_CLEAR($ERR) + ENDIF + + ON_ERROR_PROCEED + DummyMsgOpt.Clear_P_Reset=LocalMsgOpt.Clear_P_Reset + IF ($ERR.Number<>0) THEN + LocalMsgOpt.Clear_P_Reset=TRUE ;DEFAULT setting TRUE + ERR_CLEAR($ERR) + ENDIF + + ON_ERROR_PROCEED + DummyMsgOpt.Log_To_DB=LocalMsgOpt.Log_To_DB + IF ($ERR.Number<>0) THEN + LocalMsgOpt.Log_To_DB=FALSE ;DEFAULT setting FALSE + ERR_CLEAR($ERR) + ENDIF + + RETURN(LocalMsgOpt) + +ENDFCT ;(CheckOfMsgOpt) \ No newline at end of file diff --git a/KUKA/KRC/R1/System/bas.src b/KUKA/KRC/R1/System/bas.src new file mode 100644 index 0000000..86b050e --- /dev/null +++ b/KUKA/KRC/R1/System/bas.src @@ -0,0 +1,2084 @@ +&ACCESS R1 +&REL 1 +&COMMENT BASIS package +DEF BAS (COMMAND :IN,REAL_PAR :IN ) +;FOLD BAS () + DECL BAS_COMMAND COMMAND + REAL REAL_PAR + + SWITCH COMMAND + CASE #INITMOV + INITMOV ( ) + RESET_CD_PARAMS () + CASE #ACC_CP + ACC_CP (REAL_PAR ) + CASE #ACC_GLUE + ACC_GLUE (REAL_PAR ) + CASE #ACC_PTP + ACC_PTP (REAL_PAR ) + CASE #VEL_CP + VEL_CP (REAL_PAR ) + CASE #VEL_PTP + VEL_PTP (REAL_PAR ) + CASE #TOOL + TOOL (REAL_PAR ) + CASE #BASE + BASE (REAL_PAR ) + CASE #EX_BASE + EX_BASE (REAL_PAR, 0 ) + CASE #FRAMES + FRAMES ( ) + CASE #CP_DAT + VEL_CP (LDAT_ACT.VEL ) + CP_DAT ( ) + CASE #PTP_DAT + VEL_PTP (PDAT_ACT.VEL ) + PTP_DAT ( ) + CASE #OUT_SYNC + OUT_SYNC ( ) + CASE #OUT_ASYNC + OUT_ASYNC ( ) + CASE #GROUP + GROUP (REAL_PAR ) + CASE #PTP_PARAMS + PTP_DAT ( ) + FRAMES ( ) + VEL_PTP (REAL_PAR ) + CASE #CP_PARAMS + CP_DAT ( ) + FRAMES ( ) + VEL_CP (REAL_PAR ) + ENDSWITCH +END +;ENDFOLD BAS () +;FOLD INITMOV () + +DEFFCT CHAR[128] IntToStrWithPrefix(tVar:IN, bPrefixComma:IN) +DECL INT tVar +DECL CHAR tStr[128] +DECL STATE_T STATE +DECL INT OFFSET +DECL BOOL bPrefixComma + +OFFSET = 0 +IF bPrefixComma THEN + SWRITE(tStr[],STATE,OFFSET,",%d",tVar) +ELSE + SWRITE(tStr[],STATE,OFFSET,"%d",tVar) +ENDIF +RETURN tStr[] +ENDFCT + +DEF UpdateLoadModes ( ) + INT I + FOR I=1 TO MAX_TOOL STEP 1 + IF (LOAD_MODE[I]==#NONE) AND (LOAD_DATA[I].M <> -1) THEN + LOAD_MODE[I]=#MANUAL + ENDIF + ENDFOR +END + +DEF CheckLoadModes ( ) + INT I,iRet + CHAR MsgPar[256] + BOOL first, bResult,foundT1Modes + DECL KrlMsgOpt_T MsgOpt + + IF ($MODE_OP <> #T1) THEN + first = TRUE + foundT1Modes=FALSE + bResult = STRCLEAR(MsgPar[]) + + FOR I=1 TO MAX_TOOL STEP 1 + IF (LOAD_MODE[I]==#T1) THEN + foundT1Modes=TRUE + IF first THEN + first = FALSE + iRet = STRADD(MsgPar[], IntToStrWithPrefix(I, FALSE)) + ELSE + iRet = STRADD(MsgPar[], IntToStrWithPrefix(I, TRUE)) + ENDIF + ENDIF + ENDFOR + + IF (foundT1Modes) THEN + MsgOpt={VL_Stop FALSE,Clear_P_Reset TRUE,Log_To_DB TRUE} + IF ($MODE_OP==#EX) THEN + MsgNotify("LddPerformedInT1", "BasisTech", ,MsgPar[],35,MsgOpt) + ELSE + MsgQuit ("LddPerformedInT1", "BasisTech", ,MsgPar[],35,MsgOpt) + ENDIF + ENDIF + ENDIF +END + +DEF CheckLoadModeForTool(tool_no:IN) + INT iRet,tool_no + CHAR MsgPar[256] + DECL KrlMsgOpt_T MsgOpt + + CONTINUE + IF (($ON_PATH==FALSE) AND ($MODE_OP <> #T1) AND (LOAD_MODE[tool_no]==#T1)) THEN + MsgOpt={VL_Stop FALSE,Clear_P_Reset TRUE,Log_To_DB TRUE} + iRet = STRADD(MsgPar[], IntToStrWithPrefix(tool_no, FALSE)) + IF ($MODE_OP==#EX) THEN + MsgNotify("LddPerformedInT1", "BasisTech", ,MsgPar[],35,MsgOpt) + ELSE + MsgQuit ("LddPerformedInT1", "BasisTech", ,MsgPar[],35,MsgOpt) + ENDIF + ENDIF +END + + +DEF INITMOV ( ) + INT I + + + ; PTP-Parameters: + ACC_PTP (100.0 ) ; ptp acceleration 100% = DEF_ACC_PTP + VEL_PTP (100.0 ) ; ptp velocity 100% = DEF_VEL_PTP + + ; CP-Parameters: + ACC_CP (100.0 ) ; path acceleration 100% = DEF_ACC_CP + $ACC.ORI1=DEF_ACC_ORI1 ; swivel acceleration + $ACC.ORI2=DEF_ACC_ORI2 ; rotation acceleration + + VEL_CP (DEF_VEL_CP ) ; path velocity + $VEL.ORI1=DEF_VEL_ORI1 ; swivel velocity + $VEL.ORI2=DEF_VEL_ORI2 ; rotation velocity + + ; Parameters for Approximation: + $APO.CPTP=DEF_APO_CPTP ; PTP-Approximation + $APO.CDIS=DEF_APO_CDIS ; Distance-Approximation + $APO.CVEL=DEF_APO_CVEL ; Speed-Approximation + $APO.CORI=DEF_APO_CORI ; Orientation-Approximation + + $FILTER=$DEF_FLT_PTP ; filter + $ADVANCE=DEF_ADVANCE ; advance + $ORI_TYPE=#VAR ; variable orientation + $CIRC_TYPE=DEF_CIRC_TYP ; CIRC-orientation defined in $config.dat + $JERK=SJERK(LDEFAULT) + TOOL_CORR=$NULLFRAME + TOOL_CORR_ON=FALSE + M_BASE_CORR=$NULLFRAME + M_BAS_COR_ON=FALSE + TOOL_CORR_W=$NULLFRAME + TOOL_CORR_W_ON=FALSE + BASE_CORR=$NULLFRAME + BASE_CORR_ON=FALSE + bJointOffsetHasBeenSet=FALSE + IF iLastAxisNo > 0 THEN + $JOINT_OFFSET[iLastAxisNo] = 0 + ENDIF + iLastAxisNo=0 + + IF $KINCLASS<>#NONE THEN + BASE (0 ) ; Activating Base $WORLD + $TOOL=TOOL_DATA[1] + $ACT_TOOL=1 + ENDIF + + IF $TCP_IPO==TRUE THEN + $IPO_MODE=#BASE + ENDIF + + IF $ADAP_ACC<>#NONE THEN + IF LOAD_A1_DATA.M<0 THEN + $LOAD_A1.M=0 + $LOAD_A1.CM={X 0.0, Y 0.0, Z 0.0, A 0.0, B 0.0, C 0.0} + $LOAD_A1.J={X 0.0, Y 0.0, Z 0.0} + ELSE + $LOAD_A1.M=LOAD_A1_DATA.M + $LOAD_A1.CM=LOAD_A1_DATA.CM + $LOAD_A1.J=LOAD_A1_DATA.J + ENDIF + IF LOAD_A2_DATA.M<0 THEN + $LOAD_A2.M=0 + $LOAD_A2.CM={X 0.0, Y 0.0, Z 0.0, A 0.0, B 0.0, C 0.0} + $LOAD_A2.J={X 0.0, Y 0.0, Z 0.0} + ELSE + $LOAD_A2.M=LOAD_A2_DATA.M + $LOAD_A2.CM=LOAD_A2_DATA.CM + $LOAD_A2.J=LOAD_A2_DATA.J + ENDIF + IF LOAD_A3_DATA.M<0 THEN + $LOAD_A3.M=$DEF_LA3_M + $LOAD_A3.CM=$DEF_LA3_CM + $LOAD_A3.J=$DEF_LA3_J + ELSE + $LOAD_A3.M=LOAD_A3_DATA.M + $LOAD_A3.CM=LOAD_A3_DATA.CM + IF ((LOAD_A3_DATA.M<>0) AND (LOAD_A3_DATA.J.X==0) AND (LOAD_A3_DATA.J.Y==0) AND (LOAD_A3_DATA.J.Z==0)) THEN + $LOAD_A3.J=$DEF_LA3_J + ELSE + $LOAD_A3.J=LOAD_A3_DATA.J + ENDIF + ENDIF + ENDIF + + ; standard group definition + COMPL_GROUP=1 + FOR I=1 TO $EX_AX_NUM + COMPL_GROUP=COMPL_GROUP*2+1 + ENDFOR + $ACT_GROUP=COMPL_GROUP + + STOPM_FLAG=FALSE ;reflects state of interrupt 3 + ; Set $Gear_Jerk[] with defaults + FOR I = 1 TO 12 + $GEAR_JERK[I] = DEF_GEAR_JERK + ENDFOR +END +;ENDFOLD INITMOV () +;FOLD BASE () +DEF BASE (BASE_NO :IN ) + INT BASE_NO + + IF (BASE_NO<=0) THEN + IF BASE_CORR_ON AND M_BAS_COR_ON THEN + $BASE=BASE_CORR:$WORLD:M_BASE_CORR + ELSE + IF M_BAS_COR_ON THEN + $BASE=$WORLD:M_BASE_CORR + ELSE + IF BASE_CORR_ON THEN + $BASE=BASE_CORR:$WORLD + ELSE + $BASE=$WORLD + ENDIF + ENDIF + ENDIF + IF bJointOffsetHasBeenSet THEN + bJointOffsetHasBeenSet = FALSE + IF iLastAxisNo > 0 THEN + $JOINT_OFFSET[iLastAxisNo] = 0 + ENDIF + ENDIF + ELSE + IF BASE_CORR_ON AND M_BAS_COR_ON THEN + $BASE=BASE_CORR:BASE_DATA[BASE_NO]:M_BASE_CORR + ELSE + IF M_BAS_COR_ON THEN + $BASE=BASE_DATA[BASE_NO]:M_BASE_CORR + ELSE + IF BASE_CORR_ON THEN + $BASE=BASE_CORR:BASE_DATA[BASE_NO] + ELSE + $BASE=BASE_DATA[BASE_NO] + ENDIF + ENDIF + ENDIF + ENDIF + + CONTINUE + $ACT_BASE=BASE_NO ; Storing actual Base-Number in global variable + CONTINUE + $ACT_EX_AX=-1 +END +;ENDFOLD BASE () +;FOLD EX_BASE () +DEF EX_BASE (BASE_NO :IN , MACH_IDX : IN) + INT BASE_NO, MACH_IDX + + IF BASE_NO > 0 THEN + IF BASE_CORR_ON AND M_BAS_COR_ON THEN + $BASE=EK(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].MECH_TYPE,BASE_CORR:BASE_DATA[BASE_NO]:M_BASE_CORR) + ELSE + IF M_BAS_COR_ON THEN + $BASE=EK(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].MECH_TYPE,BASE_DATA[BASE_NO]:M_BASE_CORR) + ELSE + IF BASE_CORR_ON THEN + $BASE=EK(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].MECH_TYPE,BASE_CORR:BASE_DATA[BASE_NO]) + ELSE + $BASE=EK(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].MECH_TYPE,BASE_DATA[BASE_NO]) + ENDIF + ENDIF + ENDIF + ENDIF + + CONTINUE + $ACT_BASE=BASE_NO +END +;ENDFOLD EX_BASE () +;FOLD LK_BASE () +DEF LK_BASE (MACH_IDX :IN, FRAME_IDX : IN, TOOL_IDX : IN ) + INT MACH_IDX, FRAME_IDX, TOOL_IDX + + IF FRAME_IDX>-1 THEN + ; Linking to a frame - end-of-arm tool + IF BASE_CORR_ON AND M_BAS_COR_ON THEN + $BASE=LK(MACHINE_DEF[MACH_IDX].ROOT, $COOP_KRC[MACHINE_DEF[MACH_IDX].COOP_KRC_INDEX].IP_ADDR[], BASE_CORR:BASE_DATA[FRAME_IDX]:M_BASE_CORR, MACHINE_DEF[MACH_IDX].MECH_TYPE) + ELSE + IF M_BAS_COR_ON THEN + $BASE=LK(MACHINE_DEF[MACH_IDX].ROOT, $COOP_KRC[MACHINE_DEF[MACH_IDX].COOP_KRC_INDEX].IP_ADDR[], BASE_DATA[FRAME_IDX]:M_BASE_CORR, MACHINE_DEF[MACH_IDX].MECH_TYPE) + ELSE + IF BASE_CORR_ON THEN + $BASE=LK(MACHINE_DEF[MACH_IDX].ROOT, $COOP_KRC[MACHINE_DEF[MACH_IDX].COOP_KRC_INDEX].IP_ADDR[], BASE_CORR:BASE_DATA[FRAME_IDX], MACHINE_DEF[MACH_IDX].MECH_TYPE) + ELSE + $BASE=LK(MACHINE_DEF[MACH_IDX].ROOT, $COOP_KRC[MACHINE_DEF[MACH_IDX].COOP_KRC_INDEX].IP_ADDR[], BASE_DATA[FRAME_IDX], MACHINE_DEF[MACH_IDX].MECH_TYPE) + ENDIF + ENDIF + ENDIF + ELSE + ; Linking to a tool - remote tool + $BASE=LK(MACHINE_DEF[MACH_IDX].ROOT, $COOP_KRC[MACHINE_DEF[MACH_IDX].COOP_KRC_INDEX].IP_ADDR[], TOOL_DATA[TOOL_IDX], MACHINE_DEF[MACH_IDX].MECH_TYPE) + ENDIF + + CONTINUE + $ACT_EX_AX=-1 + CONTINUE + $ACT_BASE=FRAME_IDX +END +;ENDFOLD LK_BASE () +;FOLD EB_BASE () +DEF EB_BASE (MACH_IDX :IN, BASE_NO :IN) + INT MACH_IDX, BASE_NO + + IF BASE_CORR_ON AND M_BAS_COR_ON THEN + $BASE=EB(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].NAME[],BASE_CORR:BASE_DATA[BASE_NO]:M_BASE_CORR,CONV_PART_NBR[MACH_IDX]) + ELSE + IF M_BAS_COR_ON THEN + $BASE=EB(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].NAME[],BASE_DATA[BASE_NO]:M_BASE_CORR,CONV_PART_NBR[MACH_IDX]) + ELSE + IF BASE_CORR_ON THEN + $BASE=EB(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].NAME[],BASE_CORR:BASE_DATA[BASE_NO],CONV_PART_NBR[MACH_IDX]) + ELSE + $BASE=EB(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].NAME[],BASE_DATA[BASE_NO],CONV_PART_NBR[MACH_IDX]) + ENDIF + ENDIF + ENDIF + + CONTINUE + $ACT_BASE=BASE_NO +END +;ENDFOLD EB_BASE () +;FOLD EB_ABS_BASE () +DEF EB_ABS_BASE (MACH_IDX :IN, BASE_NO :IN) + INT MACH_IDX, BASE_NO + + IF BASE_CORR_ON AND M_BAS_COR_ON THEN + $BASE=EB_ABS(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].NAME[],BASE_CORR:BASE_DATA[BASE_NO]:M_BASE_CORR,CONV_PART_NBR[MACH_IDX]) + ELSE + IF M_BAS_COR_ON THEN + $BASE=EB_ABS(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].NAME[],BASE_DATA[BASE_NO]:M_BASE_CORR,CONV_PART_NBR[MACH_IDX]) + ELSE + IF BASE_CORR_ON THEN + $BASE=EB_ABS(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].NAME[],BASE_CORR:BASE_DATA[BASE_NO],CONV_PART_NBR[MACH_IDX]) + ELSE + $BASE=EB_ABS(MACHINE_DEF[MACH_IDX].ROOT,MACHINE_DEF[MACH_IDX].NAME[],BASE_DATA[BASE_NO],CONV_PART_NBR[MACH_IDX]) + ENDIF + ENDIF + ENDIF + + CONTINUE + $ACT_BASE=BASE_NO +END +;ENDFOLD EB_ABS_BASE () +;FOLD ACC_CP () +DEF ACC_CP (ACC_FACTOR :IN ) + REAL ACC_FACTOR ; [%] + + IF ACC_FACTOR>100.0 THEN + $ACC.CP=DEF_ACC_CP + $ACC.ORI1=DEF_ACC_ORI1 + $ACC.ORI2=DEF_ACC_ORI2 + ELSE + $ACC.CP=DEF_ACC_CP*ACC_FACTOR/100.0 + $ACC.ORI1=DEF_ACC_ORI1*ACC_FACTOR/100.0 + $ACC.ORI2=DEF_ACC_ORI2*ACC_FACTOR/100.0 + ENDIF +END +;ENDFOLD ACC_CP () +;FOLD ACC_GLUE () +DEF ACC_GLUE (ACC_FACTOR :IN ) + REAL ACC_FACTOR ; [%] + + IF ACC_FACTOR>100.0 THEN + $ACC.CP=$ACC_MA.CP + $ACC.ORI1=$ACC_MA.ORI1 + $ACC.ORI2=$ACC_MA.ORI2 + ELSE + $ACC.CP=$ACC_MA.CP*ACC_FACTOR/100.0 + $ACC.ORI1=$ACC_MA.ORI1*ACC_FACTOR/100.0 + $ACC.ORI2=$ACC_MA.ORI2*ACC_FACTOR/100.0 + ENDIF +END +;ENDFOLD ACC_GLUE () +;FOLD ACC_PTP () +DEF ACC_PTP (ACC_FACTOR :IN ) + REAL ACC_FACTOR ; [%] + REAL ACC + INT I + + IF $ADAP_ACC==#NONE THEN + IF ACC_FACTOR>100.0 THEN + ACC=DEF_ACC_PTP + ELSE + ACC=DEF_ACC_PTP*ACC_FACTOR/100.0 + ENDIF + ELSE + ACC=ACC_FACTOR + ENDIF + + FOR I=1 TO $NUM_AX + $ACC_AXIS[I]=ACC + ENDFOR + + FOR I=1 TO $EX_AX_NUM + CHECK_REDEXAX_ACC(I) + $ACC_EXTAX[I]=ACC*RedAccExAx[I]/100.0 + ENDFOR +END +;ENDFOLD ACC_PTP () +;FOLD VEL_CP () +DEF VEL_CP (VEL_VALUE :IN ) + REAL VEL_VALUE, VEL_CHECK ; [m/s] + INT I + + IF VEL_VALUE>$VEL_MA.CP THEN + $VEL.CP=$VEL_MA.CP + ELSE + $VEL.CP=VEL_VALUE*DEF_VEL_FACT + ENDIF + + ON_ERROR_PROCEED + VEL_CHECK = $VEL.ORI1 + IF $ERR.NUMBER > 0 THEN + $VEL.ORI1=DEF_VEL_ORI1 ; swivel velocity + ERR_CLEAR($ERR) + ENDIF + + ON_ERROR_PROCEED + VEL_CHECK = $VEL.ORI2 + IF $ERR.NUMBER > 0 THEN + $VEL.ORI2=DEF_VEL_ORI2 ; rotation velocity + ERR_CLEAR($ERR) + ENDIF + + FOR I=1 TO $EX_AX_NUM + CHECK_REDEXAX_VEL(I) + $VEL_EXTAX[I]=DEF_VEL_PTP*RedVelExAx[I]/100.0 + ENDFOR +END +;ENDFOLD VEL_CP () +;FOLD VEL_PTP () +DEF VEL_PTP (VEL_FACTOR :IN ) + REAL VEL_FACTOR ; [%] + REAL VEL + INT I + + IF VEL_FACTOR>100.0 THEN + VEL=DEF_VEL_PTP + ELSE + VEL=DEF_VEL_PTP*VEL_FACTOR/100.0 + ENDIF + + FOR I=1 TO $NUM_AX + $VEL_AXIS[I]=VEL + ENDFOR + + FOR I=1 TO $EX_AX_NUM + CHECK_REDEXAX_VEL(I) + $VEL_EXTAX[I]=VEL*RedVelExAx[I]/100.0 + ENDFOR +END +;ENDFOLD VEL_PTP () +;FOLD {H} +DEF CHECK_REDEXAX_ACC(I :IN ) + INT I + IF RedAccExAx[I]>100.0 THEN + RedAccExAx[I]=100.0 + ENDIF + IF RedAccExAx[I]<1.0 THEN + RedAccExAx[I]=1.0 + ENDIF +END +DEF CHECK_REDEXAX_VEL(I :IN ) + INT I + IF RedVelExAx[I]>100.0 THEN + RedVelExAx[I]=100.0 + ENDIF + IF RedVelExAx[I]<1.0 THEN + RedVelExAx[I]=1.0 + ENDIF +END +;ENDFOLD +;FOLD TOOL () +DEF TOOL (TOOL_NO :IN ) + INT TOOL_NO + + IF (TOOL_NO<=0) THEN + IF TOOL_CORR_W_ON AND TOOL_CORR_ON THEN + $TOOL=TOOL_CORR_W:TOOL_CORR + ELSE + IF TOOL_CORR_ON THEN + $TOOL=TOOL_CORR + ELSE + IF TOOL_CORR_W_ON THEN + $TOOL=TOOL_CORR_W + ELSE + $TOOL=$NULLFRAME + ENDIF + ENDIF + ENDIF + + IF $ADAP_ACC<>#NONE THEN + $LOAD.M=$DEF_L_M + $LOAD.CM=$DEF_L_CM + $LOAD.J=$DEF_L_J + ENDIF + ELSE + IF TOOL_CORR_W_ON AND TOOL_CORR_ON THEN + $TOOL=TOOL_CORR_W:TOOL_DATA[TOOL_NO]:TOOL_CORR + ELSE + IF TOOL_CORR_ON THEN + $TOOL=TOOL_DATA[TOOL_NO]:TOOL_CORR + ELSE + IF TOOL_CORR_W_ON THEN + $TOOL=TOOL_CORR_W:TOOL_DATA[TOOL_NO] + ELSE + $TOOL=TOOL_DATA[TOOL_NO] + ENDIF + ENDIF + ENDIF + IF $ADAP_ACC<>#NONE THEN + IF LOAD_DATA[TOOL_NO].M<0 THEN + $LOAD.M=$DEF_L_M + $LOAD.CM=$DEF_L_CM + $LOAD.J=$DEF_L_J + ELSE + $LOAD.M=LOAD_DATA[TOOL_NO].M + $LOAD.CM=LOAD_DATA[TOOL_NO].CM + IF ((LOAD_DATA[TOOL_NO].M<>0) AND (LOAD_DATA[TOOL_NO].J.X==0) AND (LOAD_DATA[TOOL_NO].J.Y==0) AND (LOAD_DATA[TOOL_NO].J.Z==0)) THEN + $LOAD.J=$DEF_L_J + ELSE + $LOAD.J=LOAD_DATA[TOOL_NO].J + ENDIF + ENDIF + ENDIF + ENDIF + + CONTINUE + $ACT_TOOL=TOOL_NO +END +;ENDFOLD TOOL () +;FOLD FRAMES () +DEF FRAMES ( ) + INT MACH_INDEX, COOP_KRC_INDEX, JointDeviceIndex + DECL ESYS MECH_TYPE + BOOL Result + + + IF STOPM_FLAG==TRUE THEN ;no correct finish of IR_STOPMESS + STOPM_FLAG=FALSE ;reflects state of interrupt 3 + ON_ERROR_PROCEED + INTERRUPT ON 3 + SWITCH($ERR.NUMBER) + CASE 0 + ;ok + CASE 1430 + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM () + INTERRUPT ON 3 + ERR_CLEAR($ERR) + DEFAULT + ERR_RAISE($ERR) + ENDSWITCH + ENDIF + + ; Special case: Base=0 + IF (FDAT_ACT.BASE_NO == 0) THEN + TOOL (FDAT_ACT.TOOL_NO) + BASE (0) + SET_IPO_MODE (FDAT_ACT.IPO_FRAME ) + RETURN + ENDIF + + IF (FDAT_ACT.TOOL_NO <> 0) THEN + IF (MACHINE_TOOL_DAT[FDAT_ACT.TOOL_NO].MACH_DEF_INDEX <> 0) THEN + IF (MACHINE_DEF[MACHINE_TOOL_DAT[FDAT_ACT.TOOL_NO].MACH_DEF_INDEX].COOP_KRC_INDEX <> 1) THEN + MsgQuit ("IllegalUseOfRemoteTool", "BAS") + RETURN + ENDIF + ENDIF + ENDIF + + ;Set IPO_MODE, $TOOL and $LOAD + SET_IPO_MODE (FDAT_ACT.IPO_FRAME ) + TOOL (FDAT_ACT.TOOL_NO ) + + ;Set $JOINT_OFFSET + IF JOINT_DEVICE_INDEX[FDAT_ACT.BASE_NO] > 0 THEN + JointDeviceIndex = JOINT_DEVICE_INDEX[FDAT_ACT.BASE_NO] + IF JOINT_DEVICE[JointDeviceIndex].AXIS_INDEX > 0 THEN + IF IsDeviceDefined(JOINT_DEVICE[JointDeviceIndex].NAME[]) THEN + $JOINT_OFFSET[JOINT_DEVICE[JointDeviceIndex].AXIS_INDEX] = EO(JOINT_DEVICE[JointDeviceIndex].NAME[], JOINT_DEVICE[JointDeviceIndex].OFFSET ) + ELSE + $JOINT_OFFSET[JOINT_DEVICE[JointDeviceIndex].AXIS_INDEX] = JOINT_DEVICE[JointDeviceIndex].OFFSET + ENDIF + bJointOffsetHasBeenSet = TRUE + iLastAxisNo = JOINT_DEVICE[JointDeviceIndex].AXIS_INDEX + ENDIF + ELSE + IF bJointOffsetHasBeenSet THEN + bJointOffsetHasBeenSet = FALSE + IF iLastAxisNo > 0 THEN + $JOINT_OFFSET[iLastAxisNo] = 0 + ENDIF + ENDIF + ENDIF + + ;Get the frame's machine index, COOP_KRC index and mechanism type + MACH_INDEX = MACHINE_FRAME_DAT[FDAT_ACT.BASE_NO].MACH_DEF_INDEX + IF (MACH_INDEX > 0) Then + MECH_TYPE = MACHINE_DEF[MACH_INDEX].MECH_TYPE + COOP_KRC_INDEX = MACHINE_DEF[MACH_INDEX].COOP_KRC_INDEX + ELSE + MECH_TYPE = #NONE + COOP_KRC_INDEX = 0 + ENDIF + + IF (MECH_TYPE == #ROBOT) THEN + IF (COOP_KRC_INDEX > 1) THEN + LK_BASE (MACH_INDEX, FDAT_ACT.BASE_NO, -1 ) + ELSE + IF (COOP_KRC_INDEX == 1) THEN + BASE (FDAT_ACT.BASE_NO ) + ENDIF + ENDIF + ELSE + IF (MECH_TYPE == #NONE) THEN + IF (FDAT_ACT.BASE_NO <= MAX_BASE) THEN + BASE (FDAT_ACT.BASE_NO ) + ENDIF + ELSE + ; The base is relative to an external axis - need to determine if it is a local + ; external axis or a remote one and call EK/LK appropriately. A COOP_KRC_INDEX + ; of 1 signifies it is a local external axis. + IF (MECH_TYPE == #CONVEYOR) THEN + IF (ActualConveyorMode == #Absolute) THEN + EB_ABS_BASE(MACH_INDEX, FDAT_ACT.BASE_NO) + ELSE + EB_BASE(MACH_INDEX, FDAT_ACT.BASE_NO) + CONV_PART_NBR[MACH_INDEX] = 0 + ENDIF + ELSE + IF (COOP_KRC_INDEX == 1) THEN + EX_BASE (FDAT_ACT.BASE_NO, MACH_INDEX ) + ELSE + LK_BASE (MACH_INDEX, FDAT_ACT.BASE_NO, -1 ) + ENDIF + ENDIF + ENDIF + ENDIF + +END +;ENDFOLD FRAMES () +;FOLD PTP_DAT () +DEF PTP_DAT ( ) + DECL APO_MODE_T MODE_CHECK + ACC_PTP (PDAT_ACT.ACC ) + ON_ERROR_PROCEED + MODE_CHECK = PDAT_ACT.APO_MODE + IF $ERR.NUMBER == 0 THEN + IF PDAT_ACT.APO_MODE==#CDIS THEN + $APO.CDIS=PDAT_ACT.APO_DIST + ELSE + IF PDAT_ACT.APO_DIST > 100 THEN + $APO.CPTP=100 + ELSE + $APO.CPTP=PDAT_ACT.APO_DIST + ENDIF + ENDIF + ELSE + IF PDAT_ACT.APO_DIST > 100 THEN + $APO.CPTP=100 + ELSE + $APO.CPTP=PDAT_ACT.APO_DIST + ENDIF + ERR_CLEAR($ERR) + ENDIF +END +;ENDFOLD PTP_DAT () +;FOLD CP_DAT () +DEF CP_DAT ( ) + DECL ORI_TYPE ORI_CHECK + DECL CIRC_TYPE CIRC_CHECK + ACC_CP (LDAT_ACT.ACC ) + $APO.CDIS=LDAT_ACT.APO_DIST + ON_ERROR_PROCEED + ORI_CHECK = LDAT_ACT.ORI_TYP + IF $ERR.NUMBER == 0 THEN + $ORI_TYPE=LDAT_ACT.ORI_TYP + ELSE + $ORI_TYPE=#VAR + ERR_CLEAR($ERR) + ENDIF + ON_ERROR_PROCEED + CIRC_CHECK = LDAT_ACT.CIRC_TYP + IF $ERR.NUMBER == 0 THEN + $CIRC_TYPE=LDAT_ACT.CIRC_TYP + ELSE + $CIRC_TYPE=DEF_CIRC_TYP + ERR_CLEAR($ERR) + ENDIF +END +;ENDFOLD CP_DAT () +;FOLD OUT_ASYNC () +DEF OUT_ASYNC ( ) + SWITCH ODAT_ACT.OUT_MODE + + CASE #CONT_ + IF ODAT_ACT.PULSE_TIME>0 THEN + CONTINUE + PULSE ($OUT[ODAT_ACT.OUT_NO],ODAT_ACT.STATE,ODAT_ACT.PULSE_TIME ) + ELSE + CONTINUE + $OUT[ODAT_ACT.OUT_NO]=ODAT_ACT.STATE + ENDIF + + CASE #STOP_ + IF ODAT_ACT.PULSE_TIME>0 THEN + PULSE ($OUT[ODAT_ACT.OUT_NO],ODAT_ACT.STATE,ODAT_ACT.PULSE_TIME ) + ELSE + $OUT[ODAT_ACT.OUT_NO]=ODAT_ACT.STATE + ENDIF + ENDSWITCH +END +;ENDFOLD OUT_ASYNC () +;FOLD OUT_SYNC () +DEF OUT_SYNC ( ) + SWITCH ODAT_ACT.OUT_MODE + + CASE #TRIGGER_ + IF ODAT_ACT.PULSE_TIME>0 THEN + CONTINUE + PULSE ($OUT[ODAT_ACT.OUT_NO],ODAT_ACT.STATE,ODAT_ACT.PULSE_TIME ) + ELSE + CONTINUE + $OUT[ODAT_ACT.OUT_NO]=ODAT_ACT.STATE + ENDIF + ENDSWITCH +END +;ENDFOLD OUT_SYNC () +;FOLD GROUP () +DEF GROUP (GROUP_NO :IN ) + INT GROUP_NO + $ACT_GROUP=DEF_GROUP[GROUP_NO] +END +;ENDFOLD GROUP () +;FOLD SET_IPO_MODE () +DEF SET_IPO_MODE (IPO_FRAME :IN ) + DECL IPO_MODE IPO_FRAME + IF $IPO_MODE==IPO_FRAME THEN + RETURN + ELSE + $IPO_MODE=IPO_FRAME + ENDIF +END +;ENDFOLD SET_IPO_MODE () +;FOLD {H} +GLOBAL DEFFCT CP SVEL_CP (CP_VALUE :IN, ORI_VALUE :IN, PARAMS :IN ) + REAL AX_VEL + REAL CP_VALUE + REAL ORI_VALUE + DECL CP RET_VEL + DECL LDAT PARAMS + IF CP_VALUE>$VEL_MA.CP THEN + RET_VEL.CP=$VEL_MA.CP + ELSE + RET_VEL.CP=CP_VALUE + ENDIF + RET_VEL.ORI1=DEF_VEL_ORIS + ;for Spline-HFP + ON_ERROR_PROCEED + AX_VEL=PARAMS.AXIS_VEL + IF $ERR.NUMBER>0 THEN + ERR_CLEAR($ERR) + ELSE + IF PARAMS.AXIS_VEL>100.0 THEN + AX_VEL=DEF_VEL_PTP + ELSE + AX_VEL=DEF_VEL_PTP*PARAMS.AXIS_VEL/100.0 + ENDIF + ;APP// control structure not allowed here + $VEL_AXIS[1]=AX_VEL + $VEL_AXIS[2]=AX_VEL + $VEL_AXIS[3]=AX_VEL + $VEL_AXIS[4]=AX_VEL + $VEL_AXIS[5]=AX_VEL + $VEL_AXIS[6]=AX_VEL + IF RedVelExAx[1]>100.0 THEN + RedVelExAx[1]=100.0 + ENDIF + IF RedVelExAx[1]<1.0 THEN + RedVelExAx[1]=1.0 + ENDIF + IF RedVelExAx[2]>100.0 THEN + RedVelExAx[2]=100.0 + ENDIF + IF RedVelExAx[2]<1.0 THEN + RedVelExAx[2]=1.0 + ENDIF + IF RedVelExAx[3]>100.0 THEN + RedVelExAx[3]=100.0 + ENDIF + IF RedVelExAx[3]<1.0 THEN + RedVelExAx[3]=1.0 + ENDIF + IF RedVelExAx[4]>100.0 THEN + RedVelExAx[4]=100.0 + ENDIF + IF RedVelExAx[4]<1.0 THEN + RedVelExAx[4]=1.0 + ENDIF + IF RedVelExAx[5]>100.0 THEN + RedVelExAx[5]=100.0 + ENDIF + IF RedVelExAx[5]<1.0 THEN + RedVelExAx[5]=1.0 + ENDIF + IF RedVelExAx[6]>100.0 THEN + RedVelExAx[6]=100.0 + ENDIF + IF RedVelExAx[6]<1.0 THEN + RedVelExAx[6]=1.0 + ENDIF + $VEL_EXTAX[1]=AX_VEL*RedVelExAx[1]/100.0 + $VEL_EXTAX[2]=AX_VEL*RedVelExAx[2]/100.0 + $VEL_EXTAX[3]=AX_VEL*RedVelExAx[3]/100.0 + $VEL_EXTAX[4]=AX_VEL*RedVelExAx[4]/100.0 + $VEL_EXTAX[5]=AX_VEL*RedVelExAx[5]/100.0 + $VEL_EXTAX[6]=AX_VEL*RedVelExAx[6]/100.0 + ENDIF + ;return CP-structure + RETURN RET_VEL +ENDFCT +GLOBAL DEFFCT REAL SVEL_JOINT (VEL_FACTOR :IN) + REAL VEL_FACTOR ; [%] + REAL VEL + IF VEL_FACTOR>100.0 THEN + VEL=DEF_VEL_PTP + ELSE + VEL=DEF_VEL_PTP*VEL_FACTOR/100.0 + ENDIF + ;$VEL_AXIS[1]=VEL + $VEL_AXIS[2]=VEL + $VEL_AXIS[3]=VEL + $VEL_AXIS[4]=VEL + $VEL_AXIS[5]=VEL + $VEL_AXIS[6]=VEL + IF RedVelExAx[1]>100.0 THEN + RedVelExAx[1]=100.0 + ENDIF + IF RedVelExAx[1]<1.0 THEN + RedVelExAx[1]=1.0 + ENDIF + IF RedVelExAx[2]>100.0 THEN + RedVelExAx[2]=100.0 + ENDIF + IF RedVelExAx[2]<1.0 THEN + RedVelExAx[2]=1.0 + ENDIF + IF RedVelExAx[3]>100.0 THEN + RedVelExAx[3]=100.0 + ENDIF + IF RedVelExAx[3]<1.0 THEN + RedVelExAx[3]=1.0 + ENDIF + IF RedVelExAx[4]>100.0 THEN + RedVelExAx[4]=100.0 + ENDIF + IF RedVelExAx[4]<1.0 THEN + RedVelExAx[4]=1.0 + ENDIF + IF RedVelExAx[5]>100.0 THEN + RedVelExAx[5]=100.0 + ENDIF + IF RedVelExAx[5]<1.0 THEN + RedVelExAx[5]=1.0 + ENDIF + IF RedVelExAx[6]>100.0 THEN + RedVelExAx[6]=100.0 + ENDIF + IF RedVelExAx[6]<1.0 THEN + RedVelExAx[6]=1.0 + ENDIF + $VEL_EXTAX[1]=VEL*RedVelExAx[1]/100.0 + $VEL_EXTAX[2]=VEL*RedVelExAx[2]/100.0 + $VEL_EXTAX[3]=VEL*RedVelExAx[3]/100.0 + $VEL_EXTAX[4]=VEL*RedVelExAx[4]/100.0 + $VEL_EXTAX[5]=VEL*RedVelExAx[5]/100.0 + $VEL_EXTAX[6]=VEL*RedVelExAx[6]/100.0 + RETURN VEL +ENDFCT +GLOBAL DEFFCT CP SACC_CP (PARAMS :IN) + REAL AX_ACC + DECL LDAT PARAMS + DECL CP RET_ACC + PARAMS.ACC=PARAMS.AXIS_ACC + IF PARAMS.ACC>100.0 THEN + RET_ACC.CP=DEF_ACC_CP + RET_ACC.ORI1=DEF_ACC_ORIS + ELSE + RET_ACC.CP=DEF_ACC_CP*PARAMS.ACC/100.0 + RET_ACC.ORI1=DEF_ACC_ORIS*PARAMS.ACC/100.0 + ENDIF + ;for Spline-HFP + IF $ADAP_ACC==#NONE THEN; + IF PARAMS.AXIS_ACC>100.0 THEN + AX_ACC=DEF_ACC_SPTP + ELSE + AX_ACC=DEF_ACC_SPTP*PARAMS.AXIS_ACC/100.0 + ENDIF + ELSE + AX_ACC=DEF_ACC_SPTP*PARAMS.AXIS_ACC/100.0 + ENDIF + ;APP// control structure not allowed here + $ACC_AXIS[1]=AX_ACC + $ACC_AXIS[2]=AX_ACC + $ACC_AXIS[3]=AX_ACC + $ACC_AXIS[4]=AX_ACC + $ACC_AXIS[5]=AX_ACC + $ACC_AXIS[6]=AX_ACC + IF RedAccExAx[1]>100.0 THEN + RedAccExAx[1]=100.0 + ENDIF + IF RedAccExAx[1]<1.0 THEN + RedAccExAx[1]=1.0 + ENDIF + IF RedAccExAx[2]>100.0 THEN + RedAccExAx[2]=100.0 + ENDIF + IF RedAccExAx[2]<1.0 THEN + RedAccExAx[2]=1.0 + ENDIF + IF RedAccExAx[3]>100.0 THEN + RedAccExAx[3]=100.0 + ENDIF + IF RedAccExAx[3]<1.0 THEN + RedAccExAx[3]=1.0 + ENDIF + IF RedAccExAx[4]>100.0 THEN + RedAccExAx[4]=100.0 + ENDIF + IF RedAccExAx[4]<1.0 THEN + RedAccExAx[4]=1.0 + ENDIF + IF RedAccExAx[5]>100.0 THEN + RedAccExAx[5]=100.0 + ENDIF + IF RedAccExAx[5]<1.0 THEN + RedAccExAx[5]=1.0 + ENDIF + IF RedAccExAx[6]>100.0 THEN + RedAccExAx[6]=100.0 + ENDIF + IF RedAccExAx[6]<1.0 THEN + RedAccExAx[6]=1.0 + ENDIF + $ACC_EXTAX[1]=AX_ACC*RedAccExAx[1]/100.0 + $ACC_EXTAX[2]=AX_ACC*RedAccExAx[2]/100.0 + $ACC_EXTAX[3]=AX_ACC*RedAccExAx[3]/100.0 + $ACC_EXTAX[4]=AX_ACC*RedAccExAx[4]/100.0 + $ACC_EXTAX[5]=AX_ACC*RedAccExAx[5]/100.0 + $ACC_EXTAX[6]=AX_ACC*RedAccExAx[6]/100.0 + ;return CP-structure + RETURN RET_ACC +ENDFCT +GLOBAL DEFFCT REAL SACC_JOINT (PARAMS :IN) + DECL PDAT PARAMS + REAL AX_ACC + IF PARAMS.ACC>100.0 THEN + AX_ACC=DEF_ACC_SPTP + ELSE + AX_ACC=DEF_ACC_SPTP*PARAMS.ACC/100.0 + ENDIF + ;$ACC_AXIS[1]=AX_ACC + $ACC_AXIS[2]=AX_ACC + $ACC_AXIS[3]=AX_ACC + $ACC_AXIS[4]=AX_ACC + $ACC_AXIS[5]=AX_ACC + $ACC_AXIS[6]=AX_ACC + IF RedAccExAx[1]>100.0 THEN + RedAccExAx[1]=100.0 + ENDIF + IF RedAccExAx[1]<1.0 THEN + RedAccExAx[1]=1.0 + ENDIF + IF RedAccExAx[2]>100.0 THEN + RedAccExAx[2]=100.0 + ENDIF + IF RedAccExAx[2]<1.0 THEN + RedAccExAx[2]=1.0 + ENDIF + IF RedAccExAx[3]>100.0 THEN + RedAccExAx[3]=100.0 + ENDIF + IF RedAccExAx[3]<1.0 THEN + RedAccExAx[3]=1.0 + ENDIF + IF RedAccExAx[4]>100.0 THEN + RedAccExAx[4]=100.0 + ENDIF + IF RedAccExAx[4]<1.0 THEN + RedAccExAx[4]=1.0 + ENDIF + IF RedAccExAx[5]>100.0 THEN + RedAccExAx[5]=100.0 + ENDIF + IF RedAccExAx[5]<1.0 THEN + RedAccExAx[5]=1.0 + ENDIF + IF RedAccExAx[6]>100.0 THEN + RedAccExAx[6]=100.0 + ENDIF + IF RedAccExAx[6]<1.0 THEN + RedAccExAx[6]=1.0 + ENDIF + $ACC_EXTAX[1]=AX_ACC*RedAccExAx[1]/100.0 + $ACC_EXTAX[2]=AX_ACC*RedAccExAx[2]/100.0 + $ACC_EXTAX[3]=AX_ACC*RedAccExAx[3]/100.0 + $ACC_EXTAX[4]=AX_ACC*RedAccExAx[4]/100.0 + $ACC_EXTAX[5]=AX_ACC*RedAccExAx[5]/100.0 + $ACC_EXTAX[6]=AX_ACC*RedAccExAx[6]/100.0 + RETURN AX_ACC +ENDFCT +GLOBAL DEFFCT CONT SAPO (PARAMS :IN) + DECL LDAT PARAMS + DECL CONT RET_APO + RET_APO.CDIS=PARAMS.APO_DIST + RET_APO.CPTP=DEF_APO_CPTP + RET_APO.CORI=DEF_APO_CORIS + RETURN RET_APO +ENDFCT +GLOBAL DEFFCT CONT SAPO_PTP (PARAMS :IN) + DECL PDAT PARAMS + DECL CONT RET_APO + DECL APO_MODE_T MODE_CHECK + + ON_ERROR_PROCEED + MODE_CHECK = PARAMS.APO_MODE + IF $ERR.NUMBER == 0 THEN + IF PARAMS.APO_MODE == #CPTP THEN + RET_APO.CDIS=1E6 + RET_APO.CPTP=PARAMS.APO_DIST + ELSE + RET_APO.CDIS=PARAMS.APO_DIST + RET_APO.CPTP=100 + ENDIF + ELSE + RET_APO.CDIS=PARAMS.APO_DIST + RET_APO.CPTP=DEF_APO_CPTP + ERR_CLEAR($ERR) + ENDIF + + RET_APO.CORI=DEF_APO_CORIS + RETURN RET_APO +ENDFCT +GLOBAL DEFFCT FRAME STOOL (TOOL_NO :IN) + INT TOOL_NO + DECL FRAME RET_TOOL + IF (TOOL_NO<=0) THEN + IF TOOL_CORR_W_ON AND TOOL_CORR_ON THEN + RET_TOOL=TOOL_CORR_W:TOOL_CORR + ELSE + IF TOOL_CORR_ON THEN + RET_TOOL=TOOL_CORR + ELSE + IF TOOL_CORR_W_ON THEN + RET_TOOL=TOOL_CORR_W + ELSE + RET_TOOL=$NULLFRAME + ENDIF + ENDIF + ENDIF + ELSE + IF TOOL_CORR_W_ON AND TOOL_CORR_ON THEN + RET_TOOL=TOOL_CORR_W:TOOL_DATA[TOOL_NO]:TOOL_CORR + ELSE + IF TOOL_CORR_ON THEN + RET_TOOL=TOOL_DATA[TOOL_NO]:TOOL_CORR + ELSE + IF TOOL_CORR_W_ON THEN + RET_TOOL=TOOL_CORR_W:TOOL_DATA[TOOL_NO] + ELSE + RET_TOOL=TOOL_DATA[TOOL_NO] + ENDIF + ENDIF + ENDIF + ENDIF + RETURN RET_TOOL +ENDFCT +GLOBAL DEFFCT FRAME STOOL2 (FSP :IN) + DECL FDAT FSP + DECL FRAME RET_TOOL + $ACT_TOOL = FSP.TOOL_NO + $ACT_BASE = FSP.BASE_NO + RET_TOOL = STOOL(FSP.TOOL_NO) + RETURN RET_TOOL +ENDFCT +GLOBAL DEFFCT LOAD SLOAD (TOOL_NO :IN) + INT TOOL_NO + DECL LOAD RET_LOAD + IF (TOOL_NO<=0) THEN + IF $ADAP_ACC<>#NONE THEN + RET_LOAD.M=$DEF_L_M + RET_LOAD.CM=$DEF_L_CM + RET_LOAD.J=$DEF_L_J + RETURN RET_LOAD + ENDIF + ELSE + IF $ADAP_ACC<>#NONE THEN + IF LOAD_DATA[TOOL_NO].M<0 THEN + RET_LOAD.M=$DEF_L_M + RET_LOAD.CM=$DEF_L_CM + RET_LOAD.J=$DEF_L_J + RETURN RET_LOAD + ELSE + RET_LOAD.M=LOAD_DATA[TOOL_NO].M + RET_LOAD.CM=LOAD_DATA[TOOL_NO].CM + RET_LOAD.J=LOAD_DATA[TOOL_NO].J + IF ((RET_LOAD.M<>0) AND (RET_LOAD.J.X==0) AND (RET_LOAD.J.Y==0) AND (RET_LOAD.J.Z==0)) THEN + RET_LOAD.J=$DEF_L_J + ENDIF + RETURN RET_LOAD + ENDIF + ENDIF + ENDIF + RETURN $LOAD +ENDFCT +GLOBAL DEFFCT FRAME SBASE (BASE_NO :IN) + INT BASE_NO, JointDeviceIndex + DECL FRAME RET_BASE + IF (BASE_NO<=0) THEN + IF BASE_CORR_ON AND M_BAS_COR_ON THEN + RET_BASE=BASE_CORR:$WORLD:M_BASE_CORR + ELSE + IF M_BAS_COR_ON THEN + RET_BASE=$WORLD:M_BASE_CORR + ELSE + IF BASE_CORR_ON THEN + RET_BASE=BASE_CORR:$WORLD + ELSE + RET_BASE=$WORLD + ENDIF + ENDIF + ENDIF + IF bJointOffsetHasBeenSet THEN + bJointOffsetHasBeenSet = FALSE + IF iLastAxisNo > 0 THEN + $JOINT_OFFSET[iLastAxisNo] = 0 + ENDIF + ENDIF + ELSE + IF BASE_CORR_ON AND M_BAS_COR_ON THEN + RET_BASE=BASE_CORR:BASE_DATA[BASE_NO]:M_BASE_CORR + ELSE + IF M_BAS_COR_ON THEN + RET_BASE=BASE_DATA[BASE_NO]:M_BASE_CORR + ELSE + IF BASE_CORR_ON THEN + RET_BASE=BASE_CORR:BASE_DATA[BASE_NO] + ELSE + RET_BASE=BASE_DATA[BASE_NO] + ENDIF + ENDIF + ENDIF + ;Set $JOINT_OFFSET + IF JOINT_DEVICE_INDEX[BASE_NO] > 0 THEN + JointDeviceIndex = JOINT_DEVICE_INDEX[BASE_NO] + IF JOINT_DEVICE[JointDeviceIndex].AXIS_INDEX > 0 THEN + IF IsDeviceDefinedSPL(JOINT_DEVICE[JointDeviceIndex].NAME[]) THEN + $JOINT_OFFSET[JOINT_DEVICE[JointDeviceIndex].AXIS_INDEX] = EO(JOINT_DEVICE[JointDeviceIndex].NAME[], JOINT_DEVICE[JointDeviceIndex].OFFSET ) + ELSE + $JOINT_OFFSET[JOINT_DEVICE[JointDeviceIndex].AXIS_INDEX] = JOINT_DEVICE[JointDeviceIndex].OFFSET + ENDIF + bJointOffsetHasBeenSet = TRUE + iLastAxisNo = JOINT_DEVICE[JointDeviceIndex].AXIS_INDEX + ENDIF + ELSE + IF bJointOffsetHasBeenSet THEN + bJointOffsetHasBeenSet = FALSE + IF iLastAxisNo > 0 THEN + $JOINT_OFFSET[iLastAxisNo] = 0 + ENDIF + ENDIF + ENDIF + ENDIF + + RETURN RET_BASE +ENDFCT +GLOBAL DEFFCT IPO_MODE SIPO_MODE (IPO_FRAME :IN) + DECL IPO_MODE IPO_FRAME + RETURN IPO_FRAME +ENDFCT +GLOBAL DEFFCT ORI_TYPE SORI_TYP (PARAMS :IN) + DECL LDAT PARAMS + RETURN PARAMS.ORI_TYP +ENDFCT +GLOBAL DEFFCT CIRC_TYPE SCIRC_TYP (PARAMS :IN) + DECL LDAT PARAMS + RETURN PARAMS.CIRC_TYP +ENDFCT +GLOBAL DEFFCT CIRC_MODE SCIRC_M (PARAMS :IN) + DECL LDAT PARAMS + RETURN PARAMS.CB +ENDFCT +GLOBAL DEFFCT REAL SGEAR_JERK (PARAMS :IN ) + DECL PDAT PARAMS + REAL GEAR_JERK + IF PARAMS.GEAR_JERK>100.0 THEN + GEAR_JERK=DEF_GEAR_JERK + ELSE + GEAR_JERK=DEF_GEAR_JERK*PARAMS.GEAR_JERK/100.0 + ENDIF + ;$GEAR_JERK[1]=GEAR_JERK + $GEAR_JERK[2]=GEAR_JERK + $GEAR_JERK[3]=GEAR_JERK + $GEAR_JERK[4]=GEAR_JERK + $GEAR_JERK[5]=GEAR_JERK + $GEAR_JERK[6]=GEAR_JERK + IF $EX_AX_NUM>0 THEN + $GEAR_JERK[7]=GEAR_JERK + $GEAR_JERK[8]=GEAR_JERK + $GEAR_JERK[9]=GEAR_JERK + $GEAR_JERK[10]=GEAR_JERK + $GEAR_JERK[11]=GEAR_JERK + $GEAR_JERK[12]=GEAR_JERK + ENDIF + RETURN GEAR_JERK +ENDFCT +GLOBAL DEFFCT JERK_STRUC SJERK (PARAMS :IN ) + DECL JERK_STRUC RET_JERK + DECL LDAT PARAMS + REAL GEAR_JERK, J_FACTOR, J_C0, J_F0, J_D3 + + PARAMS.JERK_FAC=PARAMS.GEAR_JERK + ;GEAR_JERK[1..6]for Spline-HFP + IF PARAMS.GEAR_JERK>100.0 THEN + GEAR_JERK=DEF_GEAR_JERK + ELSE + GEAR_JERK=DEF_GEAR_JERK*PARAMS.GEAR_JERK/100.0 + ENDIF + ;APP// control structure not allowed here + $GEAR_JERK[1]=GEAR_JERK + $GEAR_JERK[2]=GEAR_JERK + $GEAR_JERK[3]=GEAR_JERK + $GEAR_JERK[4]=GEAR_JERK + $GEAR_JERK[5]=GEAR_JERK + $GEAR_JERK[6]=GEAR_JERK + IF $EX_AX_NUM>0 THEN + $GEAR_JERK[7]=GEAR_JERK + $GEAR_JERK[8]=GEAR_JERK + $GEAR_JERK[9]=GEAR_JERK + $GEAR_JERK[10]=GEAR_JERK + $GEAR_JERK[11]=GEAR_JERK + $GEAR_JERK[12]=GEAR_JERK + ENDIF + ;JERK + IF PARAMS.JERK_FAC>=100.0 THEN + RET_JERK.CP=$JERK_MA.CP + RET_JERK.ORI=$JERK_MA.ORI + RET_JERK.AX=$JERK_MA.AX + RETURN RET_JERK + ELSE + ;APPBlock/* + ;f(J_Factor) = linear for 0 <= J_Factor <= J_C0 + ;f(J_Factor) = cubic for J_C0 < J_Factor <= 1 + ;f(J_C0) = J_F0 with J_C0[0,1] and J_F0[0,1] + ;J_C0 >= J_F0 >= 0 + ;APPBlock*/ + J_F0=0.05 + J_C0=0.50 + J_FACTOR=PARAMS.JERK_FAC/100.0 + IF J_FACTOR<=J_C0 THEN + J_FACTOR=J_F0/J_C0*J_FACTOR + ELSE + J_D3=(J_FACTOR-J_C0)/(1-J_C0) + J_D3=J_D3*J_D3*J_D3 + J_FACTOR=J_F0/J_C0*J_FACTOR + (J_C0-J_F0)*J_D3/J_C0 + ENDIF + RET_JERK.CP=$JERK_MA.CP*J_FACTOR + RET_JERK.ORI=$JERK_MA.ORI*J_FACTOR + RET_JERK.AX.A1=$JERK_MA.AX.A1*J_FACTOR + RET_JERK.AX.A2=$JERK_MA.AX.A2*J_FACTOR + RET_JERK.AX.A3=$JERK_MA.AX.A3*J_FACTOR + RET_JERK.AX.A4=$JERK_MA.AX.A4*J_FACTOR + RET_JERK.AX.A5=$JERK_MA.AX.A5*J_FACTOR + RET_JERK.AX.A6=$JERK_MA.AX.A6*J_FACTOR + IF $EX_AX_NUM>0 THEN + RET_JERK.AX.E1=$JERK_MA.AX.E1*J_FACTOR + RET_JERK.AX.E2=$JERK_MA.AX.E2*J_FACTOR + RET_JERK.AX.E3=$JERK_MA.AX.E3*J_FACTOR + RET_JERK.AX.E4=$JERK_MA.AX.E4*J_FACTOR + RET_JERK.AX.E5=$JERK_MA.AX.E5*J_FACTOR + RET_JERK.AX.E6=$JERK_MA.AX.E6*J_FACTOR + ENDIF + ;return JERK-structure + RETURN RET_JERK + ENDIF +ENDFCT +GLOBAL DEFFCT INT S_EXAX_IGN(PARAMS :IN) + DECL LDAT PARAMS + RETURN PARAMS.EXAX_IGN +ENDFCT +GLOBAL DEFFCT INT S_EXAX_IGN2(PARAMS :IN) + DECL PDAT PARAMS + RETURN PARAMS.EXAX_IGN +ENDFCT +GLOBAL DEFFCT FRAME K_ROOT (BASE_NO :IN) + INT BASE_NO, IDX + IF BASE_NO > 0 THEN + IDX=MACHINE_FRAME_DAT[BASE_NO].MACH_DEF_INDEX + IF IDX > 0 THEN + RETURN MACHINE_DEF[IDX].ROOT + ENDIF + ENDIF + RETURN $NULLFRAME +ENDFCT +GLOBAL DEFFCT ESYS K_TYPE (BASE_NO :IN) + INT BASE_NO, IDX + IF BASE_NO > 0 THEN + IDX=MACHINE_FRAME_DAT[BASE_NO].MACH_DEF_INDEX + IF IDX > 0 THEN + RETURN MACHINE_DEF[IDX].MECH_TYPE + ENDIF + ENDIF + RETURN #NONE +ENDFCT +GLOBAL DEFFCT FRAME K_OFFS(BASE_NO :IN) + INT BASE_NO + DECL FRAME RET_BASE + IF (BASE_NO > 0) THEN + RET_BASE=BASE_DATA[BASE_NO] + ELSE + RET_BASE=$WORLD + ENDIF + IF BASE_CORR_ON THEN + RET_BASE=BASE_CORR:RET_BASE + ENDIF + IF M_BAS_COR_ON THEN + RET_BASE=RET_BASE:M_BASE_CORR + ENDIF + RETURN RET_BASE +ENDFCT +GLOBAL DEFFCT FRAME LK_OFFS(BASE_NO :IN, TOOL_NO :IN) + INT BASE_NO, TOOL_NO + IF (BASE_NO > -1) THEN + RETURN K_OFFS(BASE_NO) + ELSE + ;linking to remote tool + IF (TOOL_NO > 0) THEN + RETURN TOOL_DATA[TOOL_NO] + ELSE + RETURN $NULLFRAME + ENDIF + ENDIF +ENDFCT +GLOBAL DEFFCT CHAR[15] K_ADDR(BASE_NO :IN) + INT BASE_NO, IDX + IF BASE_NO > 0 THEN + IDX=MACHINE_FRAME_DAT[BASE_NO].MACH_DEF_INDEX + IF IDX > 0 THEN + RETURN $COOP_KRC[MACHINE_DEF[IDX].COOP_KRC_INDEX].IP_ADDR[] + ENDIF + RETURN " " + ENDIF +ENDFCT +GLOBAL DEFFCT CHAR[40] K_NAME(BASE_NO :IN) + INT BASE_NO, IDX + IF BASE_NO > 0 THEN + IDX=MACHINE_FRAME_DAT[BASE_NO].MACH_DEF_INDEX + IF IDX > 0 THEN + RETURN MACHINE_DEF[IDX].NAME[] + ENDIF + ENDIF + RETURN " " +ENDFCT +GLOBAL DEFFCT INT K_SHIFT(BASE_NO :IN) + INT BASE_NO, IDX + IF BASE_NO > 0 THEN + IDX=MACHINE_FRAME_DAT[BASE_NO].MACH_DEF_INDEX + IF IDX > 0 THEN + RETURN MACHINE_DEF[IDX].COOP_KRC_INDEX + ENDIF + ENDIF + RETURN 0 +ENDFCT +DEFFCT BOOL IsDeviceDefined(StringVar :IN) + +DECL CHAR StringVar[] +INT StringLen, StringPos, CharValue + + StringLen=STRLEN(StringVar[]) + IF StringLen>0 THEN + FOR StringPos=1 TO StringLen + CharValue=StringVar[StringPos] + IF CharValue > 32 THEN + RETURN (TRUE) + ENDIF + ENDFOR + RETURN(FALSE) + ELSE + RETURN(FALSE) + ENDIF + +ENDFCT +DEFFCT BOOL IsDeviceDefinedSPL(StringVar :IN) + +DECL CHAR StringVar[] +INT CharValue + + IF StringVar[1] > 32 THEN + IF StringVar[2] > 32 THEN + IF StringVar[3] > 32 THEN + RETURN (TRUE) + ENDIF + ENDIF + ELSE + RETURN(FALSE) + ENDIF + +ENDFCT +GLOBAL DEF setFixedBaseIfLinked() + IF (FDAT_ACT.BASE_NO == $ACT_BASE) THEN + IF (STRCOMP($LK_MASTER[], " ", #CASE_SENS) == FALSE) THEN + $BASE=$NULLFRAME + $ACT_BASE=0 + LIN_REL {X 0} + ENDIF + ENDIF +END + +GLOBAL DEF TraceStart(StringDef :IN, StringName :IN, UseRingBuffer :IN) + +DECL CHAR StringDef[], StringName[], tempName[64] +DECL INT counter, index, OFFSET, act_iter, max_iter +DECL BOOL compErg, UseRingBuffer, DummyBool +DECL STATE_T STATE + + ON_ERROR_PROCEED + DummyBool = UseRingBuffer + IF $ERR.NUMBER > 0 THEN + UseRingBuffer = FALSE + ERR_CLEAR($ERR) + ENDIF + + index = -1 + FOR counter = 1 TO 10 STEP 1 + compErg = STRCOMP(StringName[], TRACE_CACHE[counter].NAME[], #NOT_CASE_SENS) + IF compErg THEN + index = counter + continue + ENDIF + ENDFOR + + IF index > 0 THEN + act_iter = TRACE_CACHE[index].ACT_ITER + max_iter = TRACE_CACHE[index].MAX_ITER + + act_iter = act_iter + 1 + + IF act_iter > max_iter THEN + IF UseRingBuffer THEN + act_iter = 1 + ELSE + RETURN + ENDIF + ENDIF + + tempName[] = StringName[] + OFFSET = STRLEN(tempName[]) + SWRITE(tempName[],STATE,OFFSET,"%d",act_iter) + + TRACE_CACHE[index].ACT_ITER = act_iter + ELSE + tempName[] = StringName[] + ENDIF + + $TRACE.MODE = #T_STOP + WAIT FOR $TRACE.STATE == #T_END + $TRACE.CONFIG[] = StringDef[] + $TRACE.NAME[] = tempName[] + $TRACE.MODE = #T_START + WAIT FOR $TRACE.STATE <> #T_END + WAIT SEC 0.012 +END + +GLOBAL DEF TraceStop() + WAIT SEC 0.012 + $TRACE.MODE = #T_STOP + WAIT FOR $TRACE.STATE == #T_END +END + +GLOBAL DEF TimerAction (Action :IN,TimerIndex :IN,TimerValue :IN) +INT TimerIndex, TimerValue +DECL TIMER_ACTIONTYPE Action + +SWITCH Action + CASE #TimerStart + IF ($TIMER_STOP[TimerIndex]==FALSE) THEN + $TIMER_STOP[TimerIndex]=TRUE + MsgNotify("RunningTimerHasBeenStopped","BasisTech",TimerIndex,,26) + ENDIF + $TIMER[TimerIndex]=0 + $TIMER_STOP[TimerIndex]=FALSE + CASE #TimerStop + $TIMER_STOP[TimerIndex]=TRUE + CASE #TimeOut + IF ($TIMER_STOP[TimerIndex]==FALSE) THEN + $TIMER_STOP[TimerIndex]=TRUE + MsgNotify("RunningTimerHasBeenStopped","BasisTech",TimerIndex,,26) + ENDIF + $TIMER[TimerIndex]=TimerValue + $TIMER_STOP[TimerIndex]=FALSE + +ENDSWITCH +END + +GLOBAL DEF BasisTech_PLC_INIT() + UpdateLoadModes ( ) + InitHomePositions ( ) +END + +GLOBAL DEF BasisTech_PLC_LOOP() + DECL KRLMSG_T MSG + DECL KRLMSGPAR_T MsgPar[4] + DECL KRLMSGOPT_T Opt + DECL BOOL bDummy + + MSG.Nr = 6789 + MSG.MODUL[] = "TechHandler" + MSG.MSG_TXT[] = "EasyTeachKeepOriWarning" + Opt = {VL_STOP FALSE, CLEAR_P_RESET FALSE, LOG_TO_DB TRUE} + + IF EasyTeachKeepOriWarning THEN + IF EasyTeachKeepOriHandle == 0 THEN + EasyTeachKeepOriHandle = SET_KRLMSG(#State,MSG,MsgPar[],Opt) + ENDIF + ELSE + IF EasyTeachKeepOriHandle > 0 THEN + bDummy=Clear_KrlMsg(EasyTeachKeepOriHandle) + IF bDummy THEN + EasyTeachKeepOriHandle = 0 + ENDIF + ENDIF + ENDIF + +END + +GLOBAL DEFFCT BOOL IsMovingBase(BaseNumber:IN ) + + INT MACH_INDEX, COOP_KRC_INDEX, BaseNumber + DECL ESYS MECH_TYPE + + IF (NOT (VARSTATE("BaseNumber") == #INITIALIZED)) THEN + BaseNumber = $ACT_BASE + ENDIF + IF (BaseNumber == 0) THEN + RETURN (FALSE) + ENDIF + MACH_INDEX = MACHINE_FRAME_DAT[BaseNumber].MACH_DEF_INDEX + IF (MACH_INDEX > 0) Then + MECH_TYPE = MACHINE_DEF[MACH_INDEX].MECH_TYPE + COOP_KRC_INDEX = MACHINE_DEF[MACH_INDEX].COOP_KRC_INDEX + ELSE + RETURN (FALSE) + ENDIF + + IF (MECH_TYPE == #ROBOT) THEN + IF (COOP_KRC_INDEX > 1) THEN + ;LK Base + RETURN (TRUE) + ELSE + RETURN (FALSE) + ENDIF + ELSE + IF (MECH_TYPE == #NONE) THEN + RETURN (FALSE) + ELSE + IF (MECH_TYPE == #CONVEYOR) THEN + ;EB Base + RETURN (TRUE) + ELSE + ;EK Base + RETURN (TRUE) + ENDIF + ENDIF + ENDIF +ENDFCT + + +GLOBAL DEF HopMove (StartPos :IN, TargetPos :IN, VelTransfer :IN,HopData :IN, MoveNotDirect :IN, TransferedType :OUT, StartBase :IN, TargetFdat:IN, isWithTrigger:IN) + + BOOL isSCARA, isDELTA, isPtpPossible, MoveNotDirect, isPtpDesiredByCustomer, isMovingStart, isMovingTarget, isWithTrigger + BOOL MoveInBase, DummyBool + E6POS StartPos, TargetPos, MidPos, PosOverSP, PosOverTP + E6AXIS AxisOverSP, AxisOverTP, AxisMidPt + REAL StartVel, TargetVel, StartAcc, TargetAcc, TransferVel, VelTransfer + DECL HDAT HopData + INT TransferedType, DummyInt + DECL KrlMsgOpt_T MsgOpt + FRAME StartBase + DECL FDAT TargetFdat + + MsgOpt={VL_Stop FALSE,Clear_P_Reset TRUE,Log_To_DB TRUE} + MoveInBase = FALSE + + ON_ERROR_PROCEED + DummyInt = TargetFdat.Base_No + IF $ERR.NUMBER > 0 THEN + MoveInBase = TRUE + TargetFdat.BASE_NO = $ACT_BASE + ERR_CLEAR($ERR) + ENDIF + ON_ERROR_PROCEED + DummyInt = StartBase.X + IF $ERR.NUMBER > 0 THEN + StartBase = $BASE + MoveInBase = TRUE + ERR_CLEAR($ERR) + ENDIF + + ON_ERROR_PROCEED + DummyBool = isWithTrigger + IF $ERR.NUMBER > 0 THEN + isWithTrigger = FALSE + ERR_CLEAR($ERR) + ENDIF + + $CP_VEL_MODE = 5 + + isSCARA = (($MAIN_AXIS == #CC) AND ($NUM_AX == 4)) + isDELTA = (($KINCLASS == #DELTA_KIN) AND ($NUM_AX == 4)) + isPtpPossible = isSCARA AND NOT isWithTrigger + isPtpDesiredByCustomer = FALSE + + isMovingStart = IsMovingBase($ACT_BASE) + isMovingTarget = IsMovingBase(TargetFdat.BASE_NO) + + IF MoveNotDirect AND (isMovingStart OR isMovingTarget) THEN + MsgQuit ("HopIndirectAndMovingBaseNotPossible", "BasisTech", , ,39 ,MsgOpt) + ENDIF + + IF HopData.VEL_START > $VEL_MA.CP * $CP_VEL_MODE THEN + StartVel = $VEL_MA.CP * $CP_VEL_MODE + ELSE + StartVel = HopData.VEL_START + ENDIF + IF HopData.VEL_DEST > $VEL_MA.CP * $CP_VEL_MODE THEN + TargetVel = $VEL_MA.CP * $CP_VEL_MODE + ELSE + TargetVel = HopData.VEL_DEST + ENDIF + + IF HopData.ACC_START/100.0 > $CP_VEL_MODE THEN + StartAcc = $ACC_MA.CP * $CP_VEL_MODE + ELSE + StartAcc = $ACC_MA.CP * HopData.ACC_START/100.0 + ENDIF + IF HopData.ACC_DEST/100.0 > $CP_VEL_MODE THEN + TargetAcc = $ACC_MA.CP * $CP_VEL_MODE + ELSE + TargetAcc = $ACC_MA.CP * HopData.ACC_DEST/100.0 + ENDIF + + IF VelTransfer > $VEL_MA.CP * $CP_VEL_MODE THEN + TransferVel = $VEL_MA.CP * $CP_VEL_MODE + ELSE + TransferVel = VelTransfer + ENDIF + + IF $ON_PATH THEN + IF MoveInBase THEN + PosOverSP = StartPos + PosOverSP.Z = PosOverSP.Z + HopData.HT_Start + + PosOverTP = TargetPos + PosOverTP.Z = PosOverTP.Z + HopData.HT_Dest + ELSE + PosOverSP = PositionToWorld(StartPos, $ACT_BASE) + PosOverSP.Z = PosOverSP.Z + HopData.HT_Start + + PosOverTP = PositionToWorld(TargetPos, TargetFdat.BASE_NO) + PosOverTP.Z = PosOverTP.Z + HopData.HT_Dest + ENDIF + + IF NOT ((isMovingStart OR isMovingTarget) OR (isPtpPossible OR isPtpDesiredByCustomer)) THEN + ;change current Base to World.. + IF NOT MoveInBase THEN + $BASE = $NULLFRAME + ENDIF + + ERR_STATUS = 0 + AxisOverSP = INVERSE (PosOverSP,$AXIS_ACT,ERR_STATUS) + CheckERRStatus() + AxisOverTP = INVERSE (PosOverTP,$AXIS_ACT,ERR_STATUS) + CheckERRStatus() + AxisMidPt.A1 = (AxisOverSP.A1 + AxisOverTP.A1) / 2 + AxisMidPt.A2 = (AxisOverSP.A2 + AxisOverTP.A2) / 2 + AxisMidPt.A3 = (AxisOverSP.A3 + AxisOverTP.A3) / 2 + AxisMidPt.A4 = (AxisOverSP.A4 + AxisOverTP.A4) / 2 + AxisMidPt.A5 = (AxisOverSP.A5 + AxisOverTP.A5) / 2 + AxisMidPt.A6 = (AxisOverSP.A6 + AxisOverTP.A6) / 2 + AxisMidPt.E1 = 0 + AxisMidPt.E2 = 0 + AxisMidPt.E3 = 0 + AxisMidPt.E4 = 0 + AxisMidPt.E5 = 0 + AxisMidPt.E6 = 0 + + MidPos = FORWARD (AxisMidPt,ERR_STATUS) + CheckERRStatus() + IF MoveInBase THEN + MidPos.A = StartPos.A + MidPos.B = StartPos.B + MidPos.C = StartPos.C + ELSE + MidPos = PositionFromWorld(MidPos, TargetFdat.BASE_NO) + ; Set Base to Current Base + $BASE = StartBase + ENDIF + ENDIF + + IF NOT MoveInBase THEN + PosOverSP = PositionFromWorld(PosOverSP, $ACT_BASE) + PosOverTP = PositionFromWorld(PosOverTP, TargetFdat.BASE_NO) + ENDIF + ENDIF + + IF ((NOT isMovingTarget) AND (NOT isMovingStart) AND (isPtpPossible)) THEN + IF $ON_PATH THEN + $VEL.CP = StartVel + $VEL.ORI1 = $CP_VEL_MODE * $VEL_MA.ORI1 + $VEL.ORI2 = $CP_VEL_MODE * $VEL_MA.ORI2 + $ACC.CP = StartAcc + $ACC.ORI1 = $CP_VEL_MODE * $ACC_MA.ORI1 + $ACC.ORI2 = $CP_VEL_MODE * $ACC_MA.ORI2 + IF (HopData.HT_Start - HopData.APO_START > 0) THEN + $APO.CDIS = HopData.HT_Start - HopData.APO_START + PTP PosOverSP C_DIS + ELSE + PTP PosOverSP + ENDIF + + IF NOT MoveInBase THEN + ;----------------------------- + ; Set TOOL,BASE to Target Point + FDAT_ACT = TargetFdat + BAS(#FRAMES) + ;----------------------------- + ENDIF + + IF (HopData.HT_Dest - HopData.APO_DEST > 0) THEN + $APO.CDIS = HopData.HT_Dest - HopData.APO_DEST + ON_ERROR_PROCEED + PTP PosOverTP C_DIS + IF $ERR.NUMBER > 0 THEN + SWITCH $ERR.NUMBER + CASE 1447 + ;APP// software limit switch point cannot be reached + LIN PosOverTP + DEFAULT + MsgQuit("UnexpectedErrorDuringHopMovement","BasisTech",$ERR.NUMBER, ,38 ,MsgOpt) + ENDSWITCH + ERR_CLEAR($ERR) + ENDIF + ELSE + ON_ERROR_PROCEED + PTP PosOverTP + IF $ERR.NUMBER > 0 THEN + SWITCH $ERR.NUMBER + CASE 1447 + ;APP// software limit switch point cannot be reached + LIN PosOverTP + DEFAULT + MsgQuit("UnexpectedErrorDuringHopMovement","BasisTech",$ERR.NUMBER, ,38 ,MsgOpt) + ENDSWITCH + ERR_CLEAR($ERR) + ENDIF + ENDIF + $VEL.CP = TargetVel + $ACC.CP = TargetAcc + IF MoveInBase THEN + PTP TargetPos + ENDIF + ELSE + ;APP// not on path (block selection) + IF MoveInBase THEN + LIN TargetPos + ENDIF + ENDIF + ELSE + ;APP// no ptp movement + IF MoveNotDirect THEN + IF $ON_PATH THEN + TransferedType = 2 ;Forced Indirect + $VEL.CP = StartVel + $VEL.ORI1 = $CP_VEL_MODE * $VEL_MA.ORI1 + $VEL.ORI2 = $CP_VEL_MODE * $VEL_MA.ORI2 + $ACC.CP = StartAcc + $ACC.ORI1 = $CP_VEL_MODE * $ACC_MA.ORI1 + $ACC.ORI2 = $CP_VEL_MODE * $ACC_MA.ORI2 + IF (HopData.HT_Start - HopData.APO_START > 0) THEN + $APO.CDIS = HopData.HT_Start - HopData.APO_START + LIN PosOverSP C_DIS + ELSE + LIN PosOverSP + ENDIF + + IF NOT MoveInBase THEN + ;----------------------------- + ; Set TOOL,BASE to Target Point + FDAT_ACT = TargetFdat + BAS(#FRAMES) + ;----------------------------- + ENDIF + + $VEL.CP = TransferVel + $APO.CDIS = 1000.0 + LIN MidPos C_DIS + IF (HopData.HT_Dest - HopData.APO_DEST > 0) THEN + $APO.CDIS = HopData.HT_Dest - HopData.APO_DEST + LIN PosOverTP C_DIS + ELSE + LIN PosOverTP + ENDIF + $VEL.CP = TargetVel + $ACC.CP = TargetAcc + IF MoveInBase THEN + LIN TargetPos + ENDIF + ELSE + IF MoveInBase THEN + LIN TargetPos + ELSE + ;----------------------------- + ; Set TOOL,BASE to Target Point + FDAT_ACT = TargetFdat + BAS(#FRAMES) + ;----------------------------- + ENDIF + ENDIF + ;APP// no ptp movement, direct + ELSE + IF $ON_PATH THEN + $VEL.CP = StartVel + $VEL.ORI1 = $CP_VEL_MODE * $VEL_MA.ORI1 + $VEL.ORI2 = $CP_VEL_MODE * $VEL_MA.ORI2 + $ACC.CP = StartAcc + $ACC.ORI1 = $CP_VEL_MODE * $ACC_MA.ORI1 + $ACC.ORI2 = $CP_VEL_MODE * $ACC_MA.ORI2 + IF (HopData.HT_Start - HopData.APO_START > 0) THEN + $APO.CDIS = HopData.HT_Start - HopData.APO_START + LIN PosOverSP C_DIS + ELSE + LIN PosOverSP + ENDIF + IF NOT MoveInBase THEN + ;----------------------------- + ; Set TOOL,BASE to Target Point + FDAT_ACT = TargetFdat + BAS(#FRAMES) + ;----------------------------- + ENDIF + $VEL.CP = TransferVel + IF (HopData.HT_Dest - HopData.APO_DEST > 0) THEN + $APO.CDIS = HopData.HT_Dest - HopData.APO_DEST + ON_ERROR_PROCEED + LIN PosOverTP C_DIS + IF $ERR.NUMBER > 0 THEN + TransferedType = 1 ;Indirect + $APO.CDIS = 1000.0 + IF NOT (isMovingStart OR isMovingTarget) THEN + LIN MidPos C_DIS + ENDIF + $APO.CDIS = HopData.HT_Dest - HopData.APO_DEST + LIN PosOverTP C_DIS + ERR_CLEAR($ERR) + ELSE + TransferedType = 0 ;Direct + ENDIF + ELSE + ON_ERROR_PROCEED + LIN PosOverTP + IF $ERR.NUMBER > 0 THEN + TransferedType = 1 ; Indirect + $APO.CDIS = 1000.0 + IF NOT (isMovingStart OR isMovingTarget) THEN + LIN MidPos C_DIS + ENDIF + LIN PosOverTP + ERR_CLEAR($ERR) + ELSE + TransferedType = 0 ;Direct + ENDIF + ENDIF + $VEL.CP = TargetVel + $ACC.CP = TargetAcc + IF MoveInBase THEN + LIN TargetPos + ENDIF + ELSE + ;APP// not on path (block selection) + IF MoveInBase THEN + LIN TargetPos + ELSE + ;----------------------------- + ; Set TOOL,BASE to Target Point + FDAT_ACT = TargetFdat + BAS(#FRAMES) + ;----------------------------- + ENDIF + ENDIF + ENDIF + ENDIF + + IF MoveInBase THEN + $ACC.CP = DEF_ACC_CP + $ACC.ORI1 = DEF_ACC_ORI1 + $ACC.ORI2 = DEF_ACC_ORI2 + $VEL.CP = DEF_VEL_CP + $VEL.ORI1 = DEF_VEL_ORI1 + $VEL.ORI2 = DEF_VEL_ORI2 + $CP_VEL_MODE = 0 + ENDIF +END + +DEF CheckERRStatus() + DECL INT ERR_STAT + DECL KrlMsgOpt_T MsgOpt + + MsgOpt={VL_Stop FALSE,Clear_P_Reset TRUE,Log_To_DB TRUE} + ERR_STAT = ERR_STATUS + ERR_STATUS = 0 + REPEAT + SWITCH ERR_STAT + CASE 0 + RETURN + CASE 1 + MsgQuit ("HopPositionWrongCalculation1", "BasisTech", , ,36 ,MsgOpt) + CASE 2,3 + MsgQuit ("HopPositionWrongCalculation2", "BasisTech", , ,37 ,MsgOpt) + ENDSWITCH + UNTIL FALSE +END + +DEF InitHomePositions() + DECL KrlMsgOpt_T MsgOpt + INT nHandle + BOOL bDummy + + MsgOpt={VL_Stop FALSE,Clear_P_Reset TRUE,Log_To_DB TRUE} + + IF ($KINCLASS == #DELTA_KIN) OR ($MAIN_AXIS == #CC) THEN + IF (XHOME.A2 == -90) AND (XHOME.A3 == 90) THEN + XHOME = $H_POS + MsgState (nHandle,"XHomeInitialized", "BasisTech", , ,38 ,MsgOpt) + bDummy=CLEAR_KRLMSG (nHandle) + ENDIF + IF (XHOME1.A2 == -90) AND (XHOME1.A3 == 90) THEN + XHOME1 = $AXIS_HOME[1] + MsgState (nHandle,"XHome1Initialized", "BasisTech", , ,39 ,MsgOpt) + bDummy=CLEAR_KRLMSG (nHandle) + ENDIF + IF (XHOME2.A2 == -90) AND (XHOME2.A3 == 90) THEN + XHOME2 = $AXIS_HOME[2] + MsgState (nHandle,"XHome2Initialized", "BasisTech", , ,40 ,MsgOpt) + bDummy=CLEAR_KRLMSG (nHandle) + ENDIF + IF (XHOME3.A2 == -90) AND (XHOME3.A3 == 90) THEN + XHOME3 = $AXIS_HOME[3] + MsgState (nHandle,"XHome3Initialized", "BasisTech", , ,41 ,MsgOpt) + bDummy=CLEAR_KRLMSG (nHandle) + ENDIF + IF (XHOME4.A2 == -90) AND (XHOME4.A3 == 90) THEN + XHOME4 = $AXIS_HOME[4] + MsgState (nHandle,"XHome4Initialized", "BasisTech", , ,42 ,MsgOpt) + bDummy=CLEAR_KRLMSG (nHandle) + ENDIF + IF (XHOME5.A2 == -90) AND (XHOME5.A3 == 90) THEN + XHOME5 = $AXIS_HOME[5] + MsgState (nHandle,"XHome5Initialized", "BasisTech", , ,43 ,MsgOpt) + bDummy=CLEAR_KRLMSG (nHandle) + ENDIF + ENDIF +END + +GLOBAL DEF SetDefaultValues() + $ACC.CP = DEF_ACC_CP + $ACC.ORI1 = DEF_ACC_ORI1 + $ACC.ORI2 = DEF_ACC_ORI2 + $VEL.CP = DEF_VEL_CP + $VEL.ORI1 = DEF_VEL_ORI1 + $VEL.ORI2 = DEF_VEL_ORI2 + $CP_VEL_MODE = 0 +END + +DEFFCT E6POS PositionToWorld(Position:IN, PositionBaseNumber:IN) + DECL E6POS Position, Result + DECL INT PositionBaseNumber, MACH_INDEX, PartNumber + DECL FRAME MachineFrame, PositionBase + DECL BOOL Part_Present + DECL CHAR ConveyorName[40] + + MachineFrame = $NULLFRAME + + IF(PositionBaseNumber > 0) THEN + PositionBase = BASE_DATA[PositionBaseNumber] + MACH_INDEX = MACHINE_FRAME_DAT[PositionBaseNumber].MACH_DEF_INDEX + IF MACH_INDEX > 0 THEN + MachineFrame = MACHINE_DEF[MACH_INDEX].ROOT + IF MACHINE_DEF[MACH_INDEX].MECH_TYPE == #CONVEYOR THEN + ConveyorName[] = MACHINE_DEF[MACH_INDEX].Name[] + PartNumber = CONV_PART_NBR[MACH_INDEX] + Result = EB_TEST(MachineFrame, ConveyorName[], PositionBase, PartNumber, Part_Present) + Result = Result : Position + RETURN RESULT + ENDIF + ENDIF + ELSE + PositionBase = $NULLFRAME + ENDIF + + ;calculate the position in world + Result = MachineFrame:PositionBase:Position + + RETURN Result + +ENDFCT + +DEFFCT E6POS PositionFromWorld(Position:IN, PositionBaseNumber:IN) + DECL FRAME PositionBase, MachineFrame + DECL E6POS Position, Result + DECL INT PositionBaseNumber , MACH_INDEX, PartNumber + DECL BOOL Part_Present + DECL CHAR ConveyorName[40] + + MachineFrame = $NULLFRAME + + IF(PositionBaseNumber > 0) THEN + PositionBase = BASE_DATA[PositionBaseNumber] + MACH_INDEX = MACHINE_FRAME_DAT[PositionBaseNumber].MACH_DEF_INDEX + IF MACH_INDEX > 0 THEN + MachineFrame = MACHINE_DEF[MACH_INDEX].ROOT + IF MACHINE_DEF[MACH_INDEX].MECH_TYPE == #CONVEYOR THEN + ConveyorName[] = MACHINE_DEF[MACH_INDEX].Name[] + PartNumber = CONV_PART_NBR[MACH_INDEX] + Result = EB_TEST(MachineFrame, ConveyorName[], PositionBase, PartNumber, Part_Present) + Result = INV_POS(Result) : Position + RETURN RESULT + ENDIF + ENDIF + ELSE + PositionBase = $NULLFRAME + ENDIF + + ;Position in World => Position in Base.. + Result = INV_POS(PositionBase): INV_POS(MachineFrame) :Position + + RETURN Result + +ENDFCT + +;ENDFOLD \ No newline at end of file diff --git a/KUKA/KRC/R1/System/collmonlib.dat b/KUKA/KRC/R1/System/collmonlib.dat new file mode 100644 index 0000000..41ed38d --- /dev/null +++ b/KUKA/KRC/R1/System/collmonlib.dat @@ -0,0 +1,817 @@ +&ACCESS R1 +&COMMENT Collision monitoring library +DEFDAT COLLMONLIB PUBLIC +;DO NOT MODIFY THIS FILE +INT NUM_COLLMON_SETTINGS=30 +INT COLLMON_SETTING[30,12] +COLLMON_SETTING[1,1]=150 +COLLMON_SETTING[1,2]=150 +COLLMON_SETTING[1,3]=150 +COLLMON_SETTING[1,4]=150 +COLLMON_SETTING[1,5]=150 +COLLMON_SETTING[1,6]=150 +COLLMON_SETTING[1,7]=150 +COLLMON_SETTING[1,8]=150 +COLLMON_SETTING[1,9]=150 +COLLMON_SETTING[1,10]=150 +COLLMON_SETTING[1,11]=150 +COLLMON_SETTING[1,12]=150 +COLLMON_SETTING[2,1]=150 +COLLMON_SETTING[2,2]=150 +COLLMON_SETTING[2,3]=150 +COLLMON_SETTING[2,4]=150 +COLLMON_SETTING[2,5]=150 +COLLMON_SETTING[2,6]=150 +COLLMON_SETTING[2,7]=150 +COLLMON_SETTING[2,8]=150 +COLLMON_SETTING[2,9]=150 +COLLMON_SETTING[2,10]=150 +COLLMON_SETTING[2,11]=150 +COLLMON_SETTING[2,12]=150 +COLLMON_SETTING[3,1]=150 +COLLMON_SETTING[3,2]=150 +COLLMON_SETTING[3,3]=150 +COLLMON_SETTING[3,4]=150 +COLLMON_SETTING[3,5]=150 +COLLMON_SETTING[3,6]=150 +COLLMON_SETTING[3,7]=150 +COLLMON_SETTING[3,8]=150 +COLLMON_SETTING[3,9]=150 +COLLMON_SETTING[3,10]=150 +COLLMON_SETTING[3,11]=150 +COLLMON_SETTING[3,12]=150 +COLLMON_SETTING[4,1]=150 +COLLMON_SETTING[4,2]=150 +COLLMON_SETTING[4,3]=150 +COLLMON_SETTING[4,4]=150 +COLLMON_SETTING[4,5]=150 +COLLMON_SETTING[4,6]=150 +COLLMON_SETTING[4,7]=150 +COLLMON_SETTING[4,8]=150 +COLLMON_SETTING[4,9]=150 +COLLMON_SETTING[4,10]=150 +COLLMON_SETTING[4,11]=150 +COLLMON_SETTING[4,12]=150 +COLLMON_SETTING[5,1]=150 +COLLMON_SETTING[5,2]=150 +COLLMON_SETTING[5,3]=150 +COLLMON_SETTING[5,4]=150 +COLLMON_SETTING[5,5]=150 +COLLMON_SETTING[5,6]=150 +COLLMON_SETTING[5,7]=150 +COLLMON_SETTING[5,8]=150 +COLLMON_SETTING[5,9]=150 +COLLMON_SETTING[5,10]=150 +COLLMON_SETTING[5,11]=150 +COLLMON_SETTING[5,12]=150 +COLLMON_SETTING[6,1]=150 +COLLMON_SETTING[6,2]=150 +COLLMON_SETTING[6,3]=150 +COLLMON_SETTING[6,4]=150 +COLLMON_SETTING[6,5]=150 +COLLMON_SETTING[6,6]=150 +COLLMON_SETTING[6,7]=150 +COLLMON_SETTING[6,8]=150 +COLLMON_SETTING[6,9]=150 +COLLMON_SETTING[6,10]=150 +COLLMON_SETTING[6,11]=150 +COLLMON_SETTING[6,12]=150 +COLLMON_SETTING[7,1]=150 +COLLMON_SETTING[7,2]=150 +COLLMON_SETTING[7,3]=150 +COLLMON_SETTING[7,4]=150 +COLLMON_SETTING[7,5]=150 +COLLMON_SETTING[7,6]=150 +COLLMON_SETTING[7,7]=150 +COLLMON_SETTING[7,8]=150 +COLLMON_SETTING[7,9]=150 +COLLMON_SETTING[7,10]=150 +COLLMON_SETTING[7,11]=150 +COLLMON_SETTING[7,12]=150 +COLLMON_SETTING[8,1]=150 +COLLMON_SETTING[8,2]=150 +COLLMON_SETTING[8,3]=150 +COLLMON_SETTING[8,4]=150 +COLLMON_SETTING[8,5]=150 +COLLMON_SETTING[8,6]=150 +COLLMON_SETTING[8,7]=150 +COLLMON_SETTING[8,8]=150 +COLLMON_SETTING[8,9]=150 +COLLMON_SETTING[8,10]=150 +COLLMON_SETTING[8,11]=150 +COLLMON_SETTING[8,12]=150 +COLLMON_SETTING[9,1]=150 +COLLMON_SETTING[9,2]=150 +COLLMON_SETTING[9,3]=150 +COLLMON_SETTING[9,4]=150 +COLLMON_SETTING[9,5]=150 +COLLMON_SETTING[9,6]=150 +COLLMON_SETTING[9,7]=150 +COLLMON_SETTING[9,8]=150 +COLLMON_SETTING[9,9]=150 +COLLMON_SETTING[9,10]=150 +COLLMON_SETTING[9,11]=150 +COLLMON_SETTING[9,12]=150 +COLLMON_SETTING[10,1]=150 +COLLMON_SETTING[10,2]=150 +COLLMON_SETTING[10,3]=150 +COLLMON_SETTING[10,4]=150 +COLLMON_SETTING[10,5]=150 +COLLMON_SETTING[10,6]=150 +COLLMON_SETTING[10,7]=150 +COLLMON_SETTING[10,8]=150 +COLLMON_SETTING[10,9]=150 +COLLMON_SETTING[10,10]=150 +COLLMON_SETTING[10,11]=150 +COLLMON_SETTING[10,12]=150 +COLLMON_SETTING[11,1]=150 +COLLMON_SETTING[11,2]=150 +COLLMON_SETTING[11,3]=150 +COLLMON_SETTING[11,4]=150 +COLLMON_SETTING[11,5]=150 +COLLMON_SETTING[11,6]=150 +COLLMON_SETTING[11,7]=150 +COLLMON_SETTING[11,8]=150 +COLLMON_SETTING[11,9]=150 +COLLMON_SETTING[11,10]=150 +COLLMON_SETTING[11,11]=150 +COLLMON_SETTING[11,12]=150 +COLLMON_SETTING[12,1]=150 +COLLMON_SETTING[12,2]=150 +COLLMON_SETTING[12,3]=150 +COLLMON_SETTING[12,4]=150 +COLLMON_SETTING[12,5]=150 +COLLMON_SETTING[12,6]=150 +COLLMON_SETTING[12,7]=150 +COLLMON_SETTING[12,8]=150 +COLLMON_SETTING[12,9]=150 +COLLMON_SETTING[12,10]=150 +COLLMON_SETTING[12,11]=150 +COLLMON_SETTING[12,12]=150 +COLLMON_SETTING[13,1]=150 +COLLMON_SETTING[13,2]=150 +COLLMON_SETTING[13,3]=150 +COLLMON_SETTING[13,4]=150 +COLLMON_SETTING[13,5]=150 +COLLMON_SETTING[13,6]=150 +COLLMON_SETTING[13,7]=150 +COLLMON_SETTING[13,8]=150 +COLLMON_SETTING[13,9]=150 +COLLMON_SETTING[13,10]=150 +COLLMON_SETTING[13,11]=150 +COLLMON_SETTING[13,12]=150 +COLLMON_SETTING[14,1]=150 +COLLMON_SETTING[14,2]=150 +COLLMON_SETTING[14,3]=150 +COLLMON_SETTING[14,4]=150 +COLLMON_SETTING[14,5]=150 +COLLMON_SETTING[14,6]=150 +COLLMON_SETTING[14,7]=150 +COLLMON_SETTING[14,8]=150 +COLLMON_SETTING[14,9]=150 +COLLMON_SETTING[14,10]=150 +COLLMON_SETTING[14,11]=150 +COLLMON_SETTING[14,12]=150 +COLLMON_SETTING[15,1]=150 +COLLMON_SETTING[15,2]=150 +COLLMON_SETTING[15,3]=150 +COLLMON_SETTING[15,4]=150 +COLLMON_SETTING[15,5]=150 +COLLMON_SETTING[15,6]=150 +COLLMON_SETTING[15,7]=150 +COLLMON_SETTING[15,8]=150 +COLLMON_SETTING[15,9]=150 +COLLMON_SETTING[15,10]=150 +COLLMON_SETTING[15,11]=150 +COLLMON_SETTING[15,12]=150 +COLLMON_SETTING[16,1]=150 +COLLMON_SETTING[16,2]=150 +COLLMON_SETTING[16,3]=150 +COLLMON_SETTING[16,4]=150 +COLLMON_SETTING[16,5]=150 +COLLMON_SETTING[16,6]=150 +COLLMON_SETTING[16,7]=150 +COLLMON_SETTING[16,8]=150 +COLLMON_SETTING[16,9]=150 +COLLMON_SETTING[16,10]=150 +COLLMON_SETTING[16,11]=150 +COLLMON_SETTING[16,12]=150 +COLLMON_SETTING[17,1]=150 +COLLMON_SETTING[17,2]=150 +COLLMON_SETTING[17,3]=150 +COLLMON_SETTING[17,4]=150 +COLLMON_SETTING[17,5]=150 +COLLMON_SETTING[17,6]=150 +COLLMON_SETTING[17,7]=150 +COLLMON_SETTING[17,8]=150 +COLLMON_SETTING[17,9]=150 +COLLMON_SETTING[17,10]=150 +COLLMON_SETTING[17,11]=150 +COLLMON_SETTING[17,12]=150 +COLLMON_SETTING[18,1]=150 +COLLMON_SETTING[18,2]=150 +COLLMON_SETTING[18,3]=150 +COLLMON_SETTING[18,4]=150 +COLLMON_SETTING[18,5]=150 +COLLMON_SETTING[18,6]=150 +COLLMON_SETTING[18,7]=150 +COLLMON_SETTING[18,8]=150 +COLLMON_SETTING[18,9]=150 +COLLMON_SETTING[18,10]=150 +COLLMON_SETTING[18,11]=150 +COLLMON_SETTING[18,12]=150 +COLLMON_SETTING[19,1]=150 +COLLMON_SETTING[19,2]=150 +COLLMON_SETTING[19,3]=150 +COLLMON_SETTING[19,4]=150 +COLLMON_SETTING[19,5]=150 +COLLMON_SETTING[19,6]=150 +COLLMON_SETTING[19,7]=150 +COLLMON_SETTING[19,8]=150 +COLLMON_SETTING[19,9]=150 +COLLMON_SETTING[19,10]=150 +COLLMON_SETTING[19,11]=150 +COLLMON_SETTING[19,12]=150 +COLLMON_SETTING[20,1]=150 +COLLMON_SETTING[20,2]=150 +COLLMON_SETTING[20,3]=150 +COLLMON_SETTING[20,4]=150 +COLLMON_SETTING[20,5]=150 +COLLMON_SETTING[20,6]=150 +COLLMON_SETTING[20,7]=150 +COLLMON_SETTING[20,8]=150 +COLLMON_SETTING[20,9]=150 +COLLMON_SETTING[20,10]=150 +COLLMON_SETTING[20,11]=150 +COLLMON_SETTING[20,12]=150 +COLLMON_SETTING[21,1]=150 +COLLMON_SETTING[21,2]=150 +COLLMON_SETTING[21,3]=150 +COLLMON_SETTING[21,4]=150 +COLLMON_SETTING[21,5]=150 +COLLMON_SETTING[21,6]=150 +COLLMON_SETTING[21,7]=150 +COLLMON_SETTING[21,8]=150 +COLLMON_SETTING[21,9]=150 +COLLMON_SETTING[21,10]=150 +COLLMON_SETTING[21,11]=150 +COLLMON_SETTING[21,12]=150 +COLLMON_SETTING[22,1]=150 +COLLMON_SETTING[22,2]=150 +COLLMON_SETTING[22,3]=150 +COLLMON_SETTING[22,4]=150 +COLLMON_SETTING[22,5]=150 +COLLMON_SETTING[22,6]=150 +COLLMON_SETTING[22,7]=150 +COLLMON_SETTING[22,8]=150 +COLLMON_SETTING[22,9]=150 +COLLMON_SETTING[22,10]=150 +COLLMON_SETTING[22,11]=150 +COLLMON_SETTING[22,12]=150 +COLLMON_SETTING[23,1]=150 +COLLMON_SETTING[23,2]=150 +COLLMON_SETTING[23,3]=150 +COLLMON_SETTING[23,4]=150 +COLLMON_SETTING[23,5]=150 +COLLMON_SETTING[23,6]=150 +COLLMON_SETTING[23,7]=150 +COLLMON_SETTING[23,8]=150 +COLLMON_SETTING[23,9]=150 +COLLMON_SETTING[23,10]=150 +COLLMON_SETTING[23,11]=150 +COLLMON_SETTING[23,12]=150 +COLLMON_SETTING[24,1]=150 +COLLMON_SETTING[24,2]=150 +COLLMON_SETTING[24,3]=150 +COLLMON_SETTING[24,4]=150 +COLLMON_SETTING[24,5]=150 +COLLMON_SETTING[24,6]=150 +COLLMON_SETTING[24,7]=150 +COLLMON_SETTING[24,8]=150 +COLLMON_SETTING[24,9]=150 +COLLMON_SETTING[24,10]=150 +COLLMON_SETTING[24,11]=150 +COLLMON_SETTING[24,12]=150 +COLLMON_SETTING[25,1]=150 +COLLMON_SETTING[25,2]=150 +COLLMON_SETTING[25,3]=150 +COLLMON_SETTING[25,4]=150 +COLLMON_SETTING[25,5]=150 +COLLMON_SETTING[25,6]=150 +COLLMON_SETTING[25,7]=150 +COLLMON_SETTING[25,8]=150 +COLLMON_SETTING[25,9]=150 +COLLMON_SETTING[25,10]=150 +COLLMON_SETTING[25,11]=150 +COLLMON_SETTING[25,12]=150 +COLLMON_SETTING[26,1]=150 +COLLMON_SETTING[26,2]=150 +COLLMON_SETTING[26,3]=150 +COLLMON_SETTING[26,4]=150 +COLLMON_SETTING[26,5]=150 +COLLMON_SETTING[26,6]=150 +COLLMON_SETTING[26,7]=150 +COLLMON_SETTING[26,8]=150 +COLLMON_SETTING[26,9]=150 +COLLMON_SETTING[26,10]=150 +COLLMON_SETTING[26,11]=150 +COLLMON_SETTING[26,12]=150 +COLLMON_SETTING[27,1]=150 +COLLMON_SETTING[27,2]=150 +COLLMON_SETTING[27,3]=150 +COLLMON_SETTING[27,4]=150 +COLLMON_SETTING[27,5]=150 +COLLMON_SETTING[27,6]=150 +COLLMON_SETTING[27,7]=150 +COLLMON_SETTING[27,8]=150 +COLLMON_SETTING[27,9]=150 +COLLMON_SETTING[27,10]=150 +COLLMON_SETTING[27,11]=150 +COLLMON_SETTING[27,12]=150 +COLLMON_SETTING[28,1]=150 +COLLMON_SETTING[28,2]=150 +COLLMON_SETTING[28,3]=150 +COLLMON_SETTING[28,4]=150 +COLLMON_SETTING[28,5]=150 +COLLMON_SETTING[28,6]=150 +COLLMON_SETTING[28,7]=150 +COLLMON_SETTING[28,8]=150 +COLLMON_SETTING[28,9]=150 +COLLMON_SETTING[28,10]=150 +COLLMON_SETTING[28,11]=150 +COLLMON_SETTING[28,12]=150 +COLLMON_SETTING[29,1]=150 +COLLMON_SETTING[29,2]=150 +COLLMON_SETTING[29,3]=150 +COLLMON_SETTING[29,4]=150 +COLLMON_SETTING[29,5]=150 +COLLMON_SETTING[29,6]=150 +COLLMON_SETTING[29,7]=150 +COLLMON_SETTING[29,8]=150 +COLLMON_SETTING[29,9]=150 +COLLMON_SETTING[29,10]=150 +COLLMON_SETTING[29,11]=150 +COLLMON_SETTING[29,12]=150 +COLLMON_SETTING[30,1]=150 +COLLMON_SETTING[30,2]=150 +COLLMON_SETTING[30,3]=150 +COLLMON_SETTING[30,4]=150 +COLLMON_SETTING[30,5]=150 +COLLMON_SETTING[30,6]=150 +COLLMON_SETTING[30,7]=150 +COLLMON_SETTING[30,8]=150 +COLLMON_SETTING[30,9]=150 +COLLMON_SETTING[30,10]=150 +COLLMON_SETTING[30,11]=150 +COLLMON_SETTING[30,12]=150 + +INT COLLMON_DISPLAYED[30,12] +COLLMON_DISPLAYED[1,1]=150 +COLLMON_DISPLAYED[1,2]=150 +COLLMON_DISPLAYED[1,3]=150 +COLLMON_DISPLAYED[1,4]=150 +COLLMON_DISPLAYED[1,5]=150 +COLLMON_DISPLAYED[1,6]=150 +COLLMON_DISPLAYED[1,7]=150 +COLLMON_DISPLAYED[1,8]=150 +COLLMON_DISPLAYED[1,9]=150 +COLLMON_DISPLAYED[1,10]=150 +COLLMON_DISPLAYED[1,11]=150 +COLLMON_DISPLAYED[1,12]=150 +COLLMON_DISPLAYED[2,1]=150 +COLLMON_DISPLAYED[2,2]=150 +COLLMON_DISPLAYED[2,3]=150 +COLLMON_DISPLAYED[2,4]=150 +COLLMON_DISPLAYED[2,5]=150 +COLLMON_DISPLAYED[2,6]=150 +COLLMON_DISPLAYED[2,7]=150 +COLLMON_DISPLAYED[2,8]=150 +COLLMON_DISPLAYED[2,9]=150 +COLLMON_DISPLAYED[2,10]=150 +COLLMON_DISPLAYED[2,11]=150 +COLLMON_DISPLAYED[2,12]=150 +COLLMON_DISPLAYED[3,1]=150 +COLLMON_DISPLAYED[3,2]=150 +COLLMON_DISPLAYED[3,3]=150 +COLLMON_DISPLAYED[3,4]=150 +COLLMON_DISPLAYED[3,5]=150 +COLLMON_DISPLAYED[3,6]=150 +COLLMON_DISPLAYED[3,7]=150 +COLLMON_DISPLAYED[3,8]=150 +COLLMON_DISPLAYED[3,9]=150 +COLLMON_DISPLAYED[3,10]=150 +COLLMON_DISPLAYED[3,11]=150 +COLLMON_DISPLAYED[3,12]=150 +COLLMON_DISPLAYED[4,1]=150 +COLLMON_DISPLAYED[4,2]=150 +COLLMON_DISPLAYED[4,3]=150 +COLLMON_DISPLAYED[4,4]=150 +COLLMON_DISPLAYED[4,5]=150 +COLLMON_DISPLAYED[4,6]=150 +COLLMON_DISPLAYED[4,7]=150 +COLLMON_DISPLAYED[4,8]=150 +COLLMON_DISPLAYED[4,9]=150 +COLLMON_DISPLAYED[4,10]=150 +COLLMON_DISPLAYED[4,11]=150 +COLLMON_DISPLAYED[4,12]=150 +COLLMON_DISPLAYED[5,1]=150 +COLLMON_DISPLAYED[5,2]=150 +COLLMON_DISPLAYED[5,3]=150 +COLLMON_DISPLAYED[5,4]=150 +COLLMON_DISPLAYED[5,5]=150 +COLLMON_DISPLAYED[5,6]=150 +COLLMON_DISPLAYED[5,7]=150 +COLLMON_DISPLAYED[5,8]=150 +COLLMON_DISPLAYED[5,9]=150 +COLLMON_DISPLAYED[5,10]=150 +COLLMON_DISPLAYED[5,11]=150 +COLLMON_DISPLAYED[5,12]=150 +COLLMON_DISPLAYED[6,1]=150 +COLLMON_DISPLAYED[6,2]=150 +COLLMON_DISPLAYED[6,3]=150 +COLLMON_DISPLAYED[6,4]=150 +COLLMON_DISPLAYED[6,5]=150 +COLLMON_DISPLAYED[6,6]=150 +COLLMON_DISPLAYED[6,7]=150 +COLLMON_DISPLAYED[6,8]=150 +COLLMON_DISPLAYED[6,9]=150 +COLLMON_DISPLAYED[6,10]=150 +COLLMON_DISPLAYED[6,11]=150 +COLLMON_DISPLAYED[6,12]=150 +COLLMON_DISPLAYED[7,1]=150 +COLLMON_DISPLAYED[7,2]=150 +COLLMON_DISPLAYED[7,3]=150 +COLLMON_DISPLAYED[7,4]=150 +COLLMON_DISPLAYED[7,5]=150 +COLLMON_DISPLAYED[7,6]=150 +COLLMON_DISPLAYED[7,7]=150 +COLLMON_DISPLAYED[7,8]=150 +COLLMON_DISPLAYED[7,9]=150 +COLLMON_DISPLAYED[7,10]=150 +COLLMON_DISPLAYED[7,11]=150 +COLLMON_DISPLAYED[7,12]=150 +COLLMON_DISPLAYED[8,1]=150 +COLLMON_DISPLAYED[8,2]=150 +COLLMON_DISPLAYED[8,3]=150 +COLLMON_DISPLAYED[8,4]=150 +COLLMON_DISPLAYED[8,5]=150 +COLLMON_DISPLAYED[8,6]=150 +COLLMON_DISPLAYED[8,7]=150 +COLLMON_DISPLAYED[8,8]=150 +COLLMON_DISPLAYED[8,9]=150 +COLLMON_DISPLAYED[8,10]=150 +COLLMON_DISPLAYED[8,11]=150 +COLLMON_DISPLAYED[8,12]=150 +COLLMON_DISPLAYED[9,1]=150 +COLLMON_DISPLAYED[9,2]=150 +COLLMON_DISPLAYED[9,3]=150 +COLLMON_DISPLAYED[9,4]=150 +COLLMON_DISPLAYED[9,5]=150 +COLLMON_DISPLAYED[9,6]=150 +COLLMON_DISPLAYED[9,7]=150 +COLLMON_DISPLAYED[9,8]=150 +COLLMON_DISPLAYED[9,9]=150 +COLLMON_DISPLAYED[9,10]=150 +COLLMON_DISPLAYED[9,11]=150 +COLLMON_DISPLAYED[9,12]=150 +COLLMON_DISPLAYED[10,1]=150 +COLLMON_DISPLAYED[10,2]=150 +COLLMON_DISPLAYED[10,3]=150 +COLLMON_DISPLAYED[10,4]=150 +COLLMON_DISPLAYED[10,5]=150 +COLLMON_DISPLAYED[10,6]=150 +COLLMON_DISPLAYED[10,7]=150 +COLLMON_DISPLAYED[10,8]=150 +COLLMON_DISPLAYED[10,9]=150 +COLLMON_DISPLAYED[10,10]=150 +COLLMON_DISPLAYED[10,11]=150 +COLLMON_DISPLAYED[10,12]=150 +COLLMON_DISPLAYED[11,1]=150 +COLLMON_DISPLAYED[11,2]=150 +COLLMON_DISPLAYED[11,3]=150 +COLLMON_DISPLAYED[11,4]=150 +COLLMON_DISPLAYED[11,5]=150 +COLLMON_DISPLAYED[11,6]=150 +COLLMON_DISPLAYED[11,7]=150 +COLLMON_DISPLAYED[11,8]=150 +COLLMON_DISPLAYED[11,9]=150 +COLLMON_DISPLAYED[11,10]=150 +COLLMON_DISPLAYED[11,11]=150 +COLLMON_DISPLAYED[11,12]=150 +COLLMON_DISPLAYED[12,1]=150 +COLLMON_DISPLAYED[12,2]=150 +COLLMON_DISPLAYED[12,3]=150 +COLLMON_DISPLAYED[12,4]=150 +COLLMON_DISPLAYED[12,5]=150 +COLLMON_DISPLAYED[12,6]=150 +COLLMON_DISPLAYED[12,7]=150 +COLLMON_DISPLAYED[12,8]=150 +COLLMON_DISPLAYED[12,9]=150 +COLLMON_DISPLAYED[12,10]=150 +COLLMON_DISPLAYED[12,11]=150 +COLLMON_DISPLAYED[12,12]=150 +COLLMON_DISPLAYED[13,1]=150 +COLLMON_DISPLAYED[13,2]=150 +COLLMON_DISPLAYED[13,3]=150 +COLLMON_DISPLAYED[13,4]=150 +COLLMON_DISPLAYED[13,5]=150 +COLLMON_DISPLAYED[13,6]=150 +COLLMON_DISPLAYED[13,7]=150 +COLLMON_DISPLAYED[13,8]=150 +COLLMON_DISPLAYED[13,9]=150 +COLLMON_DISPLAYED[13,10]=150 +COLLMON_DISPLAYED[13,11]=150 +COLLMON_DISPLAYED[13,12]=150 +COLLMON_DISPLAYED[14,1]=150 +COLLMON_DISPLAYED[14,2]=150 +COLLMON_DISPLAYED[14,3]=150 +COLLMON_DISPLAYED[14,4]=150 +COLLMON_DISPLAYED[14,5]=150 +COLLMON_DISPLAYED[14,6]=150 +COLLMON_DISPLAYED[14,7]=150 +COLLMON_DISPLAYED[14,8]=150 +COLLMON_DISPLAYED[14,9]=150 +COLLMON_DISPLAYED[14,10]=150 +COLLMON_DISPLAYED[14,11]=150 +COLLMON_DISPLAYED[14,12]=150 +COLLMON_DISPLAYED[15,1]=150 +COLLMON_DISPLAYED[15,2]=150 +COLLMON_DISPLAYED[15,3]=150 +COLLMON_DISPLAYED[15,4]=150 +COLLMON_DISPLAYED[15,5]=150 +COLLMON_DISPLAYED[15,6]=150 +COLLMON_DISPLAYED[15,7]=150 +COLLMON_DISPLAYED[15,8]=150 +COLLMON_DISPLAYED[15,9]=150 +COLLMON_DISPLAYED[15,10]=150 +COLLMON_DISPLAYED[15,11]=150 +COLLMON_DISPLAYED[15,12]=150 +COLLMON_DISPLAYED[16,1]=150 +COLLMON_DISPLAYED[16,2]=150 +COLLMON_DISPLAYED[16,3]=150 +COLLMON_DISPLAYED[16,4]=150 +COLLMON_DISPLAYED[16,5]=150 +COLLMON_DISPLAYED[16,6]=150 +COLLMON_DISPLAYED[16,7]=150 +COLLMON_DISPLAYED[16,8]=150 +COLLMON_DISPLAYED[16,9]=150 +COLLMON_DISPLAYED[16,10]=150 +COLLMON_DISPLAYED[16,11]=150 +COLLMON_DISPLAYED[16,12]=150 +COLLMON_DISPLAYED[17,1]=150 +COLLMON_DISPLAYED[17,2]=150 +COLLMON_DISPLAYED[17,3]=150 +COLLMON_DISPLAYED[17,4]=150 +COLLMON_DISPLAYED[17,5]=150 +COLLMON_DISPLAYED[17,6]=150 +COLLMON_DISPLAYED[17,7]=150 +COLLMON_DISPLAYED[17,8]=150 +COLLMON_DISPLAYED[17,9]=150 +COLLMON_DISPLAYED[17,10]=150 +COLLMON_DISPLAYED[17,11]=150 +COLLMON_DISPLAYED[17,12]=150 +COLLMON_DISPLAYED[18,1]=150 +COLLMON_DISPLAYED[18,2]=150 +COLLMON_DISPLAYED[18,3]=150 +COLLMON_DISPLAYED[18,4]=150 +COLLMON_DISPLAYED[18,5]=150 +COLLMON_DISPLAYED[18,6]=150 +COLLMON_DISPLAYED[18,7]=150 +COLLMON_DISPLAYED[18,8]=150 +COLLMON_DISPLAYED[18,9]=150 +COLLMON_DISPLAYED[18,10]=150 +COLLMON_DISPLAYED[18,11]=150 +COLLMON_DISPLAYED[18,12]=150 +COLLMON_DISPLAYED[19,1]=150 +COLLMON_DISPLAYED[19,2]=150 +COLLMON_DISPLAYED[19,3]=150 +COLLMON_DISPLAYED[19,4]=150 +COLLMON_DISPLAYED[19,5]=150 +COLLMON_DISPLAYED[19,6]=150 +COLLMON_DISPLAYED[19,7]=150 +COLLMON_DISPLAYED[19,8]=150 +COLLMON_DISPLAYED[19,9]=150 +COLLMON_DISPLAYED[19,10]=150 +COLLMON_DISPLAYED[19,11]=150 +COLLMON_DISPLAYED[19,12]=150 +COLLMON_DISPLAYED[20,1]=150 +COLLMON_DISPLAYED[20,2]=150 +COLLMON_DISPLAYED[20,3]=150 +COLLMON_DISPLAYED[20,4]=150 +COLLMON_DISPLAYED[20,5]=150 +COLLMON_DISPLAYED[20,6]=150 +COLLMON_DISPLAYED[20,7]=150 +COLLMON_DISPLAYED[20,8]=150 +COLLMON_DISPLAYED[20,9]=150 +COLLMON_DISPLAYED[20,10]=150 +COLLMON_DISPLAYED[20,11]=150 +COLLMON_DISPLAYED[20,12]=150 +COLLMON_DISPLAYED[21,1]=150 +COLLMON_DISPLAYED[21,2]=150 +COLLMON_DISPLAYED[21,3]=150 +COLLMON_DISPLAYED[21,4]=150 +COLLMON_DISPLAYED[21,5]=150 +COLLMON_DISPLAYED[21,6]=150 +COLLMON_DISPLAYED[21,7]=150 +COLLMON_DISPLAYED[21,8]=150 +COLLMON_DISPLAYED[21,9]=150 +COLLMON_DISPLAYED[21,10]=150 +COLLMON_DISPLAYED[21,11]=150 +COLLMON_DISPLAYED[21,12]=150 +COLLMON_DISPLAYED[22,1]=150 +COLLMON_DISPLAYED[22,2]=150 +COLLMON_DISPLAYED[22,3]=150 +COLLMON_DISPLAYED[22,4]=150 +COLLMON_DISPLAYED[22,5]=150 +COLLMON_DISPLAYED[22,6]=150 +COLLMON_DISPLAYED[22,7]=150 +COLLMON_DISPLAYED[22,8]=150 +COLLMON_DISPLAYED[22,9]=150 +COLLMON_DISPLAYED[22,10]=150 +COLLMON_DISPLAYED[22,11]=150 +COLLMON_DISPLAYED[22,12]=150 +COLLMON_DISPLAYED[23,1]=150 +COLLMON_DISPLAYED[23,2]=150 +COLLMON_DISPLAYED[23,3]=150 +COLLMON_DISPLAYED[23,4]=150 +COLLMON_DISPLAYED[23,5]=150 +COLLMON_DISPLAYED[23,6]=150 +COLLMON_DISPLAYED[23,7]=150 +COLLMON_DISPLAYED[23,8]=150 +COLLMON_DISPLAYED[23,9]=150 +COLLMON_DISPLAYED[23,10]=150 +COLLMON_DISPLAYED[23,11]=150 +COLLMON_DISPLAYED[23,12]=150 +COLLMON_DISPLAYED[24,1]=150 +COLLMON_DISPLAYED[24,2]=150 +COLLMON_DISPLAYED[24,3]=150 +COLLMON_DISPLAYED[24,4]=150 +COLLMON_DISPLAYED[24,5]=150 +COLLMON_DISPLAYED[24,6]=150 +COLLMON_DISPLAYED[24,7]=150 +COLLMON_DISPLAYED[24,8]=150 +COLLMON_DISPLAYED[24,9]=150 +COLLMON_DISPLAYED[24,10]=150 +COLLMON_DISPLAYED[24,11]=150 +COLLMON_DISPLAYED[24,12]=150 +COLLMON_DISPLAYED[25,1]=150 +COLLMON_DISPLAYED[25,2]=150 +COLLMON_DISPLAYED[25,3]=150 +COLLMON_DISPLAYED[25,4]=150 +COLLMON_DISPLAYED[25,5]=150 +COLLMON_DISPLAYED[25,6]=150 +COLLMON_DISPLAYED[25,7]=150 +COLLMON_DISPLAYED[25,8]=150 +COLLMON_DISPLAYED[25,9]=150 +COLLMON_DISPLAYED[25,10]=150 +COLLMON_DISPLAYED[25,11]=150 +COLLMON_DISPLAYED[25,12]=150 +COLLMON_DISPLAYED[26,1]=150 +COLLMON_DISPLAYED[26,2]=150 +COLLMON_DISPLAYED[26,3]=150 +COLLMON_DISPLAYED[26,4]=150 +COLLMON_DISPLAYED[26,5]=150 +COLLMON_DISPLAYED[26,6]=150 +COLLMON_DISPLAYED[26,7]=150 +COLLMON_DISPLAYED[26,8]=150 +COLLMON_DISPLAYED[26,9]=150 +COLLMON_DISPLAYED[26,10]=150 +COLLMON_DISPLAYED[26,11]=150 +COLLMON_DISPLAYED[26,12]=150 +COLLMON_DISPLAYED[27,1]=150 +COLLMON_DISPLAYED[27,2]=150 +COLLMON_DISPLAYED[27,3]=150 +COLLMON_DISPLAYED[27,4]=150 +COLLMON_DISPLAYED[27,5]=150 +COLLMON_DISPLAYED[27,6]=150 +COLLMON_DISPLAYED[27,7]=150 +COLLMON_DISPLAYED[27,8]=150 +COLLMON_DISPLAYED[27,9]=150 +COLLMON_DISPLAYED[27,10]=150 +COLLMON_DISPLAYED[27,11]=150 +COLLMON_DISPLAYED[27,12]=150 +COLLMON_DISPLAYED[28,1]=150 +COLLMON_DISPLAYED[28,2]=150 +COLLMON_DISPLAYED[28,3]=150 +COLLMON_DISPLAYED[28,4]=150 +COLLMON_DISPLAYED[28,5]=150 +COLLMON_DISPLAYED[28,6]=150 +COLLMON_DISPLAYED[28,7]=150 +COLLMON_DISPLAYED[28,8]=150 +COLLMON_DISPLAYED[28,9]=150 +COLLMON_DISPLAYED[28,10]=150 +COLLMON_DISPLAYED[28,11]=150 +COLLMON_DISPLAYED[28,12]=150 +COLLMON_DISPLAYED[29,1]=150 +COLLMON_DISPLAYED[29,2]=150 +COLLMON_DISPLAYED[29,3]=150 +COLLMON_DISPLAYED[29,4]=150 +COLLMON_DISPLAYED[29,5]=150 +COLLMON_DISPLAYED[29,6]=150 +COLLMON_DISPLAYED[29,7]=150 +COLLMON_DISPLAYED[29,8]=150 +COLLMON_DISPLAYED[29,9]=150 +COLLMON_DISPLAYED[29,10]=150 +COLLMON_DISPLAYED[29,11]=150 +COLLMON_DISPLAYED[29,12]=150 +COLLMON_DISPLAYED[30,1]=150 +COLLMON_DISPLAYED[30,2]=150 +COLLMON_DISPLAYED[30,3]=150 +COLLMON_DISPLAYED[30,4]=150 +COLLMON_DISPLAYED[30,5]=150 +COLLMON_DISPLAYED[30,6]=150 +COLLMON_DISPLAYED[30,7]=150 +COLLMON_DISPLAYED[30,8]=150 +COLLMON_DISPLAYED[30,9]=150 +COLLMON_DISPLAYED[30,10]=150 +COLLMON_DISPLAYED[30,11]=150 +COLLMON_DISPLAYED[30,12]=150 + +GLOBAL CHAR CDSet_NAME[30,24] +CDSet_NAME[1,]=" " +CDSet_NAME[2,]=" " +CDSet_NAME[3,]=" " +CDSet_NAME[4,]=" " +CDSet_NAME[5,]=" " +CDSet_NAME[6,]=" " +CDSet_NAME[7,]=" " +CDSet_NAME[8,]=" " +CDSet_NAME[9,]=" " +CDSet_NAME[10,]=" " +CDSet_NAME[11,]=" " +CDSet_NAME[12,]=" " +CDSet_NAME[13,]=" " +CDSet_NAME[14,]=" " +CDSet_NAME[15,]=" " +CDSet_NAME[16,]=" " +CDSet_NAME[17,]=" " +CDSet_NAME[18,]=" " +CDSet_NAME[19,]=" " +CDSet_NAME[20,]=" " +CDSet_NAME[21,]=" " +CDSet_NAME[22,]=" " +CDSet_NAME[23,]=" " +CDSet_NAME[24,]=" " +CDSet_NAME[25,]=" " +CDSet_NAME[26,]=" " +CDSet_NAME[27,]=" " +CDSet_NAME[28,]=" " +CDSet_NAME[29,]=" " +CDSet_NAME[30,]=" " + +INT COLLMON_TOL_PRO[12] +COLLMON_TOL_PRO[1]=-1 +COLLMON_TOL_PRO[2]=-1 +COLLMON_TOL_PRO[3]=-1 +COLLMON_TOL_PRO[4]=-1 +COLLMON_TOL_PRO[5]=-1 +COLLMON_TOL_PRO[6]=-1 +COLLMON_TOL_PRO[7]=-1 +COLLMON_TOL_PRO[8]=-1 +COLLMON_TOL_PRO[9]=-1 +COLLMON_TOL_PRO[10]=-1 +COLLMON_TOL_PRO[11]=-1 +COLLMON_TOL_PRO[12]=-1 + +INT COLLMON_IDX=-1 +BOOL LEARN_MODE=FALSE +INT OFFSET_LEARN_MODE=20 +INT OFFSET_ROOT_AXES=10 +INT OFFSET_HAND_AXES=10 +INT OFFSET_EXT_AXES=10 +BOOL UPDATE_DISPLAY_DATA=FALSE + +CHAR COLLMON_RESET_TIMESTAMP[31,18] +COLLMON_RESET_TIMESTAMP[1,]=" " +COLLMON_RESET_TIMESTAMP[2,]=" " +COLLMON_RESET_TIMESTAMP[3,]=" " +COLLMON_RESET_TIMESTAMP[4,]=" " +COLLMON_RESET_TIMESTAMP[5,]=" " +COLLMON_RESET_TIMESTAMP[6,]=" " +COLLMON_RESET_TIMESTAMP[7,]=" " +COLLMON_RESET_TIMESTAMP[8,]=" " +COLLMON_RESET_TIMESTAMP[9,]=" " +COLLMON_RESET_TIMESTAMP[10,]=" " +COLLMON_RESET_TIMESTAMP[11,]=" " +COLLMON_RESET_TIMESTAMP[12,]=" " +COLLMON_RESET_TIMESTAMP[13,]=" " +COLLMON_RESET_TIMESTAMP[14,]=" " +COLLMON_RESET_TIMESTAMP[15,]=" " +COLLMON_RESET_TIMESTAMP[16,]=" " +COLLMON_RESET_TIMESTAMP[17,]=" " +COLLMON_RESET_TIMESTAMP[18,]=" " +COLLMON_RESET_TIMESTAMP[19,]=" " +COLLMON_RESET_TIMESTAMP[20,]=" " +COLLMON_RESET_TIMESTAMP[21,]=" " +COLLMON_RESET_TIMESTAMP[22,]=" " +COLLMON_RESET_TIMESTAMP[23,]=" " +COLLMON_RESET_TIMESTAMP[24,]=" " +COLLMON_RESET_TIMESTAMP[25,]=" " +COLLMON_RESET_TIMESTAMP[26,]=" " +COLLMON_RESET_TIMESTAMP[27,]=" " +COLLMON_RESET_TIMESTAMP[28,]=" " +COLLMON_RESET_TIMESTAMP[29,]=" " +COLLMON_RESET_TIMESTAMP[30,]=" " +COLLMON_RESET_TIMESTAMP[31,]=" " + +ENDDAT diff --git a/KUKA/KRC/R1/System/collmonlib.src b/KUKA/KRC/R1/System/collmonlib.src new file mode 100644 index 0000000..a1d099c --- /dev/null +++ b/KUKA/KRC/R1/System/collmonlib.src @@ -0,0 +1,385 @@ +&ACCESS R1 +&COMMENT Collision monitoring library +DEF CollMonLib( ) + +END + +; Schreibt die 6 Parameter (fuer jede Roboter-Achse einen) in den +; entsprechenden Eintrag des $COLLMON_TOL PRO[]-Felds. +; Falls ein Parameter nicht SAVE_CM_PRO_SETTING wird, behaelt der entsprechende +; $COLLMON_TOL_PRO[]-Eintrag seinen Wert. +GLOBAL DEF SET_CM_PRO_VALUES(CM_AX1:IN, CM_AX2:IN, CM_AX3:IN, CM_AX4:IN, CM_AX5:IN, CM_AX6:IN) + INT TEST, CM_AX1, CM_AX2, CM_AX3, CM_AX4, CM_AX5, CM_AX6 + + ON_ERROR_PROCEED + TEST=CM_AX1 + IF $ERR.NUMBER == 0 THEN + $COLLMON_TOL_PRO[1]=CM_AX1 + ENDIF + + ON_ERROR_PROCEED + TEST=CM_AX2 + IF $ERR.NUMBER == 0 THEN + $COLLMON_TOL_PRO[2]=CM_AX2 + ENDIF + + ON_ERROR_PROCEED + TEST=CM_AX3 + IF $ERR.NUMBER == 0 THEN + $COLLMON_TOL_PRO[3]=CM_AX3 + ENDIF + + ON_ERROR_PROCEED + TEST=CM_AX4 + IF $ERR.NUMBER == 0 THEN + $COLLMON_TOL_PRO[4]=CM_AX4 + ENDIF + + ON_ERROR_PROCEED + TEST=CM_AX5 + IF $ERR.NUMBER == 0 THEN + $COLLMON_TOL_PRO[5]=CM_AX5 + ENDIF + + ON_ERROR_PROCEED + TEST=CM_AX6 + IF $ERR.NUMBER == 0 THEN + $COLLMON_TOL_PRO[6]=CM_AX6 + ENDIF + + ERR_CLEAR($ERR) + $COLLMON_IDX = 0 +END + +; Setzt $COLLMON_TOL_PRO[] auf die Defaultwerte aus. +; der $CUSTOM.DAT +GLOBAL DEF SET_CM_PRO_DEFAULT() + INT I + + FOR I=1 TO 12 + $COLLMON_TOL_PRO[I]=$COLLMON_TOL_PRO_DEF[I] + ENDFOR + $COLLMON_IDX = 0 +END +; Setzt die globalen Werte falls welche vorhanden oder +; deaktiviert die verbesserte Kollisionsueberwachung indem +; $COLLMON_TOL_PRO[] auf Null gesetzt wird. +GLOBAL DEF SET_CM_PRO_INACTIVE() + INT I + + IF $IMPROVED_COLLMON== TRUE THEN + FOR I=1 TO 12 + IF (COLLMON_TOL_PRO[I] < 0) THEN ;no global COLLMON_TOL_PRO[I] exists + $COLLMON_TOL_PRO[I]=0 + $COLLMON_IDX = 0 + ELSE + $COLLMON_TOL_PRO[I]=COLLMON_TOL_PRO[I] ;sets $COLLMON_TOL_PRO[I] from global + $COLLMON_IDX=COLLMON_IDX + ENDIF + ENDFOR + ELSE + FOR I=1 TO 12 + $COLLMON_TOL_PRO[I]=0 + ENDFOR + ENDIF +END + +; Setzt $COLLMON_MAX auf 0 zurueck. Alle folgenden +; Bewegungen gehen in die Maximumsbildung ein. +GLOBAL DEF RESET_CM_MAX() + INT I + + FOR I=1 TO 12 + $COLLMON_MAX[I]=0 + ENDFOR +END + +; Sichert die aktuellen $COLLMON_TOL_PRO[]-Werte in ein +; Parameter-Feld. +; Parameter SETTING_IDX: Index des Collmon-Datensatz +GLOBAL DEF SAVE_CM_PRO_SETTING(SETTING_IDX:IN) + INT SETTING_IDX,I + + FOR I=1 to 12 + COLLMON_SETTING[SETTING_IDX,I]=$COLLMON_TOL_PRO[I] + ENDFOR +END + +; Sichert die aktuellen $COLLMON_TOL_COM[]-Werte in ein +; Parameter-Feld. +; Parameter SETTING_IDX: Index des Collmon-Datensatz +GLOBAL DEF SAVE_CM_COM_SETTING(SETTING_IDX:IN) + INT SETTING_IDX,I + + FOR I=1 to 12 + COLLMON_SETTING[SETTING_IDX,I]=$COLLMON_TOL_COM[I] + ENDFOR +END + +; Liest einen aktuell gespeicherten Collmon-Datensatz +; Parameter SETTING_IDX: Index des Collmon-Datensatzes +; Parameter VALUES: Array der Groesse 12 mit den Werten des Collmon-Datensatzes +GLOBAL DEF READ_CM_SETTING(SETTING_IDX:IN, VALUES[]:OUT) + INT SETTING_IDX + INT VALUES[] + INT I + + IF ((SETTING_IDX < 1) OR (SETTING_IDX > NUM_COLLMON_SETTINGS)) THEN + RETURN + ENDIF + + FOR I = 1 TO 12 + VALUES[I] = COLLMON_SETTING[SETTING_IDX,I] + ENDFOR +END + +; Beschreibt einen Collmon-Datensatz +; Parameter SETTING_IDX: Index des Collmon-Datensatzes +; Parameter VALUES: Array der Groesse 12 mit den neuen Werten des Collmon-Datensatzes +GLOBAL DEF WRITE_CM_SETTING(SETTING_IDX:IN, VALUES[]:OUT) + INT SETTING_IDX + INT VALUES[] + INT I + + IF ((SETTING_IDX < 1) OR (SETTING_IDX > NUM_COLLMON_SETTINGS)) THEN + RETURN + ENDIF + + FOR I = 1 TO 12 + IF (VALUES[I] < 0) THEN + COLLMON_SETTING[SETTING_IDX,I] = 0 + ELSE + IF VALUES[I] > 500 THEN + COLLMON_SETTING[SETTING_IDX,I] = 500 + ELSE + COLLMON_SETTING[SETTING_IDX,I] = VALUES[I] + ENDIF + ENDIF + ENDFOR +END + +; Sichert die aktuellen $COLLMON_MAX[]-Werte in ein +; Collmon-Datensatz-Feld. Optional kann ein Skalierungs-Prozentwert +; angegeben werden. +; Parameter SETTING_IDX: Index des Collmon-Datensatz +; Parameter OFFSET: optionaler Offset auf alle Komponenten von $COLLMON_MAX[]. Default-Wert=0. +; Expert call +GLOBAL DEF SAVE_CM_MAX_SETTING(SETTING_IDX:IN,OFFSET:IN) + INT SETTING_IDX,OFFSET,TEST,OFFSET_WERT,I + DECL INT SET_VALUES[12] + + ; Vorbelegung mit Default-Wert 0 + OFFSET_WERT=0 + + ON_ERROR_PROCEED + TEST=OFFSET + + IF $ERR.NUMBER == 0 THEN + OFFSET_WERT=OFFSET ; Parameter verwenden + ENDIF + + GET_COLLMON_SET(SETTING_IDX, SET_VALUES[]) + FOR I=1 to 12 + ; durch Lernfahrt will man auskeschaltete Achsen nicht einschalten + IF COLLMON_SETTING[SETTING_IDX,I] <> 0 THEN + COLLMON_SETTING[SETTING_IDX,I]=SET_VALUES[I] + OFFSET_WERT + ENDIF + ENDFOR + + ERR_CLEAR($ERR) +END + +; Schreibt einen gesicherten Collmon-Datensatz zurueck +; in das $COLLMON_TOL_PRO[]-Feld. +; Parameter SETTING_IDX: Index des Collmon-Datensatz +GLOBAL DEF USE_CM_PRO_SETTING(SETTING_IDX:IN) + INT SETTING_IDX,I + + FOR I=1 to 12 + $COLLMON_TOL_PRO[I]=COLLMON_SETTING[SETTING_IDX,I] + ENDFOR + $COLLMON_IDX = SETTING_IDX +END +; Initialisiert alle Collmon-Datensaetze auf 100. +GLOBAL DEF INIT_CM_SETTINGS() + INT I,J + + FOR I=1 TO NUM_COLLMON_SETTINGS + FOR J=1 TO 12 + COLLMON_SETTING[I,J]=100 + ENDFOR + ENDFOR +END + +;used in old motion command to set all 12 values +;Expert call +GLOBAL DEF SET_CD_PARAMS (Index :IN) + DECL INT Index + IF (Index > 0) AND (Index < 31) THEN + USE_CM_PRO_SETTING (Index) + ELSE + SET_CM_PRO_INACTIVE() + ENDIF +END + +;Expert call +GLOBAL DEF USE_CD_PARAMS (Index :IN) + DECL INT Index, I + IF (Index > 0) AND (Index < 31) THEN + FOR I=1 to 12 + COLLMON_TOL_PRO[I]=COLLMON_SETTING[Index,I] ; saves COLLMON_TOL_PRO for global using + ENDFOR + COLLMON_IDX=Index + USE_CM_PRO_SETTING (Index) + ELSE + FOR I=1 to 12 + COLLMON_TOL_PRO[I]=-1 ; saves COLLMON_TOL_PRO for global using + ENDFOR + COLLMON_IDX=-1 + SET_CM_PRO_INACTIVE() + ENDIF +END + +;resets COLLMON_TOL_PRO on the begin of KRL module +;by call BAS(#INITMOV,0) +GLOBAL DEF RESET_CD_PARAMS () + DECL INT I + FOR I=1 to 12 + COLLMON_TOL_PRO[I]=-1 ; resets COLLMON_TOL_PRO for global using + ENDFOR + COLLMON_IDX=-1 +END + +;used in spline command to set all 12 values by just one call +;like ...WITH $COLLMON_TOL_PRO[1]=USE_CM_PRO_VALUES(SETTING_IDX) +GLOBAL DEFFCT INT USE_CM_PRO_VALUES(SETTING_IDX:IN) + INT SETTING_IDX + + IF (SETTING_IDX == -1) THEN ;Force deactivation + $COLLMON_TOL_PRO[2]=0 + $COLLMON_TOL_PRO[3]=0 + $COLLMON_TOL_PRO[4]=0 + $COLLMON_TOL_PRO[5]=0 + $COLLMON_TOL_PRO[6]=0 + $COLLMON_TOL_PRO[7]=0 + $COLLMON_TOL_PRO[8]=0 + $COLLMON_TOL_PRO[9]=0 + $COLLMON_TOL_PRO[10]=0 + $COLLMON_TOL_PRO[11]=0 + $COLLMON_TOL_PRO[12]=0 + $COLLMON_IDX = 0 + RETURN 0 + ENDIF + + IF (SETTING_IDX > 0) AND (SETTING_IDX < 31) THEN + $COLLMON_TOL_PRO[2]=COLLMON_SETTING[SETTING_IDX,2] + $COLLMON_TOL_PRO[3]=COLLMON_SETTING[SETTING_IDX,3] + $COLLMON_TOL_PRO[4]=COLLMON_SETTING[SETTING_IDX,4] + $COLLMON_TOL_PRO[5]=COLLMON_SETTING[SETTING_IDX,5] + $COLLMON_TOL_PRO[6]=COLLMON_SETTING[SETTING_IDX,6] + $COLLMON_TOL_PRO[7]=COLLMON_SETTING[SETTING_IDX,7] + $COLLMON_TOL_PRO[8]=COLLMON_SETTING[SETTING_IDX,8] + $COLLMON_TOL_PRO[9]=COLLMON_SETTING[SETTING_IDX,9] + $COLLMON_TOL_PRO[10]=COLLMON_SETTING[SETTING_IDX,10] + $COLLMON_TOL_PRO[11]=COLLMON_SETTING[SETTING_IDX,11] + $COLLMON_TOL_PRO[12]=COLLMON_SETTING[SETTING_IDX,12] + $COLLMON_IDX = SETTING_IDX + RETURN COLLMON_SETTING[SETTING_IDX,1] + ELSE + IF (COLLMON_TOL_PRO[1] < 0) THEN ;no global COLLMON_TOL_PRO[I] exists + $COLLMON_TOL_PRO[2]=0 + $COLLMON_TOL_PRO[3]=0 + $COLLMON_TOL_PRO[4]=0 + $COLLMON_TOL_PRO[5]=0 + $COLLMON_TOL_PRO[6]=0 + $COLLMON_TOL_PRO[7]=0 + $COLLMON_TOL_PRO[8]=0 + $COLLMON_TOL_PRO[9]=0 + $COLLMON_TOL_PRO[10]=0 + $COLLMON_TOL_PRO[11]=0 + $COLLMON_TOL_PRO[12]=0 + $COLLMON_IDX = 0 + RETURN 0 + ELSE + $COLLMON_TOL_PRO[2]=COLLMON_TOL_PRO[2] ;sets $COLLMON_TOL_PRO[I] from global + $COLLMON_TOL_PRO[3]=COLLMON_TOL_PRO[3] ;sets $COLLMON_TOL_PRO[I] from global + $COLLMON_TOL_PRO[4]=COLLMON_TOL_PRO[4] ;sets $COLLMON_TOL_PRO[I] from global + $COLLMON_TOL_PRO[5]=COLLMON_TOL_PRO[5] ;sets $COLLMON_TOL_PRO[I] from global + $COLLMON_TOL_PRO[6]=COLLMON_TOL_PRO[6] ;sets $COLLMON_TOL_PRO[I] from global + IF (COLLMON_TOL_PRO[7]>-1) THEN + $COLLMON_TOL_PRO[7]=COLLMON_TOL_PRO[7] ;sets $COLLMON_TOL_PRO[I] from global + ELSE + $COLLMON_TOL_PRO[7]=0 + ENDIF + IF (COLLMON_TOL_PRO[8]>-1) THEN + $COLLMON_TOL_PRO[8]=COLLMON_TOL_PRO[8] ;sets $COLLMON_TOL_PRO[I] from global + ELSE + $COLLMON_TOL_PRO[8]=0 + ENDIF + IF (COLLMON_TOL_PRO[9]>-1) THEN + $COLLMON_TOL_PRO[9]=COLLMON_TOL_PRO[9] ;sets $COLLMON_TOL_PRO[I] from global + ELSE + $COLLMON_TOL_PRO[9]=0 + ENDIF + IF (COLLMON_TOL_PRO[10]>-1) THEN + $COLLMON_TOL_PRO[10]=COLLMON_TOL_PRO[10] ;sets $COLLMON_TOL_PRO[I] from global + ELSE + $COLLMON_TOL_PRO[10]=0 + ENDIF + IF (COLLMON_TOL_PRO[11]>-1) THEN + $COLLMON_TOL_PRO[11]=COLLMON_TOL_PRO[11] ;sets $COLLMON_TOL_PRO[I] from global + ELSE + $COLLMON_TOL_PRO[11]=0 + ENDIF + IF (COLLMON_TOL_PRO[12]>-1) THEN + $COLLMON_TOL_PRO[12]=COLLMON_TOL_PRO[12] ;sets $COLLMON_TOL_PRO[I] from global + ELSE + $COLLMON_TOL_PRO[12]=0 + ENDIF + $COLLMON_IDX=COLLMON_IDX + RETURN COLLMON_TOL_PRO[1] ;returns $COLLMON_TOL_PRO[I] from global + ENDIF + ENDIF +ENDFCT + +;Expert call +GLOBAL DEF SET_TQ_VALUES ( TQ_AX1:IN, TQ_AX2:IN, TQ_AX3:IN, TQ_AX4:IN, TQ_AX5:IN, TQ_AX6:IN) + INT I, TQ_AX1, TQ_AX2, TQ_AX3, TQ_AX4, TQ_AX5, TQ_AX6 + + IF $IMPROVED_COLLMON== TRUE THEN + ON_ERROR_PROCEED + $COLLMON_TOL_PRO[1]=TQ_AX1 + IF $ERR.NUMBER == 0 THEN + $COLLMON_TOL_PRO[2]=TQ_AX2 + $COLLMON_TOL_PRO[3]=TQ_AX3 + $COLLMON_TOL_PRO[4]=TQ_AX4 + $COLLMON_TOL_PRO[5]=TQ_AX5 + $COLLMON_TOL_PRO[6]=TQ_AX6 + ELSE + FOR I=1 TO 12 + $COLLMON_TOL_PRO[I]=$COLLMON_TOL_PRO_DEF[I] + ENDFOR + ERR_CLEAR($ERR) + ENDIF + FOR I=1 TO 12 + COLLMON_TOL_PRO[I]=$COLLMON_TOL_PRO[I] + ENDFOR + COLLMON_IDX=0 + $COLLMON_IDX = 0 + ELSE + ON_ERROR_PROCEED + $TORQMON[1]=TQ_AX1 + IF $ERR.NUMBER == 0 THEN + $TORQMON[2]=TQ_AX2 + $TORQMON[3]=TQ_AX3 + $TORQMON[4]=TQ_AX4 + $TORQMON[5]=TQ_AX5 + $TORQMON[6]=TQ_AX6 + ELSE + FOR I=1 TO 12 + $TORQMON[I]=$TORQMON_DEF[I] + ENDFOR + ERR_CLEAR($ERR) + ENDIF + ENDIF +END diff --git a/KUKA/KRC/R1/System/ir_stopm.src b/KUKA/KRC/R1/System/ir_stopm.src new file mode 100644 index 0000000..a720129 --- /dev/null +++ b/KUKA/KRC/R1/System/ir_stopm.src @@ -0,0 +1,70 @@ +&ACCESS R1 +&COMMENT HandlerOnRobotFault +DEF IR_STOPM ( ) +;----------------------------------- +; Error Handling Robot Controller +; Switch OFF and Switch ON processes +; KRC Version >= V5.5 +;----------------------------------- + ;FOLD DECLARATIONS + ;FOLD USER DECL + ; Please insert user defined declarations + + ;ENDFOLD (USER DECL) + ;FOLD BASISTECH DECL + BOOL ApplicationRunFlag + DECL CHAR ID[3] + ;ENDFOLD (BASISTECH DECL) + ;ENDFOLD (DECLARATIONS) + ;FOLD BASISTECH INIT + INTERRUPT OFF 3 + STOPM_FLAG=TRUE ;Reflects state of interrupt 3 to activate/deactivate $Stopmess interrupt + ID[]="CTL" + If ($STOPMESS==TRUE) THEN ;APP// "IF" ~ Notepad++ Formatierung + BRAKE + ;ENDFOLD (BASISTECH INIT) + + ;FOLD USER STOP +;Make your modifications here + + ;ENDFOLD (USER STOP) + ;FOLD COLLISION DETECTION + IF ($IMPROVED_COLLMON == TRUE) AND ($COLL_ALARM == TRUE) THEN + CollDetect_UserAction() + ENDIF + ;ENDFOLD COLLISION DETECTION + ;FOLD BASISTECH STOP + P00 (#EXT_ERR,#PGNO_GET,ID[],128 ) + ApplicationRunFlag=FALSE + IF (Appl_Run>0) THEN + IF $OUT[Appl_Run] THEN + ApplicationRunFlag=TRUE + $OUT[Appl_Run]=FALSE + ENDIF + ENDIF + REPEAT + POWER=SYNC() + HALT + UNTIL (($STOPMESS==FALSE) AND ($POWER_FAIL==FALSE)) + ;ENDFOLD (BASISTECH STOP) + + ;FOLD BASISTECH RESTART + P00 (#EXT_ERR,#PGNO_GET,ID[],0 ) + IF (ApplicationRunFlag==TRUE) THEN + IF (Appl_Run>0) THEN + $OUT[Appl_Run]=TRUE + ENDIF + ENDIF + ;ENDFOLD (BASISTECH RESTART) + ;FOLD USER RESTART +;Make your modifications here + + ;ENDFOLD (USER RESTART) + + ;FOLD BASISTECH REACTIVATE + Endif ;APP// "ENDIF" ~ Notepad++ Formatierung + INTERRUPT ON 3 + STOPM_FLAG=FALSE ;Reflects state of interrupt 3 to activate/deactivate $Stopmess interrupt + ;ENDFOLD (BASISTECH REACTIVATE) +END + \ No newline at end of file diff --git a/KUKA/KRC/R1/System/masref_main.dat b/KUKA/KRC/R1/System/masref_main.dat new file mode 100644 index 0000000..b1e774d --- /dev/null +++ b/KUKA/KRC/R1/System/masref_main.dat @@ -0,0 +1,30 @@ +&ACCESS RVO +&REL 4 +&COMMENT Mastering Reference Main Task +&PARAM EDITMASK = * +&PARAM DISKPATH = KRC:\R1\System +DEFDAT MASREF_MAIN +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLERATIONS) +;FOLD Messages +DECL CONST CHAR MASREF_Modulname[6] +MASREF_Modulname[]="MasRef" +DECL KRLMSGOPT_T MASREF_MsgOptWithLogging={VL_STOP TRUE,CLEAR_P_RESET TRUE,LOG_TO_DB TRUE} +DECL INT MASREF_StateMsgHandle=0 ; 0=> no handle exists +;ENDFOLD (Messages) +;FOLD timeout +DECL CONST REAL MASREF_TimeoutOneCycle=0.096 ; one wait cycle is 8*12ms=96ms +DECL CONST INT MASREF_nLapsedTimeout=30 ; means ca. 3s +DECL INT MASREF_nLapsedTime=0 ; actual count of wait cycle +;ENDFOLD (timeout) +;FOLD reference groups +DECL CONST INT MASREF_GroupSequenceSize=3 ; length of sequence list for reference groups +DECL INT MASREF_GroupSequenceIdx=0 ; for iteration over the array of group sequence +DECL INT MASREF_GroupNumber=0 ; actual group under test +;ENDFOLD (reference groups) +ENDDAT diff --git a/KUKA/KRC/R1/System/masref_main.src b/KUKA/KRC/R1/System/masref_main.src new file mode 100644 index 0000000..777c7c3 --- /dev/null +++ b/KUKA/KRC/R1/System/masref_main.src @@ -0,0 +1,128 @@ +&ACCESS RVO +&REL 4 +&COMMENT Mastering Reference Main Task +&PARAM EDITMASK = * +&PARAM DISKPATH = KRC:\R1\System +DEF MasRef_Main() +;******************************************* +;* main module for safety relevant feature * +;* 'Master Reference' * +;******************************************* + ;FOLD Start conditions for mastering reference + MsgState(MASREF_StateMsgHandle,"MasterReferenceCheckStartConditions",MASREF_Modulname[],,, 103) + IF Varstate("$pro_ip.si01.name[]") <> #DECLARED THEN + ;APP//MasRef_Main() wurde von einem uebergeordneten Programm aufgerufen + IF NOT $MasteringTest_Req_Ext AND NOT $MasteringTest_Req_Int THEN + ;APP//weder interne noch externe Anforderung ist freigegeben + WAIT FOR Clear_KrlMsg(MASREF_StateMsgHandle) + RETURN + ENDIF + ENDIF + ;APPBLOCK/* + ;Signale Referenzgruppe in Position und + ;Justagereferenzierung aktiv zuruecksetzen + ;APPBLOCK*/ + $MasteringTest_Group = 0 + $MasteringTest_Active = FALSE + ;APPBLOCK/* + ;Schalter Hardware pruefen und + ;Schalter darf nicht bedaempft sein + ;APPBLOCK*/ + REPEAT + IF NOT $MasteringTest_Switch_OK THEN + ;APP//wartet auf Quittierung + MsgQuit("MasterReferenceSwitchFailure", MASREF_Modulname[], , , 100, MASREF_MsgOptWithLogging) + ENDIF + ;APP//aktiviert Safety-Modul + $MasteringTest_Active = TRUE + WAIT SEC 0.2 + ;APP//lesend: Safety-Modul hat Variable wieder deaktiviert + IF NOT $MasteringTest_Active THEN + ;APP//wartet auf Quittierung + MsgQuit("MasterReferenceNotActivated", MASREF_Modulname[], , , 101, MASREF_MsgOptWithLogging) + ENDIF + UNTIL $MasteringTest_Active AND $MasteringTest_Switch_OK + WAIT FOR Clear_KrlMsg(MASREF_StateMsgHandle) + ;ENDFOLD (Start conditions for mastering reference) + ;FOLD Reference group testing + FOR MASREF_GroupSequenceIdx = 1 TO MASREF_GroupSequenceSize + MASREF_GroupNumber = MASREFg_GroupSequence[MASREF_GroupSequenceIdx] + IF MASREF_GroupNumber > 0 THEN + MsgState(MASREF_StateMsgHandle,"MasterReferenceGroup",MASREF_Modulname[], MASREF_GroupNumber, , 104, MASREF_MsgOptWithLogging) + RunTest_Group(MASREF_GroupNumber) + WAIT FOR Clear_KrlMsg(MASREF_StateMsgHandle) + ENDIF + ENDFOR + ;ENDFOLD (Reference group testing) + ;FOLD Finalize mastering reference + MsgState(MASREF_StateMsgHandle,"MasterReferenceFinalize",MASREF_Modulname[],,, 106) + ;APP//Positionspruefung in Sicherheitssteuerung beendet + $MasteringTest_Active = FALSE + + MASREF_nLapsedTime = 0 + REPEAT + WAIT SEC MASREF_TimeoutOneCycle + MASREF_nLapsedTime = MASREF_nLapsedTime + 1 + ;APPBLOCK/* + ;lesend: warte bis Safety-Modul Variable auf FALSE setzt + ;oder Timeout abgelaufen + ;APPBLOCK*/ + UNTIL (NOT $MasteringTest_Active AND NOT $MasteringTest_Req_Int) or (MASREF_nLapsedTime > MASREF_nLapsedTimeout) + + IF $MasteringTest_Active THEN + ;APP//wartet auf Quittierung + MsgQuit("MasterReferenceFailed", MASREF_Modulname[], , , 102, MASREF_MsgOptWithLogging) + ENDIF + WAIT FOR Clear_KrlMsg(MASREF_StateMsgHandle) + ;ENDFOLD (Finalize mastering reference) +END + +DEF RunTest_Group(nGrpNr:IN) + ;FOLD Declaration + INT nGrpNr + ;ENDFOLD (Declaration) + ;FOLD Implementation + IF (nGrpNr <= 0) OR (nGrpNr > 3) THEN + MsgQuit("MasterReferenceUnknownGroup", MASREF_Modulname[], nGrpNr, , 105, MASREF_MsgOptWithLogging) + RETURN + ENDIF + + SWITCH nGrpNr + CASE 1 + ;APP//Pruefposition Gruppe 1 anfahren + MasRefStartG1() + CASE 2 + ;APP//Pruefposition Gruppe 2 anfahren + MasRefStartG2() + CASE 3 + ;APP//Pruefposition Gruppe 3 anfahren + MasRefStartG3() + DEFAULT + ENDSWITCH + + ;APP//warte bis Pruefposition sicher erreicht + WAIT SEC 0.5 + ;APP//aktiviert Signal Referenzgruppe x in Position + $MasteringTest_Group = nGrpNr + ;APP//warte bis Pruefung abgeschlossen + WAIT SEC 0.5 + + SWITCH nGrpNr + CASE 1 + ;APP//zurueck von Pruefposition Gruppe 1 + MasRefBackG1() + CASE 2 + ;APP//zurueck von Pruefposition Gruppe 2 + MasRefBackG2() + CASE 3 + ;APP// zurueck von Pruefposition Gruppe 3 + MasRefBackG3() + DEFAULT + ENDSWITCH + + WAIT SEC 0.2 + ;APP//deaktiviert Signal Referenzgruppe x in Position + $MasteringTest_Group = 0 + WAIT SEC 0.2 + ;ENDFOLD (Implementation) +END diff --git a/KUKA/KRC/R1/System/sps.sub b/KUKA/KRC/R1/System/sps.sub new file mode 100644 index 0000000..ddff556 --- /dev/null +++ b/KUKA/KRC/R1/System/sps.sub @@ -0,0 +1,87 @@ +&ACCESS RVP +&COMMENT PLC on control +DEF SPS ( ) + ;FOLD DECLARATIONS + ;FOLD BASISTECH DECL + ;Automatik extern + DECL STATE_T STAT + DECL MODUS_T MODE + ;ENDFOLD (BASISTECH DECL) + ;FOLD USER DECL + ; Please insert user defined declarations + + ;ENDFOLD (USER DECL) + ;ENDFOLD (DECLARATIONS) + ;FOLD INI + ;FOLD BASISTECH INIT + BasisTech_PLC_INIT() + ;ENDFOLD (BASISTECH INIT) + ;FOLD AUTOEXT INIT + INTERRUPT DECL 91 WHEN $PRO_STATE1==#P_FREE DO RESET_OUT () + INTERRUPT ON 91 + INTERRUPT DECL 92 WHEN $PRO_MOVE==TRUE DO RESET_LINESEL() + INTERRUPT ON 92 + $LOOP_MSG[]=" " + MODE=#SYNC + $H_POS=$H_POS + ;Automatik extern + IF $MODE_OP==#EX THEN + CWRITE($CMD,STAT,MODE,"RUN /R1/CELL()") + ENDIF + ;ENDFOLD (AUTOEXT INIT) + ;FOLD BACKUPMANAGER PLC INIT + BM_ENABLED = FALSE + BM_OUTPUTVALUE = 0 + ;ENDFOLD (BACKUPMANAGER PLC INIT) + ;FOLD USER INIT + ; Please insert user defined initialization commands + + ;ENDFOLD (USER INIT) + ;ENDFOLD (INI) + + LOOP + WAIT FOR NOT($POWER_FAIL) + ;FOLD BASISTECH PLC + BasisTech_PLC_LOOP() + ;ENDFOLD (BASISTECH PLC) + ;FOLD BACKUPMANAGER PLC + IF BM_ENABLED THEN + BM_OUTPUTSIGNAL = BM_OUTPUTVALUE + ENDIF + ;ENDFOLD (BACKUPMANAGER PLC) + ;FOLD USER PLC + ;Make your modifications here + + ;ENDFOLD (USER PLC) + ENDLOOP + ;FOLD ;%{H} + ;FOLD +END + ;ENDFOLD + + +DEF RESET_OUT ( ) + INT N + MsgLoop(" ") + IF REFLECT_PROG_NR == 1 THEN + FOR N = 0 TO PGNO_LENGTH - 1 + $OUT[PGNO_FBIT_REFL + N] = FALSE + ENDFOR + ENDIF + IF (PGNO_REQ>0) THEN + $OUT[PGNO_REQ]=FALSE + ELSE + IF (PGNO_REQ<0) THEN + $OUT[-PGNO_REQ]=TRUE + ENDIF + ENDIF +END + +DEF RESET_LINESEL() + $LINE_SEL_OK=FALSE +END +;FOLD USER SUBROUTINE +; Integrate your user defined subroutines + +;ENDFOLD (USER SUBROUTINE) +;ENDFOLD diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.dat b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.dat new file mode 100644 index 0000000..26a199e --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.dat @@ -0,0 +1,15 @@ +&ACCESS RVO +&REL 1 +&COMMENT BrkTst-main task for unconfigured brake test axes +&PARAM EDITMASK = * +&PARAM DISKPATH = KRC:\R1\TP\BrakeTest +DEFDAT BrakeTestAxes PUBLIC +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLERATIONS) + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.src b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.src new file mode 100644 index 0000000..1b66656 --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestAxes.src @@ -0,0 +1,30 @@ +&ACCESS RVO +&REL 1 +&COMMENT BrkTst-main task for unconfigured brake test axes +&PARAM EDITMASK = * +&PARAM DISKPATH = KRC:\R1\TP\BrakeTest +DEF BRAKETESTAXES(AxesBitMask: IN) +;BRAKETESTAXES(AxesBitMask: IN) +;examples for parameter AxesBitMask +;no parameter or -1 means all configured axes +;'b00000000000011' means axis 1 and 2 +;'b10000000000001' means axis 1 and 12 +;'b11000000000000' means axis 11 and 12 +;FOLD {H} +INT AxesBitMask + +ON_ERROR_PROCEED +AxesBitMask=AxesBitMask*1 + +IF ($ERR.Number<>0) THEN + AxesBitMask=-1 + ERR_CLEAR($ERR) +ELSE + ERR_RAISE($ERR) +ENDIF + +gBraketestForce=true +BRAKETESTREQ(AxesBitMask) +gBraketestForce=false +;ENDFOLD +END \ No newline at end of file diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.dat b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.dat new file mode 100644 index 0000000..5133721 --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.dat @@ -0,0 +1,17 @@ +&ACCESS RV +&REL 1 +&COMMENT path after test +&PARAM EDITMASK = * +&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe +DEFDAT BrakeTestBack +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make here your modifications + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLERATIONS) +ENDDAT diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.src b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.src new file mode 100644 index 0000000..5035564 --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestBack.src @@ -0,0 +1,19 @@ +&ACCESS RV +&REL 1 +&COMMENT path after test +&PARAM EDITMASK = * +&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe +DEF BrakeTestBack( ) +;FOLD INI + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) +;ENDFOLD (INI) +;Teach here the motion to the position after the brake test. + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.dat b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.dat new file mode 100644 index 0000000..bbd1771 --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.dat @@ -0,0 +1,19 @@ +&ACCESS RV +&REL 1 +&COMMENT parkposition +&PARAM EDITMASK = * +&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe +&PARAM DISKPATH = KRC:\R1\TP\BrakeTest +DEFDAT BRAKETESTPARK PUBLIC +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make here your modifications +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLERATIONS) +DECL E6AXIS XParkPosition={A1 999.000,A2 999.000,A3 999.000,A4 999.000,A5 999.000,A6 999.000,E1 999.000,E2 999.000,E3 999.000,E4 999.000,E5 999.000,E6 999.000} +DECL FDAT FParkPosition={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " "} +ENDDAT diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.src b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.src new file mode 100644 index 0000000..d502051 --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestPark.src @@ -0,0 +1,35 @@ +&ACCESS RV +&REL 1 +&COMMENT parkposition +&PARAM EDITMASK = * +&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe +&PARAM DISKPATH = KRC:\R1\TP\BrakeTest +DEF BrakeTestPark( ) +;FOLD INI + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + ;ENDFOLD (USER INI) +;ENDFOLD (INI) +;Teach here the motion to the parking position. The parking position is needed when the robot has failed the brake test. +;FOLD {h} +WHILE ParkPositionInNotValid() + MsgDialog(SUCCESS,"ParkPositionIsNotValid",brakeTestMdbName[],,,,,,,"Ok") + HALT +ENDWHILE +;ENDFOLD +;FOLD SPTP ParkPosition Vel=10 % DEFAULT Tool[1] Base[0] ;%{PE} +;FOLD Parameters ;%{h} +;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.spline; Kuka.IsGlobalPoint=False; Kuka.PointName=ParkPosition; Kuka.BlendingEnabled=False; Kuka.MoveDataPtpName=DEFAULT; Kuka.VelocityPtp=10; Kuka.VelocityFieldEnabled=True; Kuka.ColDetectFieldEnabled=True; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=SPTP +;ENDFOLD +SPTP XParkPosition WITH $VEL_AXIS[1] = SVEL_JOINT(10.0), $TOOL = STOOL2(FParkPosition), $BASE = SBASE(FParkPosition.BASE_NO), $IPO_MODE = SIPO_MODE(FParkPosition.IPO_FRAME), $LOAD = SLOAD(FParkPosition.TOOL_NO), $ACC_AXIS[1] = SACC_JOINT(PDEFAULT), $APO = SAPO_PTP(PDEFAULT), $GEAR_JERK[1] = SGEAR_JERK(PDEFAULT), $COLLMON_TOL_PRO[1] = USE_CM_PRO_VALUES(0) +;ENDFOLD +END +;FOLD {h} +Global DEFFCT BOOL ParkPositionInNotValid() +RETURN ((XParkPosition.A1 == 999) AND (XParkPosition.A2 == 999) AND (XParkPosition.A3 == 999) AND (XParkPosition.A4 == 999) AND (XParkPosition.A5 == 999) AND (XParkPosition.A6 == 999) AND (XParkPosition.E1 == 999) AND (XParkPosition.E2 == 999) AND (XParkPosition.E3 == 999) AND (XParkPosition.E4 == 999) AND (XParkPosition.E5 == 999) AND (XParkPosition.E6 == 999)) +ENDFCT +;ENDFOLD \ No newline at end of file diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.dat b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.dat new file mode 100644 index 0000000..7d24433 --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.dat @@ -0,0 +1,24 @@ +&ACCESS RVO +&REL 1 +&COMMENT BrkTst-main task +&PARAM EDITMASK = * +&PARAM DISKPATH = TP/BrakeTest +DEFDAT BRAKETESTREQ PUBLIC +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLERATIONS) + +DECL BRAKE_STATE RobotBrkState +GLOBAL CHAR brakeTestMdbName[30] +brakeTestMdbName[]="BrkTst" + +GLOBAL INT MaxCountResultUnknown = 10 +GLOBAL BOOL gBraketestForce=false +DECL INT CountResultUnknown = 0 + + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.src b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.src new file mode 100644 index 0000000..81f1c7b --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestReq.src @@ -0,0 +1,122 @@ +&ACCESS RVO +&REL 1 +&COMMENT BrkTst-main task +&PARAM EDITMASK = * +&PARAM DISKPATH = TP/BrakeTest +DEF BRAKETESTREQ(AxesBitMask: IN) +;BRAKETESTREQ +;fold {h} +INT Idx, Key, AxesBitMask +BOOL Test_Ende +BOOL BraketestForce +BraketestForce=false +IF gBraketestForce THEN + BraketestForce=true +ENDIF +gBraketestForce=false + +ON_ERROR_PROCEED +AxesBitMask=AxesBitMask*1 + +IF ($ERR.Number<>0) THEN + AxesBitMask=-1 + ERR_CLEAR($ERR) +ELSE + ERR_RAISE($ERR) +ENDIF + +IF Varstate("$pro_ip.si01.name[]")==#declared THEN ;program selected + MsgDialog(Key, "DlgPeformManuallyBrakeTest", brakeTestMdbName[], , "Cancel", "GoToPark", "BTman",,,,,FALSE) + SWITCH Key ;dialogue answer + + CASE 5 + BraketestForce=TRUE + + CASE 6 + BrakeTestStart() + BraketestError() + + CASE 7 + Return + + DEFAULT + Return + ENDSWITCH +ELSE ;cyclic call + IF NOT($BRAKETEST_REQ_INT) AND NOT(BraketestForce) THEN + Return + ENDIF +ENDIF + +Test_Ende=false + +RobotBrkState=#BT_UNTESTED + +BrakeTestStart() + +BAS (#INITMOV,0 ) +repeat + +PTP $AXIS_ACT + +RobotBrkState = Test_BRAKE(AxesBitMask, BraketestForce) + + SWITCH RobotBrkState + + CASE #BT_WARNING,#BT_EXCESSIVE, #BT_MAXUNKNOWN, #BT_READY + CountResultUnknown = 0 + Test_Ende = TRUE + + CASE #BT_ERROR + BraketestError() + + CASE #BT_UNKNOWN + Test_Ende = BraketestUnknown() + + CASE #BT_UNTESTED + Test_Ende = TRUE + + ENDSWITCH + +until Test_Ende + +BrakeTestBack() + +END + + +DEF BraketestError() +INT Key + +Key = 0 +MsgDialog(Key, "BT_BRAKE_ERROR", brakeTestMdbName[]," ", "GoToPark",,,,,,,FALSE) + +BrakeTestPark() +WAIT FOR TRUE + +repeat + MsgNotify("ParkPositionReached", brakeTestMdbName[]) + halt +until false + +END + + +DEFFCT BOOL BraketestUnknown() +INT Key +Key=0 +CountResultUnknown = CountResultUnknown + 1 + +IF (CountResultUnknown >= MaxCountResultUnknown) THEN + + MsgDialog(Key, "BT_BRAKE_UNKNOWN", brakeTestMdbName[]," ", "TryAgain", "Cancel",,,,,,FALSE) + IF Key==7 then + Return FALSE + ELSE + Return TRUE + ENDIF +ELSE + Return TRUE +ENDIF +ENDFCT +;endfold \ No newline at end of file diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.dat b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.dat new file mode 100644 index 0000000..9946763 --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.dat @@ -0,0 +1,17 @@ +&ACCESS RV +&REL 1 +&COMMENT path to test +&PARAM EDITMASK = * +&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe +DEFDAT BrakeTestStart +;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P +;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P +EXT BAS (BAS_COMMAND :IN,REAL :IN ) +DECL INT SUCCESS +;ENDFOLD (BASISTECH EXT) +;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P +;Make here your modifications + +;ENDFOLD (USER EXT) +;ENDFOLD (EXTERNAL DECLERATIONS) +ENDDAT diff --git a/KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.src b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.src new file mode 100644 index 0000000..0fe0872 --- /dev/null +++ b/KUKA/KRC/R1/TP/BrakeTest/BrakeTestStart.src @@ -0,0 +1,19 @@ +&ACCESS RV +&REL 1 +&COMMENT path to test +&PARAM EDITMASK = * +&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe +DEF BrakeTestStart( ) +;FOLD INI + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + ;ENDFOLD (BASISTECH INI) + ;FOLD USER INI + ;Make your modifications here + + ;ENDFOLD (USER INI) +;ENDFOLD (INI) +;Teach here the motion to the start position of the brake test. + +END \ No newline at end of file diff --git a/KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.dat b/KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.dat new file mode 100644 index 0000000..6cc0297 --- /dev/null +++ b/KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.dat @@ -0,0 +1,27 @@ +&ACCESS RO +&REL 2396 +&PARAM DISKPATH = KRC:\R1\TP\EthernetKRL +DEFDAT EthernetKRL PUBLIC +;************************************************************ +; CopyRight KUKA Deutschland GmbH 2018 +; last modified 23.11.2016 +; prefix EKI +; functions Interface between KRL and Ethernet (non Realtime) +; This file is mainly designed to communicate +; with external devices like sensors, vision +; systems, other controllers and so on. +;************************************************************ + +;FOLD EKI_Declaration + + ;FOLD INTERNAL + GLOBAL STRUC EKI_STATUS INT Buff,Read,Msg_No,BOOL Connected,INT Counter + DECL CONST EKI_STATUS EKI_NULL_STATUS={Buff 0,Read 0,Msg_No 0,Connected FALSE,Counter 0} + DECL CONST INT TYPEFRAME=6 + DECL CONST INT TYPENULL=0 + DECL CONST INT ERRMSG_FORBIDDEN = 32768 + DECL CONST INT ERRMSG_ALL = 32767 + ;ENDFOLD +;ENDFOLD EKI_Declaration + +ENDDAT diff --git a/KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.src b/KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.src new file mode 100644 index 0000000..a730daf --- /dev/null +++ b/KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL.src @@ -0,0 +1,707 @@ +&ACCESS RO +&REL 2396 +&PARAM DISKPATH = KRC:\R1\TP\EthernetKRL +DEF EthernetKRL( ) + ;************************************************************ + ; CopyRight KUKA Deutschland GmbH 2018 + ; last modified 11.07.2012 + ; prefix EKI + ; functions Interface between KRL and Ethernet (non Realtime) + ; This file is mainly designed to communicate + ; with external devices like sensors, vision + ; systems, other controllers and so on. + ;************************************************************ +END + +;FOLD EKI_InternalProgram + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_Init(strChannelName[]:IN) + DECL CHAR strChannelName[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Ret = EKI_NULL_STATUS + Mode = #SYNC + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Init",strChannelName[]) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_Close(strChannelName[]:IN) + DECL CHAR strChannelName[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Ret = EKI_NULL_STATUS + Mode = #SYNC + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Close",strChannelName[]) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_LOCK(strChannelName[]:IN) + DECL CHAR strChannelName[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + DECL BOOL LOCK + + Ret = EKI_NULL_STATUS + Mode = #SYNC + LOCK = TRUE + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_LockUnLock",strChannelName[], LOCK, Ret.Connected) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_UNLOCK(strChannelName[]:IN) + DECL CHAR strChannelName[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + DECL BOOL LOCK + + Ret = EKI_NULL_STATUS + Mode = #SYNC + LOCK = FALSE + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_LockUnLock",strChannelName[], LOCK, Ret.Connected) + + ; interrupt timeout to detect new edge + CONTINUE + wait sec 0.002 + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_ClearBuffer(strChannelName[]:IN,strPlace[]:IN) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Ret = EKI_NULL_STATUS + Mode = #SYNC + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_ClearBuff",strChannelName[],strPlace[],Ret.Connected) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_Open(strChannelName[]:IN) + DECL CHAR strChannelName[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Open",strChannelName[]) + + Ret.Msg_No = -Stat.Msg_No + showMsgDepend(Ret) + + IF (Ret.Msg_No == 0) THEN + Ret.Connected = true + ENDIF + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_Clear(strChannelName[]:IN) + DECL CHAR strChannelName[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Clear",strChannelName[]) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_GetInteger(strChannelName[]:IN,strPlace[]:IN,value:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL INT value + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value,Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + GLOBAL DEFFCT EKI_STATUS EKI_GetInt(strChannelName[]:IN,strPlace[]:IN,value:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL INT value + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value,Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_GetIntegerArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL INT value[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + GLOBAL DEFFCT EKI_STATUS EKI_GetIntArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL INT value[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_GetBool(strChannelName[]:IN,strPlace[]:IN,value:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL BOOL value + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value,Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + GLOBAL DEFFCT EKI_STATUS EKI_GetBoolArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL BOOL value[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_GetReal(strChannelName[]:IN,strPlace[]:IN,value:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL REAL value + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value,Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + GLOBAL DEFFCT EKI_STATUS EKI_GetRealArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL REAL value[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_GetString(strChannelName[]:IN,strPlace[]:IN,value[]:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL CHAR value[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],value[],Ret.Buff, Ret.Read, TYPENULL,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_GetFrame(strChannelName[]:IN,strPlace[]:IN,value:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL FRAME value + DECL CHAR Buff[24] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + DECL INT Offset + + Mode = #SYNC + Ret = EKI_NULL_STATUS + Ret.buff=1 + + Offset = 0 + Cast_To(Buff[], Offset,value) + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],Buff[],Ret.Buff, Ret.Read, TYPEFRAME,Ret.Connected, Ret.Counter) + + Offset=0 + Cast_From(Buff[], Offset,value) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + GLOBAL DEFFCT EKI_STATUS EKI_GetFrameArray(strChannelName[]:IN,strPlace[]:IN,value[]:OUT) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL FRAME value[] + DECL CHAR Buff[3600] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + DECL INT Offset + DECL INT i,arraysize + DECL BOOL ReadContinue + DECL INT MayArrSz + DECL INT ReadElements + + MayArrSz = 150 + Mode = #SYNC + Ret = EKI_NULL_STATUS + + REPEAT + ReadContinue = false + ReadElements=0 + arraysize=0 + ; detect array size! + Offset=0 + WHILE(($ERR.NUMBER==0) AND (arraysize0)) THEN + Ret.Msg_No = -26 + EXIT + ENDIF + + IF ((arraysize == 1) AND ($ERR.NUMBER<>0)) THEN + EXIT + ENDIF + + IF ((arraysize == MayArrSz) AND ($ERR.NUMBER==0)) THEN + ReadContinue = true; + ELSE + arraysize = arraysize - 1 + ENDIF + + Ret.Buff = arraysize + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_Get",strChannelName[],strPlace[],Buff[],Ret.Buff,ReadElements, TYPEFRAME,Ret.Connected, Ret.Counter) + + Offset = 0 + FOR i=1 to ReadElements + Cast_From(Buff[], Offset,value[i + Ret.Read]) + ENDFOR + + Ret.Read = Ret.Read + ReadElements + Ret.Msg_No = -Stat.Msg_No + showMsgDepend(Ret) + + UNTIL ((Ret.Msg_No <> 0) OR (ReadContinue == false) OR (Ret.Buff == 0) OR (arraysize0) THEN + name={modul[] "EthernetKRL", Nr 1, msg_txt[] "0"} + Filter = 255 + FOR i=(0) TO (1) + name.nr = (Ret.Msg_No B_AND Filter) + IF (name.nr <> 0) THEN + Offset = 0 + CONTINUE + SWRITE(name.msg_txt[],Stat,Offset,"eki%i",name.nr) + Handle = Set_KrlMsg(Type, name, params[], options) + ENDIF + Filter = 65280 + ENDFOR + IF(Type==#Quit) THEN + WHILE(Exists_KrlMsg(Handle)) + wait sec 0.2 + ENDWHILE + ENDIF + ENDIF + + IF (VARSTATE("strChannelName[]")==#INITIALIZED) THEN + EKI_Check_User(Ret,Type,strChannelName[]) + ELSE + EKI_Check_User(Ret,Type) + ENDIF + END + + + ; =========================================================== + GLOBAL DEFFCT EKI_STATUS EKI_CheckBuffer(strChannelName[]:IN,strPlace[]:IN) + DECL CHAR strChannelName[] + DECL CHAR strPlace[] + DECL STATE_T Stat + DECL MODUS_T Mode + DECL EKI_STATUS Ret + + Mode = #SYNC + Ret = EKI_NULL_STATUS + + CONTINUE + CWRITE($FCT_CALL,Stat,Mode,"EFC_eki_CheckBuff",strChannelName[],strPlace[],Ret.Buff,Ret.Connected, Ret.Counter) + + Ret.Msg_No = -Stat.Msg_No + + showMsgDepend(Ret) + + RETURN Ret + ENDFCT + + ; =========================================================== + DEF showMsgDepend(Ret:OUT) + DECL EKI_STATUS Ret + + IF (Ret.Msg_no B_AND ERRMSG_FORBIDDEN)==0 THEN + EKI_CHECK(Ret,#QUIT) + ENDIF + + Ret.Msg_no = Ret.Msg_no B_AND ERRMSG_ALL + END + +;ENDFOLD EKI_InternalProgram + diff --git a/KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL_USER.src b/KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL_USER.src new file mode 100644 index 0000000..f2c0721 --- /dev/null +++ b/KUKA/KRC/R1/TP/EthernetKRL/EthernetKRL_USER.src @@ -0,0 +1,39 @@ +&ACCESS RO +&REL 2314 +&PARAM DISKPATH = TP/EthernetKRL +DEF EthernetKRL_USER( ) +;************************************************************ +; CopyRight KUKA Deutschland GmbH 2018 +; last modified 11.07.2012 +; prefix EKI +; functions user routine for error handling +;************************************************************ +END + +;FOLD EKI_UserProgram +; =========================================================== +GLOBAL DEF EKI_Check_User(Ret:IN,Type:IN,strChannelName[]:IN) + ;FOLD Initialize variables + DECL CHAR strChannelName[] + DECL EKI_STATUS Ret + DECL EKrlMsgType Type + INT Handle + DECL KrlMsg_T name + DECL KrlMsgPar_T params[3] + DECL KrlMsgOpt_T options + DECL STATE_T Stat + DECL MODUS_T Mode + DECL BOOL B + DECL INT Offset + ;ENDFOLD + + IF (VARSTATE("strChannelName[]")==#INITIALIZED) THEN + ; strChannelName is initialized + ENDIF + + ;************************************************************ + ;write your error handling here + ;************************************************************ + +END +;ENDFOLD EKI_UserProgram diff --git a/KUKA/KRC/R1/TP/Signals.dat b/KUKA/KRC/R1/TP/Signals.dat new file mode 100644 index 0000000..128b7ff --- /dev/null +++ b/KUKA/KRC/R1/TP/Signals.dat @@ -0,0 +1,3 @@ +&ACCESS RV +DEFDAT SIGNALS PUBLIC +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/R1/TP/p00.dat b/KUKA/KRC/R1/TP/p00.dat new file mode 100644 index 0000000..1644eae --- /dev/null +++ b/KUKA/KRC/R1/TP/p00.dat @@ -0,0 +1,103 @@ +&ACCESS R1 +&COMMENT EXTERNAL package +DEFDAT P00 + +BOOL PLC_ENABLE=FALSE ; Enable error-code transmission to plc +INT I +INT F_NO=1 +INT MAXERR_C=1 ; maximum messages for $STOPMESS +INT MAXERR_A=1 ; maximum messages for APPLICATION +DECL STOPMESS MLD +SIGNAL ERR $OUT[25] TO $OUT[32] +BOOL FOUND + +STRUC PRESET INT OUT,CHAR PKG[3],INT ERR +DECL PRESET P[255] + +; z.B. P[1] FEHLERCODE AN SPS = 1 +;WENN: +;AUTOMATIK_EXTERN PKG[] = "P00" +;PARITAETSFEHLER = 10 + +; z.B. P[128] FEHLERCODE AN SPS = 128 +;WENN: +;$STOPMESS-MELDUNG PKG[] = "CTL" +;NOT-AUS: = 1 + +; APPLICATION MESSAGES: P[1]...P[127] +P[1]={OUT 2,PKG[] "P00",ERR 10} +;... +;... +; $STOPMESS MESSAGES: P[128]...P[255] +P[128]={OUT 128,PKG[] "CTL",ERR 1} +;... +;... +P[255]={OUT 255,PKG[] "CTL",ERR 1001} + +STRUC ERR_MESS CHAR P[3],INT E +DECL ERR_MESS ERR_FILE[64] +ERR_FILE[1]={P[] "XXX",E 0} +ERR_FILE[2]={P[] "XXX",E 0} +ERR_FILE[3]={P[] "XXX",E 0} +ERR_FILE[4]={P[] "XXX",E 0} +ERR_FILE[5]={P[] "XXX",E 0} +ERR_FILE[6]={P[] "XXX",E 0} +ERR_FILE[7]={P[] "XXX",E 0} +ERR_FILE[8]={P[] "XXX",E 0} +ERR_FILE[9]={P[] "XXX",E 0} +ERR_FILE[10]={P[] "XXX",E 0} +ERR_FILE[11]={P[] "XXX",E 0} +ERR_FILE[12]={P[] "XXX",E 0} +ERR_FILE[13]={P[] "XXX",E 0} +ERR_FILE[14]={P[] "XXX",E 0} +ERR_FILE[15]={P[] "XXX",E 0} +ERR_FILE[16]={P[] "XXX",E 0} +ERR_FILE[17]={P[] "XXX",E 0} +ERR_FILE[18]={P[] "XXX",E 0} +ERR_FILE[19]={P[] "XXX",E 0} +ERR_FILE[20]={P[] "XXX",E 0} +ERR_FILE[21]={P[] "XXX",E 0} +ERR_FILE[22]={P[] "XXX",E 0} +ERR_FILE[23]={P[] "XXX",E 0} +ERR_FILE[24]={P[] "XXX",E 0} +ERR_FILE[25]={P[] "XXX",E 0} +ERR_FILE[26]={P[] "XXX",E 0} +ERR_FILE[27]={P[] "XXX",E 0} +ERR_FILE[28]={P[] "XXX",E 0} +ERR_FILE[29]={P[] "XXX",E 0} +ERR_FILE[30]={P[] "XXX",E 0} +ERR_FILE[31]={P[] "XXX",E 0} +ERR_FILE[32]={P[] "XXX",E 0} +ERR_FILE[33]={P[] "XXX",E 0} +ERR_FILE[34]={P[] "XXX",E 0} +ERR_FILE[35]={P[] "XXX",E 0} +ERR_FILE[36]={P[] "XXX",E 0} +ERR_FILE[37]={P[] "XXX",E 0} +ERR_FILE[38]={P[] "XXX",E 0} +ERR_FILE[39]={P[] "XXX",E 0} +ERR_FILE[40]={P[] "XXX",E 0} +ERR_FILE[41]={P[] "XXX",E 0} +ERR_FILE[42]={P[] "XXX",E 0} +ERR_FILE[43]={P[] "XXX",E 0} +ERR_FILE[44]={P[] "XXX",E 0} +ERR_FILE[45]={P[] "XXX",E 0} +ERR_FILE[46]={P[] "XXX",E 0} +ERR_FILE[47]={P[] "XXX",E 0} +ERR_FILE[48]={P[] "XXX",E 0} +ERR_FILE[49]={P[] "XXX",E 0} +ERR_FILE[50]={P[] "XXX",E 0} +ERR_FILE[51]={P[] "XXX",E 0} +ERR_FILE[52]={P[] "XXX",E 0} +ERR_FILE[53]={P[] "XXX",E 0} +ERR_FILE[54]={P[] "XXX",E 0} +ERR_FILE[55]={P[] "XXX",E 0} +ERR_FILE[56]={P[] "XXX",E 0} +ERR_FILE[57]={P[] "XXX",E 0} +ERR_FILE[58]={P[] "XXX",E 0} +ERR_FILE[59]={P[] "XXX",E 0} +ERR_FILE[60]={P[] "XXX",E 0} +ERR_FILE[61]={P[] "XXX",E 0} +ERR_FILE[62]={P[] "XXX",E 0} +ERR_FILE[63]={P[] "XXX",E 0} +ERR_FILE[64]={P[] "XXX",E 0} +ENDDAT diff --git a/KUKA/KRC/R1/TP/p00.src b/KUKA/KRC/R1/TP/p00.src new file mode 100644 index 0000000..45503ee --- /dev/null +++ b/KUKA/KRC/R1/TP/p00.src @@ -0,0 +1,452 @@ +&ACCESS R1 +&COMMENT EXTERNAL package +DEF P00 (COMMAND :IN,PGNO_FUNCT :IN,P_ID[] :OUT,E_NO :IN ) + DECL P00_COMMAND COMMAND + DECL FUNCT_TYPE PGNO_FUNCT + DECL CHAR P_ID[] + E6AXIS AK_AXIS + REAL AX_DIST + INT E_NO + SWITCH COMMAND + CASE #INIT_EXT + INIT_EXT ( ) + CASE #EXT_PGNO + EXT_PGNO (PGNO_FUNCT ) + CASE #CHK_HOME + CHK_HOME ( ) + CASE #EXT_ERR + EXT_ERR (P_ID[],E_NO ) + ENDSWITCH +END + + +DEF INIT_EXT ( ) + ;******************************** + ; Function: initializing of the + ; external interface + ;******************************** + BOOL ERROR + INT N + PGNO_ERROR=0 + ;******************************** + ;CHECK HOME + ;******************************** + + ;******************************** + ;INIT PGNO_REQ UND APPL_RUN + ;******************************** + IF (PGNO_REQ>0) THEN + $OUT[PGNO_REQ]=FALSE + ENDIF + IF (PGNO_REQ<0) THEN + $OUT[-PGNO_REQ]=TRUE + ENDIF + IF (APPL_RUN>0) THEN + $OUT[APPL_RUN]=FALSE + ENDIF + IF PLC_ENABLE AND (ERR_TO_PLC>0) THEN + $OUT[ERR_TO_PLC]=FALSE + ENDIF + IF REFLECT_PROG_NR==1 THEN + FOR N=0 TO PGNO_LENGTH-1 + $OUT[PGNO_FBIT_REFL+N]=FALSE + ENDFOR + ENDIF + ;******************* + REPEAT + ;*********************************************************** + ERROR=FALSE + REPEAT + IF ($I_O_ACTCONF==FALSE) THEN + ERROR=TRUE + MsgQuit("OperatorModeWrong", "P00") + ENDIF + UNTIL ($I_O_ACTCONF==TRUE) + SWITCH PGNO_TYPE + ;********************************************************* + CASE 1,2 ;bci-coding,bcd-coding + ;********************************************************* + ;***** CHECK PGNO_LENGTH ***** + IF (PGNO_LENGTH<1) THEN + ERROR=TRUE ;pgno_length + MsgQuit("PgNo_LengthRangeWrong", "P00") + ENDIF + IF (PGNO_TYPE==1) THEN ;bci-coding + IF (PGNO_LENGTH>16) THEN + ERROR=TRUE ;pgno_length + MsgQuit("PgNo_LengthRangeWrong", "P00") + ENDIF + ENDIF + IF (PGNO_TYPE==2) THEN ;bcd-coding + SWITCH PGNO_LENGTH + CASE 4,8,12,16 + DEFAULT + ERROR=TRUE ;pgno_length + MsgQuit("PgNo_LengthWrong", "P00") + ENDSWITCH + ENDIF + ;***** CHECK PGNO_FBIT ***** + IF (PGNO_FBIT<1) THEN + ERROR=TRUE ;pgno_fbit + MsgQuit("PgNo_FBitWrong", "P00") + ENDIF + ;***** CHECK PGNO_REQ ***** + IF (PGNO_REQ==0) THEN + ERROR=TRUE ;pgno_req + MsgQuit("PgNo_ReqWrong", "P00") + ENDIF + IF (PGNO_REQ>0) THEN ;active high + $OUT[PGNO_REQ]=FALSE ;reset + WAIT SEC 0.2 ;delay for plc + ENDIF + IF (PGNO_REQ<0) THEN ;active low + $OUT[PGNO_REQ*(-1)]=TRUE ;reset + WAIT SEC 0.2 ;delay for plc + ENDIF + ;********************************************************* + CASE 3 ;one out of n + ;********************************************************* + ;***** CHECK PGNO_LENGTH ***** + IF (PGNO_LENGTH<1) THEN + ERROR=TRUE ;pgno_length + MsgQuit("PgNo_LengthRangeWrong", "P00") + ENDIF + IF (PGNO_LENGTH>16) THEN + ERROR=TRUE ;pgno_length + MsgQuit("PgNo_LengthRangeWrong", "P00") + ENDIF + ;***** CHECK PGNO_FBIT ***** + IF (PGNO_FBIT<1) THEN + ERROR=TRUE ;pgno_fbit + MsgQuit("PgNo_FBitWrong", "P00") + ENDIF + + ;********************************************************* + DEFAULT ;PGNO_TYPE wrong type + ;********************************************************* + ERROR=TRUE ;pgno_type + MsgQuit ("PgNo_TypeWrong", "P00") + ENDSWITCH + ;*********************************************************** + UNTIL (ERROR==FALSE) +END + + +DEF EXT_PGNO (FUNCT :OUT ) + ;******************************** + ; Function: communication program + ; for external mode + ;******************************** + DECL FUNCT_TYPE FUNCT + INT I,J,K,L,M,N,nHandle + BOOL P_RECV,P_CALC,bRes + J=1 + K=0 + L=1 + P_RECV=FALSE + P_CALC=FALSE + IF (APPL_RUN>0) THEN + $OUT[APPL_RUN]=FALSE + ENDIF + SWITCH FUNCT + ;******************* + CASE #PGNO_ACKN + ;******************* + IF (PGNO_REQ>0) THEN + $OUT[PGNO_REQ]=FALSE + ENDIF + IF (PGNO_REQ<0) THEN + $OUT[PGNO_REQ*(-1)]=TRUE + ENDIF + IF (APPL_RUN>0) THEN + $OUT[APPL_RUN]=TRUE + ENDIF + ;******************* + CASE #PGNO_GET + ;******************* + IF REFLECT_PROG_NR==1 THEN + FOR N=0 TO PGNO_LENGTH-1 + $OUT[PGNO_FBIT_REFL+N]=FALSE + ENDFOR + ENDIF + SWITCH PGNO_TYPE + ;******************* + CASE 1,2 + ;******************* + IF (PGNO_VALID>0) THEN + WAIT FOR $IN[PGNO_VALID]==FALSE + ENDIF + IF (PGNO_VALID==0) THEN + WAIT FOR $EXT_START==FALSE + ENDIF + IF (PGNO_VALID<0) THEN + WAIT FOR $IN[PGNO_VALID*(-1)]==TRUE + ENDIF + IF (PGNO_REQ>0) THEN + $OUT[PGNO_REQ]=TRUE + ENDIF + IF (PGNO_REQ<0) THEN + $OUT[PGNO_REQ*(-1)]=FALSE + ENDIF + IF (PGNO_VALID>0) THEN + MsgState(nHandle, "Wait for PGNO_VALID=True", "P00") + REPEAT + IF REFLECT_PROG_NR==1 THEN + FOR I=0 TO PGNO_LENGTH-1 + IF $IN[PGNO_FBIT+I]==TRUE THEN + $OUT[PGNO_FBIT_REFL+I]=TRUE + ELSE + $OUT[PGNO_FBIT_REFL+I]=FALSE + ENDIF + ENDFOR + ENDIF + UNTIL $IN[PGNO_VALID]==TRUE + bRes=Clear_KrlMsg (nHandle) + ENDIF + IF (PGNO_VALID==0) THEN + MsgState(nHandle, "Wait for $EXT_START=True", "P00") + REPEAT + IF REFLECT_PROG_NR==1 THEN + FOR I=0 TO PGNO_LENGTH-1 + IF $IN[PGNO_FBIT+I]==TRUE THEN + $OUT[PGNO_FBIT_REFL+I]=TRUE + ELSE + $OUT[PGNO_FBIT_REFL+I]=FALSE + ENDIF + ENDFOR + ENDIF + UNTIL $EXT_START==TRUE + bRes=Clear_KrlMsg (nHandle) + ENDIF + IF (PGNO_VALID<0) THEN + MsgState(nHandle, "Wait for PGNO_VALID=False", "P00") + REPEAT + IF REFLECT_PROG_NR==1 THEN + FOR I=0 TO PGNO_LENGTH-1 + IF $IN[PGNO_FBIT+I]==TRUE THEN + $OUT[PGNO_FBIT_REFL+I]=TRUE + ELSE + $OUT[PGNO_FBIT_REFL+I]=FALSE + ENDIF + ENDFOR + ENDIF + UNTIL $IN[PGNO_VALID*(-1)]==FALSE + bRes=Clear_KrlMsg (nHandle) + ENDIF + PGNO=0 + SWITCH PGNO_TYPE + ;******************* + CASE 1 + ;******************* + FOR I=0 TO PGNO_LENGTH-1 + IF $IN[PGNO_FBIT+I] THEN + IF REFLECT_PROG_NR==1 THEN + $OUT[PGNO_FBIT_REFL+I]=TRUE + ENDIF + PGNO=PGNO+J + ENDIF + J=J*2 + ENDFOR + ;******************* + CASE 2 + ;******************* + FOR I=0 TO PGNO_LENGTH-1 STEP 4 + N=0 + J=1 + FOR M=I TO I+3 + IF $IN[PGNO_FBIT+M] THEN + N=N+J + IF REFLECT_PROG_NR==1 THEN + $OUT[PGNO_FBIT_REFL+M]=TRUE + ENDIF + ENDIF + J=J*2 + ENDFOR + IF (N>9) THEN + PGNO_ERROR=2 + PGNO=0 + EXIT + ELSE + PGNO=PGNO+N*L + L=L*10 + ENDIF + ENDFOR + ENDSWITCH + IF (PGNO_ERROR<>2) THEN + IF (PGNO_PARITY>0) THEN + P_RECV=$IN[PGNO_PARITY] + FOR I=0 TO PGNO_LENGTH-1 + P_CALC=P_CALC EXOR $IN[PGNO_FBIT+I] + ENDFOR + IF (P_RECV<>P_CALC) THEN + PGNO=0 + PGNO_ERROR=1 + ELSE + PGNO_ERROR=0 + ENDIF + ENDIF + IF (PGNO_PARITY<0) THEN + P_RECV=$IN[PGNO_PARITY*(-1)] + FOR I=0 TO PGNO_LENGTH-1 + P_CALC=P_CALC EXOR $IN[PGNO_FBIT+I] + ENDFOR + IF (P_RECV<> NOT (P_CALC)) THEN + PGNO=0 + PGNO_ERROR=1 + ELSE + PGNO_ERROR=0 + ENDIF + ENDIF + ENDIF + ;******************* + CASE 3 + ;******************* + IF PGNO>0 THEN + WAIT FOR $IN[PGNO_FBIT+PGNO-1]==FALSE + ENDIF + K=0 + REPEAT + FOR I=0 TO PGNO_LENGTH-1 + IF $IN[PGNO_FBIT+I] THEN + IF K==0 THEN + K=I+1 + ELSE + PGNO_ERROR=0 + K=0 + ENDIF + ENDIF + ENDFOR + UNTIL ((K<>0) OR (PGNO_ERROR==0)) + PGNO=K + ENDSWITCH + ;*********************************************************** + CASE #PGNO_FAULT + ;*********************************************************** + IF PGNO_ERROR==1 THEN + MsgQuit("ParityFault", "P00", PGNO) + ENDIF + IF PGNO_ERROR==2 THEN + MsgQuit("BCDCodeError", "P00", PGNO) + ENDIF + IF PGNO_ERROR==0 THEN + IF (PGNO_TYPE==3) THEN + MsgQuit("ProgNumberWrong", "P00") + ELSE + MsgQuit("ProgramNotAvailable", "P00", PGNO) + ENDIF + ENDIF + PGNO_ERROR=0 + IF (PGNO_REQ>0) THEN + $OUT[PGNO_REQ]=FALSE + ENDIF + IF (PGNO_REQ<0) THEN + $OUT[PGNO_REQ*(-1)]=TRUE + ENDIF + WAIT SEC 0.5 + ENDSWITCH +END + + +DEF CHK_HOME ( ) + BOOL H + + IF ($I_O_ACTCONF==TRUE) THEN + REPEAT + H=TRUE + IF ($IN_HOME==FALSE) THEN + H=FALSE + REPEAT + MsgQuit("MoveHomeInT1", "P00") + IF (($MODE_OP==#T1) OR ($MODE_OP==#T2)) THEN + RETURN + ENDIF + HALT + UNTIL $IN_HOME==TRUE + ELSE + H=TRUE + ENDIF + UNTIL ((H==TRUE) OR ($I_O_ACTCONF==FALSE)) + ENDIF +END + + +DEF EXT_ERR (P_ID :OUT, E_NO :IN ) + ;****************************** + ;Function : ext. error messages + ; for package P00 + ;****************************** + CHAR P_ID[] + INT E_NO,M + ;********* MODUL-/FEHLER-NUMMER AUSWERTEN ******** + I=1 + FOUND=FALSE + IF (E_NO==0) THEN + IF PLC_ENABLE THEN + ERR=0 + WAIT SEC 0.2 + IF (ERR_TO_PLC >0) THEN + $OUT[ERR_TO_PLC]=FALSE + WAIT SEC 0.2 + ENDIF + ENDIF + ELSE + IF PLC_ENABLE THEN + FOUND=FALSE + ;****************************** + ; APPLIKATIONS-FEHLER AUSWERTEN + ;****************************** + I=1 + REPEAT + IF (E_NO==P[I].ERR) THEN + IF (P_ID[1]==P[I].PKG[1]) THEN + IF (P_ID[2]==P[I].PKG[2]) THEN + IF (P_ID[3]==P[I].PKG[3]) THEN + FOUND=TRUE + ERR=P[I].OUT + F_WRITE ( ) + ENDIF + ENDIF + ENDIF + ENDIF + I=I+1 + UNTIL (I>MAXERR_A) OR FOUND + ;*************************** + ; $STOPMESS-FEHLER AUSWERTEN + ;*************************** + I=128 + IF (P_ID[1]=="C") THEN + IF (P_ID[2]=="T") THEN + IF (P_ID[3]=="L") THEN + M=MBX_REC(1,MLD) + IF M==0 THEN + REPEAT + IF (MLD.MESSNO==P[I].ERR) THEN + FOUND=TRUE + ERR=P[I].OUT + F_WRITE ( ) + ENDIF + I=I+1 + UNTIL (I>MAXERR_C+128-1) OR FOUND + ENDIF + ENDIF + ENDIF + ENDIF + IF (ERR_TO_PLC >0) THEN + $OUT[ERR_TO_PLC]=TRUE + ENDIF + ENDIF + ENDIF +END + + +DEF F_WRITE ( ) + IF (F_NO>64) THEN + F_NO=1 + ENDIF + ERR_FILE[F_NO].P[1]=P[I].PKG[1] + ERR_FILE[F_NO].P[2]=P[I].PKG[2] + ERR_FILE[F_NO].P[3]=P[I].PKG[3] + ERR_FILE[F_NO].E=P[I].ERR + F_NO=F_NO+1 +END + diff --git a/KUKA/KRC/R1/cell.src b/KUKA/KRC/R1/cell.src new file mode 100644 index 0000000..d489b2a --- /dev/null +++ b/KUKA/KRC/R1/cell.src @@ -0,0 +1,55 @@ +&ACCESS RVO +&COMMENT HANDLER on external automatic +DEF CELL ( ) + ;EXT EXAMPLE1 ( ) + ;EXT EXAMPLE2 ( ) + ;EXT EXAMPLE3 ( ) + + ;FOLD INIT + DECL CHAR DMY[3] + DMY[]="---" + ;ENDFOLD (INIT) + ;FOLD BASISTECH INI + GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) + INTERRUPT ON 3 + BAS (#INITMOV,0 ) + ;ENDFOLD (BASISTECH INI) + ;FOLD CHECK HOME + $H_POS=XHOME + IF CHECK_HOME==TRUE THEN + P00 (#CHK_HOME,#PGNO_GET,DMY[],0 ) ;Testing Home-Position + ENDIF + ;ENDFOLD (CHECK HOME) + ;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT + $H_POS=XHOME + PDAT_ACT=PDEFAULT + BAS (#PTP_DAT ) + FDAT_ACT=FHOME + BAS (#FRAMES ) + BAS (#VEL_PTP,100 ) + PTP XHOME + ;ENDFOLD + ;FOLD AUTOEXT INI + P00 (#INIT_EXT,#PGNO_GET,DMY[],0 ) ; Initialize extern mode + ;ENDFOLD (AUTOEXT INI) + LOOP + P00 (#EXT_PGNO,#PGNO_GET,DMY[],0 ) + SWITCH PGNO ; Select with Programnumber + + CASE 1 + P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request + ;EXAMPLE1 ( ) ; Call User-Program + + CASE 2 + P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request + ;EXAMPLE2 ( ) ; Call User-Program + + CASE 3 + P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request + ;EXAMPLE3 ( ) ; Call User-Program + + DEFAULT + P00 (#EXT_PGNO,#PGNO_FAULT,DMY[],0 ) + ENDSWITCH + ENDLOOP +END diff --git a/KUKA/KRC/STEU/$config.dat b/KUKA/KRC/STEU/$config.dat new file mode 100644 index 0000000..de20b1b --- /dev/null +++ b/KUKA/KRC/STEU/$config.dat @@ -0,0 +1,4 @@ +&ACCESS RV$1 +DEFDAT $CONFIG + +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/STEU/Mada/$custom.dat b/KUKA/KRC/STEU/Mada/$custom.dat new file mode 100644 index 0000000..223e3f8 --- /dev/null +++ b/KUKA/KRC/STEU/Mada/$custom.dat @@ -0,0 +1,650 @@ +&ACCESS RV$ +&PARAM VERSION = 1.0.0 +DEFDAT $CUSTOM PUBLIC +DECL SPREADSTARTPOLICY $SPREADSTARTPOLICY=#DEFAULT_BCO ;Zu nutzende Regel beim Verteilen des Start-Kommandos im RoboTeam +CHAR $V_CUSTOM[32] +$V_CUSTOM[]="V1.0.0/KUKA8.7" ;VERSIONSKENNUNG +BOOL $SR_VEL_RED=TRUE ;TRUE: Overrideregelung des SafeRobot fuer Geschwindigkeitsgrenzen im Grundsystem aktiviert +BOOL $BRAKE_ON_SBH=TRUE ;TRUE: Je nach anliegenden SBH werden entweder alle Bremsen sofort geschlossen bzw. nur diejenigen die zur Achsgruppe gehoeren +BOOL $NO_MOVEMENT_ON_SBH=TRUE ;Bewegungsstart nicht moeglich bei SBH +BOOL $SR_WORKSPACE_RED=TRUE ;TRUE: Overrideregelung des SafeRobot fuer Ueberwachungsraeume im Grundsystem aktiviert +BOOL $TOOL_DIRECTION_LIN_CIRC=FALSE ;TRUE $TOOL_DIRECTION-Wert wird fuer Drehen und Schwenken und die TTS-Berechnung bei LIN- und CIRC-Bewegungen verwendet +INT $SR_OV_RED=75 ;Reduzierungsfaktor der SafeRobot Overrideregelung zu Geschwindigkeitsgrenzen [10-95] +DECL MOTION_MODE $DEFAULT_MOTION_MODE=#STANDARD ; Mit $DEFAULT_MOTION_MODE wird der default MotionMode angegeben +BOOL $COLL_ENABLECAV=FALSE ;Enable/Disable Collision Avoidance +REAL $COLL_DISTANCE_MAN[16] ;Distance tolerances when jogging manually or when no program running +$COLL_DISTANCE_MAN[1]=0.0 ; +$COLL_DISTANCE_MAN[2]=0.0 ; +$COLL_DISTANCE_MAN[3]=0.0 ; +$COLL_DISTANCE_MAN[4]=0.0 ; +$COLL_DISTANCE_MAN[5]=0.0 ; +$COLL_DISTANCE_MAN[6]=0.0 ; +$COLL_DISTANCE_MAN[7]=0.0 ; +$COLL_DISTANCE_MAN[8]=0.0 ; +$COLL_DISTANCE_MAN[9]=0.0 ; +$COLL_DISTANCE_MAN[10]=0.0 ; +$COLL_DISTANCE_MAN[11]=0.0 ; +$COLL_DISTANCE_MAN[12]=0.0 ; +$COLL_DISTANCE_MAN[13]=0.0 ; +$COLL_DISTANCE_MAN[14]=0.0 ; +$COLL_DISTANCE_MAN[15]=0.0 ; +$COLL_DISTANCE_MAN[16]=0.0 ; +REAL $COLL_DISTANCE_PROG[16] ;Distance tolerance when program is selected +BOOL $WORKSPACERESTOREACTIVE=FALSE ; Fuer Aktivierung der Arbeitsbereich Zustand-Wiederherstellung +DECL AXIS_OF_COORDINATES $TOOL_DIRECTION=#X ;Werkzeugstossrichtung fuer neue CP-Bewegungen (Spline) +DECL AXIS_OF_COORDINATES $BASE_ALIGN=#Z ;Achse des Base um Werkzeug auszurichten +DECL SPLINE_PARA_VARIANT $SPTP_EXAX_PARA[6] ;Parametrisierungsart einer Zusatzachse beim PTP-Spline +$SPTP_EXAX_PARA[1]=#DEFAULT_PARA +$SPTP_EXAX_PARA[2]=#DEFAULT_PARA +$SPTP_EXAX_PARA[3]=#DEFAULT_PARA +$SPTP_EXAX_PARA[4]=#DEFAULT_PARA +$SPTP_EXAX_PARA[5]=#DEFAULT_PARA +$SPTP_EXAX_PARA[6]=#DEFAULT_PARA +DECL STRIKE_OUT_COMPONENTS $MAX_ABS_STRIKE_OUT={ORIENTATION 20.0000,ROT_EXT_AXES 20.0000,LIN_EXT_AXES 100.000} ;maximaler Wert der ABSOLUTE-Komponenten von $STRIKE_OUT_DEFAULT oder $STRIKE_OUT +DECL STRIKE_OUT_STRUC $STRIKE_OUT_DEFAULT={MODE #ON,ABSOLUTE {ORIENTATION 7.50000,ROT_EXT_AXES 7.50000,LIN_EXT_AXES 50.0000},RELATIVE {ORIENTATION 40.0000,ROT_EXT_AXES 40.0000,LIN_EXT_AXES 40.0000}} ;Standardkonfiguration der Ausholstrategie fuer SPL-Segmente im Spline-Block +DECL PRO_IO_T $PRO_I_O_SYS={MODULE[] "/R1/SPS()",COLD_BOOT_RUN #ON} +DECL PRO_IO_T $PRO_I_O_PROC_ID3={MODULE[] " ",COLD_BOOT_RUN #ON} +DECL PRO_IO_T $PRO_I_O_PROC_ID4={MODULE[] " ",COLD_BOOT_RUN #ON} +DECL PRO_IO_T $PRO_I_O_PROC_ID5={MODULE[] " ",COLD_BOOT_RUN #ON} +DECL PRO_IO_T $PRO_I_O_PROC_ID6={MODULE[] " ",COLD_BOOT_RUN #ON} +DECL PRO_IO_T $PRO_I_O_PROC_ID7={MODULE[] " ",COLD_BOOT_RUN #ON} +DECL PRO_IO_T $PRO_I_O_PROC_ID8={MODULE[] " ",COLD_BOOT_RUN #ON} +DECL PRO_IO_T $PRO_I_O_PROC_ID9={MODULE[] " ",COLD_BOOT_RUN #ON} +DECL SER $PSER_1={PROTO 1,PROC 0,RCO 5,BL 0,BAUD 19200,NOC 8,NOS 1,PARITY 2,TRC 1,FLP 0,LLP 0,RT 300,PT 5,DSR 0,WCCXON 0,VXON 0,VXOFF 0,WEOBC 0,VEOBC 0} ;SCHNITTSTELLE 1 +DECL SER $PSER_2={PROTO 0,PROC 3,RCO 0,BL 0,BAUD 9600,NOC 7,NOS 2,PARITY 2,TRC 0,FLP 1,LLP 60,RT 0,PT 0,DSR 0,WCCXON 0,VXON 11,VXOFF 13,WEOBC 1,VEOBC 3} ;SCHNITTSTELLE 2 +DECL SER $PSER_3={PROTO 0,PROC 3,RCO 0,BL 0,BAUD 9600,NOC 7,NOS 2,PARITY 2,TRC 0,FLP 1,LLP 60,RT 0,PT 0,DSR 0,WCCXON 0,VXON 11,VXOFF 13,WEOBC 1,VEOBC 3} ;SCHNITTSTELLE 2 +DECL SER $PSER_4={PROTO 0,PROC 3,RCO 0,BL 0,BAUD 9600,NOC 7,NOS 2,PARITY 2,TRC 0,FLP 1,LLP 60,RT 0,PT 0,DSR 0,WCCXON 0,VXON 11,VXOFF 13,WEOBC 1,VEOBC 3} ;SCHNITTSTELLE 2 +DECL SER $PPG={PROTO 2,PROC 4,BAUD 9600} ;PG-SCHNITTSTELLE +DECL EXT_MOD_T $EXT_MOD_1={O_FILE[] " ",OPTION 'B0000'} ;ext. Modul Informationen +DECL EXT_MOD_T $EXT_MOD_2={O_FILE[] " ",OPTION 'B0000'} ;ext. Modul Informationen +DECL EXT_MOD_T $EXT_MOD_3={O_FILE[] " ",OPTION 'B0000'} ;ext. Modul Informationen +DECL EXT_MOD_T $EXT_MOD_4={O_FILE[] " ",OPTION 'B0000'} ;ext. Modul Informationen +CHANNEL :SER_1 :SER_1 $PSER_1 +CHANNEL :SER_2 :SER_2 $PSER_2 +CHANNEL :SER_3 :SER_3 $PSER_3 +CHANNEL :SER_4 :SER_4 $PSER_4 +CHANNEL :PG :SER_1 $PPG +CHANNEL :LD_EXT_OBJ1 :LD_EXT_OBJ1 $EXT_MOD_1 ;external module 1 +CHANNEL :LD_EXT_OBJ2 :LD_EXT_OBJ2 $EXT_MOD_2 ;external module 2 +CHANNEL :LD_EXT_FCT1 :LD_EXT_FCT1 $EXT_MOD_3 ;external module 3 +CHANNEL :LD_EXT_FCT2 :LD_EXT_FCT2 $EXT_MOD_4 ;external module 4 +INT $IBUS_ON=0 ;EINSCHALTEN ALTERNATIVER INTERBUSGRUPPEN +INT $EDIT_MODE=0 ;KOMMUNIKATION TP - XEDIT +INT $IBUS_OFF=0 ;ABSCHALTEN ALTERNATIVER INTERBUSGRUPPEN +DECL BOX $WORKSPACE[8] ;UEBERWACHT ARBEITSRAEUME +$WORKSPACE[1]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,X1 0.0,Y1 0.0,Z1 0.0,X2 0.0,Y2 0.0,Z2 0.0,MODE #OFF} +$WORKSPACE[2]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,X1 0.0,Y1 0.0,Z1 0.0,X2 0.0,Y2 0.0,Z2 0.0,MODE #OFF} +$WORKSPACE[3]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,X1 0.0,Y1 0.0,Z1 0.0,X2 0.0,Y2 0.0,Z2 0.0,MODE #OFF} +$WORKSPACE[4]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,X1 0.0,Y1 0.0,Z1 0.0,X2 0.0,Y2 0.0,Z2 0.0,MODE #OFF} +$WORKSPACE[5]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,X1 0.0,Y1 0.0,Z1 0.0,X2 0.0,Y2 0.0,Z2 0.0,MODE #OFF} +$WORKSPACE[6]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,X1 0.0,Y1 0.0,Z1 0.0,X2 0.0,Y2 0.0,Z2 0.0,MODE #OFF} +$WORKSPACE[7]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,X1 0.0,Y1 0.0,Z1 0.0,X2 0.0,Y2 0.0,Z2 0.0,MODE #OFF} +$WORKSPACE[8]={X 0.0,Y 0.0,Z 0.0,A 0.0,B 0.0,C 0.0,X1 0.0,Y1 0.0,Z1 0.0,X2 0.0,Y2 0.0,Z2 0.0,MODE #OFF} +BOOL $ABS_CONVERT=FALSE ;KONVERTIERUNG DER PUNKTKOORDINATEN +BOOL $DEACTIVATE_ABS_ACCUR=FALSE +REAL $NEARPATHTOL=200.000 ;TOLERANZ FUER DIE ABWEICHUNG VON $POS_RET +INT $ASYNC_MODE='B0000' ;MODE FUER ASYNCHRONE ZUSATZACHSEN +INT $TECH_FUNC='B0000' ;BITS ZUM AKTIVIEREN EINZELNER FUNKTIONEN DES FUNKTIONSGENERATORS +BOOL $IMPROVED_COLLMON=TRUE ;Schalter Verbesserte Kollisionserkennung +INT $COLLMON_STARTUP_MAX=200 ;maximale Abschaltzeit [ms] der Kollisionserkennung am Bewegungsstart (unbeschraenkt falls <=0) +INT $COLLMON_TOL_PRO_DEF[12] ;Verbesserte Kollisionserkennung: Default-Sensibilitaetseinstellung Programm +$COLLMON_TOL_PRO_DEF[1]=0 ;Achse 1 +$COLLMON_TOL_PRO_DEF[2]=0 ;Achse 2 +$COLLMON_TOL_PRO_DEF[3]=0 ;Achse 3 +$COLLMON_TOL_PRO_DEF[4]=0 ;Achse 4 +$COLLMON_TOL_PRO_DEF[5]=0 ;Achse 5 +$COLLMON_TOL_PRO_DEF[6]=0 ;Achse 6 +$COLLMON_TOL_PRO_DEF[7]=0 ;Achse 7 +$COLLMON_TOL_PRO_DEF[8]=0 ;Achse 8 +$COLLMON_TOL_PRO_DEF[9]=0 ;Achse 9 +$COLLMON_TOL_PRO_DEF[10]=0 ;Achse 10 +$COLLMON_TOL_PRO_DEF[11]=0 ;Achse 11 +$COLLMON_TOL_PRO_DEF[12]=0 ;Achse 12 +INT $COLLMON_TOL_COM_DEF[12] ;Verbesserte Kollisionserkennung: Default-Sensibilitaetseinstellung Kommando +$COLLMON_TOL_COM_DEF[1]=0 ;Achse 1 +$COLLMON_TOL_COM_DEF[2]=0 ;Achse 2 +$COLLMON_TOL_COM_DEF[3]=0 ;Achse 3 +$COLLMON_TOL_COM_DEF[4]=0 ;Achse 4 +$COLLMON_TOL_COM_DEF[5]=0 ;Achse 5 +$COLLMON_TOL_COM_DEF[6]=0 ;Achse 6 +$COLLMON_TOL_COM_DEF[7]=0 ;Achse 7 +$COLLMON_TOL_COM_DEF[8]=0 ;Achse 8 +$COLLMON_TOL_COM_DEF[9]=0 ;Achse 9 +$COLLMON_TOL_COM_DEF[10]=0 ;Achse 10 +$COLLMON_TOL_COM_DEF[11]=0 ;Achse 11 +$COLLMON_TOL_COM_DEF[12]=0 ;Achse 12 +INT $TORQMON_DEF[12] ;DEFAULTWERTE FUER DEN MOMENTENUEBERWACHUNGSSCHLAUCH IM PROGRAMMBETRIEB [%] +$TORQMON_DEF[1]=0 ;ACHSE 1 +$TORQMON_DEF[2]=0 ;ACHSE 2 +$TORQMON_DEF[3]=0 ;ACHSE 3 +$TORQMON_DEF[4]=0 ;ACHSE 4 +$TORQMON_DEF[5]=0 ;ACHSE 5 +$TORQMON_DEF[6]=0 ;ACHSE 6 +$TORQMON_DEF[7]=0 ;ACHSE 7 +$TORQMON_DEF[8]=0 ;ACHSE 8 +$TORQMON_DEF[9]=0 ;ACHSE 9 +$TORQMON_DEF[10]=0 ;ACHSE 10 +$TORQMON_DEF[11]=0 ;ACHSE 11 +$TORQMON_DEF[12]=0 ;ACHSE 12 +INT $TORQMON_COM_DEF[12] ;DEFAULTWERTE FUER DEN MOMENTENUEBERWACHUNGSSCHLAUCH IM KOMMANDOBETRIEB [%] +$TORQMON_COM_DEF[1]=0 ;ACHSE 1 +$TORQMON_COM_DEF[2]=0 ;ACHSE 2 +$TORQMON_COM_DEF[3]=0 ;ACHSE 3 +$TORQMON_COM_DEF[4]=0 ;ACHSE 4 +$TORQMON_COM_DEF[5]=0 ;ACHSE 5 +$TORQMON_COM_DEF[6]=0 ;ACHSE 6 +$TORQMON_COM_DEF[7]=0 +$TORQMON_COM_DEF[8]=0 +$TORQMON_COM_DEF[9]=0 +$TORQMON_COM_DEF[10]=0 +$TORQMON_COM_DEF[11]=0 +$TORQMON_COM_DEF[12]=0 +REAL $TORQMON_TIME=0.0120000 ;ZEIT [MS], NACH DER DIE FAHRMOMENTUEBERWACHUNG ZUSCHLAEGT +FRAME $SINGUL_ERR_PRO={A 0.0,B 0.0,C 0.0} ;MAX. ORIENTIERUNGSFEHLER PROGRAMMVERFAHREN +FRAME $SINGUL_ERR_JOG={A 5.00000,B 5.00000,C 5.00000} ;MAX. ORIENTIERUNGSFEHLER HANDVERFAHREN +DECL TARGET_STATUS $TARGET_STATUS=#SOURCE +BOOL $RED_T1_OV_CP=FALSE ;BEHANDLUNG VON CP_BAHNEN IN T1 (FALSE=GESCHW.-REDUZ. AUF $VEL_CP_T1, TRUE=OVERRIDE-REDUZIERUNG UM $RED_T1) +DECL CP_VEL_TYPE $CP_VEL_TYPE=#VAR_T1 ;RED. DER CP-GESCHW. BEI UEBERSCHREITUNG DER ACHSGRENZWERTE (#VAR_T1 : NUR IM T1-Betrieb, #VAR_ALL : IMMER, #VAR_ALL_MODEL: modellbasierte Achsgrenzwerte im Programmbetrieb und T2,AUT,EXT) +DECL CP_STATMON $CP_STATMON=#NONE ;variable fuer die CP Konfigurationsueberwachung +REAL $KCP_POS=0.0 ;STELLUNG DES KCP BZGL. DES ROBOTERS ( WINDROSE ) +BOOL $TECH_ANA_FLT_OFF[6] ;ZYKL. ANALOGAUSGABE DES TECHVALS GEFILTERT (FALSE)/UNGEFILTERT (TRUE) AUSGEBEN +$TECH_ANA_FLT_OFF[1]=FALSE +$TECH_ANA_FLT_OFF[2]=FALSE +$TECH_ANA_FLT_OFF[3]=FALSE +$TECH_ANA_FLT_OFF[4]=FALSE +$TECH_ANA_FLT_OFF[5]=FALSE +$TECH_ANA_FLT_OFF[6]=FALSE +CHAR $WORKSPACE_NAME1[24] +$WORKSPACE_NAME1[]="WORKSPACE 1" +CHAR $WORKSPACE_NAME2[24] +$WORKSPACE_NAME2[]="WORKSPACE 2" +CHAR $WORKSPACE_NAME3[24] +$WORKSPACE_NAME3[]="WORKSPACE 3" +CHAR $WORKSPACE_NAME4[24] +$WORKSPACE_NAME4[]="WORKSPACE 4" +CHAR $WORKSPACE_NAME5[24] +$WORKSPACE_NAME5[]="WORKSPACE 5" +CHAR $WORKSPACE_NAME6[24] +$WORKSPACE_NAME6[]="WORKSPACE 6" +CHAR $WORKSPACE_NAME7[24] +$WORKSPACE_NAME7[]="WORKSPACE 7" +CHAR $WORKSPACE_NAME8[24] +$WORKSPACE_NAME8[]="WORKSPACE 8" +DECL COOP_KRC $COOP_KRC[16] ;POTENTIAL REMOTE ROBOTS +$COOP_KRC[1]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[2]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[3]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[4]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[5]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[6]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[7]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[8]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[9]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[10]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[11]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[12]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[13]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[14]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[15]={IP_ADDR[] " ",NAME[] " "} +$COOP_KRC[16]={IP_ADDR[] " ",NAME[] " "} +DECL WS_CONFIG $WS_CONFIG[32] ;WORKSPACE CONFIGURATION FOR WORKSPACE SHARING +$WS_CONFIG[1]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[2]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[3]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[4]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[5]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[6]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[7]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[8]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[9]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[10]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[11]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[12]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[13]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[14]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[15]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[16]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[17]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[18]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[19]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[20]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[21]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[22]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[23]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[24]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[25]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[26]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[27]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[28]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[29]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[30]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[31]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +$WS_CONFIG[32]={COOP_KRC 0,WS_NAME[] " ",WS_PRIO 0} +INT $COUNT_I[160] ;COUNTER +$COUNT_I[1]=0 +$COUNT_I[2]=0 +$COUNT_I[3]=0 +$COUNT_I[4]=0 +$COUNT_I[5]=0 +$COUNT_I[6]=0 +$COUNT_I[7]=0 +$COUNT_I[8]=0 +$COUNT_I[9]=0 +$COUNT_I[10]=0 +$COUNT_I[11]=0 +$COUNT_I[12]=0 +$COUNT_I[13]=0 +$COUNT_I[14]=0 +$COUNT_I[15]=0 +$COUNT_I[16]=0 +$COUNT_I[17]=0 +$COUNT_I[18]=0 +$COUNT_I[19]=0 +$COUNT_I[20]=0 +$COUNT_I[21]=0 +$COUNT_I[22]=0 +$COUNT_I[23]=0 +$COUNT_I[24]=0 +$COUNT_I[25]=0 +$COUNT_I[26]=0 +$COUNT_I[27]=0 +$COUNT_I[28]=0 +$COUNT_I[29]=0 +$COUNT_I[30]=0 +$COUNT_I[31]=0 +$COUNT_I[32]=0 +$COUNT_I[33]=0 +$COUNT_I[34]=0 +$COUNT_I[35]=0 +$COUNT_I[36]=0 +$COUNT_I[37]=0 +$COUNT_I[38]=0 +$COUNT_I[39]=0 +$COUNT_I[40]=0 +$COUNT_I[41]=0 +$COUNT_I[42]=0 +$COUNT_I[43]=0 +$COUNT_I[44]=0 +$COUNT_I[45]=0 +$COUNT_I[46]=0 +$COUNT_I[47]=0 +$COUNT_I[48]=0 +$COUNT_I[49]=0 +$COUNT_I[50]=0 +$COUNT_I[51]=0 +$COUNT_I[52]=0 +$COUNT_I[53]=0 +$COUNT_I[54]=0 +$COUNT_I[55]=0 +$COUNT_I[56]=0 +$COUNT_I[57]=0 +$COUNT_I[58]=0 +$COUNT_I[59]=0 +$COUNT_I[60]=0 +$COUNT_I[61]=0 +$COUNT_I[62]=0 +$COUNT_I[63]=0 +$COUNT_I[64]=0 +$COUNT_I[65]=0 +$COUNT_I[66]=0 +$COUNT_I[67]=0 +$COUNT_I[68]=0 +$COUNT_I[69]=0 +$COUNT_I[70]=0 +$COUNT_I[71]=0 +$COUNT_I[72]=0 +$COUNT_I[73]=0 +$COUNT_I[74]=0 +$COUNT_I[75]=0 +$COUNT_I[76]=0 +$COUNT_I[77]=0 +$COUNT_I[78]=0 +$COUNT_I[79]=0 +$COUNT_I[80]=0 +$COUNT_I[81]=0 +$COUNT_I[82]=0 +$COUNT_I[83]=0 +$COUNT_I[84]=0 +$COUNT_I[85]=0 +$COUNT_I[86]=0 +$COUNT_I[87]=0 +$COUNT_I[88]=0 +$COUNT_I[89]=0 +$COUNT_I[90]=0 +$COUNT_I[91]=0 +$COUNT_I[92]=0 +$COUNT_I[93]=0 +$COUNT_I[94]=0 +$COUNT_I[95]=0 +$COUNT_I[96]=0 +$COUNT_I[97]=0 +$COUNT_I[98]=0 +$COUNT_I[99]=0 +$COUNT_I[100]=0 +$COUNT_I[101]=0 +$COUNT_I[102]=0 +$COUNT_I[103]=0 +$COUNT_I[104]=0 +$COUNT_I[105]=0 +$COUNT_I[106]=0 +$COUNT_I[107]=0 +$COUNT_I[108]=0 +$COUNT_I[109]=0 +$COUNT_I[110]=0 +$COUNT_I[111]=0 +$COUNT_I[112]=0 +$COUNT_I[113]=0 +$COUNT_I[114]=0 +$COUNT_I[115]=0 +$COUNT_I[116]=0 +$COUNT_I[117]=0 +$COUNT_I[118]=0 +$COUNT_I[119]=0 +$COUNT_I[120]=0 +$COUNT_I[121]=0 +$COUNT_I[122]=0 +$COUNT_I[123]=0 +$COUNT_I[124]=0 +$COUNT_I[125]=0 +$COUNT_I[126]=0 +$COUNT_I[127]=0 +$COUNT_I[128]=0 +$COUNT_I[129]=0 +$COUNT_I[130]=0 +$COUNT_I[131]=0 +$COUNT_I[132]=0 +$COUNT_I[133]=0 +$COUNT_I[134]=0 +$COUNT_I[135]=0 +$COUNT_I[136]=0 +$COUNT_I[137]=0 +$COUNT_I[138]=0 +$COUNT_I[139]=0 +$COUNT_I[140]=0 +$COUNT_I[141]=0 +$COUNT_I[142]=0 +$COUNT_I[143]=0 +$COUNT_I[144]=0 +$COUNT_I[145]=0 +$COUNT_I[146]=0 +$COUNT_I[147]=0 +$COUNT_I[148]=0 +$COUNT_I[149]=0 +$COUNT_I[150]=0 +$COUNT_I[151]=0 +$COUNT_I[152]=0 +$COUNT_I[153]=0 +$COUNT_I[154]=0 +$COUNT_I[155]=0 +$COUNT_I[156]=0 +$COUNT_I[157]=0 +$COUNT_I[158]=0 +$COUNT_I[159]=0 +$COUNT_I[160]=0 +DECL BIN_TYPE $BIN_OUT[64] ;Binary Output configuration +$BIN_OUT[1]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[2]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[3]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[4]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[5]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[6]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[7]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[8]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[9]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[10]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[11]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[12]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[13]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[14]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[15]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[16]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[17]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[18]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[19]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[20]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[21]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[22]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[23]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[24]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[25]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[26]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[27]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[28]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[29]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[30]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[31]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[32]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[33]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[34]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[35]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[36]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[37]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[38]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[39]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[40]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[41]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[42]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[43]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[44]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[45]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[46]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[47]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[48]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[49]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[50]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[51]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[52]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[53]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[54]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[55]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[56]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[57]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[58]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[59]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[60]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[61]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[62]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[63]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_OUT[64]={F_BIT 1,LEN 0,PARITY #NONE} +DECL BIN_TYPE $BIN_IN[64] ;Binary Output configuration +$BIN_IN[1]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[2]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[3]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[4]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[5]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[6]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[7]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[8]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[9]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[10]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[11]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[12]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[13]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[14]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[15]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[16]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[17]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[18]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[19]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[20]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[21]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[22]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[23]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[24]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[25]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[26]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[27]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[28]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[29]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[30]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[31]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[32]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[33]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[34]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[35]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[36]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[37]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[38]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[39]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[40]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[41]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[42]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[43]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[44]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[45]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[46]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[47]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[48]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[49]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[50]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[51]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[52]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[53]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[54]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[55]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[56]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[57]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[58]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[59]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[60]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[61]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[62]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[63]={F_BIT 1,LEN 0,PARITY #NONE} +$BIN_IN[64]={F_BIT 1,LEN 0,PARITY #NONE} +INT $SYNCCMD_SIM=0 ;Simulation aller ProgSync und MotionSync Befehle fuer eine def. Steuerung +INT $SYNCLINESELECTMASK=0 ;erzwingt eine synchrone Statzanwahl auf Remote-Steuerung +INT $SPREADACTION=0 ;kennzeichnet die angegebenen Steuerungen als Verbund +BOOL $COLL_AVOID=FALSE ; COLL_AVOID +DECL COOP_UPDATE_T $COOP_UPDATE ;Kommunikation zwische WCD und TPBASIS +INT $TP_COOP_UPDATE=0 ;Kommunikation zwische CellMap und TPBASIS +INT $TP_WS_UPDATE=0 ;Kommunikation zwische workspace sharing und TPBASIS +DECL LDC_REACTION $LDC_CONFIG[128] ;Konfiguration der Lastdatenpruefung +$LDC_CONFIG[1]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[2]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[3]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[4]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[5]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[6]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[7]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[8]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[9]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[10]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[11]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[12]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[13]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[14]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[15]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[16]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[17]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[18]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[19]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[20]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[21]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[22]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[23]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[24]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[25]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[26]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[27]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[28]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[29]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[30]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[31]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[32]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[33]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[34]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[35]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[36]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[37]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[38]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[39]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[40]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[41]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[42]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[43]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[44]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[45]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[46]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[47]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[48]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[49]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[50]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[51]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[52]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[53]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[54]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[55]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[56]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[57]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[58]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[59]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[60]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[61]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[62]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[63]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[64]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[65]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[66]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[67]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[68]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[69]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[70]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[71]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[72]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[73]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[74]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[75]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[76]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[77]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[78]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[79]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[80]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[81]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[82]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[83]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[84]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[85]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[86]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[87]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[88]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[89]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[90]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[91]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[92]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[93]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[94]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[95]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[96]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[97]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[98]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[99]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[100]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[101]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[102]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[103]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[104]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[105]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[106]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[107]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[108]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[109]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[110]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[111]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[112]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[113]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[114]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[115]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[116]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[117]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[118]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[119]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[120]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[121]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[122]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[123]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[124]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[125]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[126]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[127]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +$LDC_CONFIG[128]={UNDERLOAD #WARNONLY,OVERLOAD #STOPROBOT} +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/STEU/Mada/$machine.dat b/KUKA/KRC/STEU/Mada/$machine.dat new file mode 100644 index 0000000..d25857a --- /dev/null +++ b/KUKA/KRC/STEU/Mada/$machine.dat @@ -0,0 +1,103 @@ +&ACCESS RV$ +&REL 3 +&PARAM VERSION = 1.0.0 +DEFDAT $MACHINE PUBLIC +SIGNAL $CRIT_PERI_ACK_REQ $IN[1026] ;Schalter zur Konfiguration der Bewegung kritischer Peripherie +SIGNAL $CRIT_PERI_ACK FALSE +CHAR $V_STEUMADA[32] +$V_STEUMADA[]="V1.0.0/KUKA8.3" ;VERSIONSKENNUNG +SIGNAL $MASTERINGTEST_REQ_EXT $IN[1026] ;TRUE = Referenzfahrt angefordert (extern) +SIGNAL $BRAKETEST_REQ_EX $IN[1026] ;TRUE = Bremsentest soll gestartet werden +SIGNAL $BRAKETEST_MONTIME FALSE +SIGNAL $MAINTENANCE_TO_PLC FALSE +SIGNAL $DRIVE_STOP_NOT_REQ $IN[1025] ;FALSE = Drehzahlstopp Anforderung +SIGNAL $BRAKETEST_REQ_INT FALSE +SIGNAL $BRAKETEST_WORK FALSE +SIGNAL $BRAKES_OK FALSE +SIGNAL $BRAKETEST_WARN FALSE +DECL EMSTOP_PATH $EMSTOP_PATH={T1 #ON,T2 #ON,AUT #ON,EX #ON} ;PROJEKTIERUNG DES BAHNTREUEN NOT-AUS FUER T1,T2,AUT,EX +SIGNAL $EXT_START $IN[3] ;EXTERNER START +SIGNAL $MOVE_ENABLE $IN[4] ;FAHRFREIGABE GESAMT +SIGNAL $RC_RDY1 $OUT[17] ;RC-BETRIEBSBEREIT 1 +SIGNAL $SPOC_MOTION_ENABLE $OUT[1015] ; FAHRFREIGABE DURCH SAFETY CONTROLLER +SIGNAL $ALARM_STOP $OUT[1] ;NOT-STOP +SIGNAL $T1 $OUT[10] ;BETRIEBSART T1 +SIGNAL $T2 $OUT[11] ;BETRIEBSART T2 +SIGNAL $AUT $OUT[12] ;BETRIEBSART AUTOMATIK +SIGNAL $I_O_ACTCONF $OUT[18] ;E/A-SCHNITTSTELLE AKTIV QUITTUNG +SIGNAL $MODE_AUTO FALSE +SIGNAL $MODE_TEST FALSE +SIGNAL $LOCAL_NETWORK_OK FALSE +SIGNAL $COMPLETE_NETWORK_OK FALSE +SIGNAL $EXT $OUT[13] ;BETRIEBSART EXTERN +SIGNAL $STOPMESS $OUT[4] ;STOP-MELDUNG +SIGNAL $CONF_MESS $IN[5] ;EXTERNE QUITTUNG +SIGNAL $USER_SAF $OUT[2] +SIGNAL $PERI_RDY $OUT[3] +SIGNAL $IN_HOME $OUT[8] ;ROB IN HOMEPOSITION +SIGNAL $IN_HOME1 FALSE +SIGNAL $IN_HOME2 FALSE +SIGNAL $IN_HOME3 FALSE +SIGNAL $IN_HOME4 FALSE +SIGNAL $IN_HOME5 FALSE +SIGNAL $DRIVES_ON $IN[7] ;ANTRIEBE EIN +SIGNAL $DRIVES_OFF $IN[6] ;ANTRIEBE ENABLE +SIGNAL $ON_PATH $OUT[9] ;ROB AUF BAHN +SIGNAL $PR_MODE $OUT[21] ;HAND/PROGRAMMIERMODUS +SIGNAL $SS_MODE $OUT[22] ;HAND/SINGLE-STEP +SIGNAL $ALARM_STOP_INTERN $OUT[1002] ;NOT-STOP INTERN +SIGNAL $WORKSTATE1 FALSE +SIGNAL $WORKSTATE2 FALSE +SIGNAL $WORKSTATE3 FALSE +SIGNAL $WORKSTATE4 FALSE +SIGNAL $WORKSTATE5 FALSE +SIGNAL $WORKSTATE6 FALSE +SIGNAL $WORKSTATE7 FALSE +SIGNAL $WORKSTATE8 FALSE +SIGNAL $CYLWORKSTATE1 FALSE +SIGNAL $CYLWORKSTATE2 FALSE +SIGNAL $CYLWORKSTATE3 FALSE +SIGNAL $CYLWORKSTATE4 FALSE +SIGNAL $CYLWORKSTATE5 FALSE +SIGNAL $CYLWORKSTATE6 FALSE +SIGNAL $CYLWORKSTATE7 FALSE +SIGNAL $CYLWORKSTATE8 FALSE +SIGNAL $AXWORKSTATE1 FALSE +SIGNAL $AXWORKSTATE2 FALSE +SIGNAL $AXWORKSTATE3 FALSE +SIGNAL $AXWORKSTATE4 FALSE +SIGNAL $AXWORKSTATE5 FALSE +SIGNAL $AXWORKSTATE6 FALSE +SIGNAL $AXWORKSTATE7 FALSE +SIGNAL $AXWORKSTATE8 FALSE +SIGNAL $DELTAWORKSTATE FALSE +SIGNAL $ASYNC_AX1_P $IN[1026] +SIGNAL $ASYNC_AX2_P $IN[1026] +SIGNAL $ASYNC_AX3_P $IN[1026] +SIGNAL $ASYNC_AX4_P $IN[1026] +SIGNAL $ASYNC_AX5_P $IN[1026] +SIGNAL $ASYNC_AX6_P $IN[1026] +SIGNAL $ASYNC_AX1_M $IN[1026] +SIGNAL $ASYNC_AX2_M $IN[1026] +SIGNAL $ASYNC_AX3_M $IN[1026] +SIGNAL $ASYNC_AX4_M $IN[1026] +SIGNAL $ASYNC_AX5_M $IN[1026] +SIGNAL $ASYNC_AX6_M $IN[1026] +SIGNAL $ZUST_ASYNC $IN[1026] +SIGNAL $NEAR_POSRET $OUT[14] ;ROBOTER IN TOLERANZFENSTER +SIGNAL $COLLISION FALSE +SIGNAL $COLLISION_STOP FALSE +SIGNAL $I_O_ACT $IN[1025] ;E/A-SCHNITTSTELLE AKTIV +SIGNAL $SAFEGATE_OP $IN[1025] ;SAFETY GATE ON PATH STOP +SIGNAL $MOVE_ENA_ACK FALSE +SIGNAL $COLL_ALARM FALSE +SIGNAL $COLL_ENABLE FALSE +SIGNAL $IMM_STOP $IN[1025] ;NOT-AUS VON DER SPS +SIGNAL $AUX_POWER $IN[1026] ;EXTERNE SPANNUNGSVERSORGUNG AKTIV +SIGNAL $T2_ENABLE $IN[1025] ;SAFETY-SPEED +REAL $FAN_FOLLOW_UP_TIME=5.00000 ;NACHLAUFZEIT FUER DIE FAN-ANSTEUERUNG +SIGNAL $ROB_STOPPED $OUT[1023] ;ROBOTER STEHT +SIGNAL $ROB_CAL $OUT[1001] ;ROBOTER SYNCHRON +SIGNAL $PRO_ACT $OUT[5] ;PROZESS AKTIV +SIGNAL $PRO_MOVE $OUT[1022] ;PROGRAMMBEWEGUNG AKTIV +ENDDAT \ No newline at end of file diff --git a/KUKA/KRC/STEU/Mada/$option.dat b/KUKA/KRC/STEU/Mada/$option.dat new file mode 100644 index 0000000..0ec9dc0 --- /dev/null +++ b/KUKA/KRC/STEU/Mada/$option.dat @@ -0,0 +1,29 @@ +&ACCESS RV$ +&PARAM VERSION = 1.0.0 +DEFDAT $OPTION PUBLIC +CHAR $V_OPTION[32] +$V_OPTION[]="V1.0.0/KUKA8.3" ;VERSIONSKENNUNG +BOOL $TECH_OPT=TRUE ;FUNKTIONSGENERATOR +BOOL $CONSIDER_DLIN_ENERGY=FALSE ;Energie bei DLIN-Planung beruecksichtigen +BOOL $TCP_IPO=TRUE ;GREIFERBEZOGENE INTERPOLATION +BOOL $SEP_ASYNC_OV=FALSE ;Schalter fuer asynchrone Hand-Overrides +BOOL $LOOP_CONT=FALSE +CHAR $LOOP_MSG[128] +BOOL $IDENT_OPT=TRUE +INT $SINGUL_STRATEGY=0 ;0=NONE, 1=APPROX +BOOL $MOT_STOP_OPT=FALSE ;AKTIVIERUNG "BLOCK EXTERNAL START" +BOOL $CHCK_MOVENA=TRUE ;AB-UND EINSCHALTEN DER UEBERPRUEFUNG DER EINGANGSNUMMER VON $MOVE_ENABLE +BOOL $COLLISAVOID=FALSE ; +BOOL $MOTIONCOOP=FALSE ; +BOOL $PROGCOOP=FALSE ; +BOOL $T2_OV_REDUCE=TRUE ;TRUE = Overridereduzierung auf 10 % in Mode T2 +BOOL $VAR_TCP_IPO=FALSE +BOOL $SPL_VEL_MODE_OPT=TRUE ; Defaulteinstellung fuer $SPL_VEL_MODE +INT $SPL_PTP_PARA_OPT=2 ; Defaulteinstellung fuer PTP-Spline Parametrisierung +BOOL $IMPROVEDMIXEDBLENDING=TRUE ; verbessertes gemischtes Ueberschleifen +BOOL $IMPROVEDSPLINEGEOMETRY=TRUE ;verbesserte Spline Geometrie +DECL STEP_ENUM $SPL_MIXEDBLENDING_OPT=#STEP2 ;Optimierungen des gemischten Ueberschleifens im Spline +DECL INSTALLED_MOTION_MODES $INSTALLED_MOTION_MODES={PATH FALSE,DYNAMIC FALSE,ECO FALSE} ;Motion modes are subject to charges! Do not set manually to true. +CHAR $MAX_XROB_VERS[32] ;Hoechste zu verwendende Version des XROB-Absolutgenauigkeitsmodells +$MAX_XROB_VERS[]="4.2" ;="Major.Minor" +ENDDAT \ No newline at end of file diff --git a/KUKA/Modifications.xml b/KUKA/Modifications.xml new file mode 100644 index 0000000..1776d46 --- /dev/null +++ b/KUKA/Modifications.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KUKA/actions.log b/KUKA/actions.log new file mode 100644 index 0000000..23359b8 --- /dev/null +++ b/KUKA/actions.log @@ -0,0 +1,53 @@ +Repository '810169497(PCRC-3HXLTUHYM6)', 'D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)' +==================================================================================================== + +2026-02-05 03:19:10.654 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\Mylib\CheckPosArea.src +2026-02-05 03:19:10.692 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\Mylib +2026-02-05 03:20:11.856 下午 | DELETED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\Mylib\CheckPosArea.src +2026-02-05 03:20:11.940 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\Mylib +2026-02-05 03:21:08.416 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:21:08.433 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:21:08.433 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:21:08.433 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:21:23.788 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:21:23.807 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:21:23.807 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:21:23.807 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:21:51.851 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\Config.dat +2026-02-05 03:21:51.863 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\Config.dat +2026-02-05 03:21:51.863 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\Config.dat +2026-02-05 03:21:51.863 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\Config.dat +2026-02-05 03:22:27.575 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\ActionReturn.src +2026-02-05 03:22:27.586 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\ActionReturn.src +2026-02-05 03:22:27.586 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\ActionReturn.src +2026-02-05 03:22:27.587 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\ActionReturn.src +2026-02-05 03:23:13.336 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:23:13.352 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:23:13.352 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:23:13.352 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt1Pick.src +2026-02-05 03:23:48.803 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt2Pick.src +2026-02-05 03:23:48.819 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt2Pick.src +2026-02-05 03:23:48.819 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt2Pick.src +2026-02-05 03:23:48.819 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\FeedBelt2Pick.src +2026-02-05 03:23:48.819 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\NgBeltPlace.src +2026-02-05 03:23:48.820 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\NgBeltPlace.src +2026-02-05 03:23:48.820 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\NgBeltPlace.src +2026-02-05 03:23:48.820 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\NgBeltPlace.src +2026-02-05 03:24:02.210 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\Pallet1Place.src +2026-02-05 03:24:02.226 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\Pallet1Place.src +2026-02-05 03:24:02.226 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\Pallet1Place.src +2026-02-05 03:24:02.227 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\Pallet1Place.src +2026-02-05 03:24:37.067 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\Pallet2Place.src +2026-02-05 03:24:37.082 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\Pallet2Place.src +2026-02-05 03:24:37.082 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\Pallet2Place.src +2026-02-05 03:24:37.082 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\Pallet2Place.src +2026-02-05 03:24:37.082 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\ReFeedBeltPick.src +2026-02-05 03:24:37.082 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\ReFeedBeltPick.src +2026-02-05 03:24:37.082 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\ReFeedBeltPick.src +2026-02-05 03:24:37.083 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\ReFeedBeltPick.src +2026-02-05 03:24:37.083 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\WaterBeltPick.src +2026-02-05 03:24:37.083 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\WaterBeltPick.src +2026-02-05 03:24:37.083 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\WaterBeltPick.src +2026-02-05 03:24:37.083 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\KRC\R1\Program\PL\WaterBeltPick.src +2026-02-05 03:25:29.120 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\Modifications.xml +2026-02-05 03:25:29.120 下午 | CHANGED | D:\系统文件\文档\WorkVisual 6.0\Repositories\810169497(PCRC-3HXLTUHYM6)\Modifications.xml