MW als Persistente Variablen vor OnlineChange / Restart sichern

Markarndt

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin, moin,

folgendes Problem:
Bei einer Steuerung (TwinCat) liegen Konfigurationsdaten im Merkerbereich. Es werden über ModBus Daten in die Merker geschrieben und von dem SPS Programm als Konfiguration genutzt.

Das Problem liegt darin das Variablen die mit AT deklariert sind nicht als VAR PERSISTENT gesetzt werden dürfen.

Erste Idee war mit der FB_Exit Methode die Daten in ein Struct zu kopieren welches Persistent ist und dann mit FB_Init nach dem Neustart wieder in die Merker zu schreiben.

Geht aber nicht. Werden mit FB_Exit die Daten in das Struct kopiert sind diese trotzdem "verloren".

Gibt es eine Methode/Pragma die genutzt werden kann die Daten zu kopieren bevor die Persistenten Variablen geschrieben werden?

Danke und Ahoi,

Mark
 
Anbei des Rätsels Lösung - oder ein Workaround:
Zu dem Zeitpunkt wenn die FB_Init Methode aufgerufen wird, scheinen die Persistenten Daten noch nicht geladen zu sein. Also gibt es auch nichts was sinnvoll kopiert werden könnte.
Um das zu umgehen habe ich folgendes Umgesetzt:
- einen FB erstellt der nur eine Variable hat (bInit), diese wird durch die FB_Init/FB_Reinit Methode auf True gesetzt. bInit kann über eine Property gelesen/geschrieben werden
- in Main wird nach dem Aufruf vom UPS-Baustein dann der Zustand von bInit abgefragt (zu dem Zeitpunkt läuft das Programm ja bereits und die persistenten Daten sind geladen)
- ist bInit TRUE werden die persisten Daten in den Arbeitsbereich kopiert (der ja auf dem Merkerbereich liegt) - danach wird bIint auf FALSE gesetzt
- ist bInit FALSE dann werden die Daten aus dem Arebitsbereich in den persistenten Bereich kopiert
Eigentlich ganz einfach.
Vielleicht hilft es ja noch mal jemanden.
Ahoi,
Mark
 
Zurück
Oben