TIA Palettierfunktion entwickeln ...

spirit

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

ich wollte gerne eine Syntax entwickeln, damit ich auf einer Palette 25 Lagerplätze (5 Reihen und 5 Spalten) mittels zwei Achsen (X,Y) ansteuern kann.

Um nicht jeden Punkt einzeln teachen und speichern zu müssen, gibt es doch sicher auch noch eine "einfachere" Möglichkeit, oder?

Ich hatte mir das so vorgestellt:

- Position 1 teachen
- Offset in X-Richtung ermitteln
- Offset in Y-Richtung ermitteln

Das Problem nun, wie packe ich das Ganze jetzt in eine Formel, um alle Lagerplätze nach Position 1 der Reihe nach anzusteuern?

Es müssten ja zunächst die nachfolgenden Spalten der Reihe 1, dann alle Spalten der Reihe 2, usw. abgearbeitet werden ...

Komme da auf keinen grünen Zweig; habt ihr evtl. einen Ansatz für mich? :confused:


Lieben Dank!
 
Hallo Spirit,
das macht man eigentlich so, das man die Positionen von mindestens 3 der Ecken einteacht und dann das Raster ausrechnet. Etwas genauer wird es noch, wenn man alle 4 Ecken einteacht weil man dann einen möglichen Raster-Teach-Fehler noch ein wenig rausrechnen kann.
Aufpassen : wenn deine Positionen nicht rechtwinklig zu den Achsen stehen dann mußt du den Winkel-Vektor noch mit einbeziehen - ich würde es von Anfang an so aufbauen ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich halte es seit Jahren so, dass ich ein Referenzteil habe X1 Y1 und dieses Teache. Über die Visu gebe ich die Offsetwerte der einzelnen Plätze an, und es wird dann entsprechend verrechnet. Die "Formel" dafür sollte relativ einfach durch kurzes Nachdenken herrauszufinden sein.

Grüße

Marcel
 
Also ich halte es seit Jahren so, dass ich ein Referenzteil habe X1 Y1 und dieses Teache. Über die Visu gebe ich die Offsetwerte der einzelnen Plätze an, und es wird dann entsprechend verrechnet. Die "Formel" dafür sollte relativ einfach durch kurzes Nachdenken herrauszufinden sein.

Grüße

Marcel

Danke euch schon mal ...

Ok - nun wegen der "Einfachheit" halber zunächst mal nur einen Teachpunkt (Steigerung wäre ja noch möglich ;)) angenommen:


Nun mal nur für die Spalten gesprochen; die Formel müsste hier ja jetzt von einem festen Teachpunkt (X-Wert an Pos. 1) ausgehen, zu dem dann immer der Offset addiert wird.


Für Spalte 3 beispielsweise hieße das dann, Teachpunkt + 2x Offset, usw.

Kann man (frau) das so machen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ganze haben wir in der NC immer berechnet.
Von daher kann man es natürlich auch in der SPS machen!


Also du hast Startposition (X und Y), dann Offset für X und für Y sowie Anzahl der Plätze in X und Y.
Dann noch Zähler für Platz-Nr. oder halt Teile-Nr. (hier könnte man sogar zwischen Rohteil und Fertigteil unterscheiden)

Dann wird einfach im Prinzip Reihen und Spalte berechent.
Wenn Du das dann hast, kannst die Position einfach errechnen.

Die Reihe berechnest dann mittels (jetzt gerade auf die schnelle aus dem Kopf):

Reihe = INT ((Teile-Zähler - 1) / Anzahl Plätze_in_Y) + 1
Y-Pos = Start_Y + (Reihe * Offset_Y)

Das selbe dann im Prinzip für die Spalte ...

Dann halt Abfangen wenn am Ende:
Wenn Teil > Anzahl_X * Anzahl_Y dann Teil = 1 ...
 
Zuletzt bearbeitet:
Die erste Position ist doch X1, Y1 und Z1.
Dann ist die zweite Position X1+OffsetX, Y1 und Z1.
Die dritte Position X1+2*OffsetX, Y1, Z1.
Wenn du dann die X Reihe voll hast, dann Ist die erste Position der zweiten Reihe X1, Y1+OffsetY, Z1.
Ist dann die erste Lage voll, beginnst du mit Z1 + OffsetZ.

So geht das durch alle Reihen und Lagen.

Hoffe es hilft.


bike
 
Die erste Position ist doch X1, Y1 und Z1.
Dann ist die zweite Position X1+OffsetX, Y1 und Z1.
Die dritte Position X1+2*OffsetX, Y1, Z1.
Wenn du dann die X Reihe voll hast, dann Ist die erste Position der zweiten Reihe X1, Y1+OffsetY, Z1.
Ist dann die erste Lage voll, beginnst du mit Z1 + OffsetZ.

So geht das durch alle Reihen und Lagen.

Hoffe es hilft.


bike

Sorry, ich verstehe es echt nicht!

Erste Position: X1, Y1

Zweite Position: X1 + OffsetX, Y1

Dritte Position: X1 + 2 x OffsetX, Y1

usw.

Soweit ist es schon klar - aber wie bringe ich diese Verhältnismäßigkeit mit jeder neuen Position in die SPS?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, ich verstehe es echt nicht!

Erste Position: X1, Y1

Zweite Position: X1 + OffsetX, Y1

Dritte Position: X1 + 2 x OffsetX, Y1

usw.

Soweit ist es schon klar - aber wie bringe ich diese Verhältnismäßigkeit mit jeder neuen Position in die SPS?

Schau Dir mal mein Vorschlag an, wie Du es berechnen könntest ... Musst Dir nur ein Schachbrett denken ...
Also Zeile und Spalte ...

Code:
01          X_Start = Teach_Pos_X
01          Y_Start = Teach_Pos_Y 
;
;                berechnen position in Y 
01             Reihe_Y = INT((Platz-Zähler - 1) / Anzahl_in_X) + 1
01             Y_Position = Y_Start + Reihe_Y * Y_Abstand - Y_Abstand
;
;                Pointer Teilezähler in X 
01             IF (Reihe_Y - 1) = 0 THEN 
01                Spalte = 1
01             ELSE 
01                Spalte = Platz-Zähler - ((Reihe_Y - 1) * Anzahl_in_X)) 
01             ENDIF
;
;                berechnen position in X 
01             X_Position = X_Start + (Spalte * X_Abstand - X_Abstand)


so soll es mal als Denkanstoss dienen ;)
In dieser Art, habe ich es zig mal in einem Lade-Portal im Einsatz ...
Jetzt am besten in SCL ins TIA bringen und es funktioniert ...
 
Zuletzt bearbeitet:
Sorry, ich verstehe es echt nicht!

Erste Position: X1, Y1

Zweite Position: X1 + OffsetX, Y1

Dritte Position: X1 + 2 x OffsetX, Y1

usw.

Soweit ist es schon klar - aber wie bringe ich diese Verhältnismäßigkeit mit jeder neuen Position in die SPS?


Also ein Beispiel:
X = 10; Y = 34; OffsetX = 25; OffsetY = 30;
Dies ist Position 1
Position 2:
X + OffsetX, Y; X = 10 + 25 , Y = 34;
Position 3:
X+ 2*Offset; Y; X = 10 + 2*25. Y = 34;
zweite Spalte:
X, Y+OffsetY; X = 10, Y = 34 + 30;

usw.

Alles klar?


bike
 
Schau Dir mal mein Vorschlag an, wie Du es berechnen könntest ... Musst Dir nur ein Schachbrett denken ...
Also Zeile und Spalte ...


X = Start_X + (( INT (Teile-Nr-1) / Anzahl_X) * Abstand_X )
Y = Start_Y + (( INT (Teile-Nr-1) / Anzahl_Y) * Abstand_Y )

