Step 7 Palettierfunktion

The_Coon

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich muss mit einem Portal (X Y) Teile in Paletten einlegen.
Da ich nicht jeden Punkt einzeln teachen und speichern will, würde ich gerne 3 Punkte der Palette teachen und den Rest berechnen lassen (wie eine pallet function bei einem Roboter).

Gibt es dafür bereits einen Baustein?
Oder kennt jemand die Formel zum berechnen der fehlenden Koordinaten dass ich mir selbst einen Baustein schreiben kann?

Vielen Dank im Voraus.

Gruß Michael
 
Punkt (X1,Y1): ist das erste Teil:
Punkt (X1, Ymax) größere Zeilenwert
Punkt (Xmax, Y1) größere Spaltenwert

Aus der Anzahl der Teile pro Spalte und der Zeile ergibt sich der Deltasprung pro Spalte und Zeile.
Nun einfach mittels zweier geschachtelter FOR TO Schleifen die Punkte auswählen und mit N-mal X-Delta bzw. Y-Delta beschreiben.
Dass mach man ganz einfach über eine Passwortgeschützte Taste auf der Visu die dann die Berechnungsfüktion startet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo ist denn das Problem?

Ich mache es immer so, egal ob Roboter, Portal, oder was auch immer.

Ein Referenzteil wird geteached.
Man gibt die Offsets an (Abstand in der Reihe, Abstand in der Spalte)
Man gibt an wie viele Reihen und Spalten es gibt

Wenn man jetzt in Reihe 3 Spalte 5 ist, rechnet man ganz einfach

Position_Reihe = (Referenz_Reihe * Reihe) - Referenz_Reihe

Für die Spalte das gleiche.

Mein Baustein ist mitlerweile 2 Jahre alt, und hat eine Versionsnummer >2 (ich gehe immer 0.1 Schritte)

Eine Palettierung ist schnell erstellt, Komfort kommt mit der Zeit.

Bei mir kann man Mittlerweile einzelne Reihen vorwählen, Die Abarbeitungsreihenfolge invertieren (er findet dann z.B. nicht Reihe 1 zuerst sondern z.B. Reihe 10). Man kann Plätze sperren, etc pp. Solch ein Palettierbaustein wächst mit seinen Aufgaben!

Grüße

Marcel
 
Danke für die Antworten,

so funktioniert es aber nur wenn das Portal und die Palette genau parallel zueinander ausgerichtet sind. Dann ist es klar kein Problem.
Mir geht es um die Berechnung der Punkte wenn es nicht genau zueinander ausgerichtet ist. Dann kann ich nicht einfach nur mit einem Offset rechnen, weil die Teile dann nicht sauber eingesetzt und vermackt werden.
 
Das war jetzt aber nicht so ganz ersichtlich.

Du könntest, wenn du wiederkehrende Muster hast, einfach für jedes der Muster eine Palettierung anlegen.
Somit hast du dann z.B. bei 3 Mustern 3 Palettierungen die "übereinander liegen".

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Besteht denn nicht die Möglichkeit eine Ausrichtung für die Palette zu bauen.
So etwas ließe sich doch mit zwei Zylindern realisieren. Das Pallette abfahren
finde ich äußerst unpraktisch.
 
Ohje was ist denn heute mit mir los.

Vergiss den Beitrag mit den mehreren Paletten.

Deine Palette sollte immer zum Portal ausgerichtet sein.

Beim Roboter ist das einfach, da "verbiegst" du die Base und gut ist. Bei nem Portal... eher schlecht.

Grüße

Marcel
 
so funktioniert es aber nur wenn das Portal und die Palette genau parallel zueinander ausgerichtet sind. Dann ist es klar kein Problem.

Ich wiederhole:
Punkt (X1,Y1): ist das erste Teil:
Punkt (Xn, Ymax) größere Zeilenwert
Punkt (Xmax, Yn) größere Spaltenwert

