Hallo
es geht um das Thema Felder.
ich habe ein ablegeprogramm erstellt .
Dafür habe ich ein 3dimensionalses Feld angelegt.
alle ablege sowie vorpositionen werden gut angefahren.
mich habe jetzt nur noch das Problem wenn man mal was korrigieren muss.
In der kuka Schulung wurde mir mal ein Trick gezeigt wo man in der datenliste die deklarierte Position hinschreibt am Ende { , } das hinzufügt.
wenn man nun die datenliste schließt und speichert dann stehen von allen Feldern die ablegepositionen drin.
kennt das jemand?
ich finde es gerade etwas mühselig 60 ablegepositionen Und vorpositionen manuell hinzuschreiben.
wie kann man soetwas automatisieren?
Code
XAblegen.x=43.26
XAblegen.y=147.28
XAblegen.z=-10.60
XAblegen.a=-0.59
XAblegen.b=28.96
XAblegen.c=-91.64
i_Abstand_LAGE_Z = 5.5 ;Lagehöhe in Z
i_Anzahl_LAGE_Z = 5 ;Anzahl der Lagen
i_Abstand_REIHE_X = 53.6 ;Abstand der Reihen
i_Anzahl_REIHE_X = 4 ;Anzahl der Reihen
i_Abstand_SPALTE_Y = 53.8 ;Abstand der Spalten
i_Anzahl_SPALTE_Y = 3 ;Anzahl der Spalten
IF ACT_LAGE_Z >i_Anzahl_LAGE_Z THEN
ACT_LAGE_Z = 1
ENDIF
IF ACT_REIHE_X >i_Anzahl_REIHE_X THEN
ACT_REIHE_X = 1
ENDIF
IF ACT_SPALTE_Y >i_Anzahl_SPALTE_Y THEN
ACT_SPALTE_Y = 1
ENDIF
;Positionsberechnung Ablegeposition
For REIHE_X = 1 to i_Anzahl_REIHE_X
For SPALTE_Y = 1 to i_Anzahl_SPALTE_Y
For LAGE_Z = 1 to i_Anzahl_LAGE_Z
Ablegen[REIHE_X,SPALTE_Y,LAGE_Z] = XAblegen
Ablegen[REIHE_X,SPALTE_Y,LAGE_Z].x = Ablegen[REIHE_X,SPALTE_Y,LAGE_Z].x +((REIHE_X- 1)*i_Abstand_REIHE_X)
Ablegen[REIHE_X,SPALTE_Y,LAGE_Z].y = Ablegen[REIHE_X,SPALTE_Y,LAGE_Z].y -((SPALTE_Y- 1)*i_Abstand_SPALTE_Y)
Ablegen[REIHE_X,SPALTE_Y,LAGE_Z].z = Ablegen[REIHE_X,SPALTE_Y,LAGE_Z].z +((LAGE_Z- 1)*i_Abstand_LAGE_Z)
Vorpos[REIHE_X,SPALTE_Y,LAGE_Z] = Ablegen[REIHE_X,SPALTE_Y,LAGE_Z]
Vorpos[REIHE_X,SPALTE_Y,LAGE_Z].z = Ablegen[REIHE_X,SPALTE_Y,LAGE_Z].z +50
endfor
endfor
endfor
;Ablegefolge im TRAY
;zuerst werden Pro Nest 5 Teile aufgestapelt
;dann in X richtung Weiter aufgestapelt
SWITCH i_Anzahl_0_GRAD
CASE 5
ACT_LAGE_Z = 1
ACT_REIHE_X = ACT_REIHE_X +1
CASE 10
ACT_LAGE_Z = 1
ACT_REIHE_X = ACT_REIHE_X +1
CASE 15
ACT_LAGE_Z = 1
ACT_REIHE_X = ACT_REIHE_X +1
CASE 20
ACT_LAGE_Z = 1
ACT_REIHE_X = 1
ACT_SPALTE_Y = ACT_SPALTE_Y +1
CASE 25
ACT_LAGE_Z = 1
ACT_REIHE_X = ACT_REIHE_X +1
CASE 30
ACT_LAGE_Z = 1
ACT_REIHE_X = ACT_REIHE_X +1
CASE 35
ACT_LAGE_Z = 1
ACT_REIHE_X = ACT_REIHE_X +1
CASE 40
ACT_LAGE_Z = 1
ACT_REIHE_X = 1
ACT_SPALTE_Y = ACT_SPALTE_Y +1
CASE 45
ACT_LAGE_Z = 1
ACT_REIHE_X = ACT_REIHE_X +1
CASE 50
ACT_LAGE_Z = 1
ACT_REIHE_X = ACT_REIHE_X +1
CASE 55
ACT_LAGE_Z = 1
ACT_REIHE_X = ACT_REIHE_X +1
CASE 60
ACT_LAGE_Z = 1
ACT_REIHE_X = 1
ACT_SPALTE_Y = 1
i_Anzahl_0_GRAD = 0
ENDSWITCH
Position anfahren
SLIN Vorpos[ACT_REIHE_X,ACT_SPALTE_Y,ACT_LAGE_Z] C_DIS
INTERRUPT OFF 100 ;Überwachung Ausschalten Vakuum
$VEL.CP = 0.05
;FOLD SYN OUT 108 'a_Vakuum 1 Ein (A41)' State=FALSE at END Delay=0 ms;%{PE}%R 8.5.19,%MKUKATPBASIS,%COUT,%VSYNOUT,%P 2:108, 3:a_Vakuum 1 Ein (A41), 5:FALSE, 7:1, 9:0, 12:0
TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[108]=FALSE
;ENDFOLD
SLIN Ablegen[ACT_REIHE_X,ACT_SPALTE_Y,ACT_LAGE_Z]
;FOLD SYN PULSE 112 'a_Blasen 1 Ein (A41)' State=TRUE Time=1 sec at START Delay=0 ms;%{PE}%R 8.5.19,%MKUKATPBASIS,%COUT,%VSYNPULSE,%P 2:112, 3:a_Blasen 1 Ein (A41), 5:TRUE, 7:1, 10:0, 12:0, 15:0
TRIGGER WHEN DISTANCE=0 DELAY=0 DO PULSE($OUT[112],TRUE,1)
;ENDFOLD
$VEL.CP = 0.1
SLIN Vorpos[ACT_REIHE_X,ACT_SPALTE_Y,ACT_LAGE_Z] C_DIS
ACT_LAGE_Z = ACT_LAGE_Z + 1 ;Aktuelles Teil drauf rechnen
i_Anzahl_0_GRAD = i_Anzahl_0_GRAD + 1 ;Anzahl Teile um eins erhöhen
Alles anzeigen