TC3: Temporäre Variablen werden schon nach Beendigung einer Aktion neu initialisiert

Beiträge
6.658
Reaktionspunkte
1.612
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
das Temporäre Variablen bei jedem Aufrufs eines FBs oder PRGs neu initialisiert werden ist klar, was mich aber jetzt überrascht hat ist, dass dies auch erfolgt, wenn eine Aktion beendet wird. Setzt man in einer Aktion eines FB eine temporäre Variable auf einen bestimmten Wert und nutzt diese Variable dann weiter unten im FB hat diese wieder ihren Iinitialwert. Ist das bei TC3 tatsächlich immer so oder kann man dies Verhalten einstellen? Eine erste Suche bei Tante Google hat leider kein Ergebnis gebracht.
 
Falls du wirklich temporäre Variablen (VAR_TEMP) meinst, dann ist das Verhalten richtig:
https://infosys.beckhoff.de/index.php?content=../content/1031/tc3_plc_intro/2528781963.html

Falls du aber lokale Variablen (VAR) meinst, kann ich dein Verhalten nicht bestätigen. VAR-Variablen bleiben bei FB- und PRG-Aufrufen erhalten, bei Methoden- oder Funktionsaufrufen werden die Variablen aber bei jedem Aufruf neu initialisiert (weil die Variablen dabei auch nur temporär im Speicher liegen).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich meinte wirklich VAR_TEMP. Nur wo liest Du in dem Infosys-Artikel, dass das Verhalten so sein soll/muss? Ich rufe den FB auf und im FB starte ich dann nacheinander mehrere Aktionen. Ich sehe jetzt aber nicht, warum nachdem die Variable in Aktion 1 gesetzt wurde diese in Aktion 2 nicht mehr gesetzt ist, der FB selber wurde ja zwischenzeitlich nicht beendet.
 
Kann es sein, es gibt ein Funktions-Aufruf von einen anderen Baustein zwichen die zwei Verwendungen von den temporäre Variabel ?

Falls du wirklich temporäre Variablen (VAR_TEMP) meinst, dann ist das Verhalten richtig:
https://infosys.beckhoff.de/index.php?content=../content/1031/tc3_plc_intro/2528781963.html
Die Beschreibung ist etwas mangelhaft. Da steht dass die Temps beim Bausteinaufruf initialisiert werden. Aber da steht nicht was passiert wenn den Baustein einene anderen Baustein aufruft, ob die Temps gespeichert und wiederhegestellt werden oder nicht.
Es steht nur
TwinCAT initialisiert temporäre Variablen bei jedem Aufruf des Bausteins neu.

Ich kenne es nur von Siemens S7, dass die temporäre Variabel beim Aufruf von eine weitere Baustein gespeichert werden, und beim wiederkehr in den ursprüngliche Baustein werden die temporäre Variabeln wieder hergetsellt.
Kann es sein das Twincat die temporäre Variabeln nicht speichert bzw. wieder hergestellt beim aufruf und wiederkehr von einen anderen Baustein ?
 
Es wird im dem Sinne ja kein weiterer Baustein aufgerufen. Aktionen dienen dazu den Code des FBs etwas übersichtlicher zu gestalten, sie haben keinen Deklarationsteil und werden in der Baumansicht unter dem FB dargestellt. Der Aufruf im FB erfolgt ohne eine vorherige Deklaration.
Aktion.PNG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Beschreibung ist etwas mangelhaft. Da steht dass die Temps beim Bausteinaufruf initialisiert werden. Aber da steht nicht was passiert wenn den Baustein einene anderen Baustein aufruft, ob die Temps gespeichert und wiederhegestellt werden oder nicht.
Eigentlich steht in der BeckhoffBeschreibung nichts, woraus man schlau werden kann.
Wird der TempBereich eines Bausteins auf dem Stack angelegt, so bleibt er auch dann erhalten, wenn der Baustein einen weiteren Baustein aufruft . . . dafür ist der Stack (LIFO) doch da!
Abweichungen von dieser üblichen Vorgehensweise sollten schon in der Beschreibung nicht nur überhaupt genannt werden, sondern es müsste unmissverständlich und ganz ausdrücklich darauf hingewiesen werden!
 
Vielleicht können die hier im Forum vertretenen Kollegen von 3S mal Licht ins Dunkel bringen. Da die Beschreibung im Infosys praktisch der in der Codesys Hilfe von 3S gleicht vermute ich mal, dass diese Funktionalität von Beckhoff 1:1 übernommen wurde.
 
Aktionen können ja auch von aussen aufgerufen werden, sozusagen als alternative FB-Aufrufe. Von daher wäre die Reinitialisierung der TEMP-Var konsequent, aber nur beim Aufruf einer Aktion, nicht bei ihrem Abschluss. Vielleicht ist das Ganze ein Versehen. Aktionen werden ja von 3S eh nur noch als lästiges Kompatibiläts-Anhängsel angesehen.
 
Zurück
Oben