TIA GRAPH Alternativzweig

Pizza

Level-2
Beiträge
207
Reaktionspunkte
75
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin zusammen

Ich verwende Graph-Schrittketten mit mehreren Alternativzweigen, die je nach Auftrag (Jobnummer) abgearbeitet werden.
lt. Online-Hilfe
Alternativzweig (S7-1500)
Abhängig davon, welche Transition zuerst erfüllt ist, wird der entsprechende Zweig abgearbeitet. Sind mehrere Transitionen gleichzeitig erfüllt, hat jeweils die am weitesten links stehende Transition die höchste Priorität und der entsprechende Zweig wird abgearbeitet.
Dies war bisher auch mein Verständnis.

Deshalb gibt es bei mir ganz rechts immer einen Default-Zweig, der abgearbeitet wird wenn keine anderen Bedingungen erfüllt sind.
Dieser ist permanent TRUE, da ja dieser nur bearbeitet wird, wenn alle anderen Transitionen der Alternativ-Zweige nicht erfüllt sind.
Steht ja auch ganz rechts.

Dies funktioniert, keine Ahnung seit wann, in meiner jetzigen Version V16 Upd4 nicht mehr.

Sind mehrere Transitionen erfüllt, wird die Transition mit der geringsten Nummer abgearbeitet, auch wenn diese ganz rechts steht.

Ist das nur bei mir so, oder hat da jemand ähnliche Erfahrung?
 
Hatte da auch schon mal komisches Verhalten festgestellt.
Als Workaround hatte ich den Default-Zweig per Schrittzeit verzögert.
 
Das ist genau das dokumentierte Verhalten. Ist der Haken „Transitionen permanent bearbeiten“ in den Testeinstellungen des FBs gesetzt, zieht die Transition mit der kleinsten Nummer. Wenn nicht, die linke. Ich weiß, es ist völlig irre von Siemens, aber es ist tatsächlich so. Der Haken bleibt übrigens aktiv, auch wenn man offline ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mal ganz ehrlich....
Transitionen so zu beschalten ist doch auch nicht die sauberste Art.

Aufruf der alternativ Transition durch eine neg. der anderen Zweige halte ich persönlich für Sauberer und führt nicht zu so einem Verhalten.

Grüße
Wiesel
 
Aufruf der alternativ Transition durch eine neg. der anderen Zweige halte ich persönlich für Sauberer und führt nicht zu so einem Verhalten.
Das kann dann aber auch mal ganz schnell unübersichtlich werden. Und warum soll man im Programm Systemfunktionen nochmal nachbilden. Das Programm wird dadurch auch nicht kürzer;schneller;übersichtlicher...
 
Wozu benötigt man bei einer Alternativverzweigung einen Defaultzweig?
Ich schreibe meine Graph-Ketten auch so, dass immer der Zweig zieht, den ich auch anwähle. Egal ob rechts links unten oder oben! Alternativ heißt für mich, es gibt keine zwei Zweige gleichzeitig. Und wenn meine Kette an einer Alternativverzweigung keinen Zweig wählt, dann soll das so sein und sie bleibt da stehen, bis es eine Alternative gibt, ansonsten hab ich mich verprogrammiert! ;-) Wer soll Ketten mit Defaultzweig oder mehreren gleichzeitigen Möglichkeiten als Fremdprogrammierer korrekt nachvollziehen? Unnötig schwierig finde ich.
 
@Ralle,
da muss ich Dir leider nur bedingt zustimmen.

Leider habe ich mich weiter oben vielleicht etwas "unglücklich" ausgedrückt.
Es gibt nicht permanent diesen "Defaultzweig", sondern speziell in diesem Fall.
Ich bekomme von einer übergeordneten Steuerung (nicht von mir) einen Auftrag, je nach Auftrag verzweige ich in den jeweiligen Zweig und arbeite diesen Auftrag ab.

Beim Programmieren ist es manchmal wie im richtigen Leben.
Stell Dir vor, Du gibst einen Kollegen die Aufgabe XY, ziehst dich dann zurück und wartest darauf das dieser die Aufgabe fertig meldet.
Dieser denkt sich aber
" He, ich kenne nur Aufgabe 'A', 'B' oder 'C'. Bevor ich jetzt nicht die Aufgabe 'A', 'B' oder 'C' bekomme, halt ich meine Fresse und mache erst einmal GAR NICHTS."
Du wartest aber immer noch, das Dein Kollege die Aufgabe fertig meldet.
Das wiederum finde ich Kacke, und wenn mein Programm so reagiert, habe ich mich verprogrammiert.

Durch den Defaultzweig habe ich die Möglichkeit noch zu reagieren und der übergeordneten Steuerung mitzuteilen "Deinen Auftrag kenne ich nicht. Schicke mir bitte einen neuen gültigen Auftrag".
Ja, man könnte auch diesen Zweig auch durch Negierung aller vorhandener Zweige aufrufen.
Aber ist das hinterher immer noch lesbar? Wer will das warten?
Wir wollen ja hier auch nicht den "ELSE" Befehl in einer "IF..THEN" oder "CASE" Anweisung verteufeln.
Im Grunde genommen, ist das nichts anderes.

Es gibt wohl noch zahlreich andere Möglichkeiten, dies anders zu lösen.
Aber um dieses Thema auszudiskutieren. sollten wir uns lieber in die Rubrik "Programmierstrategien" bewegen.
Die würde wahrscheinlich genau so enden wie damals die Frage nach FUP, KOP oder AWL.
Fragst Du 10 Leute, bekommst Du 11 verschiedene Meinungen.

Worum es hier eigentlich geht:
GRAPH arbeitet ganz unterschiedlich, je nachdem ob ich unter Testeinstellungen „Transitionen permanent bearbeiten“ ausgewählt habe.

Und das finde ich sehr bedenklich.

@ TP-Inc, kann man deine Info nachlesen? Ist das irgendwo dokumentiert und ich hab es nur überlesen?
 
Zurück
Oben