Step 7 WinAC RTX TCP Kommunikation

Matze001

Level-3
Beiträge
2.814
Reaktionspunkte
573
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

TL;DR: Post1 erledigt - Bitte Post 2 beachten

es ist Wochenende, und das heißt: Endlich hat man mal Zeit zum "spielen".

Ich habe folgende Aufgabe:

TCP-Kommunikation mit einem Leitrechner-PC über die Ports 20000 und 20001.

Es gibt 2 Verbindungen, aus sicht der SPS eine aktive und eine passive.

Ich bin bisher nur einmal mit der TCP-Kommunikation in Berührung gekommen und habe damals ein HTTP-GET (Port80) an eine Steuerungskomponente verschickt und so Daten abgeholt.
Nun habe ich gedacht ich nehme diesen Baustein, ändere den Port und bin fertig. Gemacht getan: Tut nicht ;)

Deshalb hole ich nun ein wenig weiter aus.

Ich habe besagten Baustein verwendet, und habe die TCON_PAR über E/A Parametrierbar gemacht. Der Port 80 war aber fest eingestellt.
Wenn ich den Port nun auf 20000 ändern möchte, geht das nicht ohne weiteres (im TCON_PAR sind mehrere Byte für die Adresse zuständig, 80 passte ins erste daher habe ich es nicht sauber ausprogrammiert).
Also dachte ich, bleiben wir halt erstmal auf Port 80.

Wenn ich nun Verbindung mit der Steuerungskomponente aufnehme wo schon alles funktionierte, ist alles super. Verbindung wird aufgebaut, Daten ausgetauscht. Der Baustein tut was er soll.
Nun habe ich die IP durch die meines PCs ersetzt, und er baut nicht mal die Verbindung auf. Firewall + Virenscanner sind aus - die werden nach und nach eingeschaltet wenn alles tut.
Die Ursache könnte nun natürlich sein, dass mein PC keinen Webserver bereitstellt. Aber zumindest die Verbindung mit T_CON müsste doch funktionieren oder?
Der Baustein bleibt immer auf Busy stehen. Der Baustein wirft auch keinen Fehler (Status 7002 - Verbindung wird aufgebaut).
Ich erinnere mich daran, dass ich den gleichen Aufbau hatte wo ich den Baustein mal entworfen habe, und ich hatte mit Wireshark an meinem PC die Daten lesen können (Ziel war mein PC).


Wenn ich nun mit dem Open Communication Wizard versuche die Verbindung zu projektieren habe ich gleich die erste Frage:

Es gibt die Auswahl zwischen IF1 und IF2 (Bei IF1 steht noch IM151-8 neben dran - von dieser kommt der TCP Baustein ursprünglich).
Deshalb bleibe ich mal bei IF1. (Wobei mir mein Kopf sagt IF1 ist DP, und IF2 PN).

Wenn ich nun die Verbindung genau so projektiere wie sie bereits in dem Baustein funktioniert den ich habe, bekomme ich nicht einmal die Verbindung die bereits funktioniert (SPS - Steuerungskomponente) aufgebaut -> sehr ernüchternd.
Bei Port 20001 und 20000 habe ich bis auf den PC nichts zum Testen - und da habe ich das Gefühl spuckt noch was anderes mit rein!

Vielleicht kann mir ja jemand den entscheidenden Tipp geben - Mit Sicherheit sehe ich einfach nur wieder den Wald vor lauter Bäumen nicht.

Grüße

Marcel

Edit: Man nannte ihn Depp... Nen IPC hat 2 Netzwerkkarten... *pfeif* beide aufm Switch und schon erreiche ich den PC... Somit steht schonmal die Kommunikation mit Port 80... sehr schön! Jetzt muss ich noch umbauen für Port 20000 und "alles wird gut".

Edit2: Kaum macht man es richtig, funktioniert es auch schon... ich bedanke mich bei allen die es vielleicht gelesen haben. Ich habe ganz oben ein Erledigt reineditiert damit niemand den Roman lesen muss um am Ende festzustellen - Ist ja schon erledigt.
 
Zuletzt bearbeitet:
So... weiter gehts. Eine aktive Verbindung steht - Ich bin begeistert.


Edit: Auch das erledigt... hab natürlich den einzigen Port weit und Breit erwisch den die WinAC selbst belegt... Ports 2000-5000 sind frei.


Nun gehts es an eine passive Verbindung:

Szenario:

PC: 192.168.56.200
SPS 192.168.56.101

Folgende TON_PAR:

