×
Siemens Industry Online Support
Siemens AG
Beitragstyp: Anwendungsbeispiel Beitrags-ID: 19033929, Beitragsdatum: 27.05.2004
(4)
Bewerten

Übertragung von Daten mit variabler Telegrammlänge über das TCP Protokoll

  • Beitrag
  • Betrifft Produkt(e)


FRAGE:
 
Wie kann ich Daten mit variabler Telegrammlänge als TCP-Datenstrom empfangen?

ANTWORT:  

Verhalten des TCP Protokolls:
Wenn Daten mit dem TCP Protokoll übertragen werden, erfolgt die Übertragung in Form eines Datenstroms. Es werden dabei weder Informationen zur Länge noch Informationen über Anfang und Ende einer Nachricht übertragen. Der Empfänger kann jedoch nicht erkennen, wo eine Nachricht im Datenstrom endet und wo die nächste im Datenstrom beginnt. Deshalb muss der Sender eine Nachrichtenstruktur festlegen, die beim Empfänger interpretiert werden kann. Die Nachrichtenstruktur kann sich z.B.aus den Daten und einem abschließenden Steuerzeichen wie "carriage return", über welches das Ende einer Nachricht signalisiert wird, zusammensetzen.

Folgendes Programmbeispiel beinhaltet eine TCP-Verbindung, über die Daten mit variabler Telegrammlänge mit dem FC5 zu einer Station gesendet werden können und Daten mit dem FC6 empfangen werden können.

Programmbeispiel: 
Übertragung von Daten (mit FC 5 "AG_SEND" und FC6 "AG_RECV") mit variabler Telegrammlänge über das TCP-Protokoll

Allgemeine Beschreibung:
Das STEP 7-Projekt beinhaltet zwei S7-300 Stationen mit der CPU 315-2DP und dem CP 343-1 für die Kommunikation über Industrial Ethernet. Als Kommunikationsgrundlage wurde eine TCP-Verbindung zwischen den beiden Stationen eingerichtet. Wenn Sie über "rechte Maustaste > Objekteigenschaften" die Eigenschaften der TCP-Verbindung in NetPro öffnen, können Sie den Bausteinparameter "ID" der Kommunikationsfunktionsbausteine einsehen. Diese Angabe ist beim Aufruf des FC5 bzw. FC6 zu beachten, damit ein Datenaustausch über die TCP-Verbindung erfolgen kann.

Bild 1:Eigenschaften der TCP-Verbindung

Damit die gesendeten Nachrichten aus dem TCP-Datenstrom entnommen werden können, müssen die zu sendenden Daten eine bestimmte Datenstruktur aufweisen. Das Nachrichtentelegramm kann aus den Daten und einem abschließendem Steuerzeichen z.B. "carriage return" aufgebaut werden, damit beim Empfänger das Ende der Nachricht erkannt werden kann.

Bild 2: Aufbau einer Nachricht

Hinweis:
Das Beispielprogramm basiert auf der in Bild 2 gezeigten Nachrichtenstruktur. Sie können jedoch den Aufbau der Nachricht selbst definieren. Wenn Sie ein andere Nachrichtenstruktur (z.B. das Endzeichen ändern) verwenden möchten, passen Sie das mitgelieferte Beispielprogramm entsprechend Ihren Anforderungen an.

Die Daten, die Sie mit FC5 (AG_SEND) senden möchten, müssen somit nach dieser vorgegebenen Struktur in einem Datenbaustein (DB221) aufbereitet werden. Die Daten werden mit FC6 (AG_RECV) byteweise empfangen.

Beschreibung des STEP 7-Programms
Das STEP 7-Programm besteht aus den Bausteinen OB100, OB1, FB100, DB100 (Instanz-DB des FB100), FB102 (Multiinstanz im DB100), DB221, DB222, FC5, FC6.

  • OB100
    OB100 ist ein Anlauf-OB und wird beim Neustart (Warmstart) der CPU durchlaufen. In diesem OB wird mit M1.0 und M0.1 die Freigabe für den ersten Kommunikationsanstoß erteilt.

Bild 3: OB100

  • OB1
    Der OB1 wird zyklisch aufgerufen. In diesem OB befindet sich der Aufruf des FB100 (Instanz-DB: DB100) mit M1.0 und M0.1. Nachdem FB100 durchlaufen wurde, wird M1.0 zurückgesetzt.

