TIA Namen einer Statischen Variablen eines FB ändern ohne IDB zu reinitialisieren

Zuviel Werbung?
-> Hier kostenlos registrieren
Wo wir gerade beim Thema DBs sind: Ich weiß nicht, wie das bei der 1500er ist, aber bei der 1200er (an einer sehr kleinen Maschine) führt die Übertragung eines einzelnen DBs mit einer einzigen geänderten Variablen unter Umständen schon dazu, dass man nur im STOP übertragen kann, selbst wenn man die Aktualwerte nicht retten möchte.
...
Bei der 1500 kann man wie schon gesagt riesige Änderungen im RUN machen, ohne spürbare Rückwirkungen auf Reaktionszeiten.

Hier war die Frage eher, wie man reinitialisieren von Daten vermeiden kann, wenn man Variable umbenennt oder vielleicht deren Typ ändert. Variable hinzufügen geht mit dem Reservekonzept, derzeit nur leider nicht innerhalb von einer Struktur. Solange man damit klar kommt hat man nicht wirklich ein Problem.

@Ducati: Was Du dazu gschrieben hast (Bei uns geht es eher um stoßfreies Laden von reinitialisierten DBs) verstehe ich nicht wirklich. Haben wir da irgendwie aneinander vorbeidiskutiert?
 
@Ducati: Was Du dazu gschrieben hast (Bei uns geht es eher um stoßfreies Laden von reinitialisierten DBs) verstehe ich nicht wirklich. Haben wir da irgendwie aneinander vorbeidiskutiert?

NeNe... schon alles gut...

wir haben bei uns im DB Bools welche von der Logik gesetzt oder rückgesetzt werden. Wenn der DB jetzt reinitialisiert wird, steht dieses Bool von einem auf dem nächsten Zyklus auf FALSE, und wird auch nicht wieder gesetzt, wenn die Bedingung dafür gerade nicht erfüllt ist.

Unser Ansatz, am Ende vom OB1 den DB zu sichern und am Anfang vom OB1 bei Bedarf (falls eine Reinitialisierung erkannt wurde) wieder herzustellen.


Im Prinzip sind das 2 Probleme:

- wie kann ich bei Reinitialisierung im RUN der CPU meine Daten (Flankenerkennung, SR-Flipflops) erhalten, Daten sind und müssen online in der CPU stoßfrei vorhanden sein
- wie kann ich bei CPU-Stop, CPU komplett neuladen, CPU-Tausch meine Daten (Zählerdaten, Einstellwerte) erhalten, Daten müssen offline im Projekt oder auf der MMC vorhanden sein.

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
- wie kann ich bei CPU-Stop, CPU komplett neuladen, CPU-Tausch meine Daten (Zählerdaten, Einstellwerte) erhalten, Daten müssen offline im Projekt oder auf der MMC vorhanden sein.
Gruß.

Sollte das nicht gehen indem man diese Werte als Einstellwerte markiert. Diese dann sichern mit einer Momentaufnahme, um anschließend die Einstellwerte der Momentaufnahme als Startwerte zu übernehmen.
Oder habe ich das Problem falsch verstanden.
 
Mit UBLOCKMOV wollte ich es auch erst machen. Da die Daten die zu sichern sind aber remanent sind müsste dies ja im zu sichernden DB ja auch so sein. Dafür reicht aber mein Remanenzspeicher bei weitem nicht mehr aus. Will heissen. bei jedem restart der CPU verliert auch der sicherungsdb die Daten.

Unser Ansatz ist, die Rücksicherung nur auszuführen, wenn eine Reinitialisierung erkannt wurde. D.h.:

- der zu sichernde DB ist remanent
- der Sicherungs-DB, also da wo die Daten hingesichert werden, muss m.M. nicht remanent sein

Gruß.
 
Sollte das nicht gehen indem man diese Werte als Einstellwerte markiert. Diese dann sichern mit einer Momentaufnahme, um anschließend die Einstellwerte der Momentaufnahme als Startwerte zu übernehmen.
Oder habe ich das Problem falsch verstanden.

Ja klar, muss man aber händisch machen... Und wenn sich Einstellwerte verändern, weil von der Visu jemand was verändert, und nächste Woche die CPU defekt geht, dann sind die im Offline-Projekt nicht aktuell...

Also man muss sich auch dafür was überlegen...auch wenn dieses Problem nicht so akut ist wie das mit dem Reinitialisieren.

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
CPU-Tausch meine Daten (Zählerdaten, Einstellwerte) erhalten, Daten müssen offline im Projekt oder auf der MMC vorhanden sein.
Das geht im Prinzip nur über den WRIT_DBL wo du die Aktualwerte aus der CPU auf die MMC sichern kannst.
Funktioniert mit nicht optimierten DBs recht gut. ANY über ganzen DB aufspannen, sichern und bei Bedarf rücklesen. Oder bei Urlösch-Ereignis automatisch.
Bei 300 machen wir das so.

Bei den optimierten DBs wird's schwieriger. Du kannst der Funktion keine ganzen DBs übergeben, nur Strukturen, UDts, Arrays oder Einzel-Variablen.
Man kann zwar einen "Von-UDT-abgeleiteten" DB als ganzes übergaben, aber wer will das schon bei all seinen DBs machen, hat auch andere Probleme.
Die WRIT_DBL-Funktion ändert auch den Zeitstempel wenn du DB1 von CPU auf DB1 in der MMC sicherst. Dann bekommt du Online-Unterschiede angezeigt.
Man könnte mit CREATE-DB einen separaten DB anlegen und auf diesen sichern, wird aber dann kompliziert...

