# Stat und Temp Variablen



## Anonymous (11 Juli 2004)

Hallo, 

ich bin auf der Suche nach einem Beispiel für Temp und Stat Variablen. 

Um mein Verständnisproblem genauer zu beschreiben folgendes: 

Ich bearbeite gerade im Selbststudium ein Buch der Firma Siemens. 
Zurzeit bin ich beim Thema Ablaufsteuerungen. 

Und nun folgendes, bei den Ablaufsteuerung in den Beispielen werden die Einzelschritte immer als Stat Variablen deklariert, dies müsste doch eigentlich auch mit Temp Variablen funktionieren solange wie ich den Baustein nicht über den EN Eingang die Freigabe nehme. 

Also müsste sich die Ablaufkette doch den letzten Zustand merken können und ganz normal funktionieren. 

Oder befinde ich mich auf dem Holzweg? 

Am meisten würde ich über eine kurze erklärung anhand eines Beispiel freuen. 

Danke im vorraus.


----------



## Markus (11 Juli 2004)

die sps arbeitet zyklisch

in jedem zyklus wid das programm einmal abgearbeitet.

den datebereich in dem die temp variablen liegen benutzt jeder baustein.

wenn den baustein mit der sk im abgeabrebtiet wurde, dann wir der nächste baustein bearbeitet. der nutz dann wieder den bereich der temp variablen.

bereits jetzt stehen in dem bereich andere daten drin.

wenn im nächsten zyklus dein programm wieder zu dem baustein zurückkommt dann haben alle bausteine die im programm aufgerufen wurden diesen bereich genutzt und überschrieben.


----------



## plc_tippser (11 Juli 2004)

Hallo Giovanni,

hinzufügen möchte ich nur kurz den Sinn solcher Variablen.

Mann spart durch die Mehrfachnutzung Speicher in der SPS.

Aber vorsichtig bei der Verwendung. Z.B. bei Flankenhilfsmerkern ist der Einsatz von Temp Variablen nicht geeignet, also es geht nicht.

Eigentlich alle Variablen, die im nächsten Zyklus noch benötigt werden, dürfen nicht in Temp angelegt werden.

Gruß pt


----------



## man_of_luck (11 Juli 2004)

Noch 'ne kurze Bemerkung: STAT Variablen koennen nur in FB's deklariert und verwendet werden, da die in dem einem FB zugehoerigen Instanz-Datenbaustein abgelegt werden und somit ihre aktuellen Zustaende fuer das naechste Zyklus gespeichert werden. :wink: 

MfG,

man_of_luck


----------



## Anonymous (12 Juli 2004)

*Temp Variablen*

Hallo und Danke erstmal,

d.h.

das Temp Variablen (egal wieviele ich deklariere) immer auf den gleichen Adressspeicher zugreifen und somit bestehenden Werte im nächsten (oder noch im selben) Zyklus überschrieben werden sofern ich weitere Temp variablen deklariert habe

da ich aber bei einer Ablaufkette mit dem aktuellen Schritt und der Transition den nächsten Schritt setzen möchte, würde es nicht funktionieren wenn im gleichen Zyklus wo der eine Schritt als Temp Variable deklariert ist noch eine andere Temp Variable beschrieben würde und der Schriit somit wieder auf null gesetzt wird.

Dieser fehlt mir dann zur transition zum nächsten Schritt.

In diesem Sinne?


----------



## plc_tippser (12 Juli 2004)

Solche Schrittkettenmerker haben nichts in den TempVariablen zu suchen. Dafür sind die Stat bestens geeignet.

Wo Du die Temp einsetzt, musst du dir genau überlegen, sonst erlebst du Schiffbruch a la carte. Ich benutzte die eigentlich nie.



Gruß pt


----------



## Ralle (12 Juli 2004)

So ähnlich,

daß Wichtigste ist eigenlich für dich, eine Temp-Variable, die du in dem gerade laufenden SPS-Zyklus im gerade laufendem FC, zu welchem diese Temp-Var gehört nicht selbst mit einem Wert versorgt hast, hat einen nicht definierten Wert und sollte nicht verwendet werden. Eine Temp-Var ist nur ein Zwischenspeicher, der von seiner Belegung (Setzen, Rücksetzen, Tranferbefehl etc.) bis zum Bausteinende verwendet werden kann.
Für alles Andere nimm also besser statische Variablen, Datenbausteine oder Merker.

Gruß Ralle !


----------



## andre (12 Juli 2004)

Hallo,
wenn ein Programm läuft, dann setze ich für RET_VAL - Ausgänge(Fehlerausgabe an fertigen Bausteinen) gern temporäre Variablen ein.
Sonst fast nie.


----------



## andre (12 Juli 2004)

Hallo,
wenn ein Programm läuft, dann setze ich für RET_VAL - Ausgänge(Fehlerausgabe an fertigen Bausteinen) gern temporäre Variablen ein.
Sonst fast nie.


----------



## Zottel (12 Juli 2004)

Für diejenigen, die schon mal C oder Pascal programmiert haben:
TEMP-Variablen verhalten sich wie lokale Variablen in Funktionen.

Für diejenigen, die früher S5 mit Schmiermerkern ab M200.0 programmiert haben:
TEMP-Variablen kann man überall da gebrauchen, wo man früher die Schmiermerker brauchte.


----------



## Gino (12 Juli 2004)

*Stat Variablen*

Hat nicht jemand ein kleines beispiel für die Anwendung von Stat und Temp Variablen, damit mal Klarheit geschafft werden kann,

Ich habe mal was ausprobiert:

Ein SR-Glied mit einem Setz Eingang versorgt, das SR Glied selber habe ich als Temp Variable deklariert.

Demnach müsste im gesetzten Zustand das SR-Glied nachdem ich dem Baustein über EN Eingang die Freigabe auf Low geschaltet habe und somit die Bearbeitung beendet ist, beim wiedereinschalten des Baustein auf Low sein.

Aber es hat sich den letzten High Zustand gemerkt, warum?

Garnicht so einfach mit den beiden Variablen.


----------



## Onkel Dagobert (12 Juli 2004)

Hallo Gino,

wahrscheinlich hast du nur einen einzigen Baustein mit dem RS-Glied im OB1-Zyklus aufgerufen - dann wird der Speicherbereich deiner TEMP-Variable von keinen anderen Baustein verwendet und NICHT überschrieben.

Beim Aufruf eines zweiten Bausteins wird der Speicherbereich der TEMP-Variablen für diesen Baustein neu verwendet!

Wenn du eine statische Variable verwenden würdest, dann würde diese in dem Instanz-DB deines Bausteins gespeichert und bliebe bis zum nächsten Aufruf unverändert!


Gruß, Onkel


----------



## Gino (12 Juli 2004)

*Stat Variablen*

Genau,

ich habe mal 3 Bausteine mit jeweils einem SR-Glied im OB1 aufgerufen,
die SR Glieder selber sind Temp Variablen.

So, daraus ergab sich folgendes Ergebnis:

Mit dem Setzen des ersten SR Glied, setzten sich gleichzeitig alle drei SR Glieder in den folgenden Bausteinen (FC 1, FC 2, FC 3), rücksetze ich ich nun das zweite SR Glied (FC 2), setzen sich alle zurück (FC 1, FC 2, FC 3).

Das liegt dann wohl an deiner (Onkel Dagobert) Erklärung der gleichen Datenadresse (Speicherbereich). Die bei der nächsten Bearbeitung überschrieben wird.

So muüsste es doch eigentlich sein.


----------



## Question_mark (12 Juli 2004)

*Temp-Vars*

@Gino,


> So muüsste es doch eigentlich sein


Genau so isses, Du hast in deinem Versuch Dago's Erklärung exakt nachvollziehen können. Temp-Variablen sind wirklich eine gute Sache, um nicht grenzenlos (und manchmal auch sinnlos) Merker im Programm zu verbraten. Man muss nur, wie Dago ja auch schon festgestellt hat, höllisch aufpassen und sich über den Gültigkeitsbereich der Variablen im Klaren sein. Aber das ist in jeder Programmiersprache halt so. Gut das Du versucht hast, das selber nachzuvollziehen. Wenn man das mal so gemacht hat, versteht man das Problem und wird das auch nicht so schnell vergessen.
Gruss
Question_mark


----------



## Ralle (13 Juli 2004)

Einziges Problem ist leider immer noch, daß man Temp-Variablen (und auch Statische) nicht global suchen kann, man sie also schlecht wiederfindet, oder kennt einer dazu eine einfache Lösung (außer Export des gesamten Programmes als Quelle  :roll: )?

Gruß Ralle


----------

