Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: UDT an GET-Baustein übergeben?

  1. #1
    Registriert seit
    11.04.2006
    Ort
    Niedersachsen
    Beiträge
    134
    Danke
    76
    Erhielt 12 Danke für 9 Beiträge

    Standard


    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
    Zitieren Zitieren UDT an GET-Baustein übergeben?  

  2. #2
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    532
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard

    Zitat Zitat von Nico99 Beitrag anzeigen
    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.
    Geändert von derwestermann (25.03.2010 um 15:38 Uhr) Grund: Nachtrag
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)

  3. #3
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    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.
    Jesper M. Pedersen

  4. #4
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    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.
    Jesper M. Pedersen

  5. #5
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    532
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard

    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.
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)

  6. #6
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Det var så lidt, derwestermann.

    Ist "Verden" ein Ort, oder ist es "die Welt und Alles" ?
    Jesper M. Pedersen

  7. #7
    Avatar von Nico99
    Nico99 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.04.2006
    Ort
    Niedersachsen
    Beiträge
    134
    Danke
    76
    Erhielt 12 Danke für 9 Beiträge

    Standard

    Hallo!
    Zitat Zitat von JesperMP Beitrag anzeigen
    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

  8. #8
    Avatar von Nico99
    Nico99 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.04.2006
    Ort
    Niedersachsen
    Beiträge
    134
    Danke
    76
    Erhielt 12 Danke für 9 Beiträge

    Standard

    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

  9. #9
    Avatar von Nico99
    Nico99 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.04.2006
    Ort
    Niedersachsen
    Beiträge
    134
    Danke
    76
    Erhielt 12 Danke für 9 Beiträge

    Standard


    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

Ähnliche Themen

  1. DB in SCL übergeben
    Von Felse im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 11.09.2012, 19:50
  2. Antworten: 14
    Letzter Beitrag: 17.10.2011, 18:21
  3. Any Übergeben an FB
    Von xvitali im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 24.03.2011, 10:48
  4. DB Nr. an FC übergeben
    Von Beren im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 06.05.2010, 12:23
  5. UDT an FB übergeben
    Von Ralle im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 30.11.2005, 10:34

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •