Schleife programmieren

googy

Level-1
Beiträge
64
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

kann mir einer zeigen oder erklären wie man in Simatic eine Schleife programmieren kann?

Ich möchte eine bestimmte Anweisung mehrmals ausführen lassen.
Z.B. einen Zylinder 3mal ein und ausfahren lassen.

Natürlich könnte man die Anweisung auch 3mal hinschreiben, jedoch glaube ich das es auch andere Wege geben muss.
Habe im Internet nichts passendes dazu gefunden.
 
Hallo,

suche doch einfach mal nach Schleife, da wirst du einige Beispiele in AWL (Loop) und SCL (FOR,WHILE,DO_WHILE) finden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo googy,
obwohl, mit einer klassischen Schleife wirst du das nicht hinbekommen denn diese werden ja erst nach x Durchläufen verlassen. Du willst ja pro Durchlauf einen Zylinder ein/ausfahren lassen, damit würdest du aber eine Zykluszeitverletzung auslösen.

Grüsse, harrylask
 
Guten Tag,

kann mir einer zeigen oder erklären wie man in Simatic eine Schleife programmieren kann?

Ich möchte eine bestimmte Anweisung mehrmals ausführen lassen.
Z.B. einen Zylinder 3mal ein und ausfahren lassen.

Natürlich könnte man die Anweisung auch 3mal hinschreiben, jedoch glaube ich das es auch andere Wege geben muss.
Habe im Internet nichts passendes dazu gefunden.

Das solltest du NICHT mit einer Schleife lösen. nutze den Zyklus, der ist ja auch eine Schleife.

Schreib deine Anweisung einmal, und ruf sie mittels 3 Bedingungen auf.

Stell dir vor, dein Zylinder braucht 4 sekunden um vom Start zur Endlage zu kommen, kannst du dir vorstellen wie sehr die Zyklusüberwachung aufheult?

*ACK*Schrittkette
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zusätzlich zum Zykluszeitproblem wird es noch etwas schwierig sein innerhalb eines Zyklus (also in deiner Schleife) einen Ausgang mehrmals anzusteuern, da ja, wie hoffentlich bekannt, das PAA erst am Ende des Zyklus ausgegeben wird
 
Eine Schleife im eigentlichen Sinn wäre hier (wie alle vorher ja schon geschrieben haben) fehl am Platz. Schleifen nimmt man in nem SPS Programm eigentlich nur, um Werte in einen DB zu schreiben oder ähnliches, also bei sehr kurzen (bzw. schnellen) Vorgängen, die nur Speicheroperationen oder so was betreffen. Bei allem anderen kriegst Du Probleme mit der Zykluszeit.

Aber wie auch schon oben steht: Das ganze Programm ist eine Schleife.
Du kannst also z.B. im Zyklus einfach eine Variable hochzählen und wenn der Wert grösser wird als (in Deinem Beispiel) drei, überspringst Du die entsprechenden Anweisungen.
ABER: Du kannst bei Deinem Beispiel ja auch nicht in drei aufeinanderfolgenden Zyklen eine Aktion ausführen, Du musst ja warten, bis der Zylinder seinen Werg beendet hat.

Generell ist auch immer die Frage, ob es SINN macht, eine Schleife zu programmieren, wenn ich nur "einige" Male etwas wiederholen will. Das Programm wird zwar kürzer, aber auch schwieriger zu verstehen.
Mein Tip: Schrittkette!
 
Jop,

der Zylinder soll bestimmt nicht nur dreimal rein/ raus fahren.

Zerlege den Prozess in Vorgänge, Schritt für Schritt, dann kommst du der Lösung näher.

Wenn du z.B. den Ausstoßer eine Spritzgußmaschine ansteuern willst, dann würde ich einen Zähler nehmen, diesen mit den Anzahl der Hübe als Vorgabewert füttern, und mit den Meldekontakten des Zylinders rein und rausfahren lassen.

Dazu findest du in der AWL Hilfe eine Menge, oder auch hier und Zähler.

Was soll die Kiste denn machen ?

Greetz, Tom
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei der Frage handelt es sich hierbei um eine Aufgabe aus der Schule.

Wir sollten ein Programm für die GALVANIKANLAGE schreiben.

Das heißt, ein Korb muss gefasst werden und in das Reinigungsbad, so oft wie man vorgibt, getaucht werden.

Die Lösung zu der Aufgabe haben wir nicht und ich meine das hat was mit dem Zähler zu tun.

Frage: Wie könnte man das mit dem Zähler lösen?
 
Solange Zählwert <3 eintauchen. Bei jedem Eintauchvorgang um 1 hoch zählen. Wenn 3 mal eingetaucht den Korb weg fahren und Zähler nullen.

Wie siht dein Lösungsansatz aus?
 
Bis jetzt habe ich einen Zähler erstellt, der automatisch bis 5 hochzählt.

Jetzt möchte ich, dass er jedesmal eine Aktion ausführt.
 

Anhänge

  • 1.JPG
    1.JPG
    30,2 KB · Aufrufe: 41
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Aktion führt er ja schon aus indem er sich selbst hoch zählt. Jetzt solltest du aber den Vergleicher so einsetzen, dass er z.B. den Ausgang für "Korb_Eintauchen" ansteuert.
Das hochzählen solltest du dann unabhängig vom Zählwert machen. Z.B. dass er dann hoch zählt, wenn dein Korb unten ist (für einen Tauchvorgang).
 
Ich glaube ich habe das Prinzip einigermaßen verstanden.

Habe auch eine Schrittkette programmiert.
Doch leider funktioniert sie nicht ganz.

Könntest du sie dir angucken?
 

Anhänge

  • galvanik.zip
    3,6 MB · Aufrufe: 18
Hier habe ich die Schrittkette nochmal als Grafik.
Es sind 2 Bilder, da die komplette Schrittkette nicht in ein Bild passt.
 

Anhänge

  • 2_1.JPG
    2_1.JPG
    34,3 KB · Aufrufe: 38
  • 2_2.JPG
    2_2.JPG
    39,6 KB · Aufrufe: 32
Hier habe ich die Schrittkette nochmal als Grafik.
Es sind 2 Bilder, da die komplette Schrittkette nicht in ein Bild passt.
Du könntest umschalten nach AWL und den Code hier posten oder du kaufst dir das geniale Tool SnagIt
Du hast in deinem Projekt einen OB2, das solltest du in einem FC oder gegebenenfalls in einem FB programmieren. OB 2 kenne ich nicht.
 
Zurück
Oben