wenn sich X1 und Xn sowie Y1 und Yn nicht exakt jeweils in einer Reihe sind, dann musste dir auch diesen Mikrooffset merken und dann zum Zeilen/Spaltenversatz aufaddieren.
Genauso wird es bei einem Roboter auch gemacht, nur das sich das durch ein verdrehtes Tool-Koordinatensystem von selbst ergibt.
Absolut gerechnet ist das das Gleiche in grün. Natürlich kann der Mikrooffset auch negativ sein (z.B. -0,151mm) aber das sollte doch keine Problem sein ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich muss mit einem Portal (X Y) Teile in Paletten einlegen.
Da ich nicht jeden Punkt einzeln teachen und speichern will, würde ich gerne 3 Punkte der Palette teachen und den Rest berechnen lassen (wie eine pallet function bei einem Roboter).

Gibt es dafür bereits einen Baustein?
Oder kennt jemand die Formel zum berechnen der fehlenden Koordinaten dass ich mir selbst einen Baustein schreiben kann?

Vielen Dank im Voraus.

Gruß Michael

Vieleicht liege ich falsch ...
Aber wenn du schon 3 Punken TEACH-est kannst dir daraus die Ausrichtung ... von der SPS ausrechnen lassen (es sind einfache trigonometrische Funktionen also Rotationen und eine Translatorische Verschiebung) .
Wäre nicht besser 3 Positionsensoren einzubauen ....dannach kann die Pallete liegen wie es kommt ...TEACH-en wirst du wegen der Sensoren auch nicht mehr brauchen (...die kosten gar nicht so viel ).

Sonst würde ich TEACH-en , die Handlung wie für eine parallel liegende Palette programmieren , dannach die Ausgänge durch eine FC mit der Offsetberechnung laufen lassen bevor sie zu der AKTORIK sende ... ( Ausgänge überschreiben stört nicht weil am SPS-Rechnezyklusende nur die zuletzt gegebenen/gerechneten Werte der Ausgänge zu AKTORIK gesendet werden !)

PS: Die 3 Punkte wählst du so (wenn du es manuel machst) dass du auch ein "Nullpunkt" für den Koordinatensystem hast , also weist wo dein erster Palettenplatz ist ... ich schätze so würde gehen ...:confused:
Höffentlich hilft dass ein Bischen !

Hasst du nur Rotation Offset oder auch Translation ( ich meine kann die Palette nur rotiert "falsch" liegen oder auch verschoben...?)
Sorry ...durch TEACHEN ist die TRANSLATION ...unwichtig , das würdest du brauchen nur wenn du die 3 Sensoren einbaust !

Willst die Formel haben :confused: ?

X'rotiert = X cosA - Y sin A
Y'rotiert = X sinA + YcosA

Damit kannst dir die Offset FC schreiben (X' Y' wären dann FC Outputs , X Y FC Inputs ) !
 
Zuletzt bearbeitet:
Mit dem "3 Punken TEACH" speichert man die Lage der drei Kavitäten innerhalb der Palette und nicht die Lage der Palette absolut.
Ich habe bisher noch nie SIN und COS für meine Programmierungen benötigt. Auch in diesem Fall reichen einfache Schleifen und
sinnvolle Additionen um zum Ergebnis zu kommen. Nur sollte man selbst im Zeitalter von Google nicht immer auf das Silbertablett
starren und hoffen das da was erscheint. Mit dem POST #8 ist eigentlich alles gesagt.
 
Vergiss nicht :
-GOOGLE hilft nichts wenn man keine Ahnung hat !

:)

Roboter ( un von dennen war die Sprache!) ...machen es aber SO !
... mit LINIARE ALGEBRA (Matrix) und/oder QUATERNIONEN rechnung (sogar 3D ...also ROBOTER beladen von 3D Schiefligenden Palettenstapeln )
:ROFLMAO:

AHNUNG haben betdeutet ...nicht EXPERTE und nichtmal ERFAHREN zu sein ....Anfänger haben AHNUNG :)
 
