Wie kann man eine Ablaufsteuerung bei Fehler zurück setzen?

Eisbaer_vw

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

Ich arbeite gerade mit Versuchsanlagen von Festo und verbinde sie über einen CANopen Feldbus von Beckhoff.
Ich habe nun ein kleines Problem bei der Programmierung.
Ich möchte gern eine Ablaufsteuerung neustarten wenn ein Fehler aufgetreten ist.
Im Moment kann ich nur im TwinCAT resetten.
Möchte aber gern über einen Taster den Fehler bestätigen und die Anlage bzw. die Ablaufsteuerung (Funktionsblock) zurücksetzen, da sie sonst nicht weiter arbeitet, ohne das komplette Programm im TwinCAT zu resetten.

Ich hoffe es ist einigermaßen klar geworden was mein Problem ist.

Gruß
 
Hi
Hängt halt davon ab wie du die Ablaufsteuerung programmiert hast.

Wenn Du sie wie üblich mit einem Case realisiert hast, dann kannst du wieder den Initialwert setzen....


Code:
CASE _diState OF


0: (* Warteposition *)

 q_diState                            := 0;
 q_sStateText                       := 'Warten auf Freigabe';


10: (* Initialisierung *)

 q_diState                            := 10;
 q_sStateText                       := 'Initialisierung der Datenstruktur';



 _diState                              := 20;


20:

 _diState                              := 30;



30:
;


END_CASE


IF i_xReset THEN
_diState         := 10;
END_IF


Nur so als Beispiel, mit i_xReset kannst Du den Ablauf wieder auf Startposition setzen.

Hoffe Du hast in etwa so gemeint
 
Zuletzt bearbeitet:
Definiere eine Variable mit dem Name SFCinit :bool
Lasse diese durch den Fehler setzten -> Die Schrittkette springt in den Init.
Erst wenn SFCinit wieder auf FALSE gesetzt wird, kann die Kette weiter laufen (z.B. Quittieren).
 
Mit einer Case-Schrittkette hast Du allerdings den NAchteil, dass die Schrittkette immer abgeschlossen werden muss (bzw Reset)
bevor sie neu gestartet werden kann. Das heisst im Detail, dass Du zBsp. keine zwei Produkte in der Schrittkette haben kannst.

Also nicht zBsp. ein Karton in Schritt 17 und der nächste schon in Schritt 3 oder sowas.

Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... also nicht zBsp. ein Karton in Schritt 17 und der nächste schon in Schritt 3 oder sowas.

Ähhh ... so würde ich eine Schrittkette sowieso nicht erstellen. Dann ist da m.E. in der Überlegung schon etwas falsch. Eine Schrittkette ist immer als geschlossener Ablauf zu sehen und sollte auch so ausgeführt werden.
Somit ist der CASE für ST / SCL schon die richtige (oder eine richtige) Herangehensweise ...

Gruß
Larry
 
Ähhh ... so würde ich eine Schrittkette sowieso nicht erstellen. Dann ist da m.E. in der Überlegung schon etwas falsch. Eine Schrittkette ist immer als geschlossener Ablauf zu sehen und sollte auch so ausgeführt werden.
Somit ist der CASE für ST / SCL schon die richtige (oder eine richtige) Herangehensweise ...

Gruß
Larry

Da hast Du schon recht. Wird aber teils so gemacht.

Wie Realisierst Du sowas?
Auch mit einem Register?

Gruss
 
Hallo Larry und Schnick und Schnack,

was meint Ihr mit "Eine Schrittkette ist immer als geschlossener Ablauf zu sehen" bzw. "Mit einer Case-Schrittkette hast Du allerdings den NAchteil, dass die Schrittkette immer abgeschlossen werden muss"?

Würde mich über weitere Erläuterungen freuen, Michael
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

wenn ich richtig gelesen habe, ist der Themenersteller raus. (Er hat gemerkt, das eine Schrittkette nicht nur ein Funktionsblock ist.)

Ich nutze gerne AS, wenn es zeitkritisch ist, wird es mit ST und der CASE-Sache gemacht. Für beide Möglichkeiten, sollte der Reset allerdings, selbst und sauber programmiert sein.

Bei AS, mal eben die Flags nutzen, ist "Quick and Dirty". Man kann damit richtig auf die Schnute fallen. Ist, halt meine Meinung.

Gruß, Voxe
 
Hallo Larry und Schnick und Schnack,

was meint Ihr mit "Eine Schrittkette ist immer als geschlossener Ablauf zu sehen" bzw. "Mit einer Case-Schrittkette hast Du allerdings den NAchteil, dass die Schrittkette immer abgeschlossen werden muss"?

Würde mich über weitere Erläuterungen freuen, Michael

Dabei geht es eigentlich um folgendes:

Wenn du eine Schrittkette in FUP programmierst, hast Du für jeden Schritt ein Bit welches du setzst wenn der Schritt aktiv ist. Sind die Bedingungen für den nächsten Schritt erfüllt, kann
das Bit für jenen Schritt gesetzt werden und damit das Bit vom vorherigen Schritt zurückgesetzt werden. So läuft die Schrittkette eigentlich Bit für Bit durch.
Wenn Du also im Schritt 17 bist, wäre es theoretisch möglich, die Schrittkette bereits ein zweites mal zu starten. Dann hättest Du zum Beispiel den Schritt 3 und den Schritt 19 aktiv.
Die kommen sich ja nicht in die Quere. Die Schrittkette ist somit an zwei Stellen aktiv. Das wird teilwese so gemacht wenn mehrere Produkte auf Bändern sind.

Bei der Case-Kette ist das aber nicht möglich, Denn für die Schritte hast Du normalerweise einen (Double-)Integer der den entsprechenden Wert hat und die Schrittumschaltung so
definiert. Die Schrittvariable kann ja nicht zwei Werte gleichzeitig annehmen, somit kannst Du immer nur einen Schritt ausführen. Dadurch muss die Schrittkette immer abgeschlossen bzw.
zurückgesetzt werden bevor sie neu gestartet wird. Und jetzt bitte nicht an irgendwelche Tricks mit Sprüngen oder sowas denke wie bei dieser Case-Variante auch die obige Funktion realisiert werden könnte.


Prinzipiell hat Larry recht, eine Schrittkette sollte als solche immer als geschlossener Ablauf realisiert werden.
Es wird dennoch gerne wie oben beschrieben gemacht. Nur dann hast Du keinen absolut definierten Zustand mehr.



Bei AS, mal eben die Flags nutzen, ist "Quick and Dirty". Man kann damit richtig auf die Schnute fallen. Ist, halt meine Meinung.

Da habe ich die selbe Erfahrung gemacht. Daher habe ich je nach Schrittkette im Schritt 0 oder 10 eigentlich immer eine Initialisierung.
Somit komme ich nach einem Reset wieder zu einem definierten Zustand. Wird die Schrittkette sauber beendet, brauchts den Schritt nicht.


Gruss
 
Zuletzt bearbeitet:
Zurück
Oben