TIA Lokaldaten initialisieren

Isha

Level-1
Beiträge
55
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Wie können im TIA alle Lokaldaten eines Bausteins initialisiert werden?
Ich suche eine Lösung welche unabhängig von der Anzahl der Variablen und der Struktur funktioniert.
So dass immer am Anfang eines Bausteinsaufrufes auch wirklich alle Lokaldaten auf "FALSE" sind.
Hat jemand eine Idee?

Gruss, Isha
 
Ist bei 1200/1500 nicht (mehr) notwendig, die Lokaldaten "Temp" erhalten immer einen Defaultwert, also False bzw. 0 am Anfang des Bausteins.
 
@MSB:
Ganz sicher ...?
Ich hatte unlängst ein Nachschlage-Problem mit den Temp's und meine (ich finde es aber gerade nicht) gelesen zu haben, dass sich das Verhalten hier NICHT von dem der S7-Classic-Welt unterscheidet - wäre eigentlich auch logisch ...

Gruß
Larry
 
Aber evtl. nur bei optimierten FCs... Bin mir aber grad nicht sicher, irgendwo hab ich das gelesen.
Stimmt, die Einschränkung scheint es laut Programmierleitfaden zu geben.
Ist aber im Prinzip meiner Meinung nach sowieso egal, wenn man die Temps Bestimmungsgemäß verwendet braucht man auch keinen Default-Wert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Automatische Initialisierung von Bausteinparametern in Funktionen (FC)


In S7-300/400 müssen temporäre Lokaldaten (Temp) einer Funktion zwingend mit einem Wert vorbelegt werden. Andernfalls konnte es vorkommen, dass das Programm mit undefinierten Werten arbeitet.


In S7-1500 ist die Gefahr des Weiterverarbeitens undefinierter Werte deutlich reduziert, da folgende Parameter beim Bausteinaufruf automatisch initialisiert werden:


Temporäre Daten vom Datentyp STRING und WSTRING werden grundsätzlich mit der Maximallänge 254 und der tatsächlichen Länge 0 vorbelegt.


Temporäre Daten mit elementarem Datentyp werden in Funktionen (FC) mit optimiertem Zugriff automatisch initialisiert. Sie werden dabei mit dem Wert belegt, der für den angegebenen Datentyp vordefiniert ist. Für BOOL ist z. B. der Wert "false" vordefiniert. Elemente von PLC-Datentypen werden mit dem Defaultwert vorbelegt, der in der Deklaration des PLC-Datentyps (UDT) angegeben ist. ARRAY-Elemente werden mit dem Wert "0" vorbelegt, auch wenn sie innerhalb eines PLC-Datentyps verwendet werden.




Ausgangsparameter (Output) in Funktionen mussten in S7-300/400 zwingend mit einem Wert beschrieben werden, da es ansonsten zu ungewollten Reaktionen im Programm kommen konnte. Beim Einsatz von Sprunganweisungen oder VKE-abhängigen Anweisungen musste jeder mögliche Programmpfad daraufhin geprüft werden.


In S7-1500 ist die Gefahr undefinierter Ausgangsparameter deutlich reduziert, da Ausgangsparameter elementaren Datentyps beim Bausteinaufruf automatisch initialisiert werden. Sie werden dabei mit dem Wert vorbelegt, der für den angegebenen Datentyp vordefiniert ist. Für BOOL ist z. B. der Wert "false" vordefiniert. Strukturierte Ausgangsparameter werden jedoch nicht mit einem Wert vorbelegt. Sie werden beim Bausteinaufruf als Pointer übergeben und können somit nicht undefiniert sein.

...........
 
Ist aber im Prinzip meiner Meinung nach sowieso egal, wenn man die Temps Bestimmungsgemäß verwendet braucht man auch keinen Default-Wert.

Jo, aber wer schreibt schon fehlerfreie Programme, bzw. manch ein unerfahrener Programmierer weiss davon auch nix...

M.M. nach, warnt der Compiler aber, wenn man Temp liest, ohne vorher geschrieben zu haben. Compiler warnt auch (manchmal) wenn man mit SPB oder BEA die Zuweisung überspringt.

Gruß.
 
"Temporäre Daten mit elementarem Datentyp werden in Funktionen (FC) mit optimiertem Zugriff automatisch initialisiert. Sie werden dabei mit dem Wert belegt, der für den angegebenen Datentyp vordefiniert ist. Für BOOL ist z. B. der Wert "false" vordefiniert. Elemente von PLC-Datentypen werden mit dem Defaultwert vorbelegt, der in der Deklaration des PLC-Datentyps (UDT) angegeben ist. ARRAY-Elemente werden mit dem Wert "0" vorbelegt, auch wenn sie innerhalb eines PLC-Datentyps verwendet werden."

..Und wie ist es wenn der Baustein nicht optimiert ist??
 
Ich verstehe nicht was die Initialisierung der temporären Daten damit zu tun haben soll, ob der Baustein optimiert ist oder nicht! Aber das versteht vermutlich auch Siemens nicht.

Nun wieder zu meiner ursprünglichen Frage:
Wie können alle temporären Variablen initialisiert werden? (ohne dass die Anzahl oder Struktur der Variablen bekannt ist, es soll ja generell in jedem Baustein funktionieren).

Gruss, Isha
 
Entweder einzeln mit Bit- oder Lade-/Transferbefehlen, oder wenn es sehr viele sind mit der FILL Systemfunktion. Aber das mit dem "FILL" funktioniert wahrscheinlich nicht so wie du es gerne hättest.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Initialisieren von Lokaldaten (TEMP) ist unnötig, weil lesen von Lokaldaten vor beschreiben völlig sinnfrei ist. Wird es trotzdem gemacht, dann ist das ein Programmier(er)-Fehler.

Harald
 
Also um deine Frage vielleicht zu "beantworten", Nein das scheint es nicht zu geben.

Wenn Größe und Datentypen bekannt sind, kann man das selbst machen, aber ne automatische Funktion die das ohne Angabe der Datengöße macht, wäre mir neu.
Wenn du es händisch reinprogrammierst, kannst du aber auch gleich darauf aufpassen die Variablen erst zu beschreiben bevor du sie liest.
 
aber initialisieren ist doch nichts anderes als beschreiben, im allgemeinen Programmierstandard.
 
Zuletzt bearbeitet:
aber initialisieren ist doch nichts anderes als beschreiben, im allgemeinen Programmierstandard.
Also per Definition ist Initialisierung ein einmaliger Vorgang bei irgend einem definierten Ereignis (z. B. Erster Zyklus).
Macht halt bei Temp-Variablen nur leider absolut keinen Sinn.
 
Zurück
Oben