Stapelanlage mit 3 Achsen programmieren

godi

Level-1
Beiträge
1.460
Reaktionspunkte
185
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen!

Ich bin gerade dabei das ich eine Stapelanlage Programmiere.
Ich habe mir gedacht ich mache das über eine Schrittkette mit SPL.

Ein Grundkonzept habe ich schon Programmiert. (ein paar Sachen fehlen natürlich noch)

Jetzt würde mich Interessieren ob da mein Grundgedanke der Schrittkette in Ordnung ist. (Ich weiß in letzter Zeit wurde schon öfters über Schrittketten geredet trozdem würde mich interessieren ob ich da am richtigen Weg bin)

Im ersten Netzwerk will ich für die Schritte eine Freigabe machen so dass die Schritte im Automatikbetrieb einzeln abgefahren werden können. Habe mir das so gedacht wenn die Funktion nicht angewählt ist dann ist die Freigabe immer True ansonsten würde ich das mit einer Flanke weiterschalten.

Der erste Schritt wird von einem anderem Baustein angewählt. Wenn der Automatikbetrieb eine Positive Flanke aufweißt dann wird in die Schrittkette der Wert 1 Transferiert. Bei Handbetrieb wird der Wert auf 0 gesetzt.

Hier der Code
Code:
FUNCTION "SK Stapelanlage" : VOID
TITLE =
//
VERSION : 0.1
 
VAR_TEMP
  Freigabe_Schritte : BOOL ; 
END_VAR
BEGIN
NETWORK
TITLE =Freigabe für einzelne Schritte
      SET   ; 
      U     M      1.0; //Testmerker
      =     #Freigabe_Schritte; 
NETWORK
TITLE =Sprungleiste für Schrittkette
      L     "DB_Stapelanlage_neu".Schrittkette; 
      SPL   next; 
      SPA   end; //Bei Schrittkette 0 springe zu end
      SPA   SK01; //Bei Schrittkette 1 springe zu Schritt 1
      SPA   SK02; //Bei Schrittkette 2 springe zu Schritt 2
      SPA   SK03; //Bei Schrittkette 3 springe zu Schritt 3
      SPA   SK04; //Bei Schrittkette 4 springe zu Schritt 4
      SPA   SK05; //Bei Schrittkette 5 springe zu Schritt 5
      SPA   SK06; //Bei Schrittkette 6 springe zu Schritt 6
      SPA   SK07; //Bei Schrittkette 7 springe zu Schritt 7
      SPA   SK08; //Bei Schrittkette 8 springe zu Schritt 8                                          
      SPA   SK09; //Bei Schrittkette 9 springe zu Schritt 9
      SPA   SK10; //Bei Schrittkette 10 springe zu Schritt 10
      SPA   SK11; //Bei Schrittkette 11 springe zu Schritt 11
      SPA   SK12; //Bei Schrittkette 12 springe zu Schritt 12
next: SPA   end; 
NETWORK
TITLE =SK01 - Referenz Fahren
SK01: UN    "DB_Stapelanlage_neu".Referenzposition; 
      =     "DB_Stapelanlage_neu".Fahre_Referenz; 
//Transition
      U     "DB_Stapelanlage_neu".Referenzposition; 
      L     S5T#2S; 
      SE    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      SPB   SK; 
      BEA   ; 
NETWORK
TITLE =SK02 - Grundposition anfordern
SK02: SET   ; 
      =     "DB_Stapelanlage_neu".Grundposition_anfordern; 
//Transition
      U     "Daten Roboter".Neue_Daten_geladen; 
      L     S5T#2S; 
      SS    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      R     "DB_Stapelanlage_neu".Grundposition_anfordern; 
      SPB   SK; 
      BEA   ; 
NETWORK
TITLE =SK03 - Grundposition anfahren Achse Z
SK03: UN    "Achse Z endl. oben"; 
      =     "DB_Stapelanlage_neu".Freigabe_Achse_Z_Grundp; 
//Transition
      U     "Achse Z endl. oben"; 
      L     S5T#2S; 
      SE    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      SPB   SK; 
      BEA   ; 
 
NETWORK
TITLE =SK04 - Grundposition anfahren Achse X / Y und Wender
SK04: NOP   0; 
// Achse X
      U     "Achse Z endl. oben"; 
      UN    "Verz. E7.3"; 
      =     "DB_Stapelanlage_neu".Freigabe_Achse_X_Grundp; 
// Achse Y
      U     "Achse Z endl. oben"; 
      UN    "Achse Y Grundst."; 
      =     "DB_Stapelanlage_neu".Freigabe_Achse_Y_Grundp; 
// Wender
      U     "Achse Z endl. oben"; 
      UN    "Wender Grundstellung"; 
      =     "DB_Stapelanlage_neu".Freigabe_Wender_Grundp; 
//Transition
      U     "Verz. E7.3"; 
      U     "Achse Y Grundst."; 
      U     "Wender Grundstellung"; 
      L     S5T#2S; 
      SE    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      SPB   SK; 
      BEA   ; 
 
