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