mittels INT berechnest halt nur die Ganzzahl (ist jetzt nicht von Siemens gewesen deshalb) ...
Bei der Berechnung für X ist aber noch ein Bug drinnen, da muss ich mal noch nachschauen, daher soll es mal als Denkanstoss dienen ;)

Lieben Dank Boxy,

ok - also Formel stimmt noch nicht ganz.


Aber vom Verständnis her:

- Teile-Nr. bezeichnet das zu positionierende Teil, also fortschreitend 1, 2, 3, usw. ?

- Davon wird nun die Zahl 1 abgezogen und das Ergebnis durch die Anzahl der Spalten geteilt. Was genau macht hier INT - ist das ein Berechnungsfaktor?


Sorry für die dummen Fragen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ein Beispiel:
X = 10; Y = 34; OffsetX = 25; OffsetY = 30;
Dies ist Position 1
Position 2:
X + OffsetX, Y; X = 10 + 25 , Y = 34;
Position 3:
X+ 2*Offset; Y; X = 10 + 2*25. Y = 34;
zweite Spalte:
X, Y+OffsetY; X = 10, Y = 34 + 30;

usw.

Alles klar?


bike

Das war mir schon klar bike,

aber nicht wie man diese Formeln in die SPS bringen soll, wenn diese sich mit jeder Position ändern ...

Da müsste man doch dann eine "Bezugsformel" draus machen, oder etwa nicht? :confused:
 
Lieben Dank Boxy,

ok - also Formel stimmt noch nicht ganz.


Aber vom Verständnis her:

- Teile-Nr. bezeichnet das zu positionierende Teil, also fortschreitend 1, 2, 3, usw. ?

- Davon wird nun die Zahl 1 abgezogen und das Ergebnis durch die Anzahl der Spalten geteilt. Was genau macht hier INT - ist das ein Berechnungsfaktor?


Sorry für die dummen Fragen.

Ich habe den letzten Post noch überarbeitet, darum hier nochmals:


Schau Dir mal mein Vorschlag an, wie Du es berechnen könntest ... Musst Dir nur ein Schachbrett denken ...
Also Zeile und Spalte ...

Code:
01          X_Start = Teach_Pos_X
01          Y_Start = Teach_Pos_Y 
;
;                Berechnen der Position in Y 
01             Reihe_Y = INT((Platz_Zähler - 1) / Anzahl_in_X) + 1
01             Y_Position = Y_Start + Reihe_Y * Y_Abstand - Y_Abstand
;
;                Teilezähler in X für Splate aufbereiten 
01             IF (Reihe_Y - 1) = 0 THEN 
01                Spalte = Platz_Zähler            [COLOR=#ff0000](*hier war kleiner Fehler*)[/COLOR]
01             ELSE 
01                Spalte = (Platz_Zähler - ((Reihe_Y - 1) * Anzahl_in_X)) 
01             ENDIF
;
;                Berechnen der Position in X 
01             X_Position = X_Start + (Spalte * X_Abstand - X_Abstand)

Ja das INT ist einfach Wandlung in Integer, damit du mit Ganzzahl rechnest (hast ja keine Komma X Spalte oder Komma Y Reihe).
Im Prinzip müsste es sogar mit Modulo Berechnung gehen ...
Ursprung der Berechnung war innerhalb einer NC und diese war natürlich nicht von Siemens ...

Das mit dem -1 (und auch mit dem - Offset) kommt daher, das du den Offset immer erst in Reihe 2 oder bei Spalte 2,3,4,5 verrechnest!
Also Teil 1,6,11,16,21 beginnt ja immer bei X mit Teach-Position (Schachbrett Spalte A)

so soll es mal als Denkanstoss dienen :wink:
In dieser Art, habe ich es zig mal in einem Lade-Portal im Einsatz ...
Allerdings ist es da noch komplexer, da mehrer Paletten im Einsatz sind und dann noch Unertrschiedliche Offset's sowie versetzte Plätze möglich sind.
Daher habe ich es etwas zusammengekürzt. Sollte aber nix machen ;)