Bild 4: OB1

  • FB100:
    FB100 wird im OB1-Zyklus aufgerufen. In diesem FB finden Sie den Aufruf des FC5 "AG_SEND" und des FB101 "AG_RECV_CR".

    Der Sendebaustein FC5 "AG_SEND"
    FC5 wird über den Eingangsparameter "ACT" aktiviert, wenn der Taktmerker M10.7 eine positive Flanke hat und "SND_BUSY" nicht gesetzt ist. Wenn der Auftrag noch läuft ist "SND_BUSY" gesetzt und kein neuer Funktionsanstoß möglich.
    Diese Verriegelung der Funktion ist besonders wichtig, da die Funktion asynchron ist und mehrere Zyklen andauern kann. Eine ständige Aktivierung der Funktion ohne Warten auf Beendigung kann eine Kommunikationsüberlast erzeugen.
    Die Eingangsparameter "ID" und "LADDR" müssen aus dem Eigenschaftsdialog der TCP-Verbindung in NetPro übernommen werden (Bild 1). Beim Parameter "SEND" ist die Adresse der zu sendenden Daten anzugeben (P#DB221.DBX2.0 BYTE 48). Bei "LEN" wird die Anzahl der zu sendenden Bytes (26) eingetragen. Die Ausgangsparameter "DONE", "ERROR" und "STATUS" werden für die Auftragsauswertung benötigt und sind nur im gleichen Zyklus gültig!

Bild 5: FB100- Aufruf FC5

Wenn der Baustein ohne Fehler durchlaufen wurde, wird "SND_BUSY" zurückgesetzt und ein erneuter Aufruf des FC5 ist wieder möglich. Wenn der Baustein mit Fehler beendet wurde, wird das Statuswort des Bausteins für die Fehleranalyse gesichert und "SND_BUSY" ebenfalls zurückgesetzt.

Bild 6: FB100: Auswertung des FC5-Aufrufs

Der Empfangsbaustein FB102 "AG_RECV_CR"

Beim Aufruf des FB102 "AG_RECV_CR sind die Parameter "ID" und "LADDR" aus dem Eigenschaftsdialog der Verbindung in NetPro zu übernehmen (Bild 1). Bei "RECV_BUF" muss der Speicherort für die zu empfangenen Daten angegeben werden (P#DB222.DBX0.0 BYTE50).  Die Ausgangsparameter "NDR", "ERROR" und "STATUS" werden für die Auftragsauswertung benötigt und sind nur im gleichen Zyklus gültig!

Bild 7: Aufruf FB102

Wenn der Baustein ohne Fehler durchlaufen wurde, wird die Länge der empfangenen Daten gesichert. Wenn der Baustein mit Fehler beendet wurde, wird das Statuswort des Bausteins für die Fehleranalyse gesichert.

Bild 8: Auswertung des FB102-Aufruf

  • FB102 "AG_RECV_CR"

    Initialisierung:
    Im Netzwerk1 und Netzwerk2 des FB102 werden Initialisierungsschritte durchgeführt, wie das Rücksetzen des Bytezählers (#COUNT) auf Null und das Rücksetzen des Error- und NDR-Bit (Out-Parameter des FB102 "AG_RECV_CR").

    Empfangen der Daten:
    Mit FC6 "AG_RECV" werden die Daten byteweise empfangen. Falls die Funktion mit einem Fehler durchlaufen wird, wird "#STATUS" als Ausgangsparameter am FB102 ("AG_RECV_CR") ausgegeben.

Bild 9: Byteweise Empfangen der Daten

Wenn die Daten mit FC6 erfolgreich empfangen wurden, wird das empfangene Byte gesichert und der Byte-Offset (#B_OFFSET) über den Parameter "#COUNT" für den Empfangsbereich-ANY-Pointer berechnet. Anschließend findet die Überprüfung auf das Endezeichen "CR" (carriage return) statt. Wenn das empfangene Byte dem "carriage return" entspricht wird die Länge der Daten als Ausgangsparameter "#LENGTH" weitergegeben und der Bytezähler "#COUNT" auf Null gesetzt.

  Bild 10: Ermitteln des Byte-Offset und Prüfen auf CR  


Herstellen des Empfangspuffers
Der angegebene Empfangspuffer (ANY-Pointer) beim Aufruf des FB101 wird mit dem ermittelten Byte-Offset verifiziert und in einem temporären ANY-Pointer (VAR_BUF) gespeichert. Über die Funktion "BLKMOV" wird das empfangene Byte in den Empfangspuffer geschrieben.

Bild 11: Bilden des Empfangsbuffers und Speichern des Bytes

Wenn beim Schreiben des Bytes in den Empfangspuffer ein Fehler auftritt, wird dieser über den "#STATUS" und das "#ERROR"- Bit am FB102 angezeigt.

Bild 12: Fehlerauswertung

 

  • DB221:
    Im DB221 befinden sich die Datenstrukturen, die mit dem FC5 versendet werden.

  Bild 13:  Datenstrukturen  

 

  • DB222:
    Im DB222 werden die Daten, die mit dem FC6 empfangen werden, gespeichert.

 

Der Download enthält das beschriebene Programmbeispiel. Es wurde mit STEP 7 V5.3 und SIMATIC NET V6.2 erstellt.

  T_cp_var_cr.exe

Kopieren Sie die Datei "T_cp_var_cr.exe" in ein separates Verzeichnis und starten Sie die Datei anschließend per Doppelklick. Das STEP 7 Projekt wird automatisch mit allen Unterverzeichnissen entpackt. Sie können jetzt das Projekt mit dem SIMATIC Manager öffnen und bearbeiten.

 

Securityhinweise
Um technische Infrastruktur, Systeme, Maschinen und Netzwerke gegen Cyber-Bedrohungen zu sichern, ist es erforderlich, ein ganzheitliches IT Security-Konzept zu implementieren (und kontinuierlich aufrechtzuerhalten), das dem aktuellen Stand der Technik entspricht. Die Produkte und Lösungen von Siemens formen nur einen Bestandteil eines solchen Konzepts. Weitergehende Informationen über Cyber Security finden Sie unter
https://www.siemens.com/cybersecurity#Ouraspiration.
Beitrag bewerten
keine Bewertung
Anfragen und Feedback
Was möchten Sie tun?
Hinweis: Das Feedback bezieht sich immer auf den vorliegenden Beitrag / das vorliegende Produkt. Ihre Nachricht wird an die Redakteure im Online Support gesendet. In einigen Tagen erhalten Sie von uns eine Antwort, wenn Ihr Feedback das erfordert. Ist für uns alles klar, werden wir Ihnen nicht mehr antworten.
Unterstützung zur Statistik
Mit dieser Funktion werden die IDs des Suchergebnisses nach gewünschter Anzahl ausgegeben (Format .txt)

Liste generieren
URL kopieren
Diese Seite in neuem Design anzeigen
mySupport Cockpit