Eine Frage zur Schrittkette in SCL

schnecke

Level-1
Beiträge
148
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi ihr,
ich soll eine Schrittkette in SCL programmieren – finde aber irgendwie den Einstig nicht.

Bei einer Schrittkette in AWL setzt doch der vorhergehende Schrittmerker zusammen mit einer oder mehreren Bedingungen den nachfolgenden Schritt. Und dieser nachfolgende Schritt setzt dann den vorhergehenden Schritt wieder zurück. Dabei geschieht das Rücksetzen des vorhergehenden Schrittes ja immer erst im nächsten Zyklus.

So, in SCL hätte ich das jetzt mit der Anweisung "Case … of" gemacht. Hier stellt sich mir aber folgendes Problem:

Angenommen ich programmiere Schritt 0 und an dessen Ende, dass (bei Erfüllung best. Bedingungen) in den nächsten Schritt, also Schritt 1, gesprungen werden soll.

An welcher Stelle sage ich nun, dass der Schrittmerker von Schritt0 wieder rückgesetzt wird? Denn es ist ja nicht gesagt, dass im nächsten Zyklus über die Case-Auswahl zwingend wieder in Schritt0 oder Schritt1 gesprungen wird, während in AWL ja automatisch im nächsten Zyklus wieder alles durchlaufen wird…

Lieben Dank für eine gute Idee… :p
 
Bah Merker...

Du hast doch schon die Schrittvariable im case..of. Wenn du die auf eine bestimmte Schrittnummer setzt, springt das Programm auch dort hin.
Da muss dann nichts gesetzt oder rückgesetzt werden....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wenn du in SCL mittels CASE eine Schrittkette machen willst (der Befehl bietet sich ja geradezu dafür an) dann arbeitest du nicht mit Merkern sondern mit einem INT.
Das könnte dann z.B. so aussehen :
Code:
CASE Schritt of
   0 :
   // tue hier irgendwas
   if Bedingung_1 then Schritt := 1 ; end_if ;
   1 :
   // tue hier irgendwas
   if Bedingung_2 then Schritt := 2 ; end_if ;
   2 :
   // tue hier irgendwas
   if Bedingung_3 then Schritt := 0 ; end_if ;
END_CASE ;
Gruß
Larry
 
Ok, vielen Dank euch Beiden!

Dann kann ich also in SCL die Schrittmerker vergessen. Nur, wie bewerkstellige ich dann z.B. die Initialisierung der Schrittkette nach dem Einschalten der Anlage, bzw. nach Reset? Dazu habe ich in AWL einfach die Schrittmerker rückgesetzt.

Muss man dazu in SCL jeden einzelnen Aktor rücksetzen, oder geht das irgendwie einfacher?
 
Du kannst z.B. im Schritt 0 alle Aktoren abschalten.

Über einen Taster kannst du die Variable "Schritt" auf 0 setzen um die Kette neu zu Initialisieren. (Anfang oder Ende, nie innerhalb der CASE-Schleife!)
Code:
IF Taster=true THEN
 Schritt := 0;
END_IF;
Ich nutze diese Reset Funktion eigentlich bei allen Schrittketten. Manchmal muss man ein kleines Zusatzprogramm schreiben, damit erst alles wieder in die Ausgangsstellung zurückfährt.

Außerdem trenne ich immer die Schrittkette und das Ansteuern der Aktoren. Also die Schrittkette in SCL und das Ansteuern der Aktoren über AWL/FUP. Man kann halt in SCL schlecht "beobachten" und die meisten Instanthalter verdrehen auch die Augen, wenn man ihnen ST vorsetzt..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, vielen Dank euch Beiden!

Dann kann ich also in SCL die Schrittmerker vergessen. Nur, wie bewerkstellige ich dann z.B. die Initialisierung der Schrittkette nach dem Einschalten der Anlage, bzw. nach Reset? Dazu habe ich in AWL einfach die Schrittmerker rückgesetzt.

Muss man dazu in SCL jeden einzelnen Aktor rücksetzen, oder geht das irgendwie einfacher?

Innerhalb einer Schrittkette würde ich nie einen Aktor zuweisen.
Das gehört nach außerhalb.
Denn wenn du eine Automatik und eine Handschrittkette hast, was dann?


bike
 
Lieben Dank!

@Deltal: Und in diesem Schritt 0 muss dann jeder Aktor einzeln auf 0 gesetzt werden?

A0.0 := 0;
A0.1 := 0;
usw.

@bike: Stimmt, habe ich nicht bedacht. D.h., innerhalb der Schrittkette nur mit Merkern arbeiten?

IF "Bedingung" THEN
M10.0 := 1;
END_IF;

Und dann außerhalb der Kette:

A0.0 := M10.0;
 
So kannst du dies machen.
Und wenn du die Schrittkette wegwerfen musst, dann das MW 10 mit 0 füllen.