NETWORK
TITLE =SK05 - Abholposition anfahren
SK05: U     "Abnahmepos. Stapelung"; 
      UN    "Achse Z Abnahmepos"; 
      U     "Wender Grundstellung"; 
      =     "DB_Stapelanlage_neu".Paket_Abholen; 
//Transition
      U     "Achse Z Abnahmepos"; 
      L     S5T#2S; 
      SE    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      SPB   SK; 
      BEA   ; 
 
NETWORK
TITLE =SK06 - Paketgreifer Schließen
SK06: U     "Achse Z Abnahmepos"; 
      S     "DB_Stapelanlage_neu".Paketgreifer_schliessen; 
      R     "DB_Stapelanlage_neu".Paketgreifer_oeffnen; 
//Transition                                     
      U     "Greifer zu Stapelanl."; 
      L     S5T#2S; 
      SE    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      SPB   SK; 
      BEA   ; 
NETWORK
TITLE =SK07 - Achse Z in die Grundposition mit Paket
SK07: UN    "Achse Z endl. oben"; 
      U     "Greifer zu Stapelanl."; 
      =     "DB_Stapelanlage_neu".Freigabe_Achse_Z_Grundp; 
//Transition
      U     "Achse Z endl. oben"; 
      L     S5T#2S; 
      SE    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      SPB   SK; 
      BEA   ; 
 
NETWORK
TITLE =SK08 - Lade Daten für Ablageposition
SK08: U     "Greifer zu Stapelanl."; 
      =     "DB_Stapelanlage_neu".Ablageposition_anfordern; 
//Transition
      U     "Daten Roboter".Neue_Daten_geladen; 
      L     S5T#2S; 
      SS    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      R     "DB_Stapelanlage_neu".Grundposition_anfordern; 
      SPB   SK; 
      BEA   ; 
 
NETWORK
TITLE =SK09 - Ablageposition anfahren Achse X / Y und Wenden
SK09: NOP   0; 
// Achse X
      U     "Achse Z endl. oben"; 
      U     "Greifer zu Stapelanl."; 
//+++++++++++++  Un Position X erreicht ++++++++++++++++++++++++++
      =     "DB_Stapelanlage_neu".Freigabe_Achse_X_Ablagep; 
// Achse Y
      U     "Achse Z endl. oben"; 
      U     "Greifer zu Stapelanl."; 
//+++++++++++++  Un Position Y erreicht ++++++++++++++++++++++++++
      =     "DB_Stapelanlage_neu".Freigabe_Achse_Y_Ablagep; 
// Wender
      U     "Achse Z endl. oben"; 
      =     "DB_Stapelanlage_neu".Freigabe_Wender_Ablagep; 
 
//Transition
//+++++++++++++  U Position X und Y und Wender erreicht ++++++++++++++++++++++++++
      L     S5T#2S; 
      SE    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      SPB   SK; 
      BEA   ; 
 
NETWORK
TITLE =SK10 - Ablageposition anfahren Achse Z
SK10: NOP   0; 
//+++++++++++++  U Position X und Y erreicht ++++++++++++++++++++++++++
//+++++++++++++  Un Position Z erreicht ++++++++++++++++++++++++++
      =     "DB_Stapelanlage_neu".Freigabe_Achse_Z_Ablagep; 
//Transition
//+++++++++++++  U Position Z erreicht ++++++++++++++++++++++++++
      L     S5T#2S; 
      SE    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      SPB   SK; 
      BEA   ; 
 
NETWORK
TITLE =SK11 - Paket Ablegen
SK11: NOP   0; 
//+++++++++++++  U Position X, Y und Z erreicht ++++++++++++++++++++++++++
      UN    "Greifer offen Stapelanl."; 
      S     "DB_Stapelanlage_neu".Paketgreifer_oeffnen; 
      R     "DB_Stapelanlage_neu".Paketgreifer_schliessen; 
//Transition
      U     "Greifer offen Stapelanl."; 
      L     S5T#2S; 
      SE    "SK-Verzögerung"; 
      U     "SK-Verzögerung"; 
      U     #Freigabe_Schritte; 
      SPBN  end; 
      L     2; 
      T     "DB_Stapelanlage_neu".Schrittkette; 
      SET   ; 
      R     "SK-Verzögerung"; 
//+++++++++++++  R Position X, Y und Z erreicht ++++++++++++++++++++++++++
      BEA   ; 
 
NETWORK
TITLE =SK12
SK12: NOP   0; 
      BEA   ; 
 
NETWORK
TITLE =Ende
end:  BEA   ; 
NETWORK
TITLE =Zähle einen Schritt vorwärts
SK:   L     "DB_Stapelanlage_neu".Schrittkette; 
      L     1; 
      +I    ; 
      T     "DB_Stapelanlage_neu".Schrittkette; 
      SET   ; 
      R     "SK-Verzögerung"; 
END_FUNCTION

Ich bin für jede hilfe dankbar!

godi
 
Schrittkette

