Hallo,
bin dabei ein Palettierprogramm zu schreiben. Kartons von einem Abnahmepunkt auf 3 Palettenplätze.
Für jede Palette gibt es eine Base und einen geteachten Punkt an der Ecke der Palette. Von diesem Punkt berechne ich alle Positionen des Palettiervorgangs.
VORPOS1 -> über der maximalen Palettierhöhe in Palettenmitte
VORPOS2 -> zwei Lagen über der Ziel-Lage
VORPOS3 -> eine Lage über der Ziel-Lage versetzt und gedreht
ZIELPOS ->
und wieder zurück
Wenn ich die Vorpositionen mit PTP Befehlen anfahre stoppt das Programm mit der Meldung "Unerreichbarer Punkt Achse..." oder er dreht mir die Achse 6 statt um +90° um -270° was für den Kabelschlepp nicht sehr gut ist.
Ich hab dann mal aus den PTP-Befehlen LIN-Befehle gemacht was zur Folge hatte, das alles bestens funktioniert. Leider geht die Taktzeit dabei zu stark in Keller.
Welche Möglichkeiten gibts, um berechnet Punkte mit PTP-Befehlen anzufahren?
Gruß Thomas
PS: Ein Mitarbeiter von der KUKA-Hotline meinte, ich solle das Ganze mit Baseverschiebung machen, dann könnte ich die Punkte teachen. Bin mit aber nicht sicher, ob das mein Problem löst. Ich müsst mich erst in das Thema einarbeiten, da ich damit keine Erfahrung haben und ich kann dann wahrscheinlich den grössten Teil meines Programms wegschmeisen.
;-------------------------------------------------------------------
; Teachposition ermitteln ermitteln
SWITCH p
CASE 1 ; PALETTIERPLATZ 1
TEACH_POS = XTEACHPOS1 ; Teachposition Platz 1
CASE 2 ; PALETTIERPLATZ 2
TEACH_POS = XTEACHPOS2 ; Teachposition Platz 2
CASE 3 ; PALETTIERPLATZ 3
TEACH_POS = XTEACHPOS3 ; Teachposition Platz 3
ENDSWITCH
; Tool 2 setzen: Greifer beladen
BAS(#TOOL, 2)
; Base ermitteln und setzen (11 - 13)
tBASE = p + 10
BAS(#BASE, tBASE)
; Ueberschleifkriterium
$APO.CDIS = 100.0
par_ptp(100, 100) ; Geschwindigkeit und Beschleunigung PTP
par_lin(2.0, 100) ; Geschwindigkeit und Beschleunigung LIN [m/s, %]
; Hoehe der Lage bestimmen
; [Lagennummer x Hoehe der Lage - Korrektur Messwerkzeug
LG_HOEHE = (PLZ[p].LG_NR) * PLZ[p].TEIL_GR.Z - 200.0
;Zielposition mit Orientierung Winkel A bestimmen
ZIEL_POS = ADD_POS(TEACH_POS, PLZ[p].TEIL_POS)
ZIEL_POS.Z = ZIEL_POS.Z + LG_HOEHE ; Zielposition lagenabhaengig
; Vorposition 3 ueber Palettenmitte
VOR_POS1 = TEACH_POS
VOR_POS1.X = VOR_POS1.X + 600 ; Laengsseite der Palette
VOR_POS1.Y = VOR_POS1.Y + 400 ; Querseite der Palette
VOR_POS1.Z = VOR_POS1.Z + 2400 ; max. Palettierhoehe + Sicherheitsabstand
;PTP VOR_POS1 C_PTP
LIN VOR_POS1 C_DIS
; Vorposition 2 ueber Zielposition + xxx
VOR_POS2 = TEACH_POS
VOR_POS2.X = VOR_POS2.X + PLZ[p].TEIL_POS.X
VOR_POS2.Y = VOR_POS2.Y + PLZ[p].TEIL_POS.Y
VOR_POS2.Z = VOR_POS2.Z + LG_HOEHE + 500;
;PTP VOR_POS2 C_PTP
LIN VOR_POS2 C_DIS
; Vorposition 3 abhaengig von Zielposition mit Versatz
VOR_POS3 = ZIEL_POS
VOR_POS3.X = VOR_POS3.X + PLZ[p].OFFSET.X
VOR_POS3.Y = VOR_POS3.Y + PLZ[p].OFFSET.Y
VOR_POS3.Z = VOR_POS3.Z + PLZ[p].TEIL_GR.Z + PLZ[p].OFFSET.Z
LIN VOR_POS3 C_DIS
LIN ZIEL_POS
vakuum_aus()
LIN_REL {Z 50.0} C_DIS
LIN VOR_POS2 C_DIS
PTP VOR_POS1
;-------------------------------------------------------------------
Alles anzeigen