Wo wir gerade beim Thema DBs sind: Ich weiß nicht, wie das bei der 1500er ist, aber bei der 1200er (an einer sehr kleinen Maschine) führt die Übertragung eines einzelnen DBs mit einer einzigen geänderten Variablen unter Umständen schon dazu, dass man nur im STOP übertragen kann, selbst wenn man die Aktualwerte nicht retten möchte.
Ja das ist schon so. Die 1200er und auch die früheren 1500er haben/hatten(?) doch ein Limit an Anzahl an Bausteinen die ohne Stopp übertragen werden können.
Hatte vor kurzem kleine Anlage mit 1200. Die hab ich ein paar mal wegen ner zentraleren Änderung an nem UDT in den Stopp jagen müssen. Bei aktuellen 1500ern hab ich das nicht mehr geschafft.

Sollte das nicht gehen indem man diese Werte als Einstellwerte markiert. Diese dann sichern mit einer Momentaufnahme, um anschließend die Einstellwerte der Momentaufnahme als Startwerte zu übernehmen. Oder habe ich das Problem falsch verstanden.
Wie ducati schon schrieb hilft das wenig weil keiner mit PG regelmäßig sichert.

Mir geht die Option "Einstellwert" eigentlich nicht weit genug. Das ist doch nur ein Selektor welche Werte als Startwerte übernommen werden sollen. Sonst haben die keine Funktion oder?
Wäre es nicht sinnvoll wenn es eine Option gäbe alle als Einstellwerte markierten Daten regelmäßig (von der CPU ohne zusätzlichen Code) auf die MMC (oder sonst wo hin, Server von mir aus) speichern zu können.
Dann wäre die Option "Einstellwert" wenigstens richtig sinnvoll. Ziel wäre es ohne Programmieraufwand die Daten seiner CPU bei Tausch oder ähnlichen Themen erhalten zu können.

Was ist denn nun mit dem "Reinitialisieren von Aktualwerten mehrerer DBs mit der Momentwertaufnahme (auch gesamte PLC)" aus der V14? (Seite 36 in dem PDF)
Wie genau funktioniert das?
 
Zuletzt bearbeitet:
Weiss jemand, wie bei der 1500er das Einketten von neu geladenen Bausteinen funktioniert? Ich hoffe doch mal das passiert im Zykluskontrollpunkt? Würde mich aber auch nicht wundern, wenn Siemens die irgendwann im OB1 Zyklus einfach reinkopiert...
Meine stossfrei. DB Sicherung funktioniert aber nur, wenn reinitialisierte DBs immer nur im Zykluskontrollpunkt geladen werden. Hab Grad keine Idee, wie ich das auf die Schnelle ausprobieren kann...
 
Ich hatte vor kurzem ein ähnliches Problem. Da musste ich Änderungen an einer laufenden Anlage durchführen die ich zu diesem Zeitpunkt unmöglich anhalten konnte. Beholfen habe ich mir dann folgendermaßen:
Ich habe dann einen zweiten DB der die geänderten UDTs enthielt, parallel zum Ursprung- DB eingebaut, sodass die Daten parallel in beide DBs geschrieben wurden. Danach habe ich alle Lesevorgänge vom Ursprung- DB auf den neuen DB umgeändert und den alten DB dann wieder rausgelöscht.
Vielleicht hilft das ja jemandem weiter der vor ähnlichen Problemen steht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja es ist wirklich traurig, dass Siemens den Erhalt von Online-Daten immer noch nicht im Griff hat. Bei Codesys ist dieses Problem völlig unbekannt. Online vorhandene Daten können nicht überschrieben werden solange Variablenname und Pfad gleich geblieben sind. Fertig.

Anstatt das man sich das einfach mal als Vorbild nimmt und umsetzt, gibt es jetzt eine neue Krücke die heißt "Speicherreserve". Mal ehrlich, ich habe wirklich versucht, einen Nutzen aus dieser Funktion zu ziehen. Leider sind die Voraussetzungen, Einschränkungen und Abläufe so kompliziert, dass es gegenüber den bisher praktizierten Workarounds kein wirklicher Vorteil ist.

Ich würde mir zumindest eine Verbesserung wünschen, die alle Fälle abdecken würde, bei denen kein stoßfreier Übergang benötigt wird. Z.B. beim abgleichen von Parameter-DBs:

Wenn man einen DB offline geändert hat, kann man über Online/Offline Vergleich ohne Probleme die neue und die alte Struktur mit den Aktualwerten vergleichen. Es ist jetzt eine Fleißarbeit, die online-Werte und die zugehörigen Offline-Werte zu schreiben und den DB dann zu laden. Dieses Verfahren zu programmieren dürfte recht trivial sein. Damit hätte man dann zumindest für einen großen Teil der Fälle eine einwandfrei saubere Lösung.

Oder erwartet Siemens, dass sich jeder so etwas über "Openess" selbst programmiert (wenn überhaupt möglich)?
 
Naja aber Daten kann man nur umtippen, die sich nicht ändern. Wird irgendwas gezählt oder läuft sonst was, ist der Zug schon abgefahren. Aktuell projektieren wir es so, dass wir wichtige Daten in global DBs ablegen. Damit wird eine Änderung eines FB nicht ganz so wild. Meist zumindest

Gesendet von meinem SM-G930F mit Tapatalk
 
Zurück
Oben