Hi,
- kannst du keinen S7 GRAPH benutzen?
- warum SK selber basteln: Standardbibliothek "TI-S7", FB "DRUM"; ist
eine schöne fertige SK.

Gruss: Vladi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
du hast quais ein handling das 3 achsen hat?
du nimmst ein produkt mit diesem handling an einer definierten position, und stapelst es an einer anderen variablen position (lagenbild bzw. nr der lage) ? ist das richtig?

man kann das entweder mit einer schrittkette oder durch viele verknüfpungen realisieren.

in diesem fall wäre eine schrittkette wohl sinnvoll, da es nicht möglich ist das eine äussere einwirkung (zb bediehner) irgendwo ein produkt wegnehmen kann oder drauflegen kann. ausser an der fertigen palette, aber damit hätten beide versionen ein problem.

die schrittkette wäre für den verfahrweg des handlings.
du müsstest eine rezeptur haben in die positonen der produkte auf der palette hinterlegt sind. entweder du gibts jedem produkt drei koordinaten an, oder du gibst nur zwei an und sagst in einem weiteren feld um welche lage es sich handelt. ich halte die zweite für felxibler.

die schrittkette läuft dann für jedes einzelne produkt einmal durch, wenn sie fehlerfrei ausgeführt wurde, also das produkt zb nicht veroloren wurde, dann wird die variable mit der nummer des produktes erhöht, aus ihr werden die pointer errechnet die auf die koordinaten des folgenden produktes zeigen, mit diesen wird die sk wieder gestartet...

um zeit zu gewinnen solltest du überlegen inwiefern es mechanisch möglich ist achsen gleichzeitig zu verfahren.


@vladi
die sk ist das kleinere problem bei der sache, ob der die spl nun auch noch schnell selber zimmer oder nicht spielt dabei keine rolle. fakt ist das er weiß was er hat und wesentlich flexibler ist wenn er es mit einer spl selber macht.
 
Hallo!

Ja genau Handling mit 3-Achsen wobei X und Y zur gleichen Zeit fahren können und mit einem Zylinder kann auch das Paket um 90 grad gewendet werden wenn es notwendig ist. Achse Z fährt wenn die anderen Achsen stillstehen.

Mein Problem ist nur mehr die Schrittkette. Mit vielen Verknüpfungen habe ich es vorher gelöst. Bin aber überhaupt nicht glücklich da es nicht so funktioniert wie ich es mir vorstelle. Ausserdem habe ich noch einen Lichttaster montiert der kontrolliert ob ein Paket verloren gegangen ist. Wenn ja dann soll der Greifer wieder in die Grundposition / Abholposition fahren und mit dem nächsten Paket weiterfahren. Das denke ich mir ist mit der SK auch leichter. Ausserdem kann ich für jeden Schritt eine Zeit vergeben und im Einzelschrittmodus kann ich auch fahren.

Die Datenauslesung habe ich so gelöst das ich mir einen Datenbaustein für gerade Lagen, einen für ungerade Lagen und noch einen für Z Position und Pakete Wenden angelegt habe. Aus denen Lese ich je nach Paketnummer die richtige Position aus. Der Maschinenbediener kann am Bedienpult die Pakete / Lage manipulieren. (+ und - Tasten).

Graph oder sonstiges habe ich für dieses Projekt leider nicht zur Verfügung.

Werde schauen das ich bei den anderen Anlagen eine Störungsfrei Nacht habe dann kann ich da wieder weitermachen. :D Wenn ich fertig bin dann setze ich das ganze Programm mal hier herein.

Aber ist der Grundsätzliche Aufbau der SK richtig?

@Vladi werde mir die Standartbausteine Heute mal ansehen aber ich denke in dieser Sache so wie Markus das es besser ist selbst das zu Programmieren damit weiß ich was ich habe.

godi
 
Hier noch die Lagenbilder zur besseren Verständlichkeit.

Position Null ist die Abholposition. Wobei Z und Y auf Endschalter Positioniert wird und auf der X Achse befindet sich ein induktiver Näherungssensor damit von beiden Seiten angefahren werden kann.

Referenzposition befindet sich (aus Sicht der Abholposition) wenn X ganz links, Y ganz hinten und Z oben ist.
 

Anhänge

  • Lagenbilder.jpg
    Lagenbilder.jpg
    44,3 KB · Aufrufe: 80
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie genau geht der FB Drum???

Hi,
- kannst du keinen S7 GRAPH benutzen?
- warum SK selber basteln: Standardbibliothek "TI-S7", FB "DRUM"; ist
eine schöne fertige SK.

Gruss: Vladi

Hallo,
ich habe deinen Beitrag gefunden und daraufhin die S7 Hilfe zu diesem Baustein studiert. Habe allerdings nicht viel verstanden. Wie machst du damit eine Schrittkette und was trägst du in dem riesig langen DB ein??? Wieviele Schritte kann die Schrittkette haben 16???
Vielen Dank im voraus, mit freundlichen Grüßen

Wondermike
 
Zurück
Oben