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

  1. 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-Norm
    • Kein 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.

  2. 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".

  3. 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.

Gut zu wissen

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/lightbulb.svg 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

images/download/attachments/413893565/PositionForValueFields3-version-1-modificationdate-1533821518379-api-v22.png

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:

  1. 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.

  2. Zuweisung auf var4 – Grund: Nur diese Zuweisung auswertbar.

  3. Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  4. 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.

  5. 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).

  6. Zuweisung auf var6– Grund: Nur diese Zuweisung auswertbar.

Beispiel 2: Zugleich auswertbare Zuweisungen, scheinbar geänderte Position

images/download/attachments/414777881/PositionForValueFields4-version-1-modificationdate-1534231363217-api-v2.png

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

images/download/attachments/435193662/PositionForValueFields3b-version-1-modificationdate-1574074274503-api-v2.png

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:

  1. 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.

  2. 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.

  3. Berechnung für var3+1 – Grund: Nur diese Berechnung ist auswertbar.

  4. restliche Auswertung: siehe Beispiel 1, ab Zuweisung auf var4

Beispiel 4: Zugleich auswertbare Aufrufe

images/download/attachments/414777886/PositionForCalls3-version-1-modificationdate-1534231399507-api-v2.png

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:

  1. 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.

  2. der linke, untere Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  3. der rechte Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  4. Zuweisung auf var5 – Grund: Nur diese Zuweisung ist auswertbar.

Beispiel 5: Zugleich auswertbare Zuweisungen und Aufrufe

images/download/attachments/414777876/OrderOfStatements-version-1-modificationdate-1534231329692-api-v2.png

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:

  1. Zuweisung auf var4 – Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch der linke Aufruf des ADD-Bausteins sind zur gleichen Zeit auswertbar.

  2. der linke Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  3. der mittlere Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  4. 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.

  5. Zuweisung auf var6 – Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch der rechte, obere Aufruf des ADD-Bausteins sind zur gleichen Zeit auswertbar.

  6. 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.

  7. Zuweisung auf var8 – Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch der rechte, untere Aufruf des ADD-Bausteins sind zur gleichen Zeit auswertbar.

  8. der rechte, untere Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  9. Zuweisung auf var9 – Grund: Nur diese Zuweisung auswertbar.

Beispiel 6: Wie Beispiel 5, aber mit Aufrufen in Wertfeldern

images/download/attachments/435193672/OrderOfStatementsb-version-1-modificationdate-1574075167390-api-v2.png

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:

  1. 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.

  2. Berechnung für MOVE(IN:=var3,MOVE=>var4) – Grund: Nur diese Berechnung ist auswertbar.

  3. der linke Aufruf des ADD-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  4. restliche Auswertung: siehe Beispiel 5, ab Zuweisung auf var5

Beispiel 7: Anweisungen mit einer Variable als Array-Index

images/download/attachments/414777891/OrderOfStatementsArray-version-1-modificationdate-1534231428302-api-v2.png

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:

  1. 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.

  2. Zuweisung auf Index – Grund: Nur diese Zuweisung auswertbar.

  3. Zuweisung auf Var3 – Grund: Nur diese Zuweisung auswertbar.
    Hinweis: Die Zuweisung auf Var3 ist nun auswertbar, da die Variable Index bereits ausgewertet wurde.

  4. 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

images/download/attachments/441090067/OrderOfStatements_FBLoop_1a-version-2-modificationdate-1580370557690-api-v2.png

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:

  1. Aufruf des AND-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  2. Zuweisung auf run – Grund: Nur diese Zuweisung ist auswertbar.

  3. Aufruf des OR-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  4. Zuweisung auf feedback – Grund: Nur diese Zuweisung ist auswertbar.

Im Vergleich hier ein analoges Netzwerk, aber ohne Rückkopplungsschleife:

images/download/attachments/441090070/OrderOfStatements_NoFBLoop_1-version-1-modificationdate-1580370564671-api-v2.png

Diese Anweisungen werden in dieser Reihenfolge ausgewertet:

  1. 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.

  2. Zuweisung auf feedback – Grund: Nur diese Zuweisung ist auswertbar.

  3. Aufruf des AND-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  4. Zuweisung auf run_2 – Grund: Nur diese Zuweisung ist auswertbar.

Beispiel 2: Implizite Rückkopplungsschleife mit Zuweisungen

images/download/attachments/441090068/OrderOfStatements_FBLoop_1b-version-2-modificationdate-1580370561161-api-v2.png

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

images/download/attachments/516825709/OrderOfStatements_FBLoop_1c-version-2-modificationdate-1677664919821-api-v2.png

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:

  1. Aufruf des MyFB_B-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.

  2. 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.

images/download/attachments/414777911/OrderOfStatements_FBLoop_1d-version-1-modificationdate-1534231509371-api-v2.png

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg 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:
images/download/attachments/516825722/OrderOfStatements_FBLoop_1dWarning-version-2-modificationdate-1677664962792-api-v2.png

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:

  1. Aufruf des AND-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.

  2. 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.

images/download/attachments/516825735/OrderOfStatements_FBLoop_2a-version-2-modificationdate-1677664990798-api-v2.png

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:

  1. Aufruf des FB_D-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.

  2. Aufruf des FB_A-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  3. Aufruf des FB_B-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  4. Aufruf des FB_C-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  5. 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.

images/download/attachments/516825749/OrderOfStatements_FBLoop_2b-version-4-modificationdate-1678350159867-api-v2.png

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:

  1. Aufruf des FB_A-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.

  2. Aufruf des FB_B-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  3. 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.

  4. 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:

images/download/attachments/516825762/OrderOfStatements_FBLoop_2c-version-2-modificationdate-1677665114620-api-v2.png

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:

  1. 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.

  2. Aufruf des FB1-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der 2. Rückkopplungsschleife bestimmt.

  3. 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.

  4. Zuweisung auf initOK – Grund: Nur diese Zuweisung ist auswertbar.

  5. 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.

images/download/attachments/414777928/OrderOfStatements_FBLoop_3a-version-1-modificationdate-1534231583492-api-v2.png

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:

  1. Aufruf des AND-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  2. Zuweisung auf var1 – Grund: Aufgrund der grafischen Position wird die Zuweisung auf var1 ausgewertet. Die Zuweisung auf var3 ist zwar zur gleichen Zeit auswertbar (sie folgt ebenfalls direkt dem Aufruf des AND-Bausteins nach), sie liegt aber weiter unter als jene auf var1.

  3. Zuweisung auf var3 – Grund: Die Zuweisung auf var3 folgt direkt dem Aufruf des AND-Bausteins nach und wird somit vor der Zuweisung auf var2 ausgewertet (obwohl die Zuweisung auf var2 weiter oben liegt).

  4. Zuweisung auf var2 – Grund: Nur diese Zuweisung ist auswertbar.

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.

images/download/attachments/414777933/OrderOfStatements_FBLoop_3b-version-1-modificationdate-1534231604612-api-v2.png

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:

  1. Zuweisung auf var2 – Grund: Nur diese Zuweisung ist auswertbar.

  2. Aufruf des OR-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  3. Zuweisung auf var1 – Grund: Aufgrund der grafischen Position wird die Zuweisung auf var1 ausgewertet. Die Zuweisung auf var3 ist zwar zur gleichen Zeit auswertbar (sie folgt ebenfalls direkt dem Aufruf des AND-Bausteins nach), sie liegt aber weiter unter als jene auf var1.

  4. Zuweisung auf var3 – Grund: Nur diese Zuweisung ist auswertbar.

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.
images/download/attachments/414777938/OrderOfStatements_FBLoop_3c-version-1-modificationdate-1534231625371-api-v2.png

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:

  1. Aufruf des FB1-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  2. Aufruf des FB2-Bausteins – Grund: Nur dieser Aufruf ist auswertbar. (var1 wird weiterhin als ausgewertet betrachtet. Der Aufruf des FB3-Bausteins ist nicht auswertbar, da einer seiner Eingangswerte von var2 erzeugt wird und var2 wurde noch nicht ausgewertet.)

  3. Zuweisung auf var2 – Grund: Nur diese Zuweisung ist auswertbar.

  4. Aufruf des FB3-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  5. Zuweisung auf var1 – Grund: Nur diese Zuweisung ist auswertbar.

Im folgenden Beispiel ist die Position des Wertfelds mit var2 geändert. Dadurch ergibt sich eine andere Reihenfolge.

images/download/attachments/414777943/OrderOfStatements_FBLoop_3d-version-1-modificationdate-1534231648758-api-v2.png

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:

  1. Aufruf des FB1-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  2. Aufruf des FB3-Bausteins – Grund: Aufgrund der grafischen Position wird der Aufruf des FB3-Bausteins ausgewertet, obwohl der Aufruf des FB2-Bausteins ebenfalls auswertbar ist. Zur Erinnerung: Da sowohl var1 als auch var2 als ausgewertet betrachtet werden, sind die Aufrufe für FB2 und FB3 auswertbar. Und wenn mehrere Aufrufe auswertbar sind, wird jener Aufruf ausgewertet, der am weitesten oben/links liegt.

  3. Zuweisung auf var1 – Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch der Aufruf des FB2-Bausteins sind zur gleichen Zeit auswertbar.

  4. Aufruf des FB2-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

  5. Zuweisung auf var2 – Grund: Nur diese Zuweisung ist auswertbar.

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.

images/download/attachments/414777948/OrderOfStatements_FBLoop_5b-version-1-modificationdate-1534231670082-api-v2.png

images/download/attachments/414777953/OrderOfStatements_FBLoop_5a-version-1-modificationdate-1534231692029-api-v2.png

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:

  1. Zuweisung auf var2 – Grund: Nur diese Zuweisung ist auswertbar.

  2. Zuweisung auf var1 – Grund: Nur diese Zuweisung ist auswertbar.

  3. Aufruf des FB2-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

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.

images/download/attachments/516825778/OrderOfStatements_FBLoop_5c-version-2-modificationdate-1677665142127-api-v2.png


images/download/attachments/516825791/OrderOfStatements_FBLoop_5d-version-2-modificationdate-1677665171201-api-v2.png

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:

  1. Aufruf des FB2-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.

  2. Aufruf des FB3-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

Im rechten Netzwerk wird der Aufruf des FB3-Bausteins bestimmt. Die Anweisungen werden in dieser Reihenfolge ausgewertet:

  1. Aufruf des FB3-Bausteins – Grund: Dieser Aufruf wurde zum Auflösen der Rückkopplungsschleife bestimmt.

  2. Aufruf des FB2-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.

Beispiel 7: Rückkopplungsschleife aus der Praxis

Das folgende Beispiel zeigt eine Rückkopplungsschleife von var1 auf var1.

images/download/thumbnails/414777968/OrderOfStatements_FBLoop_6-version-1-modificationdate-1534231756894-api-v2.png

Die Anweisungen werden in dieser Reihenfolge ausgewertet:

  1. der untere Aufruf des AND-Bausteins (als AND2 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)

  2. 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.

  3. 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.

images/download/attachments/414777973/OrderOfStatements_FBLoop_7-version-1-modificationdate-1534231779960-api-v2.png

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:

  1. 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.

  2. 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.

  3. 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).

  4. 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.

  5. Zuweisung auf var3 – Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch ADD4 sind zur gleichen Zeit auswertbar.

  6. der unterste Aufruf des AND-Bausteins (als AND4 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar.

  7. 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

images/download/attachments/516825805/OrderOfStatements_FBLoop_8-version-2-modificationdate-1677665543796-api-v2.png

Die Anweisungen werden in dieser Reihenfolge ausgewertet:

  1. der linke Aufruf des AND-Bausteins (als AND1 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)

  2. der danebenliegende Aufruf des AND-Bausteins (als AND2 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar.

  3. 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.

  4. der rechte Aufruf des RS-Bausteins (als RS2 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)

  5. 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.

  6. der Aufruf des FB3-Bausteins – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)

  7. der linke Aufruf des XOR-Bausteins (als XOR1 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)

  8. der mittlere Aufruf des XOR-Bausteins (als XOR2 bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.)

  9. 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.

images/download/attachments/414777988/ENBracketing-version-1-modificationdate-1534235180222-api-v2.png

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:

  1. 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.)

  2. 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.

  3. Zuweisung auf Var3 – Grund: Nur diese Zuweisung ist auswertbar.

  4. 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.