ich hol mal diesen Thread hervor, weil es m.E. hier gut dazu passt:
Hier ist Siemens bis heute noch nicht dem Wunsch nachgekommen, eine einfache Möglichkeit zu schaffen, Aktualwerte als Initialwerte zu übernehmen
Das haben wir auch schon oft gewünscht- vielleicht kommt es ja irgendwann mal. Seltsam, dass dieses Feature so unwichtig ist, dass man es noch nicht integriert hat- ich würde es jedenfalls begrüßen, wenn es diese Möglichkeit gäbe.
Was m.E. fehlt, ist die Möglichkeit, nicht nur einen FB während der Programmabarbeitung erneuern zu können, sondern gleichzeitig den Aufruf, den aufgerufenen Codebaustein und seine Lokaldaten während der Programmabarbeitung austauschen zu können.
Das halte ich für machbar - und bereits bei S7 für implementierbar (mit entsprechender CPU-Firmware).
Der Vorgang müsste sein:
Den Aufruf in einen - ich nenns jetzt mal so - "Schattenspeicherbereich" laden. Also im simpelsten Fall den neuen OB1. Den neuen FB in diesen Schattenspeicherbereich laden. Den neuen DB ebenso. Während des Zykluskontrollpunktes nun gleichzeitig alle drei neuen Bausteine aktiv schalten und die Aktualdaten des alten DB auf die Aktualdaten des neuen DB übertragen.
Woher soll nun die CPU die alte Struktur und die neue Struktur des Datenbausteins kennen?
Lösung: zu jeder Deklaration wird eine Identnummer dazuvergeben - am besten ein DWORD, damit beim kontinuierlichen Hochzählen auch nach Jahrhunderten nicht wieder eine alte Nummer wieder auftaucht. Wird eine Deklaration nur verschoben (z.B. vom stat-Bereich zu einem out oder umgekehrt oder wie auch immer) muss diese Identnummer erhalten bleiben - auch wenn sogar das Symbol verändert wird. Wird von einem anderen FB eine Deklaration hereinkopiert, darf die Identnummer nicht erhalten bleiben, sondern muss wieder eine frische vergeben werden.Die Identnummern brauchen nur im Ladespeicher hinterlegt werden. Die CPU scannt nun den alten und den neuen Datenbaustein. Und überträgt anhand der Identnummern die alten Daten auf den neuen Datenbaustein.
Und wenn Siemens ganz superlieb ist - dann schaffen die das sogar, dass eine seither Integer-Variable mit Typumwandlung auf einen Doppelinteger abgebildet wird. Und noch viel, sehr viel toller wird es, wenn das HMI-Gerät nicht mehr anhand einer Absolutadresse sondern aufgrund der Identnummer auf den SPS-Speicher zugreift. *träum*