UDT an GET-Baustein übergeben?

Nico99

Level-2
Beiträge
134
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

ich möchte mit 315-2PN/DP über die PN-Schnittstelle mit Hilfe des GET-Bausteins Inhalt eines DB auf der Remote-CPU in einen DB in lokaler CPU kopieren. Als Verbindung projektiere ich einen unspezifizierte S7-Verbindung.
Jetzt besteht der Remote-DB aus allen möglichen Datentypen (BOOL, INT, REAL, STRUCT). Benutzt wird er für Statusmeldungen für Visu.
Wenn ich mir aus dem DB ein UDT erstelle, ist es möglich den UDT an ADDR_1 zu übergeben?
Oder muss ich mit Pointer einfach soviele Bytes, wie die letzte Adresse im DB angeben?

mfg
Nico
 
Oder muss ich mit Pointer einfach soviele Bytes, wie die letzte Adresse im DB angeben?

Ebendies. Dem GET-Baustein ist die Datenstruktur erst mal egal, da hier byteweise kopiert wird.
Ich würde den Baustein so übernehmen, wie in der gelesenen CPU, zumindest den Teil, der gelesen wird.

Hm.....in der Hilfe steht, daß auch der Datentyp gleich sein muß. Im Zweifelsfalle ausprobieren.
Ich habe das gemacht, wie oben genannt und habe die Datenstruktur so in den Empfangsbereich kopiert.

By the way. Einen UDT als Parameter kann man nicht anlegen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn die Daten in ein UDT gesammelt sind, braucht man eigentlich nicht um anzahl Bytes zu kümmern.

Wenn die UDT Daten in ein Strucht MyData gesammelt sind, kannst Du anstatt z.B. P#DB10.DBX20.0 BYTE 100 einfach "MyDB".MyData schreiben.

Wenn Du P#DB10.DBX20.0 BYTE 100 schreibst und es passt genau zu die Daten, dann siehe da, STEP7 wandelt es automatisch um ins "MyDB".MyData.

Sorg nur dafür das den UDT ist gleich in die zwei S7 Projekte.
 
Am einfachsten, dann lass den DB wovon man sendet, und den DB vozu man sendet, in beide Projekten gleich sein. Inklusiv symbolische Name und Strukturen.

Dann können die Parametern auf SD_1 und ADDR_1 beide "MyDB".MyData heissen.
 
Ich erlaube mir anzumerken, daß man wohl einen Datenbereich
als Parameter verwenden kann, der mittels eines UDT strukuriert
wurde, jedoch keinen Datentyp als solchen.

Ansonsten hat Jesper das korrekt gesagt,

tak skal du har Jesper.
 
Hallo!
Am einfachsten, dann lass den DB wovon man sendet, und den DB vozu man sendet, in beide Projekten gleich sein. Inklusiv symbolische Name und Strukturen.

Dann können die Parametern auf SD_1 und ADDR_1 beide "MyDB".MyData heissen.

Ja, so wollte ich es eigentlich lösen. Den DBXX von Remote-CPU-Projekt in mein Projekt kopieren und dann entsprechend an den GET übergeben. Ich wusste nur nicht, wie die Übergabe geschehen soll.
Ich werde es mal versuchen.

mfg
Nico
 
Ich habe folgende Konstellation:

Ich habe eine Lokal-CPU und 20 Remote-CPU's.
In jeder der Remote-CPU's befindet sich ein DBXX, wobei die XX bei jeder CPU gleich ist. Nur die Struktur der DB's ist unterschiedlich.
Ich würde die aus den DB's jeweils ein UDT erstellen, der eine STRUCT beinhaltet.
Ich würde für jede Verbindung einen GET-Baustein verwenden, an den ich die dazugehörige STRUCT übergebe.
Einige der DB's haben aber längere Datenstrukturen, wie der GET bei S7-300 verarbeiten kann. Dann müsste ich eigentlich in den betroffenen UDT's 2 oder mehr STRUCT's anlegen, oder?

mfg
Nico
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Problem: die DB's auf Remote-CPU's bestehen selbst aus UDT's aus Remote-CPU. Somit müsste ich die mitkopiren, was die Übersichtlichkeit des Programms nicht zwangsläufig steigert.
Eigentlich muss ich 10-20 Bits aus dem Remote-DB auslesen. Nur liegen diese nicht zusammengehörend im DB, sondern sind vestreut, z.B. DBX3.2, DBX 10.1, DBX120.6 usw.
Jetzt bin ich am Überlegen, ob ich nicht für jeden einzelnen Bit einen GET-Aufruf mache. Das bedeutet aber 20 Bits X 20 Remote-CPU's = 400 Aufrufe.
Kann man sowas nicht mit SCL lösen? (Habe von SCL gar keine bis wenig Ahnung).
Ein Baustein, der 20 interne BOOL's beinhaltet(Remote_Bit_1, Remote_Bit_2, Remote_Bit_3. Diese werden von "aussen" belegt. Auch der Quell-DB wird von aussen belegt.
Auf die Geschwindigkeit kommt es nicht drauf an, kann jede Sekunde einen Bit lesen.
Im SCL dann eine Schleife, wo bei jedem Durchgang das GET-Baustein mit einem Remote_Bit_X belgt wird, und wenn Bit 20 belegt und gelesen wurde, dann von vorne?
Kann man in SCL GET-Baustein aufrufen?

Mfg
Nico
 
Zurück
Oben