TwinCAT3: UDP Receive mit TF6310

BenWolf

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

ich versuche ueber UDP Nachrichten zu empfangen, aber es kommen scheinbar keine an. Die Verbindung zum Port wurde erfolgreich abgeschlossen und eine Fehlermeldung bzw eine Busymeldung bekomme ich nicht.

https://infosys.beckhoff.com/index....TcPlcLibTcpIp_FB_SocketUdpReceiveFrom.htm&id=


  • "Wenn beim letzten Aufruf keine neuen Daten gelesen werden konnten, liefert der Funktionsbaustein keinen Fehler und nRecBytes == Null."

Das schreibt Beckhoff zu diesem Fall.
Ich verstehe das jetzt so, dass auf dem Port keine Daten gefunden werden.

ConnectUDP.png

Wie im Bild zu erkennen versuche ich auf die Daten von Port 16#B290 (45712) zuzugreifen.

Eben dieser Port wird aber dauerhaft mit neuen Daten gefaellt. (im folgenden Bild, mit Wireshark aufgezeichnet, habe ich den Port und die Laenge markiert)

wireshark.png

Ich steuere den Baustein, aktuell manuell, mit einer positiven Flanke an und auch sonst kann ich keine Fehler erkennen bei der Einstellung des Bausteins. Deswegen gehe ich von einem Denkfehler meiner Seits aus.

Im nachfolgenden Bild habe ich nochmal den Baustein abgebildet und die, mir relevant erscheinenden, Variablen markiert. nPort wurde korrekt üebernommen. cbLen steht auf 16#825 (2085) und nRecBytes steht nach wie vor auf 0 Bytes

UDP.png

Ich hoffe ich habe das Problem ausfuehrlich genug beschrieben und ihr koennt mir da weiter helfen.
Vielen Dank im Voraus und Freundliche Gruesse Ben
 

Anhänge

  • ConnectUDP.png
    ConnectUDP.png
    7,1 KB · Aufrufe: 11
  • wireshark.png
    wireshark.png
    29,6 KB · Aufrufe: 8
Zuletzt bearbeitet:
bBusy scheint nicht zu kommen weil der Port eingelesen wird aber eben nichts drin steht (Was es aber tun müsste)
Der Baustein wartet ja nicht auf eine eingehende Nachricht, sondern liest die Nachricht die aktuell im Port drin steht.

Ich habe jetzt einfach mal mit dem Programm Packet Finder eine UDP Nachricht auf den Port gesendet und das klappt dann mit dem auslesen.

packet finder.jpg
(Nicht verwirren lassen durch FROM PORT 45712, habe nochmal etwas anderes ausprobiert)

Was mich jetzt verwirrt ist, dass es mit Packet Finder klappt, aber nicht mit meinem externen System. Gefühlt ist der einzige Unterschied, dass das System in 100kHz die Daten verschickt.
 
Stell doch hier mal bitte über den #-Button den Teil Deines Codes rein wo Du den Baustein aufrufst, aber bitte nicht nur diese eine Zeile, sondern auch noch einige davor und danach.

Code:
VAR

CloseUDP            : UDP_Close        := (    sSrvNetId    := '',
                                            tTimeout    := T#5S        );
//------------------------------------------------------------------------------------------------------------------------------
ReceiveUDP            : UDP_Receive    := (    sSrvNetId    := '',
                                            cbLen        := 2085,
                                            tTimeout    := T#5S        );
//------------------------------------------------------------------------------------------------------------------------------
MessageSendTCP        : ARRAY [1..16] OF BYTE;
MessageReceiveTCP    : ARRAY [1..15] OF BYTE;
BUFFER                : ARRAY [1..15] OF BYTE;
MessageReceiveUDP    : ARRAY [1..2085] OF BYTE;

END_VAR


ConnectUDP(    bExecute    := UDP.CONon        );


CloseUDP(    hSocket        := ConnectUDP.hSocket,
            bExecute    := UDP.CONoff        );        


ReceiveUDP(    hSocket        := ConnectUDP.hSocket,
            pDest        := ADR(MessageReceiveUDP),
            bExecute    := UDP.CONreceive    );
Ich rufe eigentlich nur zyklisch die Bausteine auf.

(VAR und END_VAR habe ich jetzt noch hinzugefügt um keine Verwirrung hervorzurufen
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe das Problem gefunden.

Ich Depp hatte die Firewall aktiv und die hatte verhindert, dass mein externes System den Port beschreiben konnte. Wireshark hatte nur gezeigt was ankommt, nicht was festgehalten wird.
Wie ich diese Firewall hasse. Ich mache mir jetzt einen Zettel an den Bildschirm -.-

Danke auf Jeden Fall für eure Hilfe
 
Ich habe das Problem gefunden.

Ich Depp hatte die Firewall aktiv und die hatte verhindert, dass mein externes System den Port beschreiben konnte. Wireshark hatte nur gezeigt was ankommt, nicht was festgehalten wird.
Wie ich diese Firewall hasse. Ich mache mir jetzt einen Zettel an den Bildschirm -.-

Danke auf Jeden Fall für eure Hilfe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gerne, dann wähl bitte noch eine Deiner Antworten (#6 oder #7) als hilfsreichste Antwort aus, damit der Thread als "Gelöst:" markiert wird.

Haha^^
Habe extra jemanden angeschrieben ob er mir sagen kann wie ich den Thread als gelöst markiert bekomme. Danke dir

PS: Kannst du mir noch sagen wie ich eine Nachricht lösche? Wollte die doppelte Antwort löschen, hab aber den Knopf nicht gefunden (Wenn der Kopf nicht angewachsen wäre...)
 
Zurück
Oben