TIA Temp Variable TIA

quiddi

Level-1
Beiträge
60
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Tag zusammen,

mal ganz kurz eine Frage zu temporären Variablen. Früher (zu S5 und S7 classic) war es ja so, dass für temporäre Variablen die CPU einen bestimmten Datenbereich hatte. Beim Ausführen jedes Bausteines wurde immer der selbe Bereich im Speicher genutzt. Somit hatte man meist, wenn man die temp-Variablen nicht zu Beginn eines Bausteines abnullte, irgendwelche Werte drinnen stehen. Nun ist es mir schon öfter passiert, dass Leute meinten dem ist in TIA nicht mehr so. Beim Verwenden von Temp-Variablen in TIA, sorge das TIA-Portal selber dafür, dass die Temp-Variablen zu Beginn eines Bausteines 0 sind.
Ist dem wirklich so? Ich hatte seither in jedem TIA-Projekt, wie auch in S5 und S7 classic, zu Beginn eines Bausteines alle Temp-Variablen 0 gesetzt. Schon öfter meinten Leute hier zu mir, dass ich dies nicht machen bräuchte.

Schönen Gruß und Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Beisammen,


aber nur bei Optimierter Programmierung ( Hacken in den Basteineigenschaften ).

Sonst selbes verhalten wie in Classic.

Was and auch noch zu sagen gibt Es muss aber immer noch nach dem Moto erst schreiben dann lesen Programmiert werden weil es sonst A ned geht und b zu Warnungen beim Übersetzen kommt.



Gruß Tia
 
Hallo
Eigentlich ist es egal ob die TEMP Variablen "Nullst" oder nicht.
Egal ob in Classic oder TIA.

Grund:
Bevor du eine TEMP abfragst muss sie vorher zwingend beschrieben werden.
Wenn du das nicht machst stehen (standen) zufällige Werte drin.
Wenn TIA die TEMPs jetzt initialisiert, ok dann steht halt "0" drin.
Aber wozu soll die "0" nützlich sein?
Wenn ich fest darauf angewiesen bin eine "0" oder ein "FALSE" zu bekommen dann kann ich auch eine Konstante nehmen.

PS: Gibt es bei S5 überhaupt TEMP Variablen? Ich denke da wurden die "gefürchteten" Schmiermerker hergenommen
 
Ich hatte auch schon bei optimierten Bausteinen zufällige Werte in Temp-Variablen stehen bzw. Verschleppungen aus einem vorherigen Baustein. Zumindest hatte ich dieselben Effekte wie in Classic für diesen Fall gewohnt, explizit getestet habe ich es nicht.
Warum sollte TIA den Temp-Bereich auch stets löschen, kostet doch Zeit?
Ich denke, man kann sich bloß bei optimierten Bausteinen nicht mehr darauf verlassen, wo eine im vorhergehenden Baustein gesetzte Variable im nächsten Baustein landet, so daß die von manchen Programmierern genutzte "heimliche" Weitergabe von Werten über den Stack nicht mehr zuverlässig funktioniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
Ich hatte auch schon bei optimierten Bausteinen zufällige Werte in Temp-Variablen stehen bzw. Verschleppungen aus einem vorherigen Baustein.
das kann eigentlich nicht sein. Bspw. hier:
https://support.industry.siemens.co...ei-der-s7-1500-initialisieren-?dti=0&lc=de-WW
zeigt Siemens sogar, wie sie eine temp-UDT zum initialisieren eines DBs nutzen. Das temps in optimierten Bausteinen initialisiert sind, steht zudem irgendwo in der Hilfe.
 
Hab gerade probiert: Bei Temp-Variablen kann ich keine Anfangswerte angeben. Damit gilt das wohl NUR für aus UDT abgeleitete Variable, denn dort kann ich Anfangswerte angeben.

"kann eigentlich nicht sein": ja vielleicht, aber nützt uns das was, wenn die Erfahrung anderes sagt?
 
vielleicht lag es an deiner Firmware:
Zitat aus dem Programmierleitfaden:
Temporäre Variablen sind beim Aufruf in nicht optimierten Bausteinen undefiniert. Bei optimierten Bausteinen sind die Werte immer mit dem „Defaultwert“ vorbelegt (S7-1500 und S7-1200 Firmware ab V4.0). Dadurch entsteht kein zufälliges, sondern ein reproduzierbares Verhalten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe hier die Frage nicht so wirklich ...
Welchen Sinn macht es, eine Temp-Variable vor ihrer ersten lesenden Verwendung im Baustein nicht vorher mit einem Wert zu belegen ?
Und dann - sollte man sich, gerade in der heutigen Zeit, darauf verlassen, dass Siemens sich von Version zu Version an dieses nicht Standard-gemäße Verhalten hält ?

