Deckblatt Übertragung von Daten mit variabler Telegrammlänge über das TCP- Protokoll mit S7-300 FB103 AG_RECV_TCP_xVAR FAQ Juni 2011 Service & Support Answers for industry.
Fragestellung Dieser Beitrag stammt aus dem Service&Support Portal der Siemens AG, Sector Industry, Industry Automation and Drive Technologies. Es gelten die dort genannten Nutzungsbedingungen (www.siemens.com/nutzungsbedingungen). Frage Durch den folgenden Link gelangen Sie direkt zur Downloadseite dieses Dokuments. http://support.automation.siemens.com/ww/view/de/51101016 Wie werden Daten mit variabler Telegrammlänge über das TCP-Protokoll übertragen und in einer S7-300 Station über den Industrial Ethernet CP empfangen. Antwort Folgen Sie zur umfassenden Beantwortung dieser Frage den in diesem Dokument aufgeführten Handlungsanweisungen und Hinweisen. 2 V1.0, Beitrags-ID: 51101016
Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung... 4 2 Beschreibung des Programmbeispiels... 5 2.1 OB100... 6 2.2 OB1... 6 2.3 FB100... 7 2.3.1 FC5 AG_SEND... 7 Sendeauftrag aktivieren... 7 Aufruf der Funktion FC5 AG_SEND... 8 Auswertung des Sendeauftrags... 8 2.3.2 FB103 AG_RECV_TCP_xVAR... 10 Aufruf des Funktionsbausteins FB103 AG_RECV_TCP_xVAR... 10 Eingangsparameter des FB103 AG_RECV_TCP_xVAR... 10 Ausgangsparameter des FB103 AG_RECV_TCP_xVAR... 11 Auswertung des Empfangsauftrags... 12 2.4 Projektierung einer TCP-Verbindung... 12 2.4.1 Verbindungsnummer der TCP-Verbindung ermitteln... 13 2.4.2 Baugruppenanfangsadresse des Industrial Ethernet CPs ermitteln... 14 V1.0, Beitrags-ID: 51101016 3
1 Einleitung 1 Einleitung Die Datenübertragung über das TCP-Protokoll erfolgt als Datenstrom. Es werden dabei weder Informationen zur Länge noch Informationen über Anfang und Ende einer Nachricht übertragen. Die Sendedaten der Sendeapplikation werden als transparenter Datenstrom durch das TCP-Protokoll zum Empfänger übertragen. Die Empfängerapplikation muss den Datenstrom auswerten, um zu erkennen wo eine Nachricht im Datenstrom beginnt und endet. Der Sender legt eine Datenstruktur fest, die vom Empfänger interpretiert werden kann. Die Datenstruktur setzt sich aus den Nutzdaten, in diesem Beispiel ASCII- Zeichen, und einem abschließenden Steuerzeichen wie z.b. (Carriage Return) zusammen. Über das abschließende Steuerzeichen wird das Ende einer Nachricht signalisiert. Die Abbildung 1-1 zeigt die Datenstruktur der Sendedaten, die vom Empfänger interpretiert werden kann. Abbildung 1-1 Nutzdaten (max. 8191 Byte) CR Steuerzeichen EOT (end of text) 4 V1.0, Beitrags-ID: 51101016
2 Beschreibung des Programmbeispiels Über eine in NetPro projektierte TCP-Verbindung werden Daten mit variabler Telegrammlänge in einer S7-300 Station empfangen. Für die Datenübertragung werden die Funktionen FC5 AG_SEND und FC6 AG_RECV im S7-Program der S7-300 CPU aufgerufen. Der FC5 AG_SEND dient zum Senden von Daten an eine andere S7-Station, an eine PC-Station oder an ein Fremdsystem. Der Funktionsbaustein FB103 AG_RECV_TCP_xVAR ruft intern die Funktion FC6 AG_RECV auf, um die Daten mit variabler Telegrammlänge über das TCP- Protokoll in der S7-300 zu empfangen. Der zeitoptimierte Funktionsbaustein FB103 AG_RECV_TCP_xVAR kann innerhalb eines OB-Zyklus eine programmierbare Anzahl von Bytes, die ausschließlich ASCII-Zeichen beinhalten, als geschlossene Nachricht empfangen. Der Anwender kann die max. Anzahl der Bytes, die in einem Zyklus mit dem FC6 AG_RECV empfangen werden können, für sein geforderte OB1-Zykluszeit anpassen. In diesem Programmbeispiel wird die Funktion FC5 AG_SEND und der Funktionsbaustein FB103 AG_RECV_TCP_xVAR im S7-Programm der S7-300 CPU aufgerufen, so dass die S7-300 100 Byte Daten, inklusive Steuerzeichen, senden und empfangen kann. Erstellen Sie zunächst die Hardware-Konfiguration Ihrer S7-300 Station. Konfigurieren Sie das Merkerbyte 10 als Taktmerker. Über diesen Taktmerker wird der Sendeauftrag angestoßen. Speichern und übersetzen Sie die Hardware- Konfiguration Ihrer S7-300 Station und laden Sie diese in die CPU. Das S7-Programm besteht aus folgenden Bausteinen: Tabelle 2-1 Baustein OB100 OB1 FB100 DB100 FB103 DB222 DB221 Beschreibung Anlauf-OB für die Anlaufart Neustart (Warmstart) Das Betriebssystem der CPU bearbeitet den OB1 zyklisch. Die zyklische Bearbeitung des OB1 wird nach Beendigung des Anlaufs begonnen. Der FB100 ruft die Funktion FC5 AG_SEND und den Funktionsbaustein FB103 AG_RECV_TCP_xVAR auf, um über eine TCP-Verbindung 100 Byte Daten zu senden und zu empfangen. Instanz-Datenbaustein des FB100 Der FB103 AG_RECV_TCP_xVAR ruft intern die Funktion FC6 AG_RECV auf, um die Daten über die TCP-Verbindung zu empfangen. Über den Eingangsparameter EOT des FB103 wird das Steuerzeichen definiert, das das Ende einer Nachricht signalisiert und im FB103 ausgewertet wird. Über den Eingangsparameter MAX_LOOP des FB103 wird die max. Anzahl der Bytes definiert, die in einem Zyklus mit dem FC6 AG_RECV empfangen werden können. Der Wert des Eingangsparameters MAX_LOOP wird im FB103 ausgewertet. Im Datenbaustein DB222 werden die Empfangsdaten gespeichert. Im Datenbaustein DB222 werden die Sendedaten gespeichert. V1.0, Beitrags-ID: 51101016 5
2.1 OB100 2.2 OB1 Der OB100 ist ein Anlauf-OB und wird beim Neustart (Warmstart) der CPU durchlaufen. In diesem OB werden die Merker M1.0 und M0.1 gesetzt, um die Freigabe für den ersten Kommunikationsanstoß zu erteilen. Der OB1 wird zyklisch aufgerufen. Im OB1 wird der FB100 mit dem Instanz- Datenbaustein DB100 und dem Merker M1.0 als Parameter INIT_COM aufgerufen. Der Merker M1.0 wird im OB1 nach dem Aufruf des FB100 wieder zurückgesetzt. Abbildung 2-1 6 V1.0, Beitrags-ID: 51101016
2.3 FB100 Der FB100 wird zyklisch im OB1 aufgerufen. Der FB100 ruft die Funktion FC5 AG- SEND und den Funktionsbaustein FB103 AG_RECV_TCP_xVAR auf. 2.3.1 FC5 AG_SEND Sendeauftrag aktivieren Abbildung 2-2 Wenn der Taktmerker M10.5 eine positive Flanke hat und kein Sendeauftrag läuft, dann werden die Funktion FC5 AG_SEND über den Eingangsparameter ACT aktiviert und die binäre Variable SND_BUSY auf den Wert 1 gesetzt. Solange die binäre Variable SND_BUSY den Wert 1 hat, kann kein neuer Sendeauftrag angestoßen werden. V1.0, Beitrags-ID: 51101016 7
Aufruf der Funktion FC5 AG_SEND Abbildung 2-3 Am Eingangsparameter ID parametrieren Sie die Verbindungsnummer der in NetPro projektierten TCP-Verbindung. Informationen zur Ermittlung der Verbindungsnummer finden Sie im Kapitel 2.4.1. Am Eingangsparameter LADDR parametrieren Sie die Baugruppen- Anfangsadresse des Industrial Ethernet CPs. Informationen zur Ermittlung der Baugruppenanfangsadresse des Industrial Ethernet CPs finden Sie im Kapitel 2.4.2. Der Eingangsparameter SEND verweist auf einen Datenbereich in der lokalen CPU, der die zu versendenden Daten enthält. Es werden 99 Byte Nutzdaten und 1 Byte Steuerzeichen aus dem DB221 ab Adresse gesendet. In diesem Beispiel wird das Steuerzeichen CR=13 als EOT (end of text) verwendet. Am Eingangsparameter LEN parametrieren Sie die Anzahl der zu sendenden Bytes. Hinweis Die Anzahl der zu sendenden Bytes darf nicht größer als der Empfangspuffer sein. Auswertung des Sendeauftrags Die Ausgangsparameter DONE, ERROR und STATUS werden für die Auftragsauswertung benötigt und sind nur um gleichen Zyklus gültig. Wenn der Sendeauftrag erfolgreich abgeschlossen ist, dann wird die binäre Variable SND_BUSY auf den Wert 0 zurückgesetzt, so dass ein neuer Sendeauftrag angestoßen werden kann. 8 V1.0, Beitrags-ID: 51101016
Abbildung 2-4 Wenn der FC5 AG_SEND mit Fehler abgeschlossen ist, dann werden der Wert des Ausgangsparameters STATUS für eine Fehleranalyse gesichert und die binäre Variable SND_BUSY zurückgesetzt, so dass ein neuer Sendeauftrag angestoßen werden kann. Abbildung 2-5 V1.0, Beitrags-ID: 51101016 9
2.3.2 FB103 AG_RECV_TCP_xVAR Aufruf des Funktionsbausteins FB103 AG_RECV_TCP_xVAR Mit dem Funktionsbaustein FB103 AG_RECV_TCP_xVAR können Sie in einer S7-300 Daten mit variabler Telegrammlänge über das TCP-Protokoll empfangen. Abbildung 2-6 Eingangsparameter des FB103 AG_RECV_TCP_xVAR Der FB103 AG_RECV_TCP_xVAR hat folgende Eingangsparameter: Tabelle 2-2 Eingangsparameter Datentyp Wertebereicht Wert im Programmbeispiel ID INT 1 bis 16 (dez) 4 (dez) LADDR WORD w#16#100 MAX_LOOP INT 1 bis 8192 (dez) 100 (dez) bzw. bis Längenangabe am Eingangsparameter RECV_BUF EOT INT 13 (dez), d.h. das Steuerzeichen CR wird als EOT (End of text) RECV_BUF ANY P#DB222.DBx0.0 Byte 100 10 V1.0, Beitrags-ID: 51101016
Ausgangsparameter des FB103 AG_RECV_TCP_xVAR Der FB103 AG_RECV_TCP_xVAR hat folgende Ausgangsparameter: Tabelle 2-3 Eingangsparameter Datentyp Wertebereich NDR BOOL Der Parameter zeigt an, ob neue Daten übernommen wurden. 0: - 1: neue Daten übernommen ERROR BOOL Fehleranzeige 0: - 1: Fehler beim Empfang der Daten STATUS WORD Statusanzeige (nur gültig mit ERROR=1) LENGTH INT Anzahl der Bytes, die in den am Eingangsparameter RECV_BUF parametrierten Datenbereich übernommen wurden. (nur gültig mit NDR=1) ID LADDR Am Eingangsparameter ID parametrieren Sie die Verbindungsnummer der in NetPro projektierten TCP-Verbindung. Informationen zur Ermittlung der Verbindungsnummer finden Sie im Kapitel 2.4.1. Am Eingangsparameter LADDR parametrieren Sie die Baugruppenanfangsadresse des Industrial Ethernet CPs. Informationen zur Ermittlung der Baugruppenanfangsadresse des Industrial Ethernet CPs finden Sie im Kapitel 2.4.2. MAX_LOOP Am Eingangsparameter MAX_LOOP parametrieren Sie die max. Anzahl der Bytes (ASCII-Zeichen), die in einem Zyklus mit dem FC6 AG_RECV empfangen werden können. Der Wert des Eingangsparameters MAX_LOOP wird im Funktionsbaustein FB103 ausgewertet. Wenn der Empfangspuffer des Industrial Ethernet CPs weniger Bytes enthält als die am Eingangsparameter MAX_LOOP parametrierte Anzahl, dann wird der Funktionsbaustein sofort beendet. EOT Am Eingangsparameter EOT (End of text) parametrieren Sie das Steuerzeichen, das das Ende einer Nachricht signalisiert, z.b. ETX=3, LF=10, CR=13 und im FB103 ausgewertet wird. Wenn das Steuerzeichen bereits vor Ende der am Eingangsparameter MAX_LOOP parametrierten Länge erkannt wird, dann wird der Funktionsbaustein FB103 mit NDR=1 und mit Angabe der Länge im Ausgangsparameter LENGTH beendet. RECV_BUF Am Eingangsparameter RECV_BUF parametrieren Sie den Datenbereich, in dem die Nutzdaten mit der am Eingangsparameter MAX_LOOP parametrierten Länge, einschließlich des Steuerzeichens EOT, gespeichert werden. V1.0, Beitrags-ID: 51101016 11
Auswertung des Empfangsauftrags Die Ausgangsparameter NDR, ERROR und STATUS werden für die Auftragsauswertung benötigt und sind nur um gleichen Zyklus gültig. Wenn der FB103 AG_RECV_TCP_xVAR mit Fehler abgeschlossen ist, dann wird der Wert des Ausgangsparameters STATUS für eine Fehleranalyse gesichert. Abbildung 2-7 Wenn der Empfangsauftrag erfolgreich abgeschlossen ist, dann wird die Länge der empfangenen Daten gesichert. Abbildung 2-8 2.4 Projektierung einer TCP-Verbindung Unter folgendem Link finden Sie eine Anleitung zur Projektierung einer TCP- Verbindung für die S7-300, so dass die Daten über einen Industrial Ethernet CP übertrag werden können. http://support.automation.siemens.com/ww/view/de/22385024 12 V1.0, Beitrags-ID: 51101016
2.4.1 Verbindungsnummer der TCP-Verbindung ermitteln In NetPro doppelklicken Sie auf die projektierte TCP-Verbindung, um den Eigenschaftsdialog zu öffnen. Wechseln Sie in das Register Allgemein, um die Verbindungsnummer zu ermitteln. Die Verbindungsnummer parametrieren Sie am Eingangsparameter ID der Funktion FC5 AG_SEND und des Funktionsbausteins FB103 AG_RECV_TCP_xVAR. Abbildung 2-9 V1.0, Beitrags-ID: 51101016 13
2.4.2 Baugruppenanfangsadresse des Industrial Ethernet CPs ermitteln In der Hardware-Konfiguration doppelklicken Sie auf den projektierten CP343-1, um den Eigenschaftsdialog des CP343-1 zu öffnen. Wechseln Sie in das Register "Adressen", um die Baugruppenanfangsadresse zu ermitteln. Die Baugruppenanfangsadresse parametrieren Sie am Eingangsparameter LADDR der Funktion FC5 AG_SEND und des Funktionsbausteins FB103 AG_RECV_TCP_xVAR. Abbildung 2-10 14 V1.0, Beitrags-ID: 51101016