Du musst dir auch Gedanken machen, wie du die Merker in der Kette zurücksetzen willst.
Eine Möglichkeit ist, dass du zu Beginn, vor Eingang Schrittkette, das MW auf Null schreibst, und dann nach deiner Bedingung (Schrittnummer) in der Kette den entsprechenden Merker wieder zuweisen.
Dann umgehst du, dass ggF mehr als ein Merker 1 ist, wenn dies so gewollt ist.


bike

bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da du im SCL eigentlich nur mit Setzen und Rücksetzen arbeitest, musst du natürlich alles Rücksetzen wenn du "aus der Scheife springst".
Die Case Schleife ist ja nix anderes als ein Vergleicher mit einem Sprungbefehl. Also er vergleicht ob die "Schritt" variable = 1 ist, sonst springt er zum nächsten Vergleicher usw.

Im SCL beschreibe ich nur Merker bzw. Bits in einem DB und verknüpfe sie dann in einem AWL/KOP/FUP Programm auf die Ausgänge.
 
Danke bike,

also das Zurücksetzen der Schrittkette könnte ich ja dann nach der Idee von Deltal machen:


IF "Reset" THEN
Schritt := 0;
END_IF;

Und dann eben in Schritt 0:

MW10 := 0;

In den einzelnen Schritten werden dann den Merkern aus MW10 wieder eine 1 zugewiesen...

Wäre das so eine Möglichkeit?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke bike,

also das Zurücksetzen der Schrittkette könnte ich ja dann nach der Idee von Deltal machen:


IF "Reset" THEN
Schritt := 0;
END_IF;

Und dann eben in Schritt 0:

MW10 := 0;

In den einzelnen Schritten werden dann den Merkern aus MW10 wieder eine 1 zugewiesen...

Wäre das so eine Möglichkeit?

Ja klar, wenn du den Schritt 0 als deine INIT Schritt machen willst gut.

Doch was macht du wenn du, wieder in die Kette an einer bestimmten Stelle einspringen willst?
Wenn du vor der Kette das MW auf null setzt, kann du wenn deine Kette weiterlaufen kann, in den richtigen Schritt springen, den du vorgibst.
Wenn z.B. Störung in Schritt 5 war, kann es sinnvoll sein nach beheben der Störung, mit Schritt 6 weiter zumachen.
Wenn du dann aber zuerst in den INIT musst, weiß ich nicht, ob das so echt sinnvoll ist.
Bei mir werden im INIT die Startbedingungen der Kette und ähnliches geprüft.

bike
 
Ja klar, wenn du den Schritt 0 als deine INIT Schritt machen willst gut.

Doch was macht du wenn du, wieder in die Kette an einer bestimmten Stelle einspringen willst?
Wenn du vor der Kette das MW auf null setzt, kann du wenn deine Kette weiterlaufen kann, in den richtigen Schritt springen, den du vorgibst.
Wenn z.B. Störung in Schritt 5 war, kann es sinnvoll sein nach beheben der Störung, mit Schritt 6 weiter zumachen.
Wenn du dann aber zuerst in den INIT musst, weiß ich nicht, ob das so echt sinnvoll ist.
Bei mir werden im INIT die Startbedingungen der Kette und ähnliches geprüft.

bike

Wenn eine Störung ist sollte die Kette ehe erstmal "stehen bleiben". Ob man danach einen Reset durchführen muss, ist ja von der Situation abhängig.
Ich habe idr. einen extra Schritt für den Reset, meistens halt mit einem extra Fahrprogramm etc.
Nach dem Reset springt er also erstmal in z.B. Schitt 99. Dort werden alle Antriebe abschaltet etc. Vom Schritt 99 springt er in den initialschritt und die Kette fängt von vorne an.

Ein Typischer Baustein zum Anteuerung des Antiebes sieht dann so aus:
Code:
U "BIT aus dem SCL Programm
U "Automatikbetrieb"
O
U "Taster für Tippbetrieb"
U "Handbetrieb"
= "Ausgang für Aktor"
 
Wenn z.B. Störung in Schritt 5 war, kann es sinnvoll sein nach beheben der Störung, mit Schritt 6 weiter zumachen.
Wenn du dann aber zuerst in den INIT musst, weiß ich nicht, ob das so echt sinnvoll ist.
Bei mir werden im INIT die Startbedingungen der Kette und ähnliches geprüft.

bike

Ja, danke bike für deine guten Überlegungen... ;) Daran habe ich nicht gedacht.

Andererseits kann man ja sagen, dass der INIT-Schritt nur dann aktiv wird, wenn z.B. "Reset" gedrückt wird, oder wenn nach Anlage AUS einmalig die Taste "Bereitschaft" gedrückt wird. Wenn nun in Schritt 5 eine Störung war, kann man diese ja beheben - und wenn jetzt nicht "Reset" gedrückt wird, so wird ja auch nicht in den INIT-Schritt gesprungen; d.h., es könnte ja jetzt mit Schritt 6 weitergehen, oder?

