DB-Daten beim Programmladen retten

Feng

Level-1
Beiträge
116
Reaktionspunkte
21
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend liebe Gemeinde – eine Frage im weitesten Sinne das Thema REMANENZ betreffend (im Forum bin ich nicht fündig geworden):

Ich bin dabei, die Technik meines Hauses (Heizungs-, Photovoltaik-, Kollektor-, Blockheizkraftwerk-, Rollladen- etc- Steuerung) mit 2x S7-300 316 CPU’s (Master – Slave, keine Speicherkarten im Slot) zu realisieren. Programmsprache AWL. Dabei wird natürlich immer wieder das Programm entlaust, geändert, erweitert, Bausteinkonsistenz geprüft und dann neu eingespielt.

So - und da sitzt mein Problem:
Ich speichere im DB1 aktuelle Verbrauchsdaten (z.B. heutiger aktueller Heizölverbrauch). Wenn ich aber die Hardware mit einem neuen Programm lade, sind diese Verbrauchsdaten im DB1 weg, da der DB mit den default-Werten geladen wurde.

Meine Fragen: Gibt es eine Möglichkeit, diese Daten im DB1 vor dem Überschreiben zu retten? Kann man sie vielleicht im Remanenzspeicher der CPU aufbewahren – funktioniert bei mir bisher nicht. Falls sie da doch drin sind, wie bekomme ich die Daten nach dem Hochlauf von der CPU in den DB1?

Schon mal danke
sagt Feng
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@vierlagig
wenn du den DB1 nicht überschreibst beim übertragen behält er die daten ...
- wenn ich habe es Richtig verstanden, bei neue Starten Programm er muss auf andere Adresse in DB die Daten rein schreiben?

wie geht das , mit arry [1..24] ?
Oder wie würdest das realisieren?

gruß waldy
 
Wobei ich grundsätzlich einen Datenbaustein als einzigen Datenspeicher bedenklich finde.

Wie groß ist den Dein DB und was für eine Struktur hat er denn?
 
Danke für die schnelle Antwort! Aber mein Problem ist nicht gelöst.
Nacheinander:
1) Ich habe mein Programm modifiziert und auf Bausteinkonsistenz gecheckt
2) Ich klicke Station Master -> LADEN - ALLES. Die CPU wird neu bespielt.
3) Station starten. So - der DB1 ist vollständig mit den Defaultwerten beschrieben - die alten Daten im DB1 sind weg.

Was mache ich falsch?
Bei BAUSTEINE / Eigenschaften/Operandenvorrang ist "Symbol hat Vorrang" - "Bei allen Zugriffen" angeklickt - aber das kann's doch eigentlich auch nicht sein.
Wieso wird der DB1 beim ProgrammEinspeichern überschrieben?? :confused:
Größe: Schlappe 500 B

Oder ist bei mir da "eine Schere im Kopf" ?
Darf ich vielleicht nicht ALLES übertragen, sondern muss die DB ausklammern beim ProgammNeuLaden??

Gruß Feng
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Du brauchst nur die Bausteine übertragen die Du geändert hast.
Die DB´s in der Regel nur wenn neue Variablen dazu gekommen sind oder sich der Datentyp geändert hat.
 
Darf ich vielleicht nicht ALLES übertragen, sondern muss die DB ausklammern beim ProgammNeuLaden??

das ist eine grandiose idee und genau das was ich meinte!

und zotos hat da schon recht ... ich würde die daten auf einem zweiten system, einem PC/Visu speichern ... so kann man sie immer mit der CPU synchronisieren, falls sich da mal was verabschiedet

@waldy: wah.?
 
du kannst die Aktualdaten deiner Datenbausteine in die Offline-Projektierung übernehmen bevor du an diesen etwas änderst.

Schau mal hier Link

Somit hast du nach dem übertragen des Datenbausteins wieder die alten Werte.

Mfg
uncle_tom
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meine Fragen: Gibt es eine Möglichkeit, diese Daten im DB1 vor dem Überschreiben zu retten? Kann man sie vielleicht im Remanenzspeicher der CPU aufbewahren – funktioniert bei mir bisher nicht. Falls sie da doch drin sind, wie bekomme ich die Daten nach dem Hochlauf von der CPU in den DB1?
Hallo Feng,

wenn Dein Programm läuft, gehst du in die Online Sicht und kopierst Dir den DB1. Anschließend Offline Sicht und Einfügen.
Jetzt hast Du Deine Aktualwerte gesichert.