Jetzt am besten in SCL ins TIA bringen und es funktioniert ...

Wenn Du nun zwei Teilezähler nutzt also einen für Rohteil und einen für Fertigteil und den Aufruf der Berechnung mit Parameter machst, kannst Du somit z.B. sagen Fertigteil-Platz = Rohteil-Platz - 1.
Oder Du lässt beide Zähler untersch. laufen, dann könntest die Fertigteile ohne Lücken in der Palette wieder ablegen ...

Dadurch das es über die Formel geht, kannst du nun auch ganz einfach 10x10 oder 6x6 Paletten realisieren (nur Parameter) ...
Du siehst ja, es wird einfach nur die Spalte und die Zeile auf dem Schachbrett berechnet!

Am Ende kommt noch IF Teile-Nr. > Anzahl_X * Anzahl_Y Then Teile-Nr. = 1, dann beginnt alles von vorne :rolleyes:

Hoffe es hilft weiter :cool: ...
 
Zuletzt bearbeitet:
Das war mir schon klar bike,

aber nicht wie man diese Formeln in die SPS bringen soll, wenn diese sich mit jeder Position ändern ...

Da müsste man doch dann eine "Bezugsformel" draus machen, oder etwa nicht? :confused:

Kann es sein, dass es daran liegt, dass du ein Madl bist? :p

Du lagerst das Teil ab und mit einem Zähler weißt du wo abgelegt hast.
Also Zähler =1 Position ist dann X1 Y1 Z1.
Bei Position 2 schaut es so aus:
X+(Zaehler-1*Offset) Y1 Z1
Dann noch maximale Anzahl X, dann kannst du doch Y ausrechnen.
Wenn von der Anzahl die maximalen Paletten in X abgezogen werden und ein Übertrag besteht, dann weiß du dass Y mit dem entsprechenden Offset geändert werden muss.
Daraus kann Mann oder Frau eine schöne Formel bauen.

Brauchst du die Lösung für eine 300er oder eine 1200er?
Denn zu der zweiten kann ich dir keine Hilfestellung geben.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde modulo durch die Anzahl pro Reihe teilen. Das Ergebnis ist dann der x Offset. Danach nochmal den Zähler durch die Anzahl pro Reihe teilen. Nun hab ich die ganz Zahl und den Restbetrag. Anhand dieser zwei zahlen kann ich nun Spalte und Reihe bestimmen. Natürlich muss alles als ganzzahl berechnet werden
 
.
Wenn du dann die X Reihe voll hast, dann Ist die erste Position der zweiten Reihe X1, Y1+OffsetY, Z1.

Ist dann die erste Lage voll, beginnst du mit Z1 + Offset Z.
bike

Kann es sein, dass es daran liegt, dass du ein Madl bist?

Also Zähler =1 Position ist dann X1 Y1 Z1.
Bei Position 2 schaut es so aus:
X+(Zaehler-1*Offset) Y1 Z1
bike

@bike

Vielleicht ist das "Madl" wegen dem deinem "Z" etwas verunsichert.

Du solltest den Eingangsbeitrag#1 von dem "Madl" nochmal lesen
und dann wohl verstehen, das sie nur mit 2 Achsen (X+Y) arbeitet.
 
Kann es sein, dass es daran liegt, dass du ein Madl bist? :p

bike

... dem will ich mal lieber nicht widersprechen! Sagen wir mal so, Kuchenbacken klappt besser. ;)

Wie aber SoftMachine auch schon schrieb; von Z-Achse war hier gar keine Rede! Bin dann aber doch noch selber draufgekommen, mir diese wegzudenken! *WOW*


Brauchst du die Lösung für eine 300er oder eine 1200er?
Denn zu der zweiten kann ich dir keine Hilfestellung geben.
bike

In diesem Fall geht es um eine 1200er Steuerung!

Aber danke - es hat sich schon ein total nettes Helferlein gefunden ...


Ich danke euch!
 
Zurück
Oben