Monat: Juni 2016
KOP – Reihenfolge von Funktionsaufrufen mit Boolean-Variablen
19. Juni 2016
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:
Übersetzt in AWL sieht dies folgendermassen aus:
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:
In AWL sieht dieses Netzwerk folgendermassen aus:
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
19. Juni 2016
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:
Übersetzt in AWL sieht dies folgendermassen aus:
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:
In AWL sieht dieses Netzwerk folgendermassen aus:
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