CASE Status_2 OF
0: IF ("Eingang_1" = true) THEN
Status_2 := 2;
END_IF;
2: IF ("Eingang_2" = true) THEN
Status_2 := 3;
END_IF;
3: IF ("Eingang_3" = true) THEN
Status_2 := 4;
END_IF;
END_CASE ;
Nein!Was passiert nun? Wird nun zu jedem Schritt gesprungen, da im ersten Zyklus ja jeder Wert zugewiesen wurde,
Ja, letzte Zuweisung gilt!oder wird jetzt nur zu Schritt4 (in obigen Code nicht mehr aufgeführt) gesprungen, da der Wert 4 die letzte Zuweisung im ersten Zyklus war?
Ja, letzte Zuweisung gilt!
Vielen Dank Paule!
Also würde im 2. Zyklus nur zu Schritt 4 gesprungen werden, richtig?
Aber was passiert dann mit den Anweisungen in Schritt 0, 2 und 3? Die waren ja (im ersten Zyklus) auch alle erfüllt und werden jetzt (im zweiten Zyklus) einfach übersprungen... d.h. wenn dort z.B. Ausgänge geschaltet werden, passiert im zweiten Zyklusdurchlauf gar nichts!
Oh man, klar. (Hand an Stirn schlag)Die CASE-Anweisung wird nach dem ersten erfolgreichen Vergleichs verlassen.
Wenn dem so ist, dann handelt es sich ja eher um Sprunganweisungen als um eine Schrittkette, oder?
Ich würde es als Fallunterscheidung bezeichnen. Genau wie IF..THEN..ELSE quasi eine Fallunterscheidung für boolsche Ausdrücke ist, ist CASE..OF eine Fallunterscheidung für numerische Ausdrücke.
Jein!Das ist ganz klar eine Schrittkette.
CASE Status_2 OF
0: IF ("Eingang_1" = true) THEN
Status_2 := 2;
END_IF;
2: IF ("Eingang_2" = true) THEN
Status_2 := 3;
END_IF;
3: IF ("Eingang_3" = true) THEN
Status_2 := 4;
END_IF;
END_CASE ;
CASE Status_3 OF
0: IF ("Eingang_7" = true) THEN
Status_3 := 3;
END_IF;
3: IF ("Eingang_5" = true) THEN
Status_3 := 5;
END_IF;
5: IF ("Eingang_6" = true) THEN
Status_3 := 0;
END_IF;
END_CASE ;
IF ("Eingang_1" = true) THEN
Status_2 := 2;
END_IF;
IF ("Eingang_2" = true) THEN
Status_2 := 3;
END_IF;
In der ersten CASE Anweisung wird der Programmzweig für Status_2 = 2 und in der zweiten CASE Anweisung der Programmzweig für Status_3 = 3 abgearbeitet..Was passiert nun aber im nächsten Zyklus?
Vielen Dank für eure Mühe mit mir...Für mich sieht das nach 2 Schrittketten aus die parallel abgearbeitet werden...
0: IF ("Eingang_1" = true) THEN
Status_2 := 2;
END_IF;
0: IF ("Eingang_7" = true) THEN
Status_3 := 3;
END_IF;
Ja, genau so ist es.Parallel heißt aber trotzdem, dass im ersten Zyklus zunächst
1) in der ersten CASE-Anweisung der Programmzweig für Status_2 = 0
ausgeführt wird und dann gleich danach
2) in der zweiten CASE-Anweisung der Programmzweig für Status_3 = 0
ausgeführt wird, oder?
Falls du Eingang_1 und/oder Eingang_7 meinst: Ja. Denn dann werden die Variablen Status_2 bzw. Status_3 geändert die für die jeweiligen CASE-Sprünge verantwortlich sind.Das geht dann auch in den nächsten Zyklen so weiter, bis entweder Eingang_1 TRUE UND/ODER Eingang_2 TRUE wird...
Jein, es wird nicht in Abhängigkeit der Eingänge "gesprungen" sondern in Abhängigkeit des aktuellen Wertes der Variablen Status_2 bzw. Status_3In den darauffolgenden Zyklen wird dann, entsprechend dem Ergebnis der beiden Eingänge, zu den entsprechenden Schritten (erst immer im Case für Status_2 und dann im Case für Status_3) "gesprungen"...
Stimmt das so?
Ja genau, meinte Eingang_1 und/oder Eingang_7.Falls du Eingang_1 und/oder Eingang_7 meinst: Ja. Denn dann werden die Variablen Status_2 bzw. Status_3 geändert die für die jeweiligen CASE-Sprünge verantwortlich sind.
Jein, es wird nicht in Abhängigkeit der Eingänge "gesprungen" sondern in Abhängigkeit des aktuellen Wertes der Variablen Status_2 bzw. Status_3
Ja, ich glaub jetzt hast du es :-DStimmt doch, oder?
Ja, ich glaub jetzt hast du es :-D
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?