TIA C_TRCV: Für UDP Datenempfang an SPS

R_TRIG

Level-2
Beiträge
28
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin moin,

ich verzweifle gerade ein wenig am C_TRCV Baustein. Vielleicht ist es auch einfach der falsche Baustein...
Mein Ziel ist es mit diesem Baustein Prozessdaten von einem Ethernet Teilnehmer über UDP an meiner SPS S7-1215C (Port 2000) zu empfangen.
Ich muss dazu ein Socket auf meiner SPS eröffnen , da der Ethernet Teilnehmer die Verbindung zu meiner SPS aufbaut.

Settings:
S7 = 10.0.255.11 , Local Port : 2000
Teilnehmer = 10.0.255.23

Mein TCON_IP_v4 CONNECT im Anhang.
Ich sehe über Wireshark, dass der Teilnehmer UDP Daten sendet, aber sobald ich den CONT Input des C_TRCV ansteuere bringt er mir die Fehlermeldung:

STATUS 16#80A4
"IP address of the remote endpoint of the connection is invalid or it matches the IP address of the local partner."

"...matches the IP address of the local partner" - Ja, das soll auch so sein, oder nicht?
Ich hatte das gleiche Szenario bereits mit TCP, bei dem allerdings die SPS die Verbindung zum Teilnehmer aufbaut, das funktioniert einwandfrei...

Gruß
R_TRIG
 

Anhänge

  • TCON_iP_V4.jpg
    TCON_iP_V4.jpg
    57,7 KB · Aufrufe: 17
Für den TURCV brauche ich aber zwingend den TCON/TDISCON, wenn ich das richtig verstehe?

Ich hatte mir erhofft, dass C_TRCV auch UDP unterstützt, damit ich mich nicht mit TCON und TDSCON "rumschlagen" muss.
 
ist vielleicht ne blöde Frage, aber mir ists selber schonmal passiert....InterfaceID und ID passen?
Die sollten passen, meine Interface ID ist 64, damit baue ich hin und wieder parallel noch eine funktionierende HTTP Port 80 Verbindung zum Teilnehmer auf (zur Parametrierung) und dafür verwende ich ID =4. Daher habe ich einfach ID=5 für den UDP ausgewählt
 
Ich glaube dass in dem Fall die Remoteadresse leer bleiben soll/muss.
Sonst schau dir mal dieses Video an, mit dem hab ich das damals gemacht:
Um diese Inhalte anzuzeigen, benötigen wir die Zustimmung zum Setzen von Drittanbieter-Cookies.
Für weitere Informationen siehe die Seite Verwendung von Cookies.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin R_Trig,
bei einer UDP Verbindung kannst Du im allg. die IP Adresse des remoten Partners auf ANY_IP (0) lassen, Dann nimmt der UDP Stack alles an, was an ihn gesendet wird. Setzt Du die remote Adresse auf deine eigene, dann knallt es.
UDP ist ein verbindungsloses Protokoll, weshalb Du den Sender am TURCV Baustein prüfen solltest, ob es auch der ist von dem Du etwas erwartest. Deshalb kann ich mir nur schlecht vorstellen, dass hier der C_TRCV was sinnvolles tut.
Du musst die remote IP Adresse setzen, sobald du mit Multicast oder Broadcast, also ungerichteter Kommunikation arbeitest. Sonst weiß der Stack nicht, dass er auch diesen Traffic einsammeln soll.

Beispiel bei eigner IP 192.168.0.10:
T_URCV mit remoter IP Adresse 192.168.0.20 konfiguriert, empfängt nur UDP Pakete, die entweder an 192.168.0.10 oder 192.168.0.255 adressiert sind und von 192.168.0.20 kommen.
T_URCV mit ANY_IP (0.0.0.0) als remoter Adresse konfiguriert, empfängt UDP Pakete an 192.168.0.10 oder 192.168.0.255 von jeder anderen IP Adresse.

Vorschlag: Du stellst als remote IP Adresse mal 0.0.0.0 ein und versucht es nochmal. Die eigene IP Adresse als remote IP einzustellen, ist in jedem Falle falsch.
 
Moin,

Vielen Dank für die ganzen Infos!
Mir ist es nun gelungen mit TRCV_C UDP Scandaten vom Partner zu empfangen.
Problem war wohl, der versteckte INOUT "ADDR":

ADDRInOutVARIANTDHidden parameter that needs to be used, however, with UDP. In this case it contains a pointer to the system data type TADDR_Param. Store the address information of the sender (IP address and port number) in a data block with the system data type TADDR_Param.

Der Parameter ist mir erst aufgefallen, als ich TRCV_C probeweise mal als Stand Alone in meiner Main aufgerufen habe und dessen Konfiguration über dieses kleine Werkzeugkastensymbol getätigt habe. TIA erzeugt daraufhin eine "Connection" und darin sah man, dass er diesen TADDR_Param Datentyp erstellt hat, welcher IP und Port des remote Partners speichert. Was laut Hilfe (hätte man mal richtig gelesen...) auch zwingend notwendig für UDP Verbindungen ist.

Mein TRCV_C wird mit diesen Variablen beschaltet (siehe Screenshot anbei)

Input CONNECT := ConnectionData
InOut ADDR := ADDR_Send*

*in ADDR_Send speichert er dann die IP und Port des Remotepartners, sobald man den EN_R ansteuert. ADDR_Send muss nicht vom Anwender gefüllt werden

Nochmals vielen Dank

Gruß
R_TRIG
 

Anhänge

  • TRCV_ConnectionData.jpg
    TRCV_ConnectionData.jpg
    109,3 KB · Aufrufe: 9
Zurück
Oben