TIA Fehler in Ergebnis Switch-Case mit For-Schleife FW 3.1.4 CPU1517(F/TF)

NBerger

Level-3
Beiträge
1.684
Reaktionspunkte
513
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe da mal wieder ein merkwürdiges/falsches Verhalten der FW3.1.4 feststellen müssen. (TIA 20 Upd1)

In nun mehreren Anlagen kommt es an einzelnen, nicht allen betreffenden Stellen zu falschen Ergebnissen in Switch-Case Blöcken in denen eine For-Schleife integriert ist.

In einem Fall liefert eine IF-Aabfrage der Laufvariablen (#i) innerhalb der For-Schleife einen falschen Wert. Ja der Wert ist wirklich falsch und wird nicht nur online falsch angezeigt. (Habe leider derzeit keine Online-Verbindung zur Anlage uo das ich hier erstmal den Onlinestatus schuldig bleiben muss).
Auch wurde der Code bereits geändert, die Anlage muss schließlich funktionieren.

Code:
2: // ...
    For #i := 1 to 99 Do
        If #i = 1 then
            MyStatVar := #i;
        End_If;
    End_For;

MyStatVar liefert hier den Wert 2 !!! (Etwas vereinfacht dargestellt... Die Zuweisung erfolgt übert eine Arrayvariable. Es wird die falsche Variable Adressiert)

In einem anderen Programm bastel ich Daten zusammen für eine Ethernet-Übertragung mittels serialize.
In einer For-Schleife (1-4) mit Arrayvariablen wird zumindest ein Wert innerhalb der Schleife mit einem falschen Wert gelesen/geschrieben.
Mache ich dies "ausgeschrieben" ohne For-Schleife mit Zahlen anstatt "#i", ist das Ergebnis korrekt.

Code:
  2: // Senden
        #cnt := 0;
        FOR #i := 1 TO 4 DO
            // ...
            #Menge := #Out[#i, 1]."mg/m" + #Out[#i, 2]."mg/m";
            #ReturnValue := Serialize(SRC_VARIABLE := #Menge, DEST_ARRAY => #Senden, POS := #cnt);
            // ...
            #ReturnValue := Serialize(SRC_VARIABLE := #Out[#i, 3]."mg/m", DEST_ARRAY => #Senden, POS := #cnt);
            //...
            #ReturnValue := Serialize(SRC_VARIABLE := #Out[#i, 4]."mg/m", DEST_ARRAY => #Senden, POS := #cnt);
            // ...
            #Menge := #Out[#i, 5]."mg/m" + #Out[#i, 6]."mg/m";
            #ReturnValue := Serialize(SRC_VARIABLE := #Menge, DEST_ARRAY => #Senden, POS := #cnt);
            //...
            #ReturnValue := Serialize(SRC_VARIABLE := #Out[#i, 7]."mg/m", DEST_ARRAY => #Senden, POS := #cnt);
            // ...
            #ReturnValue := Serialize(SRC_VARIABLE := #Out[#i, 8]."mg/m", DEST_ARRAY => #Senden, POS := #cnt);
            // ...
            #Menge := #Out[#i, 9]."mg/m" + #Out[#i, 10]."mg/m";
            #ReturnValue := Serialize(SRC_VARIABLE := #Menge, DEST_ARRAY => #Senden, POS := #cnt);
        END_FOR;
 
   ...

        #Step := 3;


Ist jemandem auch schon ein solches Fehlverhalten in änlichen Konstellationen aufgefallen?


Werde in den nächsten Tagen ein paar Versuche machen die For-Schleifen durch While-Do zu ersetzen bzw. parallel laufen zu lassen und die Ergebnisse zu vergleichen.
 
Zuletzt bearbeitet:
Das klingt nach diesem Problem:

Sollte aber angeblich behoben wurden sein
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die FW3.x ist eh eher problematisch.
Hier wurde viel hinterhergehuddelt. Den Kern des Problems hat man dabei wohl nicht geknackt...

Mir wird angst und bange wenn ich an die V4 denke!

Was wünsche ich mir den MC7-Code zurück.

Da alles immer mehr in Richtung "PC" geht werden wohl auch die Fehler in den Betriebssystemen mehr.
Wie man da seine Arbeit korrekt machen soll/kann bleibt fraglich.

Edit:
Das schlimme ist, TIA Crasht nicht und es funktioniert ja auch erstmal bei der Inbetriebnahme, dann ändert man etwas an einer anderen Stelle und es kommt zum Fehlverhalten. Wenn man nur wüsste woran es liegt, dann könnte man es umschiffen.
 
Obwohl das Problem in der V20 ja angeblich nie ein Thema war, scheint es doch tatsächlich dort genauso aufzutreten wie in dem FAQ von Siemens zu V18 und V19 beschrieben
Das Update 2 zu TIA Portal V19 und das Update 4 zu TIA Portal V18 verursacht eine Vertauschung von Zuweisungen während der Codegenerierung im SCL-Editor. Verursacht wird das Systemverhalten, wenn Struktur-Variablen innerhalb verschachtelter Steuerungsanweisungen verwendet werden. Zum Beispiel:
  • IF-Anweisung innerhalb von einer CASE-Anweisung
  • IF-Anweisung innerhalb einer IF-Anweisung
Zumindest hast du genau das fehlerhafte Verhalten beschrieben, welches Siemens dort beschreibt.

Hast du schon einen SR aufgemacht?
 
Einen SR werde ich eher nicht aufmachen. Die Energie werde ich wo anders nutzen...

Zum einen ist der Weg zu steinig bis man an jemanden gerät der kompetent genug ist ein Problem zu verstehen, zum anderen kann ich Siemens keine Daten (Projekte) überlassen da ich nicht sicher sein kann das diese Daten an andrer Stelle veröffentlicht oder an dritte weitergegeben werden.

Edit:
Und auf Diskusionen mit einer KI habe ich einfach keinen Bock!
Ach ja, eine Beweisführung wird echt schwierig da dies nicht immer auftritt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn man nur wüsste woran es liegt, dann könnte man es umschiffen.
Wenn du noch Bock hast (ich kann verstehen, falls nicht):
Macht der Code, was er soll, wenn du statt einer Temp (#I) eine Integer aus einem globalen DB verwendest?
(Ist nur ein Versuch, ich glaube ja auch nicht wirklich daran, dass es hilft.)

Ich hätte gedacht, dass Siemens (oder wie der Hersteller der Firmware heisst) automatisierte Systemtests durchfüht, bevor sie eine neue Firmware auf den Markt bringen Die Kosten doch im Vergleich zu den Auswirkungen nix.
Alternative: Selbst ein Test-Programm schreiben, das alle Funktionen, die man selbst nutzt, auf korrekte Funktion testet? Scheint sich zu lohnen!
Bleibt tapfer!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Einen SR werde ich eher nicht aufmachen. Die Energie werde ich wo anders nutzen...

Zum einen ist der Weg zu steinig bis man an jemanden gerät der kompetent genug ist ein Problem zu verstehen, zum anderen kann ich Siemens keine Daten (Projekte) überlassen da ich nicht sicher sein kann das diese Daten an andrer Stelle veröffentlicht oder an dritte weitergegeben werden.

Edit:
Und auf Diskusionen mit einer KI habe ich einfach keinen Bock!
Ach ja, eine Beweisführung wird echt schwierig da dies nicht immer auftritt.
(y)(y)(y)

und da fällft mir dieser Beitrag von mir wieder ein!


 
Zurück
Oben