Fragen zum DB

SPS_Neuling

Level-1
Beiträge
68
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

da ich schon eine Weile nichts mehr mit S7 gemacht habe wollte ich mal kurz nachfragen ob meine vorgehensweise richtig ist bzw. wo man hängen bleiben könnte.

Vorhaben: Ich möchte aus verschiedenen vorhanden DB die einzelne Werte in einen Zentralen DB in Kopie nehmen und in diesen DB einfügen da hier nur lesender Zugriff benötigt wird.

Vorab muss ja noch ein FC erstellt werden da ich ja einen Globaldatenbaustein erzeuge.

Im OB1 mache ich mittels Befehl den DB auf. Richtig? Jetzt meine Frage und zwar wie kann ich die einzelnen Werte die ich in diesen DB kopiert habe lesen? Muss ich jeden zu lesenden Wert im DB angeben der gelesen werden soll?

Danke für eure Hilfe
 
Hallo,

da ich schon eine Weile nichts mehr mit S7 gemacht habe wollte ich mal kurz nachfragen ob meine vorgehensweise richtig ist bzw. wo man hängen bleiben könnte.

Vorhaben: Ich möchte aus verschiedenen vorhanden DB die einzelne Werte in einen Zentralen DB in Kopie nehmen und in diesen DB einfügen da hier nur lesender Zugriff benötigt wird.

Vorab muss ja noch ein FC erstellt werden da ich ja einen Globaldatenbaustein erzeuge.

Im OB1 mache ich mittels Befehl den DB auf. Richtig? Jetzt meine Frage und zwar wie kann ich die einzelnen Werte die ich in diesen DB kopiert habe lesen? Muss ich jeden zu lesenden Wert im DB angeben der gelesen werden soll?

Danke für eure Hilfe
Warum einen DB aufschlagen?

Du kannst mit Laden und Transferieren einzelne Byte, Word oder Doppelword aus einem Baustein lesen und in einen anderen zu schreiben.
Wenn es Bereiche sind, dann ist der SFC20 dein Freund.
Was willst du denn lesen und was willst du damit machen?


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Im OB1 mache ich mittels Befehl den DB auf. Richtig?
Da du nach der richtigen Vorgehensweise gefragt hast lautet die Antwort:
Nein!
Die richtige Antwort lautet:
Dem DB einen Symbolnamen geben und die Daten dann über Vollqualifizierte Aufrufe lesen:
Code:
   L "DB_Daten".Messwerte.Sollwert_1
Muss ich jeden zu lesenden Wert im DB angeben der gelesen werden soll?
Ja, außer sie liegen in einem Bereich, siehe bike
 
Danke für eure Hilfe.

Also muss ich es wohl nach dem Vorschlag von bike machen mittels SFC 20 Blockmove. Hab leider daheim kein S7 nur auf Arbeit.

Also such ich mir die zu lesenden Werte raus und nutze die SFC 20. Dann kann ich mir also einen DB machen und die Werte welche ich mittels SFC 20 kopiere in meinen beliebigen DB kopieren, richtig?
 
Ja das geht, Quelle und Ziel müssen die gleiche Länge haben.

Nicht so ganz.

Auszug aus der Hilfe zum SFC20
Code:
Hinweis

Quell- und Zielfeld dürfen sich nicht überlappen. 
Ist das angegebene Zielfeld größer als das Quellfeld, 
dann werden auch nur so viele Daten in das Zielfeld kopiert, 
wie im Quellfeld stehen.
Ist das angegebene Zielfeld (Parameter DSTBLK) 
kleiner als das Quellfeld (Parameter SRCBLK), 
dann werden nur so viele Daten kopiert, 
wie das Zielfeld aufnehmen kann.
Falls das real vorhandene Ziel- oder Quellfeld kleiner ist als die Größe 
des parametrierten Speicherbereichs für Quell- oder Zielfeld 
(Parameter SRCBLK, DSTBLK), 
werden keine Daten übertragen.
Nix für ungut



bike
 
Hallo,

mal zwischendurch gefragt:
Warum diese rumkopierereei?
Warum nicht gleich direkt auf den (oder die) Ur-DB(´s) zugreifen?


MfG
 
Hallo,
Wenn der TE dies so will, warum nachfragen? :confused:
bike

Weil´s anders vielleicht einfacher geht

Es wäre nicht das erste mal, daß es jemandem wie Schuppen aus den Haaren fällt, weil eine dumme Frage kommt

Wobei natürlich erstmal jeder machen soll, was er will :ROFLMAO:

Aber als Nachschlagswerk ist dieser Thread hier sicherlich nicht falsch

MfG
 
Hallo,


Weil´s anders vielleicht einfacher geht

Es wäre nicht das erste mal, daß es jemandem wie Schuppen aus den Haaren fällt, weil eine dumme Frage kommt

Wobei natürlich erstmal jeder machen soll, was er will :ROFLMAO:

Aber als Nachschlagswerk ist dieser Thread hier sicherlich nicht falsch

MfG

Mir ist der Sinn auch noch? nicht klar.

Doch wenn Hinweise übergangen werden und leider wenig Feedback kommt? :confused:

Es gibt viele tolle Möglichkeiten Daten zu kopieren, doch muss zuerst bekannt sein was gemacht werden soll.


Und zum Suchen ist der Titel nicht unbedingt hilfreich, würde ich schreiben


bike
 
Mir ist der Sinn auch noch? nicht klar.