Was meinst du mit "Prüfen der Startbedingungen der Schrittkette"?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nach dem Reset springt er also erstmal in z.B. Schitt 99. Dort werden alle Antriebe abschaltet etc. Vom Schritt 99 springt er in den initialschritt und die Kette fängt von vorne an.

Danke Deltal!

Glaube, langsam komme ich der Sache dank eurer Hilfe immer näher... denke nur noch nicht an jede Individualität!

Wo liegt bei dir eigentlich der Unterschied zwischen Reset und Initialisierung der Schrittkette?
 
Einen richtigen Initialschritt benutze ich meistens nicht. Ich habe halt einen "Start" Schritt, welcher immer nach beendigung der Schrittkette angewählt wird. Und ich habe eine Reset-Prozedur, welche nach Anforderung durchlaufen wird, alle Antriebe kontrolliert in die Ausgangsposition bringt und dann wieder den Startschritt springt.
Der Init wäre also so eine Mischung aus dem Startschritt und dem Ende der Reset-Prozdeur.
 
Ja, danke bike für deine guten Überlegungen... ;) Daran habe ich nicht gedacht.

Andererseits kann man ja sagen, dass der INIT-Schritt nur dann aktiv wird, wenn z.B. "Reset" gedrückt wird, oder wenn nach Anlage AUS einmalig die Taste "Bereitschaft" gedrückt wird. Wenn nun in Schritt 5 eine Störung war, kann man diese ja beheben - und wenn jetzt nicht "Reset" gedrückt wird, so wird ja auch nicht in den INIT-Schritt gesprungen; d.h., es könnte ja jetzt mit Schritt 6 weitergehen, oder?

Was meinst du mit "Prüfen der Startbedingungen der Schrittkette"?

Ja könnte im 6.Schritt weitergehen.
Wer setzt dir bzw wie setzt du den Schritt 5 zurück, wenn du im nächsten oder ggF im vorherigen Schritt weiter machst?
Oder gar zwei bis drei Schritte weiter oder zurück musst?

Startbedingungen sind bei mir alle Medien störungsfrei und ein und alle Teile in Grundstellung.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe halt einen "Start" Schritt, welcher immer nach beendigung der Schrittkette angewählt wird. Und ich habe eine Reset-Prozedur, welche nach Anforderung durchlaufen wird, alle Antriebe kontrolliert in die Ausgangsposition bringt und dann wieder den Startschritt springt.

Ok Deltal,

verstehe ich das so richtig, wenn also der letzte Schritt der Kette durchlaufen wurde, dann wird automatisch wieder in den Startschritt gesprungen?

Nur, was passiert im Startschritt - geht es von hier aus, bei erfüllter Bedingung, gleich wieder in den nächsten Schritt der Kette?

@bike:
Nun, der Merker aus Schritt 5 würde durch den Nachfolgeschritt, also Schritt 6 rückgesetzt werden. Ein Problem wäre es nur, wenn man nach einer Störung im vorhergehenden Schritt weitermachen würde - aber das kann doch eigentlich nicht passieren, denn im Speicher der SPS ist doch noch Schritt 5 gespeichert, so dass nach einer Störung eigentlich wieder dorthin gesprungen wird... oder irre ich mich?
 
verstehe ich das so richtig, wenn also der letzte Schritt der Kette durchlaufen wurde, dann wird automatisch wieder in den Startschritt gesprungen?
Nur, was passiert im Startschritt - geht es von hier aus, bei erfüllter Bedingung, gleich wieder in den nächsten Schritt der Kette?
Der erste Punkt ist soweit richtig.
Im Startschritt werden kaum Aktionen ausgeführt. Dafür werden alle Bedinungen geprüft, welche zu einem neuen Durchlauf voraussetzung sind.
Automatikbetrieb ein, Fremdmaschinen sind aus dem Weg oder ein neues Produkt wurde angewählt und soll aus dem Lager geholt werden.
Wenn alles ok ist, startet der Ablauf.

Der Hauptgrund, warum der Schritt 0 der Startschritt ist, liegt einfach darin, das die Defaultbelegung von Variablen idR. 0 ist.
 
Der Hauptgrund, warum der Schritt 0 der Startschritt ist, liegt einfach darin, das die Defaultbelegung von Variablen idR. 0 ist.

Lieben Dank für deine Hilfe Deltal!

Aber die Variablen, bzw. Merker sind doch auch im Schritt 0 nur dann Null, wenn diese im Verlauf der nachfolgenden Schritte nach und nach rückgesetzt werden, oder nicht? Oder wird das an einer best. Stelle explizit gemacht? Was ich meine, wenn die Schrittkette z.B. 15 Schritte hat, dann sollte ja im Schritt 15 wieder alles auf Null sein, so dass dann beim Sprung in Schritt 0 die Variablen automatisch den Status Null haben - stimmt das so?
 
Zurück
Oben