×
Siemens Industry Online Support
Siemens AG
Beitragstyp: Anwendungsbeispiel Beitrags-ID: 8707570, Beitragsdatum: 28.05.2004
(3)
Bewerten

Übertragung von Daten (mit FC5 "AG_SEND" und FC6 "AG_RECV") mit variabler Telegrammlänge über das TCP Protokoll

  • Beitrag
  • Betrifft Produkt(e)


FRAGE:
Wie kann ich Daten mit variabler Telegrammlänge über das TCP-Protokoll mit den Kommunikationsfunktionen (FC5 "AG_SEND" und FC6 "AG_RECV") übertragen?

ANTWORT:

Verhalten des TCP Protokolls:
Wenn Daten mit Hilfe des TCP Protokolls übertragen werden, dann erfolgt die Übertragung datenstrom-orientiert. Es werden dabei weder Informationen zur Länge noch Informationen über Anfang und Ende einer Nachricht übertragen. Beim Senden ist dies unproblematisch, da der Sender weiß, wie viele Datenbytes er verschicken will. Der Empfänger kann jedoch nicht erkennen, wo eine Nachricht im Datenstrom aufhört und wo die nächste im Datenstrom beginnt. Deshalb kann bei reinem TCP nur über zwei Möglichkeiten gekoppelt werden:

  1. Es wird mit einer festen Telegrammlänge gearbeitet, d.h. sowohl der Sender als auch der Empfänger arbeiten mit einer vorher definierten Datenlänge. Dadurch ist die Nachrichtengrenze immer eindeutig definiert.
  2. Es wird mit einer variablen Telegrammlänge gearbeitet. Dies erfordert auf der Empfangs- und auf der Sendeseite einen höheren Aufwand, weil in den ersten Bytes ein Start-Delimiter und die Datenlänge der gesendeten Daten eingetragen werden müssen. Dadurch kann die gesendete Nachricht beim Empfänger exakt interpretiert werden.

Folgendes Programmbeispiel beinhaltet eine TCP-Verbindung, über die Daten mit variabler Länge mit FC5 zu einer Station gesendet und Daten mit 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 CPU 315-2DP und 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 von FC5 bzw. FC6 zu beachten, damit ein Datenaustausch über die TCP-Verbindung erfolgen kann.

Bild 1: Eigenschaften der TCP-Verbindung

Damit die Datenübertragung über das TCP-Protokoll funktioniert, müssen die zu sendenden Daten eine bestimmte Datenstruktur aufweisen. Eine Nachricht muss Start-Delimiter (damit der Empfänger den Beginn der Nachricht erkennt), die Längenangabe der Daten (zur Definition des Empfangspuffer) und die Daten selbst enthalten. In diesem Beispiel wurden 4 Bytes Start-Delimiter (vorbelegt mit den Werten: 0x11, 0x12, 0x13, 0x14) und ein S7-String für eine Nachricht definiert. Ein S7-String besteht aus zwei Bytes Längeninformation und dem tatsächlichen Datenstring. Mit dem S7-String können alle ASCII-Zeichen übertragen werden.

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. nur 3 Bytes Start-Delimiter) verwenden möchten, können Sie das mitgelieferte Beispielprogramm entsprechend Ihren Anforderungen anpassen.

Die Daten, die Sie mit FC5 (AG_SEND) senden möchten, müssen somit nach dieser vorgegebenen Struktur in einem Datenbaustein (DB220) aufbereitet werden. Das Empfangen der Daten mit FC6 (AG_RECV) erfolgt in mehreren Schritten:

  1. Empfang der Start-Delimiter (byteweise) und Identifikation der Nachricht
  2. Empfang der Längeninformation des S7-String
  3. Empfang der Daten

Beschreibung des STEP 7-Programm

Das STEP 7-Programm besteht aus den Bausteinen OB100, OB1, FB100, DB100 (Instanz-DB des FB100), FB101 (Multiinstanz im DB100), DB220, DB221, FC5, FC6

  • OB100
    Der 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_VARIABLE".

    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" muss die Adresse der zu sendenden Daten angegeben werden (P#DB220.DBX0.0 BYTE 48). Bei "LEN" wird die Anzahl der zu sendenden Bytes (48) 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 der 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 FB101 "AG_RECV_VARIABLE"