Solange Du nichts an dem DB1 änderst kannst Du dann auch jeder Zeit das Programm wieder übertragen.
Falls der DB1 geändert werden soll, erst den aktuellen Stand sichern, dann ändern und anschließend übertragen. :)

Der DB1 darf aber in Deinem Fall kein Instanz Datenbaustein sein.
Denn ein Instanz Datenbaustein wird beim generieren (wenn der Statische Bereich des FB geändert wurde) immer mit seinen Anfangswerten Initialisiert.
Die Daten kann man nicht so gut sichern
 
Vielen Dank für die superschnellen Antworten – da programmiere ich jetzt schon viele Monate an meiner Anlage rum und hatte mir noch keine Gedanken über „online“ und „offline“ gemacht.
Bisher: Programm auf dem PC schreiben und in die CPU laden fertig . Der Unterschied zwischen „offline“ (Daten im Programmiergerät) und „online“ (Daten in der CPU) hat mich bislang gar nicht interessiert ...
Der Link von uncle tom , der Hinweis von Paule und Panzerknackers http://www.sps-forum.de/showthread.php?t=26516&page=3 hat mir die Augen ein wenig geöffnet.

Steht zwar alles da drin – aber ich beschreibe es nochmal für „Neulinge“ (wie z.B. mich) – wenn Fehler drin sind, bitte korrigieren:

*** Daten im PG=Programmiergerät (offline) und Daten in der CPU=SPS (online) sind 2 Paar Schuhe
*** Ändert man einen DB (im PG) und lädt ihn dann fröhlich in die CPU, sind die Aktualdaten in der CPU futsch (das war mein Problem)
*** Will man einen DB (im PG) ändern aber die Aktualdaten der CPU nicht verlieren, dann:

1) DB im PG öffnen (offline) – das ist der DB den ich (später) ändern, umschreiben, neu laden etc. will
2) DB im PG öffnen (online) Im Simatic-Manager 2.Schaltfläche rechts von der Lade-schaltfläche – das ist der aktuelle Stand in der CPU
3) Online-DB mit der Maus kopieren --> offline-DB einfügen – jetzt hat der offline-DB die Aktualdaten der CPU !
4) Erst jetzt Offline-DB ändern etc
5) Offline-DB --> CPU laden - die macht jetzt mit den letzten Aktualdaten weiter.

Danke für die Hilfen!
Gruß Feng - dessen Nebelbank sich wieder ein kleinwenig gelichtet hat ...
 
Zuletzt bearbeitet:
Die DB´s in der Regel nur wenn neue Variablen dazu gekommen sind oder sich der Datentyp geändert hat.

Nicht ganz... Die Adressierung darf sich nur nicht ändern.. Wenn du 4 DWORDS Reserve hast, dann kannst du daraus auch 8 WORD oder 8 INT machen.. oder eben 6 WORD und 4 Byte.. Nur darfst du nicht auf eine Adresse zugreifen die es nicht gibt..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nicht ganz... Die Adressierung darf sich nur nicht ändern.. Wenn du 4 DWORDS Reserve hast, dann kannst du daraus auch 8 WORD oder 8 INT machen.. oder eben 6 WORD und 4 Byte.. Nur darfst du nicht auf eine Adresse zugreifen die es nicht gibt..
Sorry Befree,

aber das ist falsch!
Wenn Du das machst, kannst ihn Online nicht mehr anschauen.
Da ist die komplette Datenstruktur kaputt, eine Rücksicherung ist nicht mehr möglich (außer eine defekte).

Bei so einer Änderung muss immer der DB übertragen werden.
 
Ja ok vergesst einfach meinen zweifelhaften Einwurf von Gedankengulasch.
Wollte damit auf irgendwas hinaus heute morgen, habs aber wieder vergessen. Glaube ich wollte damit auf irgendeine absurde Art sagen das es der SPS (nicht Step7) egal ist was für Formate im DB als Variablen angegeben sind.

Aber du hast natürlich recht.
 
Code:
//////////////NW1///////////- Quittierung
 
U E 0.0
SPBN nw1
L 0
T MD 200
 
L MD 200
SLD 3
LAR1 
nw1: NOP 0
 
 
//////////////NW2///////////- Einlesen Daten
 
