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

Page 1 of 2 12 LastLast
Results 1 to 10 of 12

Thread: Mit TURCV UDP Nachrichten empfangen die länger sind als 2048 Byte?

  1. #1
    Join Date
    09.07.2018
    Posts
    35
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich bekomme UDP-Nachrichten zugesendet die aus mehreren Fragmenten bestehen (In meinem Fall 2). Zusammen bilden diese Fragmente eine Datenlänge von 2085 Byte's (1472 + 613).
    Wenn ich im Baustein LEN auf 0 lasse (So ist es empfohlen) dann bekomme ich den Error 8085 -> [Parameter LEN ist größer als der größte zulässige Wert, oder Sie haben einen der Parameter LEN oder DATA gegenüber dem Erstaufruf geändert] <- Es wird also scheinbar die Gesamtlänge betrachtet.
    Wenn ich LEN auf zB 2048 stelle bekomme ich den Error 80C9 -> [Bei RFC1006 / UDP: Die empfangenen Daten sind länger als erwartet (Größe des Empfangspuffers überschritten).] <-
    Kann ich die Fragmente ggf auch Einzeln empfangen, oder den Empfangspuffer vergrößern?
    Die Daten die gesendet werden kann ich leider nicht beeinflussen.

    MfG Ben
    Reply With Quote Reply With Quote Mit TURCV UDP Nachrichten empfangen die länger sind als 2048 Byte?  

  2. #2
    Join Date
    17.12.2012
    Posts
    15
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Default

    Du kannst z.B. LEN = 100 machen und mit dem DONE den Index eines Arrays weiterschalten.

  3. #3
    Join Date
    09.07.2018
    Posts
    35
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    Quote Originally Posted by Reallife View Post
    Du kannst z.B. LEN = 100 machen und mit dem DONE den Index eines Arrays weiterschalten.

    Ich bekomme ja gar kein DONE.

  4. #4
    Join Date
    17.12.2012
    Posts
    15
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Default

    DONE ist nur einen Zyklus lang TRUE. Häng mal ein CTU dran.

  5. #5
    Join Date
    09.07.2018
    Posts
    35
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    Quote Originally Posted by Reallife View Post
    DONE ist nur einen Zyklus lang TRUE. Häng mal ein CTU dran.
    DONE wird wirklich nicht TRUE^^
    Ich bekomme nur eine Fehlermeldung 80C9 (Die kommt ja auch nur zyklisch)

    Das Problem scheint: Die UDP-Nachricht ist länger als 2048 Byte. Sie besteht allerdings aus 2 Fragmenten, die beide kleiner sind. Ich dachte es gibt vllt eine Möglichkeit die Fragmente einzeln auszulesen, oder ggf eine ganz andere Möglichkeit.

    Hast du dir denn schon mal Nachrichten gesendet die länger waren als die 2048 Byte? Wenn das grundsätzlich gehen würde (egal wie) dann mache ich ja vllt woanders einen Fehler

  6. #6
    Join Date
    06.08.2010
    Location
    Köln
    Posts
    303
    Danke
    19
    Erhielt 55 Danke für 39 Beiträge

    Default

    Aus der Hilfe:
    Empfang von mehr als 1472 Bytes
    Ab Firmware-Stand V2.5 der S7-1500-CPUs können Sie bei Datenübertragung über UDP nicht mehr bis zu 1472 Bytes, sondern bis zu 2048 Bytes empfangen.
    Falls Ihre empfangende Baugruppe allerdings max. 1472 Bytes unterstützt und Ihre sendende Baugruppe mehr als 1472 Bytes überträgt, liefert TURCV im Parameter STATUS den Wert W#16#8085 oder W#16#80C9.
    Vielleicht hilft hier ein FW-Update...

  7. #7
    Join Date
    09.07.2018
    Posts
    35
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    Quote Originally Posted by NBerger View Post
    Aus der Hilfe:


    Vielleicht hilft hier ein FW-Update...
    Ich habe ja die FW 2.5
    Es geht ja um über 2048 Byte

  8. #8
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    13,442
    Danke
    1,086
    Erhielt 3,960 Danke für 3,199 Beiträge

    Default

    Quote Originally Posted by BenWolf View Post
    Quote Originally Posted by Reallife View Post
    Du kannst z.B. LEN = 100 machen und mit dem DONE den Index eines Arrays weiterschalten.
    Ich bekomme ja gar kein DONE.
    Hast Du das denn mal ausprobiert?

    Dem TURCV sagt man nicht wie lang die Nachricht ist, sondern wieviele Bytes man aus dem Empfangspuffer abholen will (was im Idealfall die Länge der Nachricht ist, aber nicht so sein muß). Und immer wenn mindestens so viele Bytes empfangen wurden liefert TURCV diese Anzahl Bytes. Die weiteren Bytes der Nachricht (und ggf. der nächsten Nachricht) holt man mit weiteren Aufrufen von TURCV ab. Um alle 2085 Bytes der Nachricht aus dem Empfangspuffer abzuholen, könntest Du 3 * je 695 Bytes abholen und in einem Byte-Array wieder zu 2085 Bytes zusammensetzen. PS: wenn Deine Schnittstelle generell fähig ist, Nachrichten mit 2085 Bytes Länge zu empfangen.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Join Date
    17.06.2004
    Location
    Offenau
    Posts
    3,897
    Danke
    209
    Erhielt 437 Danke für 349 Beiträge

    Default

    wenn ich

    Empfang von mehr als 1472 Bytes
    Ab Firmware-Stand V2.5 der S7-1500-CPUs können Sie bei Datenübertragung über UDP nicht mehr bis zu 1472 Bytes, sondern bis zu 2048 Bytes empfangen.
    Falls Ihre empfangende Baugruppe allerdings max. 1472 Bytes unterstützt und Ihre sendende Baugruppe mehr als 1472 Bytes überträgt, liefert TURCV im Parameter STATUS den Wert W#16#8085 oder W#16#80C9.

    richtig verstehe, gehen doch nur 2048 bytes
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  10. #10
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    13,442
    Danke
    1,086
    Erhielt 3,960 Danke für 3,199 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Was meinst Du eigentlich mit "Fragmente"? Sind es in Wahrheit 2 Nachrichten (Pakete)? Dann muß Deine PN-Schnittstelle auch keine UDP-Nachrichten > 2048 Byte können. Welche CPU hast Du eigentlich?

    Warum wird bei Deiner Anwendung UDP verwendet? Bei UDP gibt es keine Garantie, daß ein einmal gesendetes Paket auch ankommt, daß Pakete in der gleichen Reihenfolge ankommen, in der sie gesendet wurden, oder daß ein Paket nur einmal beim Empfänger ankommt. Deine Anwendung muß mit allen Problem-Fällen klarkommen. Deine Anwendung muß erkennen können, zu welchem "Fragment" die abgeholte Bytefolge gehört. Sind in den Nachrichten Header- und Steuerbytes und evtl. Nachrichtennummern enthalten, anhand denen Dein Programm die korrekte Position der abgeholten Bytefolgen in den ursprünglichen Fragmenten und ggf. die Zugehörigkeit zum selben Nachrichtenpaar erkennen kann?

    Ich schätze, Du müßtest zunächst 613 Byte mit TURCV aus dem Empfangspuffer abholen, dann anhand des Inhalts der 613 Bytes feststellen, ob die von dem 613-Byte-Fragment oder von dem 1472-Byte-Fragment stammen, und bei letzterem noch die restlichen 859 Bytes des 1472-Byte-Fragments abholen. Danach wieder 613 Bytes abholen usw. usf. ...

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Similar Threads

  1. Replies: 2
    Last Post: 19.05.2016, 16:19
  2. Replies: 1
    Last Post: 01.09.2015, 23:59
  3. Can Nachrichten senden / empfangen
    By fdisk in forum CODESYS und IEC61131
    Replies: 1
    Last Post: 10.08.2011, 11:14
  4. Can Nachrichten senden / empfangen
    By fdisk in forum CODESYS und IEC61131
    Replies: 0
    Last Post: 09.08.2011, 15:30
  5. Replies: 0
    Last Post: 17.08.2010, 09:46

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •