Mysterium "Anfangswert" bei DB in S7-300
..Falls Du Siemens S7-300 meinst:
Wenn man eine neue MMC in die CPU einsetzt, dann fordert die CPU beim nächsten Einschalten das Urlöschen an und initialisiert dadurch die Aktualwerte der DB mit den Anfangswerten..
Bist du dir da sicher?
OK, ich korrigiere und präzisiere:
Wenn man eine neue MMC in die CPU einsetzt, dann fordert die CPU beim nächsten Einschalten das Urlöschen an und wenn die neue MMC ein Programm enthält überschreibt sie dadurch die momentanen Aktualwerte der DB im Arbeitsspeicher mit den Werten vom Ladespeicher (MMC). Diese Werte heißen aber nicht "Anfangswerte" sondern es sind die Werte, die im offline-Projekt in der Spalte "Aktualwert" festgelegt wurden.
Seit es die S7-300 CPUs mit MMC gibt, dokumentiert Siemens das geänderte Verhalten des "Anfangswert" (Initialwert) von DB-Variablen in unklaren, sich widersprechenden und teilweise auch falschen Aussagen.
Früher bei den CPU mit MC war klar: Variablen in DB haben nur einen Wert - im Arbeitsspeicher den Aktualwert und im Ladespeicher den Anfangswert. Beim Urlöschen werden die DB neu vom Ladespeicher in den Arbeitsspeicher geladen und deshalb die Aktualwerte auf die Anfangswerte gesetzt. Sehr logisch.
Wie funktioniert das Kopieren des Anwenderprogramms vom Ladespeicher in den Arbeitsspeicher ohne PG bei einer S7-300 CPU mit MC-Slot?
CPU kopiert den ablaufrelevanten Teil des Programms vom Ladespeicher in den Arbeitsspeicher. Insbesondere werden dadurch die Datenbausteine im Arbeitsspeicher intialisiert (erhalten wieder ihre Anfangswerte).
Dieses Verhalten mit MC (oder integriertem EPROM-Ladespeicher) wurde bei den CPU mit MMC geändert.
Remanenzverhalten der S7-300 CPU 31x sowie der Komplettgeräte C7-6xx mit MMC
Urlöschen (MRES) schrieb:
2. Die Daten werden auf die Aktualwerte aus dem Ladespeicher zurückgesetzt. Dies sind die letzten Aktualwerte, die vom PG in die CPU geladen oder mittels SFC84 oder die STEP 7-Funktion "RAM nach ROM kopieren ..." in den Ladespeicher geschrieben wurden.
[...]
Abläufe nach dem Urlöschen bei gesteckter MMC:
- Wenn eine MMC gesteckt ist, kopiert die CPU im Anschluss an das Urlöschen das Anwenderprogramm und die auf der MMC gespeicherten Systemparameter in den Arbeitsspeicher. Bei Datenbausteinen werden die Aktualwerte aus den Datenbausteinen auf der MMC neu geladen.
- Wo in diesen Datenbausteinen auf der MMC keine Aktualwerte vorhanden sind, da werden die Anfangswerte aus dem Ladespeicher geladen.
was soll uns der letzte Satz sagen???
Welche Bedeutung haben die Anfangs- und die Aktualwerte eines Datenbausteins?
Für die CPU ist ausschließlich der Wert von Bedeutung, welcher sich in der Spalte "Aktualwert" befindet. Auch wenn der Anfangswert mit auf die CPU geladen wird und dort im Onlinemodus beobachtbar ist, so wird dieser Wert von der CPU nicht verwendet.
Hier kommen wir der Realität schon langsam näher, allerdings noch nicht ganz korrekt. Die Hilfe zu Step7 V5.5 klärt dann endlich auf:
Datensicht von Datenbausteinen schrieb:
Anfangswert
Hierbei handelt es sich um den Anfangswert, den Sie für die Variable festgelegt haben, wenn die Software nicht den Defaultwert für den eingegebenen Datentyp übernehmen sollte.
Der Anfangswert wird beim erstmaligen Speichern des Datenbausteins für die Variable als aktueller Wert übernommen, falls Sie nicht explizit einen aktuellen Wert der Variable festlegen.
Bitte beachten Sie: Im Gegensatz zu den Aktualwerten können Anfangswerte nicht in die CPU geladen werden!
und
Rücksetzen von Datenwerten auf die Anfangswerte schrieb:
Wählen Sie hierfür den Menübefehl Bearbeiten > Datenbaustein initialisieren.
Alle Variablen werden wieder mit ihrem vorgesehenen Anfangswert versorgt, d.h. die aktuellen Werte aller Variablen werden durch den jeweiligen Anfangswert überschrieben.
Der Anfangswert wird nur im offline-Projekt verwendet, wie dieses "Datenbaustein initialisieren" und das Initialisieren bei der Konsistenzprüfung.
Kurz gefasst:
Bei den S7-300 CPU mit den MMC gibt es in der CPU gar keinen "Anfangswert" mehr! Der Wert im Ladespeicher wird "Aktualwert" genannt - weil es ist der Wert der offline in der Spalte "Aktualwert" festgelegt wird - er verhält sich aber wie ein Anfangswert. Beim Urlöschen wird der DB genauso wie früher neu vom Ladespeicher (MMC) in den Arbeitsspeicher geladen und die Variablen haben danach die anfangs offline projektierten Aktualwerte. Die Werte im Ladespeicher sind aber nicht mehr die als "Anfangswert" projektierten Werte, sondern die offline in der Spalte "Aktualwert" projektierten Werte.
Wieso Siemens das so verwirrend ändern mußte, das mag verstehen wer will.
Genauso die Formulierung "wenn bereits Aktualwerte vorhanden sind" bzw. "Wo auf der MMC keine Aktualwerte vorhanden sind" - gibt es denn überhaupt DB-Variablen, welche (noch) keinen Aktualwert haben? Ich meine: Was für ein Schwachsinn.
Testergebnis
Weil der Test von All4one methodisch fehlerhaft durchgeführt wurde, habe ich das Problem heute mal an 2 verschieden alten S7-300-CPU getestet (eine aktuelle 315-2 PN/DP V3.2.3 und eine 314C V1.0).
Dabei wurden in DB Variablen mit dem Anfangswert 1 und dem Aktualwert 2 angelegt. Nach dem erstmaligen Laden der DB in die CPU wurden erwartungsgemäß sofort die "Aktualwerte" aktiv - die Variablen hatten sofort den Wert 2. Nun wurden per VAT die Variablen auf den Wert 3 gesetzt und danach Urlöschen durchgeführt (mit PG und auch mit Betriebsartenschalter). Nach dem Urlöschen hatten die Variablen wieder den Wert 2 - den offline projektierten "Aktualwert".
Die neuere CPU unterstützt das DB-Attribut "non-Retain". Diese setzt jedem Stop/Run-Übergang die Aktualwerte der non-Retain-DB auf die offline festgelegten Aktualwerte zurück, d.h. auf den Wert 2. (verschiedene Dokumentationen behaupten, die non-Retain-Variablen würden auf 0 gelöscht! was also nicht korrekt ist)
Egal was ich mit den CPU angestellt habe, die DB-Variablen wurden NIE auf die projektierten "Anfangswerte" 1 gesetzt.
PS:
Man müßte mal noch testen, welchen Anfangswert Online-DB haben/erhalten, wenn das offline Projekt nicht vorhanden ist, also einfach in ein leeres Projekt herausladen. Dann wüßte man, ob die Anfangswerte in die MMC geladen werden oder nicht.
Harald