Doch wenn Hinweise übergangen werden und leider wenig Feedback kommt? :confused:

Es gibt viele tolle Möglichkeiten Daten zu kopieren, doch muss zuerst bekannt sein was gemacht werden soll.


Und zum Suchen ist der Titel nicht unbedingt hilfreich, würde ich schreiben


bike

Ja um es kurz zu erklären es sollen Werte aus verschiedenen DBs ausgelesen werden damit diese ausgelesenen Werte in einem anderen DB nennen wir diesen X reingeschrieben werden damit man vom DB X die Werte von einer anderen Stelle direkt ausgelesen werden können.


@bike

Finde ich wirklich gut von dir das mir hilfst, vielleicht muss ich mein Anliegen nur besser formulieren damit ich Hilfe empfangen kann.
 
Ok, aber was hast du so in den Quell DBs stehen? Willst du z.B. nur 4 Bits aus jedem Quell-DB lesen, würde ich das über einen direkten Zugriff machen:

U quelldb.dbx0.0
= zieldb.dbx0.0

Hast z.B. eine ganze Struktur die kopiert werden muss:
> Blockmove verwenden

Willst du einzelnde Werte lesen, die "verstreut" über den Quell DB liegen:
> direkter Zugriff

Willst du viele Werte nacheinander lesen, z.B. 100Ints, dann macht es eventuell wieder Sinn sich in die Indirekte Adressierung einzulesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Werte in den verschiedenen DBs liegen nicht geordnet zusammen.

Die ganze Struktur mit Blockmove zu kopieren hört sich gut an, ob ich es aber auch hinbekommen damit es funktioniert muss ich erst ausprobieren.

Sollte es nicht klappen dann muss ich eben die Werte über den Direkt Zugriff zugreifen. Dann muss ich mir also einen FC machen und diesem einem Globaldatenbaustein zuweisen und in diesem FC die Befehle für den direkt Zugriff ausführen und den Ziel DB angeben. Stimmt das soweit?
 
Hallo,

auch wenn ich lästig bin:
WARUM willst du die Werte beieinander haben?
Was greift auf deinen neuen Wunsch-DB denn zu?
Warum kann der- oder dasjenige nicht selber auf den Ursprung der Daten zugreifen?

MfG
 
Hallo,

auch wenn ich lästig bin:
WARUM willst du die Werte beieinander haben?
Was greift auf deinen neuen Wunsch-DB denn zu?
Warum kann der- oder dasjenige nicht selber auf den Ursprung der Daten zugreifen?

MfG

Das kann ich mir vorstellen, wenn er die Daten irgendwohin abschicken will.
Dann macht es Sinn sich die Teile zu einem Ganzen zusammenzufügen.
Im Nachhinein dies machen zu müssen ist mühsam, doch wenn beim Grundsteinlegen des Projektes dies nicht eingeplant war, dann eben so.
Wenn Daten zu einem Leitsystem geschickt werden müssen, dann baue ich einen Datenblock.
Wenn der fertig ist wird ein Bit gesetzt, dann holt sich der Gegenüber die Daten.
Nach dem Abholen wird das Bit zurückgesetzt. Also ganz normaler Handshake.
Wenn aktiv gesendet wird, dann entfällt dies, da die PLC allein für die Daten verantwortlich ist.

@SPS_Neuling: Kratz die Daten so zusammen wie beschrieben. Bereiche mit dem SFC 20 oder SFC 81(hoffe der heißt so).
Einzelne Word oder Dword mit L und T.
Versuche alle Zugriffe symbolisch zu machen, wie schon empfohlen.
Das bringt extra Leben, bei Änderungen ;-)


bike

btw: indirekte Adressierung, wenn die Daten radom im Speicher stehen?
Da muss zuerst ein Algorithmus gefunden werden, der dann ausprogrammiert werden kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

auch wenn ich lästig bin:
WARUM willst du die Werte beieinander haben?
Was greift auf deinen neuen Wunsch-DB denn zu?
Warum kann der- oder dasjenige nicht selber auf den Ursprung der Daten zugreifen?

MfG

Klassischer Anwendungsfall:
In CPU "A" existieren diverse Daten in verschiedenen DB's. Nun soll CPU "B" oder ein Fremdsystem ausgewählte Daten zur Verfügung gestellt bekommen. Dann wird erstmal gesammelt und dann ab die Post...

Approx
 
So jetzt hatte ich heute mit meiner Aufgabenstellung zu tun und es hat nicht ganz geklappt :-/

Also was habe ich gemacht bzw. was soll gemacht werden.

1. Ich möchte einen Wert welcher aus einem FBx in einen DBx geschrieben wird direkt in meinen FC-Daten schreiben und mittels dem Befehl MOVE in meinen DB_Daten schieben.

Habe eiegntlich gedacht mit MOVE würde das gehen. Es handelt sich hierbei um einen INT Wert und das ganze habe ich in FUP gemacht.

Der IN Wert an die MOVE Box also DBx.DBW123 (INT) möchte ich mittels MOVE über den OUT DB-Daten schieben.

Habe zuerst im DB-Daten den entsprechenden Namen der Variable angelegt und wollte dann im FC-Daten diesen an den Out Ausgang der MOVE Box hängen.

Ging nicht kam folgende Meldung: Symbol ... ist keine Komponente von ...


Was mache ich falsch? Bin nun langsam am Ende... Habe den DB-Daten deklariert in der Datenansicht und auch gepeichert.
 
Zurück
Oben