Gruß
Larry
 
Welchen Sinn macht es, eine Temp-Variable vor ihrer ersten lesenden Verwendung im Baustein nicht vorher mit einem Wert zu belegen ?
Das frage ich mich auch schon die ganze Zeit

Und dann - sollte man sich, gerade in der heutigen Zeit, darauf verlassen, dass Siemens sich von Version zu Version an dieses nicht Standard-gemäße Verhalten hält ?
*ACK*
 
Ich verstehe hier die Frage nicht so wirklich ...
Welchen Sinn macht es, eine Temp-Variable vor ihrer ersten lesenden Verwendung im Baustein nicht vorher mit einem Wert zu belegen ?
Und dann - sollte man sich, gerade in der heutigen Zeit, darauf verlassen, dass Siemens sich von Version zu Version an dieses nicht Standard-gemäße Verhalten hält ?

Naja seid sie ein definiertes Verhalten haben, nehme ich TempVariablen UDTs gerne als initialisierung um Strukturen zu löschen und z.B. für die Kommunikation vorzubereiten.
Ist etwas übersichtlicher als mit nem Move ein Bytearray drüberzulegen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Grundsätzlich könnte ich mir das zum ablöschen/initialisieren vorstellen - ähnlich wie in dem Siemens-Beispiel. Ich mache das aber aktuell auch noch mit einem extra "Löschvorlage-DB". Aber wenn man sich den sparen könnte und zusätzlich die Performance von der Verwendung von Lokaldaten bedenkt ... also es gibt schon Anwendungsfälle.
 
Naja seid sie ein definiertes Verhalten haben, nehme ich TempVariablen UDTs gerne als initialisierung um Strukturen zu löschen und z.B. für die Kommunikation vorzubereiten.
Ist etwas übersichtlicher als mit nem Move ein Bytearray drüberzulegen.

So etwas kenne ich auch - das habe ich dann immer mit Stat-Variablen-Strukturen umgesetzt - da habe ich dann auf alle Fälle die verlässliche und auch nachvollziehbare Variante ... (my opinion)

Gruß
Larry
 
Grundsätzlich könnte ich mir das zum ablöschen/initialisieren vorstellen - ähnlich wie in dem Siemens-Beispiel. Ich mache das aber aktuell auch noch mit einem extra "Löschvorlage-DB". Aber wenn man sich den sparen könnte und zusätzlich die Performance von der Verwendung von Lokaldaten bedenkt ... also es gibt schon Anwendungsfälle.

Naja ... das trifft für mich aber nun auch nicht so richtig auf Temp-Variablen zu. Bei so etwas denke ich dann eher an den Stat-Bereich ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So etwas kenne ich auch - das habe ich dann immer mit Stat-Variablen-Strukturen umgesetzt - da habe ich dann auf alle Fälle die verlässliche und auch nachvollziehbare Variante ... (my opinion)

Da hast du grundsätzlich recht. Wenn man n Stat bereich hat. Allerdings wenn es ne zuverlässige Methode gibt bei der man nicht Instanzdbspeicher verballert für die immer gleichen werte, finde ich die Temp Variante angenehmer.

mfG René
 
Da hast du grundsätzlich recht. Wenn man n Stat bereich hat. Allerdings wenn es ne zuverlässige Methode gibt bei der man nicht Instanzdbspeicher verballert für die immer gleichen werte, finde ich die Temp Variante angenehmer.
mfG René
Ich könnte mir halt auch vorstellen, dass es deutlich performanter ist - da der Zugriff auf eine Temp eigentlich schneller sein sollte. Wenn man jetzt über eine schleife initialisiert, mag das schon was bringen.
 
... erst schreiben dann lesen Programmiert werden weil es sonst A ned geht und b zu Warnungen beim Übersetzen kommt. Gruß Tia
Das ist ja ein "beliebter" Fehler. Ich meine eine entsprechende Warnung schon mal gesehen zu haben, kann die jetzt aber nicht mehr reproduzieren. Welches Häkchen muss man setzen, damit die Warnung angezeigt wird?
 
Zurück
Oben