Page 2 of 2
Re: Reset von Schrittketten
Posted: 07 Apr 2018, 01:43
by Ingo
da er ja von aussen das ganze resetten möchte durch eine Notabschaltung
ist es besser, dem Programm eine input variable anzufügen, die einfach FBInit oder wie auch immer heißt.
z.b.
Programm xxxx (FB)
VAR_INPUT
FBInit : BOOL;
END_VAR
Extern wird dann ein Bit angehängt, wenn dieses Bit eine Flanke bringt, geht die Schrittkette auf den Schritt Init zurück. und schon sollte er wieder im Initialschritt sein.
Da die EN lösung nicht sehr elegant ist würde ich das schon so machen.
Re: Reset von Schrittketten
Posted: 07 Apr 2018, 08:53
by Kai
Hallo Ingo,
erst mal vielen Dank für Dein Engagement. Natürlich kann man die Schrittketten mit RS-Gliedern umsetzen oder den Baustein mit einem Reseteingang anlegen. Im Falle der Ablaufsteuerung müsste aber dann parallel zu jeder Transition disjunktiv eine Weitere eingefügt werden, die auf den Reset-Eingang abfragt und in Schritt 0 springt.
Falls es von Logicals keine Lösung gibt, wäre das der Weg. Allerdings ist es ja Sinn der Ablaufsteuerungen, den Logikablauf einigermaßen übersichtlich darzustellen und die administrativen Anteile weitestgehend zu verbergen. Wenn man da rumbasteln muss ist dieser Vorteil schnell wieder dahin.
Andere Systeme (z.B. Siemens PCS7) bieten daher die Möglichkeit die Schrittketten von außen zu resetten oder die aktuelle Schrittnummer auszugeben. Es wäre wirklich sehr schön, wenn mit LogiCAD so etwas auch realisierbar wäre. Sei es über systemseitig vorhandene (vielleicht derzeit versteckte) Eingänge, Systemaufrufe, o.ä.
Vielleicht bekommen wir ja eine Lösung von Walter.
Viele Grüße
Kai
Re: Reset von Schrittketten
Posted: 12 Jul 2018, 14:31
by Walter
Hallo,
In logi.CAD 3 sind die Schrittketten streng nach IEC-Norm abgebildet, daher haben diese keine Resetmöglichkeit.
Um dennoch eine "State Machine" mit ähnlicher Übersicht wie bei einer Schrittkette zu programmieren, jedoch die Möglichkeit eines Resets zu haben, ist folgender Workaround geeignet:
- alternative_Schrittkette.png (32.42 KiB) Viewed 7780 times
Re: Reset von Schrittketten
Posted: 12 Jul 2018, 19:19
by Kai
Hallo,
also erst mal vielen Dank in die Runde. Ich möchte hier noch meine Lösung vorstellen, vielleicht hilfts ja jemandem weiter.
Die Anforderungen sind:
- Die Schrittkette muss durch einen Reset Eingang jederzeit auf den Initialschritt zurückgesetzt werden können. Solange dieser Eingang true ist, darf die Schrittkette nicht mehr starten.
- Die Nummer des aktiven Schrittes muss von außen zugreifbar sein.
Um die Rücksetzbarkeit zu erreichen wurde zu jeder normalen Transition eine weitere Transition parallel geschaltet. Wichtig ist hierbei, dass sich die beiden Bedingungen exklusiv ausschließen, also niemals beide gleichzeitig true sein können. In den Schrittaktionen wird dann noch die Schrittnummer rausgeschrieben.
- Schrittkette.JPG (37.39 KiB) Viewed 7770 times
Hier die zugehörige Umsetzung der Schrittkette in ST.
Code: Select all
FUNCTION_BLOCK SFC_Test
VAR_INPUT
RESET : BOOL := FALSE;
END_VAR
VAR_OUTPUT
ST : INT := 0; // Aktuelle Schrittnummer
END_VAR
// *************************************************************** Struktur
INITIAL_STEP step0:
act0();
END_STEP
TRANSITION T0 FROM step0 TO step10
:= RESET = FALSE;
END_TRANSITION
STEP step10:
act10();
END_STEP
TRANSITION T10 FROM step10 TO step20
:= // Hier Bedingung einfügen
AND NOT RESET;
END_TRANSITION
STEP step20:
act20();
END_STEP
TRANSITION T20 FROM step20 TO step30
:= // Hier Bedingung einfügen
AND NOT RESET;
END_TRANSITION
STEP step30:
act30();
END_STEP
TRANSITION T30 FROM step30 TO step10
:= // Hier Bedingung einfügen
AND NOT RESET;
END_TRANSITION
// **************************************************** Reset - Transitionen
TRANSITION T10r FROM step10 TO step0
:= RESET = TRUE;
END_TRANSITION
TRANSITION T20r FROM step20 TO step0
:= RESET = TRUE;
END_TRANSITION
TRANSITION T30r FROM step30 TO step0
:= RESET = TRUE;
END_TRANSITION
// *************************************************************** Aktionen
ACTION act0:
ST := 0;
END_ACTION
ACTION act10:
ST := 10;
// Hier Aktionen des Schritt 10 einfügen
END_ACTION
ACTION act20:
ST := 20;
// Hier Aktionen des Schritt 20 einfügen
END_ACTION
ACTION act30:
ST := 30;
// Hier Aktionen des Schritt 30 einfügen
END_ACTION
END_FUNCTION_BLOCK