Verbindungsorientierte und verbindungslose Protokolle
Man unterscheidet in der Datenkommunikation zwischen folgenden beiden Protokollvarianten:
-
Verbindungsorientierte Protokollvarianten:
Diese bauen vor der Datenübertragung eine (logische) Verbindung zum Kommunikationspartner auf und bauen diese nach Abschluss der Datenübertragung ggf. wieder ab. Verbindungsorientierte Protokolle werden eingesetzt, wenn es bei der Datenübertragung insbesondere auf Sicherheit ankommt. Über eine physikalische Leitung können in der Regel mehrere logische Verbindungen bestehen.
Bei den Anweisungen zur Open User Communication über Industrial Ethernet werden die folgenden verbindungsorientierten Protokolle unterstützt:
-
TCP gemäß RFC 793
-
ISO on TCP gemäß RFC 1006
-
-
Verbindungslose Protokollvarianten:
Diese arbeiten ohne Verbindung. Der Verbindungsauf- und der Verbindungsabbau zum remoten Partner entfallen also. Verbindungslose Protokolle übertragen die Daten unquittiert und damit ungesichert zum remoten Partner, d. h. es können Daten verloren gehen, ohne dass dies am Baustein angezeigt wird.
Bei den Anweisungen zur Open User Communication über Industrial Ethernet wird das folgende verbindungslose Protokoll unterstützt:
-
UDP gemäß RFC 768 (Broadcast oder Singlecast, keine Unterstützung von Multicast)
-
Die Arbeitsweise der Anweisungen ist abhängig von der benutzten Protokollvariante. Darauf wird im Folgenden näher eingegangen.
Empfangsbereich
Dieser Begriff wird im Folgenden immer wieder verwendet. Man versteht darunter den Bereich, in den die Anweisung die empfangenen Daten einträgt.
Der Empfangsbereich ist durch die folgenden beiden Größen festgelegt:
-
Zeiger auf den Beginn des Bereichs
-
Länge des Bereichs
Die Länge des Bereichs wird abhängig von der verwendeten Protokollvariante entweder durch den Parameter LEN (falls LEN <> 0) oder die Längenangabe des Parameters DATA (falls LEN = 0) festgelegt.
Im ANY-Pointer sind die folgenden Datentypen zulässig: BOOL, BYTE, CHAR, WORD, INT, DWORD, DINT, REAL, DATE, TIME_OF_DAY, TIME, S5TIME, DATE_AND_TIME.
TCP
Bei der Datenübertragung werden weder Informationen zur Länge noch ü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 hat jedoch keine Möglichkeit zu erkennen, wo eine Nachricht im Datenstrom endet und wo die nächste beginnt. Es wird daher empfohlen, den Empfangsbereich der Anweisung "TRCV" genau so groß zu wählen wie den Wert des Parameters LEN der Anweisung "TSEND" beim Kommunikationspartner (Anzahl der Bytes, die gesendet werden sollen).
-
Datenempfang im Ad-hoc-Mode:
Der Empfangsbereich ist identisch mit dem durch den Parameter DATA der Anweisung "TRCV" vorgegebenen Bereich.
-
Unmittelbar nach Empfang eines Datenblocks überträgt die Anweisung "TRCV" diesen in den Empfangsbereich und setzt NDR auf "1". Die maximale Länge beträgt 8192 Byte.
-
Falls Sie die Länge des Empfangsbereichs größer gewählt haben als die Länge der gesendeten Daten, kopiert die Anweisung "TRCV" die empfangenen Daten vollständig in den Empfangsbereich. Anschließend setzt sie NDR auf TRUE und beschreibt RCVD_LEN mit der Länge der empfangenen Daten.
-
Falls Sie die Länge des Empfangsbereichs kleiner gewählt haben als die Länge der gesendeten Daten, kopiert "TRCV" so viele Bytes in den Empfangsbereich, bis dieser voll ist. Anschließend setzt er NDR auf TRUE und beschreibt RCVD_LEN mit der Länge des Empfangsbereichs. Mit jedem weiteren Aufruf erhalten Sie einen weiteren Block der gesendeten Daten.
-
-
Datenempfang mit vorgegebener Länge:
-
Der Empfangsbereich wird durch die Parameter DATA (Anfangsadresse des Empfangsbereichs) und LEN (Länge des Empfangsbereichs) von "TRCV" gebildet.
-
Falls Daten empfangen werden, die den Empfangsbereich nicht vollständig füllen, werden Ihnen diese Daten zunächst nicht zur Verfügung gestellt. Sie werden Ihnen erst dann zur Verfügung gestellt, wenn weitere Daten den Empfangsbereich vollständig gefüllt haben. Bitte beachten Sie, dass sich in diesem Fall Daten aus zwei unterschiedlichen Sendeaufträgen in ein und demselben Empfangsbereich befinden. Wenn Sie das Ende der ersten Nachricht bzw. den Anfang der zweiten Nachricht nicht feststellen können, haben sie keine Möglichkeit, die erste bzw. zweite Nachricht zu erkennen.
-
Falls Sie die Länge des Empfangsbereichs kleiner gewählt haben als die Länge der gesendeten Daten, kopiert "TRCV" so viele Bytes in den Empfangsbereich, bis dieser vollständig gefüllt ist.
-
Wenn "TRCV" den Empfangsbereich vollständig gefüllt hat, setzt er NDR auf TRUE und beschreibt RCVD_LEN mit dem Wert von LEN. Mit jedem weiteren Aufruf erhalten Sie damit einen weiteren Block der gesendeten Daten.
-
ISO on TCP
Bei der Datenübertragung werden Informationen zur Länge und zum Ende einer Nachricht übertragen.
Falls Sie den Empfangsbereich größer gewählt haben als die Länge der gesendeten Daten, kopiert die Anweisung "TRCV" die gesendeten Daten vollständig in den Empfangsbereich. Anschließend setzt sie NDR auf TRUE und beschreibt RCVD_LEN mit der Länge der gesendeten Daten.
Falls Sie den Empfangsbereich kleiner gewählt haben als die Länge der gesendeten Daten, kopiert "TRCV" keine Daten in den Empfangsdatenbereich, sondern liefert folgende Fehlerinformation: ERROR=1, STATUS=W#16#8088.
UDP
Sie führen keinen Verbindungsaufbau wie bei den Protokollen TCP und ISO on TCP durch. Daher müssen Sie beim Aufruf des Sendebausteins "TUSEND" einen Verweis auf die Adressparameter des Empfängers (IP-Adresse und Port-Nr.) angeben. Analog erhalten Sie nach Abschluss des Empfangsbausteins "TURCV" einen Verweis auf die Adressparameter des Senders (IP-Adresse und Port-Nr.).
-
Damit Sie die Anweisungen "TUSEND" und "TURCV" nutzen können, müssen Sie zuvor sowohl auf der Sender- als auch auf der Empfängerseite die Anweisung "TCON" aufrufen, um den lokalen Kommunikationszugangspunkt einzurichten.
-
Bei jedem Aufruf von "TUSEND" können Sie den remoten Partner durch Angabe seiner IP-Adresse und seiner Port-Nr. neu referenzieren.
-
Bei der Datenübertragung werden Informationen zur Länge und zum Ende einer Nachricht übertragen.
Falls Sie den Empfangsbereich größer gewählt haben als die Länge der gesendeten Daten, kopiert "TURCV" die gesendeten Daten vollständig in den Empfangsbereich. Anschließend setzt er NDR auf TRUE und beschreibt RCVD_LEN mit der Länge der gesendeten Daten.
Falls Sie den Empfangsbereich kleiner gewählt haben als die Länge der gesendeten Daten, kopiert TURCV keine Daten in den Empfangsbereich, sondern liefert folgende Fehlerinformation: ERROR = 1, STATUS = W#16#8088.
Port-Nummern bei TCP und UDP
Die Adressierung einer Verbindung geschieht wie folgt:
-
Bei TCP:
-
Aktive Verbindung: Über die remote IP-Adresse, den remoten Port und über den lokalen Port (Die Port-Nummer des lokalen Ports geben Sie entweder explizit vor, oder sie wird vom Betriebssystem vergeben.)
-
Passive Verbindung: Über den lokalen Port. Falls Sie den lokalen Port mehrfach benutzen wollen, müssen Sie entweder die remote IP-Adresse oder die remote IP-Adresse und den remoten Port mit vorgeben.
-
-
Bei UDP: Über die remote IP-Adresse, den remoten Port und den lokalen Port (die Port-Nummer des lokalen Ports geben Sie explizit vor.)
Für den lokalen Port gelten die im Folgenden genannten Bereiche. Für den remoten Port gelten diese Bereiche nur dann, wenn der remote Partner eine S7-CPU ist. Andernfalls gelten für den remoten Port keine Einschränkungen.
-
Für CPUs 31x-2 PN/DP bis einschl. FW-Stand V2.6 und CPUs 41x-3 PN/DP bis einschließlich FW-Stand V5.1:
-
Zulässige Port-Nummern in der Parametrierung (UDT 65): 2000 bis 5000
-
Bei Parametrierungen ohne explizite Vorgabe einer Port-Nummer vergibt das Betriebssystem einen Port aus dem dynamischen Nummernband zwischen 49152 und 65534.
-
-
Für CPUs 31x-2 PN/DP ab FW-Stand V2.7 und CPUs 41x-3 PN/DP ab FW-Stand V5.2:
-
Zulässige Port-Nummern in der Parametrierung (UDT 65): 1 bis 49151
Es wird empfohlen, sich auf die Port-Nummern 2000 bis 5000 zu beschränken, da Siemens sich vorbehält, Ports aus dem Nummernbereichen 1 bis 1999 und 5001 bis 49151 systemseitig zu verwenden. -
Bei Parametrierungen ohne explizite Vorgabe einer Port-Nummer vergibt das Betriebssystem einen Port aus dem dynamischen Nummernband zwischen 49152 und 65534.
-
-
Für CPUs 31x-2 PN/DP ab FW-Stand V3.2 und CPUs 41x-3 PN/DP ab FW-Stand V6.0 und CPUs 41x-5H PN/DP ab FW-Stand V6.0:
-
Die Mehrfachnutzung eines Ports ist möglich.
-
Die systemseitig reservierten Port-Nummern entnehmen Sie der folgenden Liste:
|
Protokoll |
Port-Nummer |
Dienst |
|---|---|---|
|
- |
0 |
(Dieser Port ist fest vergeben. Er darf nicht verwendet werden.) |
|
TCP |
20 und 21 |
FTP |
|
TCP |
25 |
SMTP |
|
TCP |
80 |
HTTP |
|
TCP |
102 |
RFC 1006 |
|
UDP |
135 |
RPC-DCOM |
|
UDP |
161 |
SNMP REQUEST |
|
TCP, UDP |
34962 |
PNIO |
|
TCP, UDP |
34963 |
PNIO |
|
TCP, UDP |
34964 |
PNIO |
|
UDP |
65532 |
NTP |
|
UDP |
65533 |
NTP |
|
UDP |
65534 |
NTP |
|
UDP |
65535 |
NTP |
Siehe dazu auch http://www.iana.org/assignments/port-numbers.
|
Hinweis Verwenden Sie keine systemseitig reservierten Port-Nummern. Identische Portnummern dürfen nicht für den aktiven und passiven Verbindungsaufbau in einem Gerät verwendet werden. |