Reihenfolge der Anweisungen innerhalb eines FBS-Netzwerks
Nachdem das auszuwertende Netzwerk bestimmt wurde, bestimmt logi.CAD 3 die Reihenfolge, in der die Anweisungen dieses Netzwerks →ausgewertet werden.
Regeln für die Reihenfolge
Zuerst prüft logi.CAD 3, welche der Anweisungen des Netzwerks laut der →IEC-Norm auswertbar sind.
Eine Anweisung ist auswertbar, wenn alle anderen Anweisungen, die Eingangswerte für diese Anweisung erzeugen, im aktuellen Zyklus auswertbar sind.In den Worten der IEC-NormKein Element eines Netzwerks darf ausgewertet werden, bevor die Zustände aller seiner Eingänge ausgewertet wurden.
Die Auswertung eines Netzwerk-Elements darf nicht abgeschlossen sein, bevor die Zustände aller seiner Ausgänge ausgewertet wurden.
Die Auswertung eines Netzwerks ist nicht abgeschlossen, bevor die Ausgänge aller seiner Elemente ausgewertet wurden, sogar falls das Netzwerk eines der Elemente für die Ausführungssteuerung enthält.
Beachten Sie: Falls eine Variable als Array-Index selbst oder im Array-Index verwendet wird, betrachtet logi.CAD 3 diese Variable ebenfalls als einen Eingang.
Falls logi.CAD 3 feststellt, dass
nur eine der Anweisungen im Netzwerk auswertbar ist, wird diese Anweisung ausgewertet.
mehrere Anweisungen im Netzwerk auswertbar sind, priorisiert logi.CAD 3 diese Anweisungen zur Auswertung laut dieser Reihenfolge:
Zuweisungen werden vor Aufrufen ausgewertet.
Falls mehrere Zuweisungen auswertbar sind, prüft logi.CAD 3, ob Zuweisungen direkt einem Aufruf nachfolgen. Solche Zuweisungen werden zuerst ausgewertet, da diese Zuweisungen durch den belegten Eingang EN des Aufrufs beeinflusst werden (siehe auch die nachfolgende Regel zum Aufruf mit belegten Eingang EN).
Falls weiterhin mehrere Zuweisungen auswertbar sind, bestimmt logi.CAD 3 die grafische Position dieser Zuweisungen zueinander: Die Zuweisung am weitesten oben/links wird ausgewertet (oben gilt vor links). Beachten Sie: Für Zuweisungen ist die Position des Eingangs des Wertfelds ausschlaggebend, auf das die Zuweisung erfolgt. – siehe Beispiele unten
Falls keine Zuweisungen auswertbar sind, aber mehrere Aufrufe, bestimmt logi.CAD 3 ebenfalls die grafische Position dieser Aufrufe zueinander: Der Aufruf am weitesten oben/links wird ausgewertet (oben gilt vor links).
Beachten Sie: Für Aufrufe ist die obere linke Ecke des Aufrufs ausschlaggebend (ohne einen evtl. angezeigten Instanznamen). – siehe Beispiele unten
keine einzige Anweisung im Netzwerk auswertbar ist, liegt eine →Rückkopplungsschleife vor. In diesem Fall priorisiert logi.CAD 3 diese Anweisungen zum Auflösen der Rückkopplungsschleife laut dieser Reihenfolge:
Zuerst versucht logi.CAD 3, die Summe der auszuwertenden Anweisungen zu reduzieren. Dazu werden die Anweisungen ignoriert, die der Rückkopplungsschleife nachfolgen und die keine weitere Rückkopplungsschleife enthalten.
Dann versucht logi.CAD 3, eine Rückkopplungsvariable aus den verbleibenden Anweisungen zu bestimmen. Dazu wählt logi.CAD 3 die Variable, deren Zuweisung am weitesten unten/rechts erfolgt. Auch hier gilt: Für Zuweisungen ist die Position des Eingangs des Wertfelds ausschlaggebend, auf das die Zuweisung erfolgt.
logi.CAD 3 betrachtet diese Variable für die weitere Auswertung als ausgewertet, bis sie tatsächlich ausgewertet werden kann.Falls keine Zuweisungen in den verbleibenden Anweisungen enthalten sind, wählt logi.CAD 3 den Aufruf des Funktionsbausteins, der am weitesten oben/links liegt. Auch hier gilt: Für Aufrufe ist die obere linke Ecke des Aufrufs ausschlaggebend (ohne einen evtl. angezeigten Instanznamen).
logi.CAD 3 wertet diesen Aufruf des Funktionsbausteins aus.
ein Aufruf mit einem belegten Eingang EN vorhanden ist, wird die davon abhängige Zuweisung nur ausgeführt, falls der Eingang EN=TRUE. Siehe "Beispiel für Verhalten bei Aufruf mit belegtem EN".
Sobald logi.CAD 3 eine Anweisung ausgewertet hat oder eine Rückkopplungsschleife aufgelöst hat, werden die Regeln zur Auswertung der nächsten Anweisung angewendet (beginnend mit dem 1. Schritt).
Die Regeln werden solange angewendet, bis alle Anweisungen des Netzwerks ausgewertet sind. Danach bestimmt logi.CAD 3das nächste auszuwertende Netzwerk.
logi.CAD 3 zeigt eine Abarbeitungsreihenfolge für jeden Aufruf an. Im Gegensatz dazu wird die Abarbeitungsreihenfolge für ein Wertfeld nur angezeigt, falls dafür eine Berechnung erforderlich ist. Bei den folgenden Wertfelder wird somit keine Abarbeitungsreihenfolge angezeigt:
Wertfeld mit einer →Konstante
Wertfeld mit einer →Variable , wenn der Eingang des Wertfelds nicht verbunden ist
Die folgenden "Beispiele für die Reihenfolge, keine Rückkopplungsschleifen" erklären auch diese Anzeige bzw. Nicht-Anzeige der Abarbeitungsreihenfolge.
Beispiele für die Reihenfolge, keine Rückkopplungsschleifen
Die Reihenfolge der Zuweisungen wird durch die Abarbeitungsreihenfolge (= angezeigte Nummer im roten Rechteck) in den Beispielen angezeigt.
Beispiel 1: Zugleich auswertbare Zuweisungen
Die Abarbeitungsreihenfolge wird nicht für das Wertfeld mit var1 und jenes mit var3 angezeigt. Grund: Es ist keine Berechnung für diese Wertfelder erforderlich.
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
Zuweisung auf var2 – Grund: Aufgrund der grafischen Position wird die Zuweisung auf var2 ausgewertet. Die Zuweisung auf var4, die zur gleichen Zeit auswertbar ist, liegt nämlich weiter unten als jene auf var2.
Zuweisung auf var4 – Grund: Nur diese Zuweisung auswertbar.
Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Zuweisung auf var5 – Grund: Aufgrund der grafischen Position wird die Zuweisung auf var5 ausgewertet. Die Zuweisung auf var7 ist zwar zur gleichen Zeit auswertbar (sie folgt ebenfalls direkt dem Aufruf des ADD-Bausteins nach), sie liegt aber weiter unter als jene auf var5.
Zuweisung auf var7 – Grund: Die Zuweisung auf var7 folgt direkt dem Aufruf des ADD-Bausteins nach und wird somit vor der Zuweisung auf var6 ausgewertet (obwohl die Zuweisung auf var6 weiter oben liegt).
Zuweisung auf var6– Grund: Nur diese Zuweisung auswertbar.
Beispiel 2: Zugleich auswertbare Zuweisungen, scheinbar geänderte Position
Wie in Beispiel 1 wird die Abarbeitungsreihenfolge nicht für das Wertfeld mit var1 und jenes mit var3 angezeigt und die Anweisungen werden in der gleichen Reihenfolge ausgewertet.
Die Zuweisungen auf var2 bzw. auf var4 werden in der gleichen Reihenfolge ausgewertet, da diese Zuweisungen wie in Beispiel 1 positioniert sind.
Die Zuweisungen auf var5, auf var7 bzw. auf var6 werden ebenfalls in der gleichen Reihenfolge ausgewertet, da die Zuweisung auf var5 und jene auf var7 weiterhin direkt dem Aufruf des ADD-Bausteins nachfolgen. Somit werden diese zuerst ausgewertet, obwohl davon die Zuweisung auf var6 am weitesten oben liegt.
Beispiel 3: Wie Beispiel 1, aber mit Berechnungen für die linken Wertfeldern
Im Gegensatz zu Beispiel 1 wird hier eine Abarbeitungsreihenfolge für die linken Wertfelder angezeigt, da eine Berechnung dafür erforderlich ist.
Die Anweisungen werden nun in dieser Reihenfolge ausgewertet:
Berechnung für var1*2 – Grund: Aufgrund der grafischen Position wird das Wertfeld mit var1*2 ausgewertet. Die Berechnung für var3+1, die zur gleichen Zeit auswertbar ist, liegt nämlich weiter unten.
Zuweisung auf var2 – Grund: Aufgrund der grafischen Position wird die Zuweisung auf var2 ausgewertet. Die Berechnung für var3+1, die zur gleichen Zeit auswertbar ist, liegt nämlich weiter unten.
Berechnung für var3+1 – Grund: Nur diese Berechnung ist auswertbar.
restliche Auswertung: siehe Beispiel 1, ab Zuweisung auf var4
Beispiel 4: Zugleich auswertbare Aufrufe
Die Abarbeitungsreihenfolge wird nicht für das Wertfeld mit var1, jenes mit var2, jenes mit var3 und jenes mit var4 angezeigt. Grund: Es ist keine Berechnung für diese Wertfelder erforderlich.
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
der linke, obere Aufruf des ADD-Bausteins – Grund: Aufgrund der grafischen Position wird der linke, obere Aufruf des ADD-Bausteins ausgewertet. Der linke, untere Aufruf des ADD-Bausteins, der zur gleichen Zeit auswertbar ist, liegt nämlich weiter unten als der andere Aufruf.
der linke, untere Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
der rechte Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Zuweisung auf var5 – Grund: Nur diese Zuweisung ist auswertbar.
Beispiel 5: Zugleich auswertbare Zuweisungen und Aufrufe
Die Abarbeitungsreihenfolge wird nicht für das Wertfeld mit var1, jenes mit var2, jenes mit var3 und jenes mit var7 angezeigt. Grund: Es ist keine Berechnung für diese Wertfelder erforderlich.
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
Zuweisung auf var4 – Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch der linke Aufruf des ADD-Bausteins sind zur gleichen Zeit auswertbar.
der linke Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
der mittlere Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Zuweisung auf var5 – Grund: Aufgrund der grafischen Position wird die Zuweisung auf var5 ausgewertet. Die Zuweisung auf var6, die zur gleichen Zeit auswertbar ist (sie folgt ebenfalls direkt dem Aufruf des ADD-Bausteins nach), liegt nämlich weiter unten als jene auf var5.
Zuweisung auf var6 – Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch der rechte, obere Aufruf des ADD-Bausteins sind zur gleichen Zeit auswertbar.
der rechte, obere Aufruf des ADD-Bausteins – Grund: Aufgrund der grafischen Position wird der rechte, obere Aufruf des ADD-Bausteins ausgewertet. Der rechte, untere Aufruf des ADD-Bausteins, der zur gleichen Zeit auswertbar sind, liegt nämlich weiter unten als der obere Aufruf.
Zuweisung auf var8 – Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch der rechte, untere Aufruf des ADD-Bausteins sind zur gleichen Zeit auswertbar.
der rechte, untere Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Zuweisung auf var9 – Grund: Nur diese Zuweisung auswertbar.
Beispiel 6: Wie Beispiel 5, aber mit Aufrufen in Wertfeldern
Im Gegensatz zu Beispiel 5 wird hier eine Abarbeitungsreihenfolge für die ganz linken Wertfelder angezeigt, da eine Berechnung dafür erforderlich ist.
Die Anweisungen werden nun in dieser Reihenfolge ausgewertet:
Berechnung für ADD(var1,var2) – Grund: Aufgrund der grafischen Position wird das Wertfeld mit ADD(var1,var2) ausgewertet. Die Berechnung für MOVE(IN:=var3,MOVE=>var4), die zur gleichen Zeit auswertbar ist, liegt nämlich weiter unten.
Berechnung für MOVE(IN:=var3,MOVE=>var4) – Grund: Nur diese Berechnung ist auswertbar.
der linke Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
restliche Auswertung: siehe Beispiel 5, ab Zuweisung auf var5
Beispiel 7: Anweisungen mit einer Variable als Array-Index
Die Abarbeitungsreihenfolge wird nicht für das Wertfeld mit ArrayVar[Index] und jenes mit var1 angezeigt. Grund: Es ist keine Berechnung für diese Wertfelder erforderlich.
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
der Aufruf des MOVE-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Hinweis: Die Zuweisung auf Var3 ist nicht auswertbar, da die Variable Index als Array-Index verwendet wird. Diese Variable muss ausgewertet sein, damit die Zuweisung auf Var3 auswertbar ist.Zuweisung auf Index – Grund: Nur diese Zuweisung auswertbar.
Zuweisung auf Var3 – Grund: Nur diese Zuweisung auswertbar.
Hinweis: Die Zuweisung auf Var3 ist nun auswertbar, da die Variable Index bereits ausgewertet wurde.der Aufruf des OR-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Beispiele für die Reihenfolge, mit Rückkopplungsschleifen
Beispiel 1: Explizite Rückkopplungsschleife mit Zuweisungen
Da keine einzige Anweisung auswertbar ist, liegt eine Rückkopplungsschleife vor. Dabei handelt es sich um eine explizite Rückkopplungsschleife. Da der Rückkopplungsschleife keine Anweisungen nachfolgen, kann die Summe der Anweisungen zum Auflösen der Rückkopplungsschleife nicht reduziert werden. feedback wird als Rückkopplungsvariable bestimmt, da das Wertfeld mit feedback weiter unten als das Wertfeld mit run liegt. In Folge wird feedback als ausgewertet betrachtet. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
Aufruf des AND-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Zuweisung auf run – Grund: Nur diese Zuweisung ist auswertbar.
Aufruf des OR-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Zuweisung auf feedback – Grund: Nur diese Zuweisung ist auswertbar.
Im Vergleich hier ein analoges Netzwerk, aber ohne Rückkopplungsschleife:
Diese Anweisungen werden in dieser Reihenfolge ausgewertet:
Aufruf des OR-Bausteins – Grund: Nur dieser Aufruf ist auswertbar. Im Unterschied zum Netzwerk mit der expliziten Rückkopplungsschleife sind alle Eingänge für OR auswertbar.
Zuweisung auf feedback – Grund: Nur diese Zuweisung ist auswertbar.
Aufruf des AND-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Zuweisung auf run_2 – Grund: Nur diese Zuweisung ist auswertbar.
Beispiel 2: Implizite Rückkopplungsschleife mit Zuweisungen
Analog zu Beispiel 1, nur handelt es sich hier um eine implizite Rückkopplungsschleife. Bei der Reduzierung der Anweisungen, der Bestimmung der Rückkopplungsvariable und der Auswertung der Anweisungen ergeben sich keine Unterschiede zu Beispiel 1.
Beispiel 3: Explizite Rückkopplungsschleife nur mit Funktionsbausteinen, ohne Zuweisung
Da keine einzige Anweisung auswertbar ist, liegt eine Rückkopplungsschleife vor. Dabei handelt es sich um eine explizite Rückkopplungsschleife. Da der Rückkopplungsschleife keine Anweisungen nachfolgen, kann die Summe der Anweisungen zum Auflösen der Rückkopplungsschleife nicht reduziert werden. Es kann auch keine Rückkopplungsvariable bestimmt werden, da keine Zuweisung vorhanden ist. Zum Auflösen der Rückkopplungsschleife wird in Folge der Aufruf des MyFB_B-Bausteins bestimmt. Die Anweisungen werden in dieser Reihenfolge ausgewertet:
Aufruf des MyFB_B-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.
Aufruf des MyFB_A-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Beispiel 4: Explizite Rückkopplungsschleife nur mit Funktionen, ohne Zuweisung
Beispiel 3 mit Funktionen (anstatt der Funktionsbausteine) wird als fehlerhaft markiert, da solche Rückkopplungsschleifen in logi.CAD 3 nicht unterstützt werden.
Abhängig von Ihrer Konfiguration von logi.CAD 3 wird das Beispiel 4 möglicherweise auch als Warnung (statt als Fehler) gekennzeichnet. Siehe unter "→Rückkopplungsschleife" für Details. Solch eine geänderte Konfiguration von logi.CAD 3 zeigt eine Abarbeitungsreihenfolge auch für eine Rückkopplungsschleife an, wenn diese nur Funktionen enthält:
In welcher Reihenfolge werden nun die Anweisungen ausgewertet, wenn die Rückkopplungsschleife nur Funktionen enthält und diese Rückkopplungsschleife als Warnung gekennzeichnet wird?
logi.CAD 3 wendet die Regeln zum Auflösen der Rückkopplungsschleife an, wie diese unter "Regeln für die Reihenfolge" erläutert sind – allerdings wird nun kein Aufruf eines Funktionsbausteine, sondern der Aufruf einer Funktion zum Auflösen der Rückkopplungsschleife verwendet. Dieser Aufruf der Funktion wird so bestimmt:
logi.CAD 3 wählt den Aufruf der Funktion, die am weitesten oben/links liegt. Auch hier gilt:
Für Aufrufe ist die obere linke Ecke des Aufrufs ausschlaggebend.
logi.CAD 3 wertet diesen Aufruf der Funktion aus.
Auf das obige Beispiel bezogen wird der Aufruf des AND -Bausteins bestimmt, da dieser weiter oben liegt. Die Anweisungen werden in dieser Reihenfolge ausgewertet:
Aufruf des AND-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.
Aufruf des OR-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Sobald Sie eine Zuweisung oder einen Funktionsbaustein in diese Rückkopplungsschleife einfügen, gelten erneut die Regeln zum Auflösen der Rückkopplungsschleife, wie diese unter "Regeln für die Reihenfolge" erläutert sind.
Beispiel 5: Rückkopplungsschleife mit nachfolgenden Anweisungen
Die nächsten Beispiele zeigen je eine Rückkopplungsschleife beim Aufruf des FB_D-Bausteins. Da alle anderen Anweisungen von FB_D abhängen, ist keine einzige Anweisung im Netzwerk zunächst auswertbar.
Zum Auflösen der Rückkopplungsschleife wird zuerst die Summe der Anweisungen reduziert. Grund: Anweisungen folgen der Rückkopplungsschleife nach und diese Anweisungen enthalten keine weitere Rückkopplungsschleife. Dadurch verbleibt der Aufruf des FB_D-Bausteins als einzige Anweisung für die anschließende Bestimmung jenes Aufruf des Funktionsbaustein, der am weitesten oben/links liegt (eine Rückkopplungsvariable kann nicht bestimmt werden, da die Zuweisung auf var1 eine der ignorierten Anweisungen ist). Die Anweisungen werden in dieser Reihenfolge ausgewertet:
Aufruf des FB_D-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.
Aufruf des FB_A-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Aufruf des FB_B-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Aufruf des FB_C-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Zuweisung auf var1 – Grund: Nur die Zuweisung auf var1 ist auswertbar.
Das folgende Beispiel zeigt eine 2. Rückkopplungsschleife (beim Aufruf des FB_C2-Bausteins). Dadurch ergibt sich eine andere Reihenfolge.
Zum Auflösen der Rückkopplungsschleife kann hier die Summe der Anweisungen nicht reduziert werden: Der 1. Rückkopplungsschleife folgen zwar Anweisungen nach, aber in diesen ist die andere Rückkopplungsschleife enthalten. Dadurch verbleiben alle Aufruf für die anschließende Bestimmung jenes Aufruf des Funktionsbaustein, der am weitesten oben/links liegt (eine Rückkopplungsvariable kann nicht bestimmt werden, da keine Zuweisung vorhanden ist). Der am weitesten oben/links liegende Aufruf ist der Aufruf des FB_A-Bausteins. Zum Auflösen der Rückkopplungsschleife wird in Folge der Aufruf des FB_A-Bausteins bestimmt. Die Anweisungen werden in dieser Reihenfolge ausgewertet:
Aufruf des FB_A-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.
Aufruf des FB_B-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Aufruf des FB_C2-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.
Die detaillierte Erklärung: Nachdem FB_B ausgewertet wurde, ist keine der verbleibenden Anweisungen auswertbar. Zum Auflösen der Rückkopplungsschleifen kann die Summe der Anweisungen nicht reduziert werden (es gibt keine Anweisungen, die den Rückkopplungsschleifen folgen). Daher wird der Aufruf des Funktionsbaustein bestimmt, der am weitesten oben/links liegt (da keine Zuweisung vorhanden ist, kann keine Rückkopplungsvariable bestimmt werden). Der am weitesten oben/links liegende Aufruf eines Funktionsbausteins ist der Aufruf des FB_C2-Bausteins.Aufruf des FB_D-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Das folgende Beispiel zeigt ein Konstrukt, in dem Zuweisungen und ein Aufruf direkt einem Aufruf in einer Rückkopplungsschleife nachfolgen:
Da keine einzige Anweisung auswertbar ist, liegt wieder eine Rückkopplungsschleife vor. Da die Anweisungen, die der Rückkopplungsschleife aufgrund von run nachfolgen, eine weitere Rückkopplungsschleife enthalten (jene vom Aufruf des OR-Bausteins auf den Aufruf des FB1-Bausteins) kann hier die Summe der Anweisungen nicht reduziert werden: Dadurch verbleiben alle Anweisungen zum Auflösen der Rückkopplungsschleife. initOK wird zuerst als Rückkopplungsvariable bestimmt, da das Wertfeld mit initOK weiter unten als das Wertfeld mit run liegt. Da aber weiterhin keine der Anweisung auswertbar ist, wird die nächste Rückkopplungsvariable bestimmt – das ist nun run. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
Aufruf des AND-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Nach der Auswertung von AND ist aufgrund der nächsten Rückkopplungsschleife keine der folgenden Anweisungen auswertbar. Zum Auflösen dieser Rückkopplungsschleife wird zuerst die Summe der Anweisungen reduziert. Grund: Die Zuweisungen nach dem Aufruf des FB1-Bausteins folgen der Rückkopplungsschleife nach und diese Anweisungen enthalten keine weitere Rückkopplungsschleife. Dadurch verbleibt der Aufruf des OR-Bausteins und der Aufruf des FB1-Bausteins für die anschließende Bestimmung jenes Aufruf des Funktionsbaustein, der am weitesten oben/links liegt (eine Rückkopplungsvariable kann nicht bestimmt werden, da die Zuweisungen Teil der ignorierten Anweisungen sind). Hier wird der Aufruf des FB1-Bausteins zum Auflösen der Rückkopplungsschleife gewählt, d a der OR-Baustein eine Funktion ist.Aufruf des FB1-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der 2. Rückkopplungsschleife bestimmt.
Zuweisung auf run – Grund: Die Zuweisungen auf run und initOK sind zur gleichen Zeit auswertbar. Da das Wertfeld mit run weiter oben liegt, wird die Zuweisung auf run zuerst ausgewertet.
Zuweisung auf initOK – Grund: Nur diese Zuweisung ist auswertbar.
Aufruf des OR-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Beispiel 6: Rückkopplungsschleife – geänderte Position von Anweisungen
Die nächsten Beispiele zeigen je eine Rückkopplungsschleife. Beachten Sie, dass in den Beispielen eine andere Rückkopplungsvariable oder ein anderer Aufruf eines Funktionsbaustein bestimmt wird – sofern sich die Position des ausschlaggebenden Elements geändert hat.
Das Beispiel zeigt eine Rückkopplungsschleife vom Wertfeld mit var2 auf den Aufruf des AND-Bausteins. Die Zuweisung auf var3 kann nicht ausgewertet werden (da sie dem Aufruf des AND-Bausteins nachfolgt) und wird zum Auflösen der Rückkopplungsschleife ignoriert.
var2 wird aus den verbleibenden Anweisungen als Rückkopplungsvariable bestimmt und als ausgewertet betrachtet, da das Wertfeld mit var2 weiter unten als das Wertfeld mit var1 liegt. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
|
Im folgenden Beispiel ist die Position der Wertfelder mit var1 und var2 geändert. Dadurch ergibt sich eine andere Reihenfolge, durch den Aufruf eines anderen Bausteins ergibt sich keine Änderung in der Reihenfolge.
var1 wird aus den verbleibenden Anweisungen als Rückkopplungsvariable bestimmt und als ausgewertet betrachtet, da das Wertfeld mit var1 weiter unten als das Wertfeld mit var2 liegt. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
|
Das folgende Beispiel zeigt ein komplexeres Konstrukt. In diesem Beispiel folgen der Rückkopplungsschleife keine Anweisungen nach, wodurch die Summe der Anweisungen zum Auflösen der Rückkopplungsschleife nicht reduziert wird. var1 wird als Rückkopplungsvariable bestimmt und als ausgewertet betrachtet, da das rechte Wertfeld mit var1 weiter rechts als das Wertfeld mit var2 liegt. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
|
Im folgenden Beispiel ist die Position des Wertfelds mit var2 geändert. Dadurch ergibt sich eine andere Reihenfolge.
var2 wird als Rückkopplungsvariable bestimmt und als ausgewertet betrachtet, da das Wertfeld mit var2 weiter unten als das Wertfeld mit var1 liegt. Dadurch existiert jedoch noch immer keine einzige auswertbare Anweisung. Daher wird eine erneute Rückkopplungsvariable bestimmt, und zwar var1. Beachten Sie, dass sowohl var1 als auch var2 als ausgewertet betrachtet werden. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
|
Vergleichen Sie das linke mit dem rechten Netzwerk. Die Anweisungen im linken Netzwerk werden in der gleichen Reihenfolge wie jene im rechten Netzwerk ausgewertet. Grund: Die Position für die Zuweisungen auf var2 und var1 hat sich nicht geändert. |
|
|
|
Für beide Netzwerke wird var1 als Rückkopplungsvariable bestimmt und als ausgewertet betrachtet, da das rechte Wertfeld mit var1 weiter unten als das rechte Wertfeld mit var2 liegt. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
|
Vergleichen Sie das linke mit dem rechten Netzwerk. Die Anweisungen im linken Netzwerk werden in einer anderen Reihenfolge wie jene im rechten Netzwerk ausgewertet. Grund: Die Position der Aufrufe hat sich geändert. |
|
|
|
In beiden Netzwerken kann keine Rückkopplungsvariable bestimmt werden, da keine Zuweisung vorhanden ist. Zum Auflösen der Rückkopplungsschleife wird in Folge der Aufruf des Bausteins bestimmt, da dieser am weitesten oben/links liegt. Dabei handelt es sich um einen unterschiedlichen Baustein. |
|
Im linken Netzwerk wird der Aufruf des FB2-Bausteins bestimmt. Die Anweisungen werden in dieser Reihenfolge ausgewertet:
|
Im rechten Netzwerk wird der Aufruf des FB3-Bausteins bestimmt. Die Anweisungen werden in dieser Reihenfolge ausgewertet:
|
Beispiel 7: Rückkopplungsschleife aus der Praxis
Das folgende Beispiel zeigt eine Rückkopplungsschleife von var1 auf var1.
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
der untere Aufruf des AND-Bausteins (als AND2 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)
Zuweisung auf var1 – Grund: Nach der Auswertung von AND2 existieren keine auswertbaren Anweisungen. Bei der Zuweisung auf var1 handelt es sich um eine Rückkopplungsschleife und der obere Aufruf des AND-Bausteins erhält einen Eingangswert von var1. Zum Auflösen der Rückkopplungsschleife kann die Summe der Anweisungen nicht reduziert werden, da der Rückkopplungsschleife keine Anweisungen nachfolgen. Daher wird var1 als Rückkopplungsvariable bestimmt und als ausgewertet betrachtet. In Folge sind sowohl die Zuweisung als auch der obere Aufruf des AND-Bausteins auswertbar. Da Zuweisungen vor Aufrufe ausgewertet werden, wird die Zuweisung auf var1 ausgewertet.
der obere Aufruf des AND-Bausteins (als AND1 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar.
Beispiel 8: Verschachtelte Rückkopplungsschleifen
Das folgende Beispiel zeigt zunächst keine einzige abarbeitbare Anweisung.
Das Beispiel enthält mehrere Rückkopplungsschleifen: von ADD1 auf ADD2, von ADD2 auf ADD3 und von ADD3 auf ADD4 – Sowohl ADD2 als auch ADD3 sind an zwei Rückkopplungsschleifen beteiligt, d.h. es liegen verschachtelte Rückkopplungsschleifen vor. Im Detail:
Der oberste Aufruf des ADD-Bausteins (als ADD1 bezeichnet) darf nicht ausgewertet werden, da einer seiner Eingänge durch var2 belegt ist und var2 vom darunterliegenden Aufruf des ADD-Bausteins (als ADD2 bezeichnet) berechnet wird.
ADD2 darf ebenfalls nicht ausgewertet werden. Der Eingang EN erhält den Wert vom Ausgang ENO von ADD1. Zusätzlich ist der 2. Eingang durch var3 belegt und var3 wird vom darunterliegenden ADD-Baustein (als ADD3 bezeichnet) berechnet.
Analog zu ADD2 darf ADD3 ebenfalls nicht ausgewertet werden. Der Eingang EN erhält den Wert vom Ausgang ENO von ADD2. Zusätzlich ist der 2. Eingang durch var4 belegt und var4 wird vom untersten ADD-Baustein (als ADD4 bezeichnet) berechnet.
ADD4 darf ebenfalls nicht ausgewertet werden. Der Eingang EN erhält den Wert vom Ausgang ENO von ADD3.
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
der oberste Aufruf des ADD-Bausteins (als ADD1 bezeichnet) – Grund: Zum Auflösen der Rückkopplungsschleife kann die Summe der Anweisungen nicht reduziert werden: Der 1. Rückkopplungsschleife folgen zwar Anweisungen nach, aber in diesen sind Rückkopplungsschleifen enthalten. Daher wird var4 als Rückkopplungsvariable bestimmt (dessen Wertfeld liegt am weitesten unten/rechts) und als ausgewertet betrachtet. In Folge ist jedoch weiterhin keine Anweisung auswertbar. Daher wird aus den restlichen Anweisungen erneut eine Rückkopplungsvariable bestimmt, und zwar var3 (dessen Wertfeld liegt am weitesten unten/rechts), diese wird als ausgewertet betrachtet. In Folge ist noch immer keine Anweisung auswertbar. Daher wird aus den restlichen Anweisungen erneut eine Rückkopplungsvariable bestimmt: jetzt var2 (dessen Wertfeld liegt am weitesten unten/rechts), diese wird als ausgewertet betrachtet. Nun ist der oberste Aufruf des ADD-Bausteins (als ADD1 bezeichnet) als einzige Anweisung auswertbar, da alle seine Eingangswerte auswertbar sind.
der darunterliegende Aufruf des ADD-Bausteins (als ADD2 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. Alle seine Eingangswerte sind auswertbar, da var3 aufgrund der Bestimmung der Rückkopplungsvariable noch immer als ausgewertet betrachtet wird.
Zuweisung auf var2 – Grund: Da sowohl die Zuweisung als auch ADD3 zur gleichen Zeit auswertbar sind (var4 wird aufgrund der Bestimmung der Rückkopplungsvariable ebenfalls noch immer als ausgewertet betrachtet), wird die Zuweisung ausgewertet (Zuweisungen vor Aufrufe).
der darunterliegende Aufruf des ADD-Bausteins (als ADD3 bezeichnet) – Nur dieser Aufruf ist auswertbar. Alle seine Eingangswerte sind auswertbar, da var4 – wie erwähnt – als ausgewertet betrachtet.
Zuweisung auf var3 – Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch ADD4 sind zur gleichen Zeit auswertbar.
der unterste Aufruf des AND-Bausteins (als AND4 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar.
Zuweisung auf var4 – Grund: Nur diese Zuweisung ist auswertbar.
Beispiel 9: Komplexes Beispiel mit mehreren Rückkopplungsschleifen
Das folgende Beispiel enthält 2 sofort erkennbare Rückkopplungsschleifen:
eine zwischen dem FB2-Baustein und dem FB3-Baustein und
eine zwischen den RS-Bausteinen
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
der linke Aufruf des AND-Bausteins (als AND1 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)
der danebenliegende Aufruf des AND-Bausteins (als AND2 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar.
der linke Aufruf des RS-Bausteins (als RS1 bezeichnet) – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.
Die detaillierte Erklärung: Zum Auflösen der Rückkopplungsschleife kann die Summe der Anweisungen nicht reduziert werden: Der 1. Rückkopplungsschleife folgen zwar Anweisungen nach, aber in diesen ist ebenfalls eine Rückkopplungsschleife enthalten. Daher wird der Aufruf des Funktionsbaustein bestimmt, der am weitesten oben/links liegt (da keine Zuweisung vorhanden ist, kann keine Rückkopplungsvariable bestimmt werden). Der am weitesten oben/links liegende Aufruf eines Funktionsbausteins (beachten Sie, dass es sich bei den XOR-Bausteinen um Funktionen handelt) ist der linke Aufruf des RS-Bausteins (als RS1 bezeichnet). Zum Auflösen der Rückkopplungsschleife wird also der linke Aufruf des RS-Bausteins (als RS1 bezeichnet) bestimmt.der rechte Aufruf des RS-Bausteins (als RS2 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)
der Aufruf des FB2-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.
Die detaillierte Erklärung: Nach der Auswertung von RS2 sind wieder keine Anweisungen auswertbar. Zum Auflösen der Rückkopplungsschleife wird daher wieder der Aufruf des Funktionsbaustein ausgewählt, der am weitesten oben/links liegt. Das ist nun der Aufruf des FB2-Bausteins.der Aufruf des FB3-Bausteins – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)
der linke Aufruf des XOR-Bausteins (als XOR1 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)
der mittlere Aufruf des XOR-Bausteins (als XOR2 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)
der rechte Aufruf des XOR-Bausteins (als XOR3 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)
Beispiel für Verhalten bei Aufruf mit belegtem EN
Es ist möglich, dass die Auswertung innerhalb des Netzwerks durch einen Aufruf mit einem belegten Eingang EN beeinflusst wird. Grund: Die direkt folgende Zuweisung, die von diesem Aufruf abhängt, wird in eine sogenannte EN-Klammerung platziert. Nachfolgende Anweisungen werden außerhalb dieser EN-Klammerung platziert.
Der Zustand des Eingangs EN bestimmt, ob die abhängige Zuweisung ausgeführt wird oder nicht. Bei EN=TRUE wird sie ausgeführt, bei EN=FALSE wird sie nicht ausgeführt.
Beispiel: Die Anweisungen enthalten den Aufruf eines MOVE-Bausteins mit belegtem EN.
Die Zuweisungsanweisung auf Var2 wird in die EN-Klammerung platziert und ist somit vom Zustand des Eingangs EN abhängig.
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
der Aufruf des MOVE-Bausteins – Grund: Nur dieser Aufruf ist auswertbar. (Die Zuweisung auf Var3 ist nicht auswertbar, da der MOVE-Baustein einen Wert auf Var2 zuweist.)
Zuweisung auf Var2 – Grund: Nur diese Zuweisung ist auswertbar.
Diese Zuweisung wird in die EN-Klammerung platziert, da sie von MOVE abhängt. Alle anderen Anweisungen werden außerhalb der EN-Klammerung platziert.Zuweisung auf Var3 – Grund: Nur diese Zuweisung ist auswertbar.
der Aufruf des OR-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Folgender Code entsteht (vereinfachte Darstellung):
IF (Var1 != false)
{
MOVE(false);
Var2:=MOVE.OUT1;
}
Var3:=Var2;
OR(IN1:=Var3,IN2:=MOVE.ENO);
Dieser vereinfachte Code visualisiert, dass ist die Zuweisung auf Var2 nur bei Var1=TRUE ausgeführt wird. Grund: Bei Var1=TRUE gilt auch EN=TRUE.