Reihenfolge der Anweisungen innerhalb eines FBS-Netzwerks
Nachdem das auszuwertende Netzwerk bestimmt wurde, bestimmt Neuron Power Engineer die Reihenfolge, in der die Anweisungen dieses Netzwerks →ausgewertet werden.
Regeln für die Reihenfolge
-
Zuerst prüft Neuron Power Engineer, 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.
Implementierungsabhängige Realisierung
Die IEC-Norm definiert, dass es dem Anwender möglich sein muss, ein implementiererspezifisches Mittel zu verwenden, um die Reihenfolge der Ausführung der Elemente in einer expliziten →Rückkopplungsschleife zu bestimmen, z.B. durch die Auswahl einer Rückkopplungsvariable.
Neuron Power Engineer versucht daher, eine Rückkopplungsschleife mit Hilfe von Rückkopplungsvariablen aufzulösen. Falls jedoch keine Variable in der Rückkopplungsschleife enthalten ist, werden die Aufrufe zum Auflösen der Rückkopplungsschleife verwendet.
Als Folge empfiehlt Neuron Ihnen, solche Rückkopplungsvariablen in Rückkopplungsschleifen zu verwenden. Einerseits können Sie die Abarbeitungsreihenfolge der Netzwerk-Elemente mit Hilfe einer Rückkopplungsvariable besser steuern. Und andererseits bleiben Sie damit konform zur IEC-Norm, da Rückkopplungschleifen ohne Rückkopplungsvariable nicht in der IEC-Norm vorgesehen sind.
Beachten Sie: Falls eine Variable als Array-Index selbst oder im Array-Index verwendet wird, betrachtet Neuron Power Engineer diese Variable ebenfalls als einen Eingang.
-
-
Falls Neuron Power Engineer feststellt, dass
-
nur eine der Anweisungen im Netzwerk auswertbar ist, wird diese Anweisung ausgewertet.
-
mehrere Anweisungen im Netzwerk auswertbar sind, priorisiert Neuron Power Engineer diese Anweisungen zur Auswertung laut dieser Reihenfolge:
-
Zuweisungen werden vor Aufrufen ausgewertet.
Vergleiche...
Zuweisungsanweisungen (kurz: →Zuweisungen): Zuweisungen werden durch die Positionierung eines Wertfelds und das Verbinden mit einem Aufruf oder anderen Wertfeld erzeugt.
Hier sehen Sie Zuweisungen zur Variable
var3
bzw.var5
:Aufrufsanweisungen (kurz: →Aufrufe): Aufrufe werden durch die Positionierung eines →Funktionsbausteins oder einer →Funktion erzeugt.
Hier sehen Sie Aufrufe der
SUB
-Funktion, derAND
-Funktion bzw. desTON
-Funktionsbausteins:
AS-Elemente eines →AS-Netzwerks verhalten sich prinzipiell wie Aufrufe im Netzwerk. Beachten Sie jedoch, dass AS-Elemente laut vorgegebenen Ablaufregeln ausgewertet werden. -
Falls mehrere Zuweisungen auswertbar sind, prüft Neuron Power Engineer, 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 EingangEN
). -
Falls weiterhin mehrere Zuweisungen auswertbar sind, bestimmt Neuron Power Engineer 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 Neuron Power Engineer 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 Neuron Power Engineer diese Anweisungen zum Auflösen der Rückkopplungsschleife laut dieser Reihenfolge:
-
Zuerst versucht Neuron Power Engineer, die Summe der auszuwertenden Anweisungen zu reduzieren. Dazu ignoriert Neuron Power Engineer die Anweisungen, die der Rückkopplungsschleife nachfolgen und die keine weitere Rückkopplungsschleife enthalten.
-
Dann versucht Neuron Power Engineer, eine Rückkopplungsvariable aus den verbleibenden Anweisungen zu bestimmen. Dazu wählt Neuron Power Engineer 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.
Neuron Power Engineer 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 Neuron Power Engineer den Aufruf des Funktionsbausteins, der am weitesten oben/links liegt. Beachten Sie: Für Aufrufe ist die obere linke Ecke des Aufrufs ausschlaggebend (ohne einen evtl. angezeigten Instanznamen).
Neuron Power Engineer betrachtet die Ausgänge dieses Aufrufs als ausgewertet, bis der Aufruf tatsächlich ausgewertet werden kann. Direkt nachfolgende Zuweisungen werden von der Auswertung solange zurückgestellt, bis der Aufruf tatsächlich ausgewertet wurde. Für die weitere Auswertung verbleiben somit nur die nachfolgenden Aufrufe.
-
-
ein Aufruf mit einem belegten Eingang
EN
vorhanden ist, wird die davon abhängige Zuweisung nur ausgeführt, falls der EingangEN=TRUE
. Siehe "Beispiel für Verhalten bei Aufruf mit belegtem EN".
-
-
Sobald Neuron Power Engineer 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 Neuron Power Engineer das nächste auszuwertende Netzwerk.
Gut zu wissen |
---|
Neuron Power Engineer 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:
Die folgenden "Beispiele für die Reihenfolge, keine Rückkopplungsschleifen" erklären auch diese Anzeige bzw. Nicht-Anzeige der Abarbeitungsreihenfolge.
Die Regeln in diesem Artikel und die folgenden Beispiele gelten für die Standardkonfiguration von Neuron Power Engineer. Unterschiedliche Regeln werden angewendet, falls Sie mit Hilfe der Start-Option |
Beispiele für die Reihenfolge, keine Rückkopplungsschleifen
-
Beispiel 2: Zugleich auswertbare Zuweisungen, scheinbar geänderte Position
-
Beispiel 3: Wie Beispiel 1, aber mit Berechnungen für die linken Wertfeldern
-
Beispiel 6: Wie Beispiel 5, aber mit Aufrufen in Wertfeldern
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 aufvar2
ausgewertet. Die Zuweisung aufvar4
, die zur gleichen Zeit auswertbar ist, liegt nämlich weiter unten als jene aufvar2
. -
Zuweisung auf
var4
– Grund: Nur diese Zuweisung ist auswertbar. -
Aufruf des
ADD
-Bausteins – Grund: Nur dieser Aufruf ist auswertbar. -
Zuweisung auf
var5
– Grund: Aufgrund der grafischen Position wird die Zuweisung aufvar5
ausgewertet. Die Zuweisung aufvar7
ist zwar zur gleichen Zeit auswertbar (sie folgt ebenfalls direkt dem Aufruf desADD
-Bausteins nach), sie liegt aber weiter unter als jene aufvar5
. -
Zuweisung auf
var7
– Grund: Die Zuweisung aufvar7
folgt direkt dem Aufruf desADD
-Bausteins nach und wird somit vor der Zuweisung aufvar6
ausgewertet (obwohl die Zuweisung aufvar6
weiter oben liegt). -
Zuweisung auf
var6
– Grund: Nur diese Zuweisung ist 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. aufvar4
werden ebenfalls in der gleichen Reihenfolge ausgewertet, da diese Zuweisungen wie in Beispiel 1 positioniert sind. -
Die Zuweisungen auf
var5
,var7
andvar6
werden in der gleichen Reihenfolge ausgewertet, da diese Zuweisungen aufvar5
wie und jene aufvar7
weiterhin direkt dem Aufruf desADD
-Bausteins nachfolgen. Somit werden diese vor der Zuweisung aufvar6
zuerst ausgewertet, obwohl davon die Zuweisung aufvar6
am weitesten oben von diesen 3 Zuweisungen 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 mitvar1*2
ausgewertet. Die Berechnung fürvar3+1
, die zur gleichen Zeit auswertbar ist, liegt nämlich weiter unten als jene fürvar1*2
. -
Zuweisung auf
var2
– Grund: Aufgrund der grafischen Position wird die Zuweisung aufvar2
ausgewertet. Die Berechnung fürvar3+1
, die zur gleichen Zeit auswertbar ist, liegt nämlich weiter unten als jene fürvar2
. -
Berechnung für
var3+1
– Grund: Nur diese Berechnung ist auswertbar. -
restliche Auswertung: siehe Beispiel 5, 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 desADD
-Bausteins ausgewertet. Der linke, untere Aufruf desADD
-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 desADD
-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 aufvar5
ausgewertet. Die Zuweisung aufvar6
ist zwar zur gleichen Zeit auswertbar (sie folgt ebenfalls direkt dem Aufruf desADD
-Bausteins nach), sie liegt aber weiter unter als jene aufvar5
. -
Zuweisung auf
var6
– Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch der rechte, obere Aufruf desADD
-Bausteins sind zur gleichen Zeit auswertbar. -
der rechte, obere Aufruf des
ADD
-Bausteins – Grund: Aufgrund der grafischen Position wird der rechte, obere Aufruf desADD
-Bausteins ausgewertet. Der rechte, untere Aufruf desADD
-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, obere Aufruf desADD
-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 ist 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 mitADD(var1,var2)
ausgewertet. Die Berechnung fürMOVE(IN:=var3,MOVE=>var4)
, die zur gleichen Zeit auswertbar ist, liegt nämlich weiter unten als jene fürADD(var1,var2)
. -
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 aufVar3
ist nicht auswertbar, da die VariableIndex
als Array-Index verwendet wird. Diese Variable muss ausgewertet sein, damit die Zuweisung aufVar3
auswertbar ist. -
Zuweisung auf
Index
– Grund: Nur diese Zuweisung ist auswertbar. -
Zuweisung auf
Var3
– Grund: Nur diese Zuweisung ist auswertbar.
Hinweis: Die Zuweisung aufVar3
ist nun auswertbar, da die VariableIndex
bereits ausgewertet wurde. -
der Aufruf des
OR
-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Beispiele für die Reihenfolge, mit Rückkopplungsschleifen
-
Beispiel 3: Explizite Rückkopplungsschleife nur mit Funktionsbausteinen, ohne Zuweisung
-
Beispiel 4: Explizite Rückkopplungsschleife nur mit Funktionen, ohne Zuweisung
-
Beispiel 5: Rückkopplungsschleife mit nachfolgenden Anweisungen
-
Beispiel 6: Rückkopplungsschleife – geänderte Position von Anweisungen
-
Beispiel 9: Komplexes Beispiel mit mehreren 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, da dieser am weitesten oben liegt. Nun betrachtet Neuron Power Engineer den Ausgang dieses Bausteins als ausgewertet. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
-
Aufruf des
MyFB_A
-Bausteins – Grund: Nur dieser Aufruf ist auswertbar. -
Aufruf des
MyFB_B
-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 Neuron Power Engineer nicht unterstützt werden.
Abhängig von Ihrer Konfiguration von Neuron Power Engineer 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 Neuron Power Engineer 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?
Neuron Power Engineer wendet die Regeln zum Auflösen der Rückkopplungsschleife an, wie diese unter "Regeln für die Reihenfolge" erläutert sind – allerdings verwendet Neuron Power Engineer nun keinen Aufruf eines Funktionsbausteine, sondern den Aufruf einer Funktion zum Auflösen der Rückkopplungsschleife. Dieser Aufruf der Funktion wird so bestimmt:
Neuron Power Engineer 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. Neuron Power Engineer betrachtet die Ausgänge dieses Aufrufs als ausgewertet, bis der Aufruf tatsächlich ausgewertet werden kann. Direkt nachfolgende Zuweisungen werden von der Auswertung solange zurückgestellt, bis der Aufruf tatsächlich ausgewertet wurde.
Auf das obige Beispiel bezogen wird der Aufruf des AND
-Bausteins bestimmt, da dieser weiter oben liegt. In Folge wird der Ausgang von Neuron Power Engineer als ausgewertet und die Anweisungen werden in dieser Reihenfolge ausgewertet:
-
Aufruf des
OR
-Bausteins – Grund: Nur dieser Aufruf ist auswertbar. -
Aufruf des
AND
-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Sobald Sie eine Zuweisung oder einen Funktionsbaustein in diese Rückkopplungsschleife einfügen, verwendet Neuron Power Engineer 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). In Folge wird der Ausgang von FB_D
als ausgewertet und die Anweisungen werden in dieser Reihenfolge ausgewertet:
-
Aufruf des
FB_A
-Bausteins – Grund: Der Aufruf desFB_A
-Bausteins und der Aufruf desFB_D
-Bausteins sind zur gleichen Zeit auswertbar. Aufgrund der grafischen Position wirdFB_A
ausgewertet (FB_A
liegt weiter oben alsFB_D
). -
Aufruf des
FB_B
-Bausteins – Grund: Der Aufruf desFB_B
-Bausteins und der Aufruf desFB_D
-Bausteins sind zur gleichen Zeit auswertbar. Aufgrund der grafischen Position wirdFB_B
ausgewertet (FB_B
liegt weiter oben alsFB_D
). -
Aufruf des
FB_C
-Bausteins – Grund: Der Aufruf desFB_C
-Bausteins und der Aufruf desFB_D
-Bausteins sind zur gleichen Zeit auswertbar. Aufgrund der grafischen Position wirdFB_C
ausgewertet (FB_C
liegt weiter oben alsFB_D
). -
Zuweisung auf
var1
– Grund: Die Zuweisung aufvar1
und der Aufruf desFB_D
-Bausteins sind zur gleichen Zeit auswertbar. Da die Zuweisung aufvar1
nicht direkt dem Aufruf desFB_D
-Bausteins nachfolgt, wird sie von der Auswertung nicht zurückgestellt. Somit gilt, dass Zuweisungen vor Aufrufe ausgewertet werden. Deshalb wird die Zuweisung aufvar1
ausgewertet. -
Aufruf des
FB_D
-Bausteins – Grund: Nur dieser Aufruf 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ückkopplungsschleifen kann hier die Summe der Anweisungen zuerst nicht reduziert werden. Grund: Der 1. Rückkopplungsschleife folgen zwar Anweisungen nach, aber in diesen ist die andere Rückkopplungsschleife enthalten. Dadurch verbleiben alle Aufrufe für das Auflösen der Rückkopplungsschleifen. Hier bestimmt Neuron Power Engineer zuerst die Rückkopplungsschleife, die aufzulösen ist. Diese Bestimmung erfolgt anhand der Aufrufe FB_D
(in der linken Rückkopplungsschleife enthalten) und FB_C2
(in der rechten Rückkopplungsschleife enthalten). Da FB_C2
weiter oben als FB_D
liegt, wird die rechte Rückkopplungsschleife mit FB_D
zuerst aufgelöst. Somit wird der Ausgang von FB_C2
als ausgewertet betrachtet, bis dieser Aufruf tatsächlich ausgewertet werden kann. In Folge ist die rechte Rückkopplungsschleife nicht mehr für die weitere Auswertung vorhanden. Da aber weiterhin keine der Anweisung auswertbar ist, wird die andere (linke) Rückkopplungsschleife mit FB_D
aufgelöst. Somit wird auch der Ausgang von FB_D
als ausgewertet betrachtet, wodurch nun der Aufruf des FB_A
-Bausteins auswertbar ist. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
-
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_C2
-Bausteins – Grund: Nach der Auswertung vonFB_B
kannFB_C2
tatsächlich ausgewertet werden. -
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. Die Anweisungen, die der Rückkopplungsschleife aufgrund von run
nachfolgen, enthalten eine weitere Rückkopplungsschleife (jene vom Aufruf des OR
-Bausteins auf den Aufruf des FB1
-Bausteins), Daher kann hier die Summe der Anweisungen nicht reduziert werden. Dadurch verbleiben alle Aufrufe für das Auflösen der Rückkopplungsschleifen. initOK
wird zuerst als Rückkopplungsvariable bestimmt, da das Wertfeld mit initOK
weiter unten als das Wertfeld mit run
liegt. In Folge ist jedoch weiterhin keine Anweisung auswertbar. Daher wird eine erneute Rückkopplungsvariable bestimmt, und zwar run
. In Folge werden die Anweisungen in dieser Reihenfolge ausgewertet:
-
Aufruf des
AND
-Bausteins – Grund: Nur dieser Aufruf ist auswertbar.
Nach der Auswertung vonAND
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 desFB1
-Bausteins folgen der Rückkopplungsschleife nach und diese Anweisungen enthalten keine weitere Rückkopplungsschleife. Dadurch verbleibt der Aufruf desOR
-Bausteins und der Aufruf desFB1
-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 desFB1
-Bausteins zum Auflösen der Rückkopplungsschleife gewählt, da derOR
-Baustein eine Funktion ist. In Folge werden die Ausgänge vonFB1
als ausgewertet betrachtet und die restlichen Anweisungen können nun weiter ausgewertet werden. Da die Zuweisungen aufrun
undinitOK
dem Aufruf vonFB1
direkt nachfolgen, werden diese jedoch von der Auswertung solange zurückgestellt, bis der Aufruf vonFB1
tatsächlich ausgewertet wurde. -
Aufruf des
OR
-Bausteins – Grund: Nach dem Auflösen der 2. Rückkopplungsschleife ist nur dieser Aufruf auswertbar, da alle seine Eingangswerte auswertbar sind. -
Aufruf des
FB1
-Bausteins – Grund: Nur dieser Aufruf ist auswertbar. -
Zuweisung auf
run
– Grund: Nach der tatsächlichen Auswertung vonFB1
sind nun die Zuweisungen aufrun
undinitOK
zur gleichen Zeit auswertbar. Da das Wertfeld mitrun
weiter oben liegt, wird die Zuweisung aufrun
zuerst ausgewertet. -
Zuweisung auf
initOK
– Grund: Nur diese Zuweisung 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 .
|
Im folgenden Beispiel ist die Position der Wertfeld mit
|
Das folgende Beispiel zeigt ein komplexeres Konstrukt. In diesem Beispiel folgen der Rückkopplungsschleife keine Anweisungen nach. Dadurch wird die Summe der Anweisungen zum Auflösen der Rückkopplungsschleife nicht reduziert.
|
Im folgenden Beispiel ist die Position des Wertfelds mit
|
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 |
|
|
|
Für beide Netzwerke wird
|
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
|
Im rechten Netzwerk wird der Aufruf des
|
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 (alsAND2
bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.) -
Zuweisung auf
var1
– Grund: Nach der Auswertung vonAND2
existieren keine auswertbaren Anweisungen. Bei der Zuweisung aufvar1
handelt es sich um eine Rückkopplungsschleife und der obere Aufruf desAND
-Bausteins erhält einen Eingangswert vonvar1
. Zum Auflösen der Rückkopplungsschleife kann die Summe der Anweisungen nicht reduziert werden, da der Rückkopplungsschleife keine Anweisungen nachfolgen. Daher wirdvar1
als Rückkopplungsvariable bestimmt und als ausgewertet betrachtet. In Folge sind sowohl die Zuweisung als auch der obere Aufruf desAND
-Bausteins auswertbar. Da Zuweisungen vor Aufrufe ausgewertet werden, wird die Zuweisung aufvar1
ausgewertet. -
der obere Aufruf des
AND
-Bausteins (alsAND1
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 (alsADD1
bezeichnet) darf nicht ausgewertet werden, da einer seiner Eingänge durchvar2
belegt ist undvar2
vom darunterliegenden Aufruf desADD
-Bausteins (alsADD2
bezeichnet) berechnet wird. -
ADD2
darf ebenfalls nicht ausgewertet werden. Der EingangEN
erhält den Wert vom AusgangENO
vonADD1
. Zusätzlich ist der 2. Eingang durchvar3
belegt undvar3
wird vom unterstenADD
-Baustein (alsADD3
bezeichnet) berechnet. -
Analog zu
ADD2
darfADD3
ebenfalls nicht ausgewertet werden. Der EingangEN
erhält den Wert vom AusgangENO
vonADD2
. Zusätzlich ist der 2. Eingang durchvar4
belegt undvar4
wird vom unterstenADD
-Baustein (alsADD4
bezeichnet) berechnet. -
ADD4
darf ebenfalls nicht ausgewertet werden. Der EingangEN
erhält den Wert vom AusgangENO
vonADD3
.
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
-
der oberste Aufruf des
ADD
-Bausteins (alsADD1
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 wirdvar4
als Rückkopplungsvariable bestimmt und als ausgewertet betrachtet. In Folge ist jedoch weiterhin keine Anweisung auswertbar. Daher wird aus den restlichen Anweisungen erneut eine Rückkopplungsvariable bestimmt: jetztvar3
(dessen Wertfeld liegt am weitesten unten/rechts), diese wird als ausgewertet betrachtet. In Folge ist jedoch weiterhin keine Anweisung auswertbar. Daher wird aus den restlichen Anweisungen erneut eine Rückkopplungsvariable bestimmt: jetztvar2
(dessen Wertfeld liegt am weitesten unten/rechts), diese wird als ausgewertet betrachtet. Nun ist der oberste Aufruf desADD
-Bausteins (alsADD1
bezeichnet) als einzige Anweisung auswertbar, da alle seine Eingangswerte auswertbar sind. -
der nächste Aufruf des
ADD
-Bausteins (alsADD2
bezeichnet) – Nur dieser Aufruf ist auswertbar. Alle seine Eingangswerte sind auswertbar, davar3
aufgrund der Bestimmung der Rückkopplungsvariable noch immer als ausgewertet betrachtet wird. -
Zuweisung auf
var2
– Grund: Da sowohl die Zuweisung als auchADD3
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 nächste Aufruf des
ADD
-Bausteins (alsADD3
bezeichnet) – Nur dieser Aufruf ist auswertbar. Alle seine Eingangswerte sind auswertbar, davar4
– wie erwähnt – als ausgewertet betrachtet. -
Zuweisung auf
var3
– Grund: Zuweisungen vor Aufrufe; Sowohl diese Zuweisung als auch der rechte, obere Aufruf desADD
-Bausteins sind zur gleichen Zeit auswertbar. -
der untere Aufruf des
AND
-Bausteins (alsAND4
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 demFB3
-Baustein und -
eine zwischen den
RS
-Bausteinen
Die Anweisungen werden in dieser Reihenfolge ausgewertet:
-
der linke Aufruf des
AND
-Bausteins (alsAND1
bezeichnet) – Grund: Nur dieser Aufruf ist auswertbar. (Alle seine Eingangswerte sind auswertbar.) -
der nächste Aufruf des
AND
-Bausteins (alsAND2
bezeichnet) – Nur dieser Aufruf ist auswertbar. -
der rechte Aufruf des
RS
-Baustein (alsRS2
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 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 denXOR
-Bausteinen um Funktionen handelt) ist der linke Aufruf desRS
-Bausteins (alsRS1
bezeichnet). Der Ausgang vonRS1
wird als ausgewertet betrachtet. In Folge ist der rechte Aufruf desRS
-Bausteins (alsRS2
bezeichnet) als einzige Anweisung auswertbar, da alle seine Eingangswerte auswertbar sind. -
Aufruf des
FB3
-Bausteins – Grund: Nach der Auswertung vonRS2
sind wieder keine Anweisungen auswertbar. Zur Auflösung der Rückkopplungsschleifen wird daher wieder der Aufruf des Funktionsbaustein ausgewählt, der am weitesten oben/links liegt. Das ist nun der Aufruf desFB2
-Bausteins. Der Ausgang vonFB2
wird als ausgewertet betrachtet. In Folge ist der rechte Aufruf desRS
-Bausteins (alsRS2
bezeichnet) als einzige Anweisung auswertbar, da alle seine Eingangswerte auswertbar sind. In Folge ist der Aufruf desFB3
-Bausteins als einzige Anweisung auswertbar, da alle seine Eingangswerte auswertbar sind. -
der linke Aufruf des
XOR
-Bausteins (alsXOR1
bezeichnet) – Grund: Der Aufruf desFB2
-Bausteins und der linke Aufruf desXOR
-Bausteins (alsXOR1
bezeichnet) sind zur gleichen Zeit auswertbar. Aufgrund der grafischen Position wirdXOR1
ausgewertet (XOR1
liegt weiter oben alsFB2
). -
der mittlere Aufruf des
XOR
-Bausteins (alsXOR2
bezeichnet) – Grund: Der Aufruf desFB2
-Bausteins und der mittlere Aufruf desXOR
-Bausteins (alsXOR2
bezeichnet) sind zur gleichen Zeit auswertbar. Aufgrund der grafischen Position wirdXOR2
ausgewertet (XOR2
liegt weiter oben alsFB2
). -
der rechte Aufruf des
XOR
-Bausteins (alsXOR3
bezeichnet) – Grund: Der Aufruf desFB2
-Bausteins und der rechte Aufruf desXOR
-Bausteins (alsXOR3
bezeichnet) sind zur gleichen Zeit auswertbar. Aufgrund der grafischen Position wirdXOR3
ausgewertet (XOR3
liegt weiter oben alsFB2
). -
der linke Aufruf des
RS
-Bausteins (alsRS1
bezeichnet) – Grund: Der Aufruf desFB2
-Bausteins und der linke Aufruf desRS
-Bausteins (alsRS1
bezeichnet) sind zur gleichen Zeit auswertbar. Aufgrund der grafischen Position wirdRS1
ausgewertet (RS1
liegt weiter oben alsFB2
). -
Aufruf des
FB2
-Bausteins – Grund: Nur dieser Aufruf ist 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. Somit ist sie 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 aufVar3
ist nicht auswertbar, da derMOVE
-Baustein einen Wert aufVar2
zuweist.) -
Zuweisung auf
Var2
– Grund: Nur diese Zuweisung ist auswertbar.
Diese Zuweisung wird in dieEN
-Klammerung platziert, da sie vonMOVE
abhängt. Alle anderen Anweisungen werden außerhalb der EEN
-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):
|
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
.