Beim Aufruf des FB101 "AG_RECV_VARIABLE" 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 empfangenen Daten angegeben werden (P#DB221.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: FB100 - Aufruf FB101

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: FB100- Auswertung des FB101-Aufrufs

  • FB101 ("AG_RECV_VARIABLE"):

    Die Zustandsmaschine:

    Der Einstiegspunkt in das Programm im FB101 wird über die Variable "STATE_CNT" festgesetzt. Je nach Zustand der Variable "STATE_CNT" wird in das entsprechende Netzwerk zur weiteren Programmbearbeitung gesprungen.

    Programmbearbeitung in Abhängigkeit von "STATE_CNT":

    "STATE_CNT" Beschreibung
    0 Das erste Bytedes Start-Delimiter wurde empfangen.
    (Sprung von NW9 nach NW13)
    1 Das zweite Byte des Start-Delimiter wurde empfangen.
    (Sprung von NW10 nach NW14)
    2 Das dritte Byte des Start-Delimiter wurde empfangen.
    (Sprung von NW11 nach NW15)
    3 Das vierte Byte des Start-Delimiter wurde empfangen.
    (Sprung von NW12 nach NW16)
    4 Start-Delimiter wurden erkannt. Die Längeninformation wird empfangen.
     
    (Sprung von NW3 nach NW17)
    5 Erzeugen des Empfangspuffer und Empfangen der Daten.
    (Sprung von NW4 nach NW20)

    Empfang der Start-Delimiter (byteweise) und Identifikation der Nachricht (Netzwerk 5 - 16)

    Die Start-Delimiter (4 Bytes) werden byteweise mit FC6 "AG_RECV" empfangen.

    Beim Aufruf des FC6 "AG_RECV" werden die Parameter "ID" und "LADDR" aus den Eingangsparametern des FB101 übernommen. Bei "RECV" muss der Speicherort für das empfangene Byte angegeben werden (SD_Buffer: Bytevariable). Die Ausgangsparameter "NDR", "ERROR" und "STATUS" werden für die Auftragsauswertung benötigt und sind nur im gleichen Zyklus gültig!

    Wenn der Baustein ohne Fehler durchlaufen wurde, wird das empfangene Byte zur weiteren Verarbeitung gesichert. Wenn der Baustein mit Fehler beendet wurde, wird das Statuswort des Bausteins für die Fehleranalyse gesichert.

    Nach dem Empfang eines Bytes findet die Überprüfung auf die festgelegten Startinformationen (Byte0 = 11; Byte1 = 12; Byte2 = 13; Byte3 = 14) statt.

Bild 9: Identifikation einer Nachricht über die Start-Delimiter

Empfang der Längeninformation des S7-String (Netzwerk 3, 17 - 20)

Wenn die empfangenen Informationen als Start-Demiliter identifiziert werden, wird als nächstes die Längeninformation des S7-String (2 Bytes) mit dem FC6 "AG_RECV" empfangen.

Beim Aufruf des FC6 "AG_RECV" werden die Parameter "ID" und "LADDR" aus den Eingangsparametern des FB101 übernommen. Bei "RECV" muss der Speicherort für die beiden Längeninformationsbytes angegeben werden (VAR_LEN: Struktur mit 2 Bytes). Die Ausgangsparameter "NDR", "ERROR" und "STATUS" werden für die Auftragsauswertung benötigt und sind nur im gleichen Zyklus gültig!

Wenn der Baustein ohne Fehler durchlaufen wurde, wird die tatsächliche Länge aus den empfangenen Daten für den Empfangspuffer (ANY-Pointer) verwendet. Wenn der Baustein mit Fehler beendet wurde, wird das Statuswort des Bausteins am FB101 als Ausgangsparameter angezeigt.

Bild 10: Empfang der Längeninfo  

Die Information über die tatsächliche Länge des Strings (VAR_LEN.ACT_LEN) wird für die Zusammenstellung des Empfangspuffer (ANY-Pointer) benötigt. Dazu wird der angegebene Empfangspuffer (ANY-Pointer) beim Aufruf des FB101 mit der tatsächlichen Länge der Daten verifiziert und in einem temporären ANY-Pointer (VAR_BUF) gespeichert.

Bild 11: Vorbereiten des Empfangspuffers

Empfang der Daten (Netzwerk 4, 21- 23)

Abschließend werden die Daten mit FC6 empfangen.

Beim Aufruf des FC6 "AG_RECV" werden die Parameter "ID" und "LADDR" aus den Eingangsparametern des FB101 übernommen. Bei "RECV" muss der Speicherort für die Daten angegeben werden (VAR_BUF: temporärer ANY-Pointer). Die Ausgangsparameter "NDR", "ERROR" und "STATUS" werden für die Auftragsauswertung benötigt und sind nur im gleichen Zyklus gültig!

Wenn der Baustein ohne Fehler durchlaufen wurde, wird die Länge der empfangenen Daten gesichert und an FB101 als Ausgangsparameter weitergegeben. Wenn der Baustein mit Fehler beendet wurde, wird das Statuswort des Bausteins am FB101 als Ausgangsparameter angezeigt.

Bild 12: Empfangen der Daten

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

Bild 13: DB220-Sendedatenstrukturen

  • DB221:
    Im DB221 werden die Daten, die mit 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_data.exe

Kopieren Sie die Datei "T_cp_data.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.
Anfragen und Feedback
Was möchten Sie tun?
Note: The feedback always refers to the current entry. Your message will be sent to the editors in the online support. You will receive an answer from us in a few days if your feedback requires it. If everything is clear to us, we will no longer answer you.
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