U E 0.1
SPBN ende
L MB 0                        // lade eingaben von Baugruppen einlesen , 8 Eingänge von Baugruppe
T DBD [AR1,P#0.0]        // transferiere DB 1 , DBD 0.0 Adresse ,DW 4 besitz 4 Byte
L MB 1                         // lade eingabe von Baugruppe einlesen
T DBD [AR1,P#4.0]        // transferiere in DB 1 , DBD 4.0
 
 
//        TAR1                         // ende adresse schreibt in akku_1 
//        T MD 200                   // z.b 200
 
NOP 0
 
 
////////////NW3///////////-setzten MW200 auf neue Adresse
 
L MD 200
L 8
+D 
T MD 200
ende: NOP 0


würde diese Programm dafür gut geeignet?

gruß waldy
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Feng

habe auch noch ne Idee. Du könnstet die Daten auch in Merkerbytes/-worten oder was du brauchst Speichern und diesen Bereich in der Hardwarekonfig unter CPU Eigenschaften als Remanent schalten. Damit hättest du einen 2. Bereich wo deine Daten stehen. Die Übertragung
DB <-> Meker könstest du ja zyklisch anstossen und mit SFC20 geht das ganze auch noch in einem rutsch. Vielleicht hilft dir das Weiter oder du nimmst zum Sichern einen 2. DB den du nicht mit überträgst. Musst du nicht machen war nur so ein "Gedankenblitz" von mir. :sm5:
Gruß Thomas
 
Danke Thommy07
- aber mein Problem ist eigentlich gelöst.

In Kürze: Die online-Daten im DB vor der Änderung --> offline-DB kopieren.

Fertig! Funktioniert einwandfrei.
(Wäre schön, wenn Siemens dafür einen Button anbieten würde ...)

Gruß
Feng

"Zweifle nie am guten Urteil deiner Frau - immerhin hat sie ein Genie geheiratet ..." (Federico Fellini)
 
Meine letzte Aussage "Problem gelöst" war mal wieder nicht von langer Dauer...
Ich bin kein Profi sondern nur ein begeisterter Simatic-Hobby-Programmierer - deshalb meine Frage an die Spezialisten:

Wie kann ich per einmaligem Tastenbefehl eines Panels einzelne (oder auch alle) offline-Daten in DBs mit den online-Daten aus der CPU aktualisieren?
Wäre natürlich noch toller, wenn das Programm auch noch merken würde, dass der DB seit letzem Laden in die CPU geändert wurde - und dann die Aktualisierung verweigern würde (ist mir per Hand schon paarmal passiert - und dann ist der DB leider kaputt... und gleichfalls die gute Laune... )

Wäre super, wenn ich eine "laienverständliche" Antwort oder Hinweise auf Einarbeitungslinks bekommen könnte.

Danke schon mal vorab!
Gruß Feng
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kann ich per einmaligem Tastenbefehl eines Panels einzelne (oder auch alle) offline-Daten in DBs mit den online-Daten aus der CPU aktualisieren?
Hallo Feng,
habe ich Dich richtig verstanden:
Du willst zur Laufzeit, Daten der Online-DB's in die Offline-DB's schreiben?
Das geht leider nicht da Offline und Online einfach zwei verschiedene Betriebszustände sind.
Es gibt leider keine andere Möglichkeit als die weiter oben beschriebene.
 
Meine letzte Aussage "Problem gelöst" war mal wieder nicht von langer Dauer...
Ich bin kein Profi sondern nur ein begeisterter Simatic-Hobby-Programmierer - deshalb meine Frage an die Spezialisten:

Wie kann ich per einmaligem Tastenbefehl eines Panels einzelne (oder auch alle) offline-Daten in DBs mit den online-Daten aus der CPU aktualisieren?
Wäre natürlich noch toller, wenn das Programm auch noch merken würde, dass der DB seit letzem Laden in die CPU geändert wurde - und dann die Aktualisierung verweigern würde (ist mir per Hand schon paarmal passiert - und dann ist der DB leider kaputt... und gleichfalls die gute Laune... )

Wäre super, wenn ich eine "laienverständliche" Antwort oder Hinweise auf Einarbeitungslinks bekommen könnte.

Danke schon mal vorab!
Gruß Feng

Wenn du scriptfähige Panel hast, könnte man natürlich die Daten per Script in eine Datei auf dem Panel schreiben. Geht dann etwas schief, kann man sie wieder zurückladen.
 
Daten sichern geht auch ganz gut mit einer Rezeptur, so besteht die
sogar die möglichkeit mehrere Datensätze zu speichern. Voraussetzung
ist natürlich ein Panel. Damit wäre es auch möglich im bestimmten Rahmen
eine Veränderung der Daten zu überwachen, indem mann z.b. die Funktion
"Eingabe Abgeschlossen" nutzt.
 
Zurück
Oben