Zuletzt bearbeitet:
Wenn die Teile irgendwie auf der X - Y Koordinate liegen wird die SPS es nur dann errechnen können, wen diese es irgendwie ermitteln kann.
Ich habe da ne Palette und weis aber nciht wie diese im Lader liegt, hielt da nicht viel!

Möglichkeit wäre ja, ein Sensor am Greifer anzubauen und dann die Lage zu vermessen und dies dann per Offset verrechnen.
Alternative, evtl. mit einem Zylinder die Palette indexieren?

Und die teuere Lösung, Kamerasystem welche jedes Teil erkennt und da den Mittelpunkt errechnet und die Verschiebungen dann errechnet und übergibt!
 
...

Und die teuere Lösung, Kamerasystem welche jedes Teil erkennt und da den Mittelpunkt errechnet und die Verschiebungen dann errechnet und übergibt!

Die wäre nicht TEUER wenn dadurch ein Arbeiter "erspart" wird (oder was von seinem Lohn) !:-(

Auf lange Sicht viele "teuere" Sachen sind BILLIG !

Jeden einzelne Palette TEACH-en ist auch keine Lösung n :D
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Es denke es liegt ein generelles Missverständnis vor!

Mit dem Drei-Punkte-Teachen teacht man jeweils MIT einem Teil im PalettiererGreifer die 3 genannten Kavitäten
und zwar so, das man das Teil saugend einsetzen und/oder wieder entnehmen kann.
Es soll ja auch Palettierer geben wo man nur Teile entnimmt, oder?

Zum Teachen verwendet man eine Masterpalette, wo man weiß das diese maßhaltig ist.

Alle anderen Paletten sind dann dieser Masterpalette anzupassen oder auszusortieren.
Wenn man mit den üblichen tiefgezogenen Plastikpaletten arbeitet, dann geht ohnehin nur
Verwenden oder Verwerfen.

Fälle, wo JEDE Palette anderes ist sind äußerst selten und nur bei einer sehr geringen Zahl von Paletten sinnvoll.
Dabei müsste dann auch jede Palette codiert sein. Jede Palette nach dem Einschleusen irgendwie vermessen zu
wollen scheitert fast immer an der Taktzeit des Palettierers. Daher ist oft Pfusch am Bau die Ursache dafür, das jede
Palette anderes ist. Vergesst solche Varianten lieber ganz schnell.
 
Daher ist oft Pfusch am Bau die Ursache dafür, das jede
Palette anderes ist. Vergesst solche Varianten lieber ganz schnell.

Dies kommt meist oder ja oft bei den Draht-Körben vor, welche ja geschweißt sind.
Hier gibts teils schwankungen im mm Bereich.
Aber bei Paletten, sollten die Fertigungstoleranzen (selbst nach DIN mittel) sich sehr in Grenzen halten.
Wenn die Palette nicht immer "sauber" anliegt, hilft meist eine Art von Index welche die Palette dann fixiert und in die richtige Position drückt!

Daher lassen sich die Position meist sehr gut berechnen.
Wir machen dies sehr oft und da reichen die 3 Koordinaten meist aus.
 
Danke erstmal für die Antworten.

Falls es Missverständnisse gibt erklär ich es nochmal genau.

Es ist eine Messmaschine, mit 12 verschieden Fehlermerkmalen. Die schlechten Teile werden aussortiert und mit dem Portal in 12 Draht-Körbchen(10x8 Plätze) je nach Fehlermerkmal eingelegt.
Ohne Berechnung müsste ich oder später der Bediener 960 Punkte teachen. Deswegen will ich pro Palette 3 Punkte teachen und die restlichen berechnen. Dann sind es nur 36 Teachpunkte.
Die Paletten liegen auf Zentrierstiften und sollten deshalb bis auf die Fertigungstoleranzen immer gleich liegen. Normalerweise muss man die Punkte deswegen nur einmal teachen, dann passt es solange bis es ein Crash gibt oder der Greifer gewechselt werden muss oder ähnliches.

Ich habe jetzt folgenden Baustein geschrieben, mit dem müsste es hoffentlich funktioniere. Das werde ich die Woche herausfinden.

Code:
FUNCTION V3_pal : vector_3
TITLE = 'V3_pal'
VERSION : '1.0'
AUTHOR  : MW
NAME    : V3_pal
FAMILY  : MATH_V3

VAR_INPUT
    A : Vector_3;
    B : Vector_3;
    C : Vector_3;
    X_Reihen : REAL;
    Y_Spalten : REAL;
    ZAHL : DINT;
END_VAR
VAR
    temp_xStep : vector_3;
    temp_yStep : vector_3;
    temp_pos : vector_3;
    temp_REIHE : DINT;
    temp_Spalte : DINT; 
    temp_REIHE2 : REAL;
    temp_Spalte2 : REAL; 
    temp_ZAHL : DINT; 
    temp_REIHEN : DINT;        
END_VAR

BEGIN
temp_REIHEN := REAL_TO_DINT(X_REIHEN);
temp_ZAHL := Zahl - 1;
temp_REIHE := temp_ZAHL MOD temp_REIHEN;
temp_SPALTE := temp_ZAHL / temp_REIHEN;
temp_REIHE2 := DINT_TO_REAL(temp_REIHE);
temp_SPALTE2 := DINT_TO_REAL(temp_SPALTE);

temp_xStep.X := (B.X - A.X) / (X_REIHEN -1.0);
temp_xStep.Y := (B.Y - A.Y) / (X_REIHEN -1.0);
temp_xStep.Z := (B.Z - A.Z) / (X_REIHEN -1.0);
temp_yStep.X := (C.X - A.X) / (Y_Spalten -1.0);
temp_yStep.Y := (C.Y - A.Y) / (Y_Spalten -1.0);
temp_yStep.Z := (C.Z - A.Z) / (Y_Spalten -1.0);

temp_pos.X := A.X + temp_REIHE2 * temp_xStep.X + temp_Spalte2 * temp_yStep.X;
temp_pos.Y := A.Y + temp_REIHE2 * temp_xStep.Y + temp_Spalte2 * temp_yStep.Y;
temp_pos.Z := A.Z + temp_REIHE2 * temp_xStep.Z + temp_Spalte2 * temp_yStep.Z;

V3_pal := temp_pos;

END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wie du so auf die jeweiligen Positionen kommen willst (also das Wissen, wo du hinwillst) erschließt sich mir nicht.
Ich würde bei deinem Projekt aber noch weiter gehen :
Wenn alle deine Ablagekörbe gleich groß sind dann kannst du dir auch nur das Raster eines Korbes "merken" und von allen anderen Körben jeweils nur eine (hier aber vorher festgelegte) Ecke.

Ich würde das einen FB managen lassen (vom programmieren her wäre hier auch SCL meine Wahl) und dem einfach nur vorgeben, welchen Korb er beschicken soll.
Die Position, wohin er zuletzt gelegt hat bzw. die, die als nächste dran ist würde ich in dem FB verwalten und von dem den jeweiligen Koordinatenblock ausgeben lassen.

Gruß
Larry
 
Code:
VAR_INPUT
    A : Vector_3;
    B : Vector_3;
    C : Vector_3;
    X_Reihen : REAL;
    Y_Spalten : REAL;
    ZAHL : DINT;
 ...
END_VAR

"A,B,C" sind die 3 TEACH Punkten ?
"Vektor_3" ist ein S7 Datentyp [array] zB : A(Xa,Ya,Za) ?
"X_Reihen : REAL" ist der Abstand zwischen 2 Plätze in X ?
"Y_Spalten : REAL" ist der Abstand zwischen 2 Plätze in Y ?
( so wie es geschrieben ist ist dann logisch Fehlerhaft , es würde nicht funktionieren )
...bin nur neugierig , will selbst ein Versuch machen .

Wofür brauchst du Operationen mit der Z Koordinate ( ist sie nicht gleich für alle Palletenplätze ?)
 
Zuletzt bearbeitet:
Zurück
Oben