TIA Schleife in AWL

Zuviel Werbung?
-> Hier kostenlos registrieren
Ist es nicht so, das temporäre Variablen mit einem rein zufälligen Wert initialisiert werden?
Dann ist das Verhalten erwartbar. Die temporäre Variable wird jeden Zyklus mit "0" initialisiert
Es ist davon abhängig, ob es ein optimierter Baustein ist oder nicht ( + 1200ér ab Firmware V4 für Defaultwert ). Verlassen sollte man sich nie darauf sondern eine TEMP Variable vor dem ersten Lesezugriff einmal einen Wert zuweisen.

1706163722832.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gerne. Wie gesagt, eigentlich sollte es egal sein wie sich die Temp-Variable verhält wenn man sie einfach zu Beginn per Code selber einmal beschreibt. Alles andere wäre mir zu heiß. Da reicht es aus, dass jemand die Optimierung eines FB abschaltet und dann passieren die lustigsten Sachen.
 
eigentlich sollte es egal sein wie sich die Temp-Variable verhält wenn man sie einfach zu Beginn per Code selber einmal beschreibt. Alles andere wäre mir zu heiß.
So isses. TEMP-Variablen gehören grundsätzlich selbst initialisiert bzw. es muß grundsätzlich erst etwas hineingeschrieben werden, bevor etwas da 'raus gelesen werden darf. Warum Siemens dieses völlig überflüssige Initialisieren der TEMP-Variablen für die S7-1200/1500 eingeführt hat??? Es gibt wohl zu viele TIA-"Programmierer" mit dieser Wissenslücke....

Ist es nicht so, das temporäre Variablen mit einem rein zufälligen Wert initialisiert werden?
Nein. Etweder sie werden mit Defaultwert initialisiert oder gar nicht initialisiert - dann haben sie einen quasi zufälligen/unkontrollierten Wert von dem Programmteil, was da zuletzt etwas in den gemeinsam genutzten TEMP-Speicher hineingeschrieben hat. Mit etwas Glück kann das der Wert vom letzten Durchlauf des selben Programmteils sein, deshalb funktioniert solch fehlerhafter Code manchmal trotzdem.
 
Warum Siemens dieses völlig überflüssige Initialisieren der TEMP-Variablen für die S7-1200/1500 eingeführt hat??? Es gibt wohl zu viele TIA-"Programmierer" mit dieser Wissenslücke....
Gab / gibt es da nicht eine Warnung im Compiler, wenn man auf eine Temp-Variable lesend zugreift und diese vorher nicht beschrieben wurde?
Warum das eingeführt wurde weiß ich auch nicht ( vor allem, warum zwei verschiedene Verhalten ).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gab / gibt es da nicht eine Warnung im Compiler, wenn man auf eine Temp-Variable lesend zugreift und diese vorher nicht beschrieben wurde?

Es gibt bei Siemens eine unsinnige Warnung, wenn ein Ausgang eines FBs innerhalb des FBs abgefragt wird, bevor dieser beschrieben wird. Dass der Ausgang noch vom verherigen Zyklus einen sinnvollen Wert haben könnte, daran denkt Siemens wohl dabei nicht.
 
Es gibt bei Siemens eine unsinnige Warnung, wenn ein Ausgang eines FBs innerhalb des FBs abgefragt wird, bevor dieser beschrieben wird. Dass der Ausgang noch vom verherigen Zyklus einen sinnvollen Wert haben könnte, daran denkt Siemens wohl dabei nicht.

Das ist nicht unsinnig: Ein OUT wird nur auf die Schnittstelle geschrieben NICHT gelesen, was will man da abfragen ???
Was da auch noch zu beachten wäre ist CallByReference und CallByValue, Der eine wird im Instanz DB gespeichert der andere nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gab / gibt es da nicht eine Warnung im Compiler, wenn man auf eine Temp-Variable lesend zugreift und diese vorher nicht beschrieben wurde?
Warum das eingeführt wurde weiß ich auch nicht (vor allem, warum zwei verschiedene Verhalten ).
Ein Compiler soll doch die Unfähigkeit der Programmierer aufspüren und davor schützen. Nur sind nicht alle FehlerMöglichkeiten für einen Compiler gleich leicht aufzufinden oder so offensichtlich, dass eine Warnung eindeutig fällig wäre.
Ich glaube, gewünscht hat sich schon so mancher eine entsprechende Meldung. Und so mancher CompilerBauer hat schon versucht oder zumindest überlegt, auf solche Wünsche einzugehen.
Ich behaupte mal, so richtig konsequent geht es nur mit (zu) viel Aufwand, wenn das zu prüfende Programm mit Sprüngen/Verzweigungen versehen ist, die den Überblick erschweren.

Warum Siemens dieses völlig überflüssige Initialisieren der TEMP-Variablen für die S7-1200/1500 eingeführt hat??? Es gibt wohl zu viele TIA-"Programmierer" mit dieser Wissenslücke....
Das Problem betrifft ja nicht nur TIA-Programmierer und nicht nur Programmierer mit dieser Wissenslücke.
Diese FussAngel ist eigentlich sehr bekannt und trotzdem passiert es immer wieder mal, dass einer ins offene Messer läuft, egal auf welchem Wege (z.B. nachträglich durch überstürzt ausgeführtes Auskommentieren).
Es ist ein Fehler, der tatsächlich lange Zeit unerkannt in der Software schlummern kann oder sich u.U. nie bemerkbar macht.
Die häufig zitierte Zufälligkeit bei der Vorbesetzung der Werte von TempVariablen ist oft sehr gut reproduzierbar innerhalb ein und desselben Programms und somit recht "stabil". Dies gilt insbesondere für SPS-Programme, in denen so manches bewusst vermieden wird, was zu "Überraschungen" führen kann.

Beispielhaft fallen mir in diesem Zusammenhang immer je ein Stückchen StandardSoftware von Fanuc (Sprache C) und von Siemens (S5) ein. Letzteres war schwer zu entlarven, weil dazu zunächst der KnowHowSchutz "geknackt" werden musste.
Shit happens und kann auch in den "besten Familien" vorkommen.
 
Das ist nicht unsinnig: Ein OUT wird nur auf die Schnittstelle geschrieben NICHT gelesen, was will man da abfragen ???

Das ist sehr wohl unsinnig, es wird der Zustand abgefragt, der in einem früheren Aufruf des FBs gesetzt wurde, der Ausgang verhält sich hier wie eine interne statische Variable. Um die komische Warnung zu umgehen bleibt nur die Möglichkeit, eine interne statische Variable zu verwenden und diese dann auf den Ausgang zu schreiben. Was daran besser sein soll, erschließt sich mir nicht. Diese Variable hat dann genau so den Zustand von einem früheren Aufruf des FBs.
 
Zurück
Oben