Code:
T_PARAM.id:= CONNECTION_ID;
    T_PARAM.CONNECTION_TYPE:= b#16#11;
    T_PARAM.LOCAL_DEVICE_ID:= b#16#6;
    T_PARAM.LOCAL_TSAP_ID_LEN:= 2;
    T_PARAM.LOCAL_TSAP_ID[1]:= B#16#4E; // Tsap = Port = 20001 (TsapID 1 + 2)
    T_PARAM.LOCAL_TSAP_ID[2]:= B#16#21;
    T_PARAM.ACTIVE_EST:= FALSE; // True = Aktiv -> False = Passiv
    T_PARAM.REM_TSAP_ID[1]:= 0;
    T_PARAM.REM_TSAP_ID[2]:= 0;
    T_PARAM.REM_TSAP_ID_LEN:= 0;
    T_PARAM.REM_STADDR_LEN:= 0;
    T_PARAM.REM_STADDR[1]:= INT_TO_BYTE(0);
    T_PARAM.REM_STADDR[2]:= INT_TO_BYTE(0);
    T_PARAM.REM_STADDR[3]:= INT_TO_BYTE(0);
    T_PARAM.REM_STADDR[4]:= INT_TO_BYTE(0);

Die Verbindung wird mit einer neuen ID aufgebaut.

Der Connect-Baustein liefert mir die Fehlernummer 0B03 - Sammelfehler für alle anderen Fehler - Suuuuper! Warum hab ich detaillierte Fehlernummern wenn der dumme Baustein nen Sammelfehler wirft????

Anbei die Fehlerliste:

Code:
Fehlerinformationen

ERROR    STATUS 
(W#16#...)    Erläuterung
0    0000    Verbindung konnte aufgebaut werden
0    7000    keine Auftragsbearbeitung aktiv
0    7001    Start der Auftragsbearbeitung, Verbindung wird aufgebaut
0    7002    Zwischenaufruf ( REQ irrelevant ), Verbindung wird aufgebaut
1    8086    Der Parameter ID liegt außerhalb des zulässigen Wertebereichs.
1    8087    Maximale Anzahl der Verbindungen ist erreicht, keine weitere Verbindung möglich
1    8089    Der Parameter CONNECT zeigt nicht auf einen Datenbaustein.
1    809A    Der Parameter CONNECT zeigt auf ein Feld, das nicht die Länge der Verbindungsbeschreibung (UDT65) hat.
1    809B    Die in der Verbindungsbeschreibung angegebene local_device_id passt nicht zur CPU.
1    80A0    Sammelfehler für die Fehlercodes W#16#80A1 und W#16#80A2
1    80A1    Verbindung bzw. Port ist bereits vom Anwender belegt
1    80A2    Lokaler oder remoter Port ist vom System belegt
1    80A3    Es wird versucht, eine bestehende Verbindung erneut aufzubauen.
1    80A4    IP-Adresse des remoten Verbindungsendpunkts ist ungültig, evtl. stimmt sie mit der eigenen IP-Adresse überein
1    80A7    Kommunikationsfehler: Sie haben nach einem nicht abgeschlossenen TCON einen TDISCON aufgerufen. Der Verbindungsaufbau wurde durch Aufruf eines TDISCON vorzeitig abgebrochen.
1    80B2    Der Parameter CONNECT zeigt auf einen Datenbaustein, der mit dem Schlüsselwort UNLINKED erzeugt wurde.
1    80B3    Inkonsistente Parametrierung: Sammelfehler für die Fehlercodes W#16#80A0 bis W#16#80A2, W#16#80A4, W#16#80B4 bis W#16#80B9
1    80B4    Sie haben bei der Protokollvariante ISO on TCP (connection_type = B#16#12) beim passiven Verbindungsaufbau (active_est = FALSE) eine oder mehrere der folgenden Bedingungen verletzt:·    local_tsap_id_len >= B#16#02·    local_tsap_id[1] = B#16#E0·    Bei local_tsap_id_len >= B#16#03 ist local_tsap_id[1] ein ASCII-Zeichen·    local_tsap_id[1] ist ein ASCII-Zeichen und local_tsap_id_len >= B#16#03
1    80B5    Fehler beim Parameter active_est (UDT 65) bei der Protokollvariante UDP
1    80B6    Parametrierfehler bzgl. des Parameters connection_type (UDT 65)
1    80B7    Fehler in einer der folgenden Parameter des UDT 65: block_length, local_tsap_id_len, rem_subnet_id_len, rem_staddr_len, rem_tsap_id_len, next_staddr_len
1    80B8    Parameter id in der lokalen Verbindungsbeschreibung (UDT 65) und Parameter ID sind unterschiedlich
1    80C3    Alle Verbindungsressourcen sind belegt.
1    80C4    Temporärer Kommunikationsfehler:·    Verbindung kann momentan nicht aufgebaut werden.·    Die Schnittstelle wird neu parametriert·    Die eingerichtete Verbindung wird momentan durch einen TDISCON entfernt.·    Das H-System befindet sich im Ankoppeln und Aufdaten.
1    8xyy    allgemeine Fehlerinformation, siehe Fehlerauswertung mit dem Ausgangsparameter RET_VAL

Hat jemand eine Idee was ich hier falsch gemacht habe? Ich habe mal eine aktive und eine passive Verbindung mit dem OCW erstellt, die Unterschiede sind minimal:

Active_EST = False
Local_TSAP_Len = 2
Lokal TSAP angeben
Rem_TSAP_Len = 0
Rem_STADRR = 0

Aber so ganz in trockenen Tüchern ist es leider nicht.

Grüße

Marcel
 
Zuletzt bearbeitet:
Zurück
Oben