Monat: Juni 2016

KOP – Reihenfolge von Funktionsaufrufen mit Boolean-Variablen

Wenn in KOP mehrere Bausteinaufrufe hintereinander geschaltet werden und die Ausgabe eines Bausteines an den nächsten übergeben wird, kann dies zu unerwarteten Ergebnissen führen.

Dies ist der Fall, wenn eine Ausgabe im Bitformat (Bool) als Eingabe in die nächste Funktion übergeben wird.

Beispiel:

Netzwerk_KOP Falsch

Übersetzt in AWL sieht dies folgendermassen aus:  Netzwerk_AWL Falsch

Man sieht, dass zuerst der lokale Wert %L1.0 den Wert der undefinierten temporären Variable #tempBool erhält. Danach wird die “ReadBool”-Funktion ausgeführt und in #tempBool geschrieben. Am Schluss wird “WriteBool” aufgerufen, aber nicht mit #tempBool, sondern mit  %L1.0.

Abhilfe für dieses Problem ist zum Beispiel folgende Variante:

Netzwerk_KOP Richtig

In AWL sieht dieses Netzwerk folgendermassen aus:

Netzwerk_AWL Richtig

Auch hier wird #tempBool in eine lokale Variable (%L1.1) kopiert. Aber erst nach dem Aufruf von “ReadBool”. Somit funktioniert diese Variante.

Andere Alternativen wären die Programmierung in AWL durchzuführen oder den Lese- und Schreibvorgang auf zwei Netzwerke aufzuteilen.

Hinweise:
– Bei anderen Datenformaten (Word, Int) tritt dieses Verhalten nicht auf
– Zwischen Step-7 Classic und dem TIA-Portal besteht kein Unterschied

 

KOP – Reihenfolge von Funktionsaufrufen mit Boolean-Variablen

Wenn in KOP mehrere Bausteinaufrufe hintereinander geschaltet werden und die Ausgabe eines Bausteines an den nächsten übergeben wird, kann dies zu unerwarteten Ergebnissen führen.

Dies ist der Fall, wenn eine Ausgabe im Bitformat (Bool) als Eingabe in die nächste Funktion übergeben wird.

Beispiel:

Netzwerk_KOP Falsch

Übersetzt in AWL sieht dies folgendermassen aus:  Netzwerk_AWL Falsch

Man sieht, dass zuerst der lokale Wert %L1.0 den Wert der undefinierten temporären Variable #tempBool erhält. Danach wird die “ReadBool”-Funktion ausgeführt und in #tempBool geschrieben. Am Schluss wird “WriteBool” aufgerufen, aber nicht mit #tempBool, sondern mit  %L1.0.

Abhilfe für dieses Problem ist zum Beispiel folgende Variante:

Netzwerk_KOP Richtig

In AWL sieht dieses Netzwerk folgendermassen aus:

Netzwerk_AWL Richtig

Auch hier wird #tempBool in eine lokale Variable (%L1.1) kopiert. Aber erst nach dem Aufruf von “ReadBool”. Somit funktioniert diese Variante.

Andere Alternativen wären die Programmierung in AWL durchzuführen oder den Lese- und Schreibvorgang auf zwei Netzwerke aufzuteilen.

Hinweise:
– Bei anderen Datenformaten (Word, Int) tritt dieses Verhalten nicht auf
– Zwischen Step-7 Classic und dem TIA-Portal besteht kein Unterschied