Wie kann man am einfachsten eine DB kopiern....

Tmbiz

Level-2
Beiträge
566
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe eine DB6 in dem meine Var von der Visu liegen. Dann habe ich eine DB5 in dem sind die Var die ich im Programm verwenden möchte. Ich möchte im OB1 am Anfang eine Funktion einbauen, die die Daten aus OB6 in OB5 kopiert. So dass ich kann nur noch im Programm mit OB5 arbeite.

Wie kann ich das am geschicktesten machen?

Update:
Sorry ich hatte vergessen einige Daten anzugeben. In AWL, TIA 14, SPS 1512
 
Zuletzt bearbeitet:
Für TIA S7-1x00:
Wenn beides z.B. auf dem gleichen UDT basiert, kann man es in SCL einfach per := zuweisen.
Zwei gleiche Struct ebenso.
 
Wenn Du bedingungslos den kompletten DB6 auf den DB5 umkopieren willst, warum schreibt dann Deine Visu nicht direkt in DB5 oder warum soll Dein Programm nicht direkt DB6 verwenden? Das (unnötige) Umkopieren von großen Datenbereichen kostet viel Zykluszeit.

Harald
 
Wenn Du bedingungslos den kompletten DB6 auf den DB5 umkopieren willst, warum schreibt dann Deine Visu nicht direkt in DB5 oder warum soll Dein Programm nicht direkt DB6 verwenden? Das (unnötige) Umkopieren von großen Datenbereichen kostet viel Zykluszeit.

Harald

Weil ich das Problem habe, dass die Daten vom der Visu sich im Zyklus ändern. Es kann sein, dass meine Quellcode am Anfang die Taste als 0 erkennt und am Ende als 1 und das möchte ich damit umgehen. Will so zu sagen, selber eine Prozessabbild erstellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achso, Du hast eine S7-1500 und brauchst ein Prozessabbild zu einem definierten Zykluskontrollpunkt.
Dann mußt Du aber auch die Ausgabewerte zur Visu umkopieren bzw. darfst Visu-Variablen nicht mehrmals Werte zuweisen, damit die Anzeige auf der Visu nicht flackert.

Harald
 
Zuletzt bearbeitet:
Das Umkopieren behebt aber nicht dein Problem, denn das Umkopieren kann genauso unterbrochen werden.

Es gibt auch keinen ununterbrechenbaren Kopierbefehl. Es gab zumindest bei der 1500 mal den Vorschlag, das Umkopieren dann in einem Interrupt von höchster Priorität vorzunehmen, da dieser angeblich nicht mehr von der HMI-Kommunikation unterbrochen würde.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn in dem DB von der Visu nur Bit- und Byte-Variablen liegen, dann ist eine Unterbrechung des Kopierens in der Regel kein Problem. Liegen aber mehr-Byte-Variablen im DB dann kann (und wird) eine Unterbrechung dazu führen, daß Datentypen nicht mehr konsistent zusammenhängend kopiert werden. Den DB einfach komplett umkopieren ist also keine gute/sichere Lösung. Du müsstest jede Variable einzeln umkopieren.

Harald
 
Hallo, ich habe eine DB6 in dem meine Var von der Visu liegen. Dann habe ich eine DB5 in dem sind die Var die ich im Programm verwenden möchte. Ich möchte im OB1 am Anfang eine Funktion einbauen, die die Daten aus OB6 in OB5 kopiert. So dass ich kann nur noch im Programm mit OB5 arbeite.
Für TIA S7-1x00:
Wenn beides z.B. auf dem gleichen UDT basiert, kann man es in SCL einfach per := zuweisen.
Zwei gleiche Struct ebenso.
Sorry ich kann dir gerade nicht richtig folgen.
Auch wenn Du mittlerweile AWL vorgegeben hast und Dir noch weitere Probleme bei Deinem Vorhaben aufgezeigt wurden, möchte ich zumindest erklären, wovon ich gesprochen habe.
(Ich geh' einfach mal davon aus, dass "UDT" das eigentliche Folgen-Problem darstellt.)



Du hast jetzt vermutlich alle Deine Variablen 1x im DB5, 1x im DB6 (DB5 kopiert?) und 1x im HMI angelegt, oder?
Und wegen des Komplett-Kopierens der DBs musst Du auch immer dafür sorgen, dass DB5 und DB6 genau gleich sind.
Z.B. wenn Du zukünftig weitere Variablen benötigst, diese an der genau gleichen Stelle in der gleichen Reihenfolge einfügen.


Es besteht die Möglichkeit, statt des ersten DBs einen PLC-Datentypen (in S7 Classic = UDT) anzulegen, der den Aufbau des späteren DBs hat.
Wenn man das nachträglich machen möchte, kann man die Variablen aus dem DB kopieren und in den UDT einfügen.
Als Beispiel der UDT für meinen (globalen) DB für's Spiel "4 gewinnt" (gdb4):
UDT - 1 Erstellen.jpg

Jetzt kann man einen DB erstellen, bei dem man als Typ statt "global" den erstellten UDT auswählt:
UDT - 2 GDB  aus PLC-Datentyp erstellen.jpg

Der DB hat immer genau den Aufbau, den man im UDT festlegt/ändert.
Im DB selbst kann man dann keine Änderungen machen (außer Remanenz und Startwerte), die werden nur im UDT vorgenommen.

Aus dem UDT können auch mehrere DBs erstellt werden.
Erstellt man noch einen weiteren DB aus diesem UDT, haben alle DBs den genau gleichen Aufbau und sind auch als komplette Variable ansprechbar.
Dies ermöglicht in SCL das Kopieren per einfacher Zuweisung:
UDT - 3 GDB kopieren.jpg

Schließlich sei erwähnt, dass durch den UDT der DB auch im HMI in einem Rutsch deklariert werden kann (anstatt x Einzelvariablen):
UDT - 4 HMI Variable.jpg

Alle im UDT enthaltenen Variablen sind automatisch im HMI bekannt, wenn der DB als Variable ausgewählt wird.
(Globale DBs, die nicht aus einem UDT erstellt wurden, können nicht als HMI-Variable ausgewählt werden.)

Änderungen im UDT (eine Stelle) wirken sich auf die daraus erstellten DBs und die daraus bestehenden Variablendeklaration(en) im HMI aus.
Es benötigt nur ein Übersetzen von PLC und HMI.
:cool:


Abschließend ein "Nachteil":
Änderungen am UDT erfordern in der Regel eine Neuinitialisierung der daraus bestehenden DBs, was zum Verlust der Aktualdaten führt! (Wäre bei direkter Änderung eines DBs aber meist auch so.)
 
Zurück
Oben