Anfangswert einer Lokalvariablen

Earny

Level-1
Beiträge
422
Reaktionspunkte
38
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich hätte da mal eine grundsätzliche Frage. Ich habe in der Vergangenheit immer angenommen, dass eine Lokalvariable (auch eine statische Lokalvariable) beim erstmaligen Start der FC bzw. des FB, einen Defaultwert hat. Bei einem Zahlendatentyp (INT, DINT, REAL) müsste das die "0" sein.
Liege ich mit meiner Annahme richtig?
Oder muss man jeder Variablen explizit den Wert 0 zuweisen, um sicher zu gehen, dass sie bei der ersten Abfrage wirklich den Wert 0 hat?


Gruß
Earny
 
Hallo,
eine Lokalvariable hat immer irgend einen Wert.
Hier bitte beachten : Sie behält ihren Wert von einem Zyklus auf den nächsten auch nicht - jedenfalls nicht verlässlich.

Ich hoffe, das hilft dir weiter ...
Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zusatz :
Dies gilt für TEMP-Variablen eines FC's oder FB's.
In einem FB hast du die Möglichkeit, im STAT-Bereich Variablen anzulegen, deren Anfangswert definiert ist und deren Inhalt von einem Zyklus auf den Nächsten erhalten bleibt ...

Gruß
LL
 
Hallo,

wenn Du in einem FB Lokalvariablen (ausser Temp) anlegst, kannst Du denen auch einen Anfangswert zuweisen.
(Was aber bur bei statischen Variablen Sinn macht, da In bzw, In_Out-Variablen ja beim Bausteinaufruf zugewiesen werden.)
Beim Anlegen des Instanz-DB werden diese Werte dann im DB abgelegt.
Beim Kaltstart der CPU bzw. beim Neuanlegen des DB's werden dann die Anfangswerte auf die Aktualwerte kopiert.


Grüße
Gebs
 
Hallo Larry Laffer,
hallo Gebs,
besten Dank für Eure schnellen Antworten. Das mit der temp. Lokalvariable hätte ich so nicht vermutet. Meine Frage ist damit exakt beantwortet.

Gruß
Earny
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

...Beim Kaltstart der CPU bzw. beim Neuanlegen des DB's werden dann die Anfangswerte auf die Aktualwerte kopiert.


Grüße
Gebs

Hallo,
hab da Einspruch einzulegen!
Anfangswerte werden entweder beim NEUanlegen des DB (nicht kopieren)oder der Variable in die Aktualwerte übertragen, ansonsten nur mit "DB initialisieren".
Lasse mich gern eines besseren belehren, aber Kaltstart ist definitiv falsch.

Gruß...
 
Hallo,
hab da Einspruch einzulegen!
Anfangswerte werden entweder beim NEUanlegen des DB (nicht kopieren)oder der Variable in die Aktualwerte übertragen, ansonsten nur mit "DB initialisieren".
Lasse mich gern eines besseren belehren, aber Kaltstart ist definitiv falsch.

Gruß...

wenn du recht hast, dann sollte Siemens anfangen alle Handbücher zu überarbeiten und zu korrigieren:

Beim Kaltstart werden alle Daten (Prozessabbild, Merker, Zeiten, Zähler und
Datenbausteine) auf die im Programm (Ladespeicher) hinterlegten Startwerte
zurückgesetzt - unabhängig davon, ob sie als remanent oder nicht remanent
parametriert wurden.
[edit]

der vollständigkeithalber:

Beim Neustart (Warmstart) werden das Prozessabbild und die nicht remanenten Merker,
Zeiten und Zähler zurückgesetzt.
Remanente Merker, Zeiten und Zähler behalten ihren zuletzt gültigen Wert.
Alle Datenbausteine, die mit der Eigenschaft “Non Retain” parametriert wurden,
werden auf die Ladewerte zurückgesetzt. Die anderen Datenbausteine behalten
ihren zuletzt gültigen Wert.
und

Beim Wiederanlauf behalten alle Daten inklusive des Prozessabbildes ihren
zuletzt gültigen Wert.
[/edit]
 
Zuletzt bearbeitet:
Das sollte Siemens

Wäre schlimm wenn nach Netzausfall (wäre ja ein Kaltstart), die Anfangswerte aus den Datenbausteinen geladen würden :(

Im Normalfall werden die Anfangswerte nur bei neuanlegen, DB initialisieren (sagte schon Simatiker) und Mres geschrieben.
 
Zuletzt bearbeitet:
Wäre schlimm wenn nach Netzausfall (wäre ja ein Kaltstart),

wenn du eine CPU zum testen hast, mach mal, was ich gerade gemacht habe:

1. CPU in RUN
2. Netz-AUS
3. Netz-EIN
4. Diagnosepuffer gucken

Code:
Diagnosepuffer der Baugruppe CPU 315-2 DP

Ereignis 1 von 10:  Ereignis-ID 16# 4302
Betriebszustandsübergang von ANLAUF nach RUN 

Ereignis 2 von 10:  Ereignis-ID 16# 1382
Automatische [B]Neustart (Warmstart)[/B]-Anforderung 
STOP-Ursache: Netzausfall 

Ereignis 3 von 10:  Ereignis-ID 16# 4301
Betriebszustandsübergang von STOP nach ANLAUF 
STOP-Ursache: Netzausfall 

Ereignis 4 von 10:  Ereignis-ID 16# 4300
NETZ-EIN gepuffert 

Ereignis 5 von 10:  Ereignis-ID 16# 494E
Netzausfall 
Bisheriger Betriebszustand: RUN

[edit] longbow hat recht ... und zwar unter "Objekteigenschaften" -> Tab "Anlauf" -> "Anlauf nach NETZ-EIN" [/edit]
 
Zuletzt bearbeitet:
Hallo,

Handbuch Siemens:
Der Anfangswert wird beim erstmaligen Speichern des Datenbausteins für die Variable als aktueller Wert übernommen, falls Sie nicht explizit einen aktuellen Wert für die Variable festlegen.
Bitte beachten Sie: Anfangswerte können nicht in die CPU geladen werden

Wollte eigentlich nur sagen das der Anfangswert nicht unbedingt gleich Aktualwert sein muß. Erst durch DB initialisieren werden neue Anfangswerte in die Aktualwerte geschrieben.

Nach Kaltstart werden Aktualwerte geladen! Diese sind nicht unbedingt Anfangswerte.

Im Bausteineditor: Ansicht -> Datenansicht

Hab mich vielleicht etwas unglücklich ausgedrückt...

Gruß...
 
Zuletzt bearbeitet:
Zurück
Oben