Technical Forum

Kommunikation / Netzwerke

TCP-Verbindung über CP343-1 mit Fetch / Write

Thread Starter: marcus   Started: 4/28/2006 8:08 PM   Replies: 10

« Previous thread Next thread »
12» Page 1 of 2 (11 items)
  4/28/2006, 8:08 PM
Joined 4/28/2006
Last visit: 5/9/2006
Posts: 7
Rating:
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
traurig
Über eine PC-Client-Anwendung muss ich über Fetch / Write und TCP-Verbindung auf Daten einer S7-300 zugreifen. Alles funktioniert auch sehr gut, nur leider immer nur einmal!
Dann klappt es erst wieder, wenn ich die Verbindung schließe, neu öffne und wieder fetche.

Vom Client ausgesehen will ich die Daten fetchen, das Fetch-Anforderungstelegramm wird auch definitv beim zweiten Mal gesendet, aber die S7 liefert leider nichts mehr zurück.

Hat da jemand Informationen zu?

Vielen Dank - im voraus.
Top
  4/29/2006, 3:09 AM
Joined 2/14/2006
Last visit: 10/16/2014
Posts: 5820
Rating:
Rated: Outstanding [3.96 out of 5 / rated 369 time(s)]. (369) 
Users with special expertise supervising conferences
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
Hallo Marcus,

welchen CP 343-1 benutzt Du? Ich meine damit die Bestellnummer und insbesondere auch die Firmwareversion. Damit könnte man vielleicht mehr sagen.

Viele Grüße
J_Bell
Top
  5/1/2006, 9:59 AM
Joined 4/28/2006
Last visit: 5/9/2006
Posts: 7
Rating:
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
überrascht
Hallo J_Bell,

habe es mit zwei verschiedenen CP´s versucht - jeweils mit dem gleichen Ergebnis, wie zuvor beschrieben. Folgende Baugruppen:

- 343-1GX11-0XE0 mit Version 2.0 (dies ist ein 343-1-IT) und
- 343-1EX20-0XE0 mit Version 1.2

Auch die FAQs habe ich schon danach abgesucht, aber leider alles ohne Erfolg.

Gruß marcus
Top
  5/2/2006, 10:51 AM
Joined 2/14/2006
Last visit: 10/16/2014
Posts: 5820
Rating:
Rated: Outstanding [3.96 out of 5 / rated 369 time(s)]. (369) 
Users with special expertise supervising conferences
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 

Hallo Marcus,

ich hab mal wegen der Sache mit einem alten Bekannten beim Systemtest gesprochen. So wie es aussieht ist das auf jeden Fall möglich und wurde schon bei etlichen Kunden angewendet die damit sehr Glücklich sind. zwinkern

Was ich nun als Tipp habe ist folgendes:
Versuche die Daten in 2 Zügen abzuholen.
Zuerst die 16 Bytes des Headers. In diese Daten enthalten die Informationen ob der Auftrag erfolgreich war und wie viele Daten noch abzuholen sind da sie von der CP gesendet wurden.
Im zweiten Zug dann noch die wirklichen Daten der Steuerung.

Ein generelles Buffern über die gesamte Datenlänge macht keinen Sinn, da man nicht 100%ig sagen kann ob der Auftrag erfolgreich war.

Was man generell sagen kann ist das man durch schließen des Ports und neuerliches öffnen den Buffer der Verbindung, Steuerungsseitig, löscht und neu aufsetzt.

Wenn es hilft kann ich mir auch gern eine Aufzeichnung des Telegrammverkehrs über Etherreal ansehen.

Viele Grüße

J_Bell
Top
  5/2/2006, 5:03 PM
Joined 4/28/2006
Last visit: 5/9/2006
Posts: 7
Rating:
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
überrascht
Hallo J_Bell,

vielen Dank für die prompte Reaktion. Allerdings weiß ich nicht, wie ich das in 2 Zügen machen soll.

Das Fetch-Anforderungprotokoll ist 16 Byte lang. Dort gebe ich den Bereich (z. B. DB oder E...), die Anfangsadresse und die Länge an. Genau die Daten erhalte ich auch - völlig korrekt im Fetch-Quittungsprotokoll. In diesem ist übrigens auch keine Fehlernummer eingetragen, sondern alles ist korrekt da. Nur das bei der zweiten oder nächsten Fetch-Anforderung leider nichts zurück kommt.

D. h., wie kann ich überhaupt nur den Header des Quittungsprotokolls erhalten? Und wie könnte ich dann noch die Daten seperat abholen?

Also das Fetch-Anforderungstelegramm vom Client und das Fetch-Quittungstelegramm vom CP ist genauso aufgebaut wie in der Beschreibung angegeben. Ich kann Werte aus einem DB lesen, Eingänge der Peripherie und sogar Ausgänge schreiben (natürlich dann mit dem Write-Telegramm). Aber halt nur einmal...

Nebenbei bemerkt: Die Systemkennung in diesen Protokollen ist mit "S5" angegeben und nur damit erhalte ich überhaupt die Werte. Zuerst hatte ich eigentlich "S7" versucht, aber da ging gar nichts.

Sonnige Grüße
marcus

Top
  5/3/2006, 10:52 AM
Joined 2/14/2006
Last visit: 10/16/2014
Posts: 5820
Rating:
Rated: Outstanding [3.96 out of 5 / rated 369 time(s)]. (369) 
Users with special expertise supervising conferences
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
Hallo marcus,

wegen der Kennung S5 kann ich Dich beruhigen, der Fetch / Write Dienst ist von der S5 und wurde dort definiert. Es wird sogar gemäß dem S5 Model adressiert. Um die Kompatibilität zu gewährleisten ist es auch so das in der S7 der S5 Head verwendet wird, dass ist normal.

Wegen der Kommunikationsprobleme kann ich nur empfehlen mal eine Aufzeichnung mit Etherreal zu machen und die zu posten. Ich denke wenn wir einen Blick darauf werfen können wir schon mehr sagen. Generell kann ich nur sagen das der Dienst Fetch / Write über TCP bei mir fehlerfrei funktioniert, wirklich. zwinkern

Poste bitte die Aufzeichnung damit lässt sich mehr sagen.

Viele Grüße
J_Bell
Top
  5/3/2006, 5:59 PM
Joined 4/28/2006
Last visit: 5/9/2006
Posts: 7
Rating:
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
lachen
Hallo J_Bell,

vielen Dank für die Bemühungen. Werde das mit Etherreal durchführen. Sobald ich die Aufzeichnung habe werde ich sie Dir zusenden.

Grüße
marcus
Top
  5/6/2006, 12:21 PM
Joined 4/28/2006
Last visit: 5/9/2006
Posts: 7
Rating:
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 

anbei die Datei für Etherreal (test1.cap).

Im Protokoll, im Frame 6, findet man die
erste Fetchanforderung (16 Bytes). Eingeleitet
mit 0x53 und 0x35 (also Hex für "S5"). Im
Header ist die Länge auf 8 Bytes angegeben.

Dadurch das die ORG-Kennung auf 0x03 steht
bezieht sich die Anforderung auf Eingänge.
Der Wert 0x64 als DB-Nr. wird dann ignoriert.

Im Frame 8 wird die Fetchquittung geliefert.
D. h., der 16-Byte Header und die 8 gewünschten
Eingangsbytes. Die Antwort ist völlig korrekt.
Ein Eingangsbyte hatte den Wert 0x08 und das
zweite 0x03!

Im Frame 11 folgt dann noch einmal die gleiche
Fetchanforderung, welche auch gesendet wird, aber
leider ohne gewünschte Reaktion des CP.

Für Hilfe wäre ich wirklich dankbar. Was fehlt,
was mache ich verkehrt oder gibt es noch eine
wichtige Einstellung bei der Konfiguration des
CP´s die ich ändern muss. Oder muss der Client
nach Erhalt der Fetchquittung auch noch eine
Quittung senden?

Vielen Dank für die Unterstützung!

MfG
marcus

Top
  5/6/2006, 12:27 PM
Joined 4/28/2006
Last visit: 5/9/2006
Posts: 7
Rating:
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
leider hat das mit dem Anhang nicht funktioniert.

marcus

Attachment: test1.zip  (25 Downloads)

Top
  5/8/2006, 10:51 AM
Joined 2/14/2006
Last visit: 10/16/2014
Posts: 5820
Rating:
Rated: Outstanding [3.96 out of 5 / rated 369 time(s)]. (369) 
Users with special expertise supervising conferences
Rated: no ratings [0 out of 5 / rated 0 time(s)]. (0) 
Hallo marcus,

eigentlich kann ich mir nur eines vorstellen. Das Fetch Telegramm "darf nur" 16 Byte lang sein. Das von Dir verwendete ist aber 17 Byte lang.
Durch die Eigenschaft des CP’s das er hier nur 16 Byte erwartet und auch nur 16 abholt ist das ein Byte zu viel. Da der Telegrammspeicher im CP ein Ringpuffer ist kann ich mir vorstellen das es daraus zu einem Problem kommt und zwar mit einem Versatz von einem Byte das auch noch eine 00 enthält. weinen

Als Ergebnis würde ich sagen das man hier am besten das letzte Byte am Telegramm wegnimmt und schon sollte es auch ein zweites mal funktionieren. zwinkern
Wenn das zu aufwändig wäre sollte es auch genügen den Port zu schließen und wieder zu öffnen, dass leert den Telegrammpuffer auf dem CP auch.
Zunge

Ich hoffe das hilft.

Viele Grüße

J_Bell



=== Bearbeitet von J_Bell @ 08.05.2006 10:54 [GMT ] ===


Top
12» Page 1 of 2 (11 items)
Actions