Zusammenfassung: Durch Datenüberwachung und -analyse wurde das Schlüsselnachrichtenformat des PPI-Protokolls identifiziert, das für die Kommunikation zwischen Host-Rechner, Feldgeräten und der S7-200-CPU verwendet werden kann. Schlüsselwörter: SPS, PPI, Protokoll 1 Einleitung Siemens S7-200-SPSen können auf verschiedene Weise miteinander oder zwischen einer SPS und einem PC kommunizieren: Freier Port, PPI, MPI und Profibus. Bei der Programmierung mit dem freien Port müssen Datenkommunikationsprogramme sowohl auf dem Host-Rechner als auch auf der SPS geschrieben werden. Bei der Kommunikation über das PPI-Protokoll muss die SPS nicht programmiert werden und kann alle Datenbereiche lesen und beschreiben, was schnell und komfortabel ist. Siemens hat das Format des PPI-Protokolls jedoch nicht veröffentlicht. Wenn Anwender das PPI-Protokoll zur Überwachung nutzen möchten, müssen sie Überwachungsprodukte oder Konfigurationssoftware von Drittanbietern erwerben. Dies erschwert die eigenständige Entwicklung, insbesondere da selbstentwickelte Feldgeräte nicht über das PPI-Protokoll mit der SPS verbunden werden können. Auch die Programmierung anderer Kommunikationsmethoden hat Einschränkungen, wie z. B. Programmierkomplexität und die Notwendigkeit, Software und Lizenzen zu erwerben (1). Durch Datenüberwachung und -analyse identifizierten wir das Schlüsselnachrichtenformat des PPI-Protokolls, das für die Kommunikation zwischen Host-Computer, Feldgeräten und der S7-200-CPU verwendet werden kann. 2. Analysemethode: Siemens Step 7 Micro/Win32 ist ein Entwicklungswerkzeug für die SPS der S7-200-Serie. Es nutzt den COM-Port eines PCs, um über ein PC/PPI-Programmierkabel eine Verbindung zum Programmieranschluss der SPS herzustellen. Dies zeigt, dass der PC tatsächlich über die serielle Schnittstelle mit der S7-200-CPU kommunizieren kann; das Kommunikationsprotokoll war uns jedoch unbekannt. Durch Abfangen der über die serielle Schnittstelle des PCs gesendeten und empfangenen Daten und Vergleichen mit den von der Step-7-Software ausgegebenen Anweisungen konnten wir die relevanten Befehlsnachrichten und Kommunikationsmethoden analysieren. Anschließend konnten wir direkt Nachrichten über die serielle Schnittstelle an die SPS senden, um die Korrektheit dieser Befehlsnachrichten zu überprüfen. Basierend auf diesem Ansatz gingen wir wie folgt vor, um diese Nachrichten zu erhalten. Zunächst wurde ein serieller Port-Splitter erstellt, der die RX- und TX-Anschlüsse von COM1 mit den TX- und RX-Anschlüssen von COM2 verband (Kreuzverdrahtung), sodass die von COM1 gesendeten Daten von COM2 empfangen werden konnten. Das PC/PPI-Programmierkabel wurde an COM1 angeschlossen, um die von Step7 Micro/Win32 an die SPS gesendeten Nachrichten über COM2 zu empfangen. Die beiden seriellen Ports wurden gemäß dem Handbuch des S7-200-Systems konfiguriert. Die Parameter mussten identisch sein: 9600 Baud, 8 Bit, gerade Parität, 1 Stoppbit. Anschließend wurde die Step7-Software so eingerichtet, dass sie mit der S7-200-CPU kommunizieren konnte. Die Step7-Software gab einen eindeutigen Befehl aus, und die Überwachungssoftware auf COM2 konnte die Nachricht (hexadezimal) anzeigen. In Analogie zum Profibus-Standard (2) konnten so einige Schlüsselmeldungen ermittelt werden. Diese Methode ist direkter und umfassender als die Analyse der NETR- und NETW-Befehle in der SPS (3). 3. PPI-Protokollanalyse: PC und SPS kommunizieren im Master-Slave-Modus. Der PC sendet Lese-/Schreibbefehle im folgenden Format. Die SPS antwortet mit einer korrekten Antwort (Antwortdaten E5H oder F9H, siehe Analyse unten). Nach Empfang dieser Antwort sendet der Host-Computer einen Bestätigungsbefehl (10 02 5C 5E 16), woraufhin die SPS die entsprechenden Daten an den Host-Computer zurücksendet. SD LE LEr SD DA SA FC DSAP SSAP DU FCS ED SD: Startsymbol (68H) LE, Ler: Länge (von DA bis DU) DA: Zieladresse SA: Quelladresse FC: Funktionscode (6CH) DSAP: Ziel-Servicezugriffspunkt SSAP: Quell-Servicezugriffspunkt DU: Dateneinheit FCS: Prüfsumme ED: Endsymbol (16H) 3.1 Analyse des Lesebefehls Lesen einzelner Datenelemente Zum Lesen einzelner Datenelemente ist der Lesebefehl 33 Byte lang. Die ersten 21 Bytes sind identisch: 68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10. Da es sich um einen Befehl zum Lesen von SPS-Daten vom PC handelt, ist SA=00 und DA=02. Bei mehreren Stationen muss DA durch die entsprechende Stationsnummer ersetzt werden. Die Länge von DA bis DU im Lesebefehl beträgt 1 Byte (1 B) bzw. 27 Bytes. Ab Byte 22 variiert die Länge je nach Art und Speicherort der gelesenen Daten. Tabelle 1 zeigt die Bytes 22–32 der Befehle zum Lesen verschiedener Speicheradressen. Byte 22 23 24 25 26 27 28 29 30 31 32 Funktion Leselänge Anzahl der Daten* Speichertyp Offset Prüfen Ende Lesen q0.0 01 00 01 00 00 82 00 00 00 64 16 Lesen m0.0 01 00 01 00 00 83 00 00 00 65 16 Lesen M0.1 01 00 01 00 00 83 00 00 01 66 16 Lesen SMB34 02 00 01 00 00 05 00 01 10 F9 16 Lesen VB100 02 00 01 00 01 84 00 03 20 8B 16 Lesen VW100 04 00 01 00 01 84 00 03 20 8D 16 Read vd100 06 00 01 00 01 84 00 03 20 8F 16 Read i0.5 01 00 01 00 00 81 00 00 05 68 16" Read i0.7 01 00 01 00 00 81 00 00 07 6A 16" Tabelle 1 zeigt die Bytes 22–32 des Lesebefehls. Aus der Tabelle lassen sich folgende Ergebnisse ableiten: Byte 22: Länge der gelesenen Daten 01: 1 Bit 02: 1 Byte 04: 1 Wort 06: Doppelwort Byte 24: Anzahl der Daten, hier 01. Siehe die folgende Erklärung zum gleichzeitigen Lesen mehrerer Daten. Byte 26: Speichertyp, 01: V-Speicher, 00: Sonstige. Byte 27: Speichertyp, 04: S, 05: SM, 06: AI, 07: AQ, 1E: C, 81: I, 82: Q, 83: M, 84: V, 1F: T. Bytes 28, 29, 30: Speicher-Offsetzeiger (Speicheradresse * 8), z. B.: VB100, Speicheradresse 100, Offsetzeiger 800, hexadezimal 320H. Daher lauten die Bytes 28-29: 00 03 20. Byte 31 ist die Prüfsumme, wie bereits erwähnt, berechnet sich aus (DA+SA+DSAP+SSAP+DU) modulo 256. Gleichzeitiges Lesen mehrerer Daten: Beim gleichzeitigen Lesen mehrerer Daten sind die ersten 21 Bytes ähnlich wie oben, nur die Längen von LD, LDR und Byte 14 unterscheiden sich: Byte 14 ist ein Platzhalterbyte für den Datenblock und gibt die Anzahl der vom Datenblock belegten Bytes an. Die Länge hängt von der Anzahl der Datenblöcke ab: Länge = 4 + Anzahl der Datenblöcke * 10. Beispiel: Für einen Datenblock ergibt sich 4 + 10 = 0E (H); beim gleichzeitigen Lesen von drei verschiedenen Datenblöcken (M, V, Q) 4 + 3 * 10 = 22 (H). Byte 22 ist immer 02, was bedeutet, dass es sich um Bytes handelt. Byte 24 gibt die Anzahl der nacheinander gelesenen Bytes an. Beispielsweise entspricht das Lesen von zwei VD-Blöcken Byte24 = 8. Die Bytes 19–30 sind sequenziell gemäß dem Format für das Lesen jeweils eines Datenblocks aufgeführt. Die Bytes 31–42 repräsentieren einen anderen Datentyp, der ebenfalls im obigen Format angegeben wird. Und so weiter, bis maximal 222 Bytes Daten gleichzeitig gelesen werden können. 3.2 Analyse des Schreibbefehls: Das Schreiben eines Datenblocks vom Typ „Double Word“ erfordert einen 40 Byte langen Schreibbefehl, für die übrigen Blöcke jeweils 38 Bytes. Um Daten vom Typ „Double Word“ zu schreiben, lauten die ersten 0–21 Bytes: 68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10. Um Daten eines anderen Typs zu schreiben, lauten die ersten 0–21 Bytes: (Im Vergleich zu den obigen Bytes ändern sich nur die Längenbytes) 68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10. Ab Byte 22 ändert sich das Format abhängig vom Wert und der Position der zu schreibenden Daten. Tabelle 2 zeigt die Bytes 22–40 verschiedener Schreibbefehle. Byte 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Schreibposition und Wertlänge Nummer Typ Offset Bits Wert, Prüfsumme, Endzeichen M0.0=1 01 00 01 00 00 83 00 00 00 00 03 00 01 01 00 71 16 M0.0=0 01 00 01 00 00 83 00 00 00 00 03 00 01 00 00 70 16 M0.1=1 01 00 01 00 00 83 00 00 01 00 03 00 01 01 00 72 16 vb100=10 02 00 01 00 01 84 00 03 20 00 04 00 08 10 00 AE 16 vb100=FF 02 00 01 00 01 84 00 03 20 00 04 00 08 FF 00 9D 16 VW100=FFFF 04 00 01 00 01 84 00 03 20 00 04 00 10 FF FF A6 16 VD100=FFFFFFFF 06 00 01 00 01 84 00 03 20 00 04 00 20 FF FF FF FF B8 16 Tabelle 2 zeigt die Schreibbefehle für Bytes 22–40. Die Analyse ergibt folgende Ergebnisse: Bytes 22–30: Länge, Speichertyp und Speicheroffset der geschriebenen Daten entsprechen dem Lesebefehl. Zeichen wie T, C usw. können nicht mit dem Schreibbefehl geschrieben werden. Byte 32: Bei Bitdaten ist dieses Byte 03, andernfalls 04. Byte 34: Anzahl der geschriebenen Bits: 01: 1 Bit; 08: 1 Byte; 10H: 1 Wort; 20H: 1 Doppelwort. Bytes 35–40: Wert, Prüfsumme und Endzeichen. Bei Bit- oder Bytedaten enthält Byte 35 den Wert, Byte 36 = 00, Byte 37 die Prüfsumme, Byte 38 = 16H und das Endzeichen. Bei Wortdaten (Doppelbyte) enthalten Bytes 35 und 36 den Wert, Byte 37 die Prüfsumme, Byte 38 = 16H und das Endzeichen. Wenn die zu schreibenden Daten ein Doppelwort (vier Bytes) sind, enthalten die Bytes 35–38 die zu schreibenden Werte, Byte 39 die Prüfsumme, Byte 40 den Wert 16H, und der Vorgang ist beendet. 3.3 Analyse anderer Befehle: Erzwungene Schreibvorgänge: Daten können nicht mit den oben genannten Schreibbefehlen (I, Q, S usw.) geschrieben werden; erzwungene Schreibvorgänge sind erforderlich. Die ersten 0–35 Bytes sind wie folgt definiert (das Längenfeld hängt von der jeweiligen Situation ab). Beachten Sie, dass Byte 8 = 07 ist. Die folgende Liste zeigt die Bytes: Byte 32: Platzhalterbytes, die die Anzahl der Bytes vom nächsten Byte bis zur Prüfsumme angeben. Erklärung der gelesenen Daten: Byte 14. Byte 36: Länge der erzwungenen Schreibdaten: 01: 1 Bit, 02: 1 Byte, 04: 1 Wort, 06: Doppelwort. Byte 38: Anzahl der Daten, hier 01. Siehe die folgende Erklärung zum erzwungenen Schreiben mehrerer Daten gleichzeitig. Byte 40: Speichertyp. Byte 41: Speichertyp (siehe Erläuterung des Lesebefehls). Byte 42, 43, 44: Speicher-Offsetzeiger (Speicheradresse * 8). Byte 45, 46, 47, 48: Wert, Prüfcode, Endzeichen. Erzwungenes Schreiben abbrechen. Nach dem erzwungenen Schreiben von I, Q usw. können diese Werte vom Programm nur mit dem Befehl „Erzwungenes Schreiben abbrechen“ geändert werden. Das Format des Befehls „Erzwungenes Schreiben abbrechen“ ähnelt dem des Befehls „Erzwungenes Schreiben“, mit folgenden Änderungen: (1) Es gibt kein „Wert“-Segment, d. h. die Bytes 45–48 fehlen. Dies betrifft die Längenbytes LE und LEr; Byte 32 enthält Platzhalterbytes. (2) Byte 16 = 10H. (3) Byte 32 = 0CH. Da Byte 32 das erste Byte ohne das „Wert“-Segment ist, verkürzt sich die Datenblocklänge. Zum erzwungenen Schreiben oder Löschen mehrerer Daten gleichzeitig kann der Schreibbefehl verwendet werden, um die entsprechende Nachricht zu schreiben. Dieser Befehl wird hier nicht aufgeführt. STOP-Befehl: Der STOP-Befehl bewirkt, dass die S7-200-CPU vom RUN- in den STOP-Zustand wechselt (der Modusschalter am CPU-Modul muss sich dabei in der Position RUN oder TERM befinden). Der PC sendet den folgenden Befehl, die SPS gibt F9 zurück und befindet sich nun im Wartezustand. Der PC sendet eine Bestätigungsnachricht (10 02 5C 5E 16), um den Befehlsvorgang abzuschließen. 68 1D 1D 68 02 00 6C 32 01 00 00 00 00 00 10 00 00 29 00 00 00 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16 RUN-Befehl Der RUN-Befehl veranlasst die S7-200 CPU, vom STOP- in den RUN-Zustand zu wechseln (der Modusschalter am CPU-Modul muss sich zu diesem Zeitpunkt in der Position RUN oder TERM befinden). Der PC gibt den Befehl aus, die SPS sendet F9 zurück und befindet sich nun im Betriebszustand. Anschließend sendet der PC eine Bestätigungsnachricht (10 02 5C 5E 16) und schließt damit einen Befehlsvorgang ab. 68 21 21 68 02 00 6C 32 01 00 00 00 00 00 14 00 00 28 00 00 00 00 00 00 FD 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16 3.4 Datenleseanalyse Die Antwortdaten der SPS sind ebenfalls in PPI gekapselt. Wird ein Befehl zum Lesen eines einzelnen Datenelements verwendet, enthält die Antwortnachricht nur ein Datenelement, und Byte 16 dieser Antwortnachricht ist ≤ 8. Byte 04: DA=00 Byte 05: SA=02, was bedeutet, dass die Daten von der SPS-Station 02 an den PC gesendet werden. Byte 16: Platzhalterbytes des Datenblocks, die Anzahl der Bytes von Byte 21 bis vor der Prüfsumme. Für ein Datenelement: Wort = 06, Doppelwort = 08, Sonstige = 05. Byte 22: Datentyp, Bit = 3, Sonstige = 4. Byte 24: Datenbreite, Bit = 01, Byte = 08, Wort = 10H, Doppelwort = 20H. Bytes 25–28: Wert. Kann nur eine Station im Netzwerk eine Antwortnachricht senden, lässt sich die Position des Rückgabewerts einfach anhand der LE-Länge in Bytes bestimmen: LE = 16H, Rückgabewert ist ein Byte- oder Bitwert, Byte 25 der Antwortnachricht ist der Rückgabewert; LE = 17H, Rückgabewert ist ein Wortwert (Doppelbyte), Bytes 25 und 26 der Antwortnachricht sind der Rückgabewert; LE = 19H, Rückgabewert ist ein Doppelwortwert (Vierbyte), Bytes 25–28 der Antwortnachricht sind der Rückgabewert. Eine genauere Methode besteht darin, die Ziel- und Quelladresse anhand der SA-, DA- und Speicherortinformationen der zurückgegebenen Nachricht zu identifizieren, um zu bestätigen, dass es sich um die für diese Anfrage zurückgegebenen Daten handelt. Anschließend werden Verifizierungsprüfungen durchgeführt, um die korrekten Daten zu erhalten. Gleichzeitiges Lesen mehrerer Dateneinträge: Wird ein Befehl zum gleichzeitigen Lesen mehrerer Dateneinträge verwendet, enthält die Antwortnachricht mehrere Dateneinträge. Diese Dateneinträge haben nur Typparameter, keine Offsetparameter. Daher ist es wichtig sicherzustellen, dass sie gemäß der Reihenfolge des Lesebefehls eins zu eins übereinstimmen. Byte 16: Platzhalterbytes für den Datenblock, die Anzahl der Bytes von Byte 21 bis zur Prüfsumme, abhängig von Anzahl und Typ der Datenblöcke. Byte 20: Anzahl der Datenblöcke. Byte 21 markiert den Beginn des Datenblocks. Jeder Datenblock beginnt mit FF 04, die nächsten beiden Bytes geben die Länge dieses Datenblocks in Bits an, und dann folgen die Daten fortlaufend. Der nächste Datenblock beginnt ebenfalls mit FF 04, und dieses Format wird bis zum Ende wiederholt. 4. Anwendung der PC-SPS-Kommunikation: Bei der PC-SPS-Kommunikation wird der Computer über ein PPI-Kabel oder eine Standard-485-Seriell-Portkarte mit dem Programmieranschluss der SPS verbunden. Der PC verwendet VB-Programmierung gemäß dem PPI-Protokoll im Master-Slave-Kommunikationsmodus. Ein einzelner Lese-/Schreibvorgang umfasst folgende Schritte: Zuerst sendet der Host-Computer einen Lese-/Schreibbefehl. Die SPS antwortet mit einer korrekten Antwort (Antwortdaten E5H). Nach Empfang dieser Antwort sendet der Host-Computer einen Bestätigungsbefehl (10 02 5C 5E 16). Die SPS führt die korrekte Lese-/Schreibantwort aus und sendet die entsprechenden Daten an den Host-Computer zurück. Dieser Prozess des zweimaligen Sendens und Empfangens von Daten schließt einen Lese-/Schreibvorgang ab. Daher können wir das PPI-Protokoll verwenden, um verschiedene Datentypen in der S7-200-SPS zu lesen und zu schreiben, darunter die Datentypen I, Q, SM, M, V, T, C und S. Aus diesen Variablen lassen sich Bits, Bytes, Wörter und Doppelwörter direkt auslesen (beim Auslesen von Bitvariablen wird der Byte-Wert, der das entsprechende Bit enthält, gelesen). Auch der Betriebszustand der SPS (RUN/STOP) kann geändert werden. Bei der Programmierung empfiehlt es sich, die gelesenen Messwerte, Ausgabewerte und weitere Daten in einem zusammenhängenden Variablenbereich der SPS zu speichern. Beim Auslesen von Daten durch den Host-Computer kann dieser zusammenhängende Datensatz auf einmal gelesen werden, wodurch häufige, mehrstufige Datenlesevorgänge vermieden werden. Beim Ändern von Sollwerten oder anderen Daten wird ein Schreibvorgang durchgeführt. Neben der Kommunikation mit dem Host-Computer (PC) bietet das PPI-Protokoll, das für die Kommunikation zwischen Feldgeräten und SPS verwendet wird, vor allem eine direkte Verbindung zwischen Feldgeräten und der S7-200-CPU. Selbstentwickelte Geräte können das PPI-Protokoll einfach nutzen, um über eine 485/232-Schnittstelle eine Verbindung zur S7-200-CPU und zum SPS-Netzwerk, einschließlich Bedienfeldern und Datenerfassungseinheiten, herzustellen. 5. Zusammenfassung: Durch die Analyse der Kommunikationsdaten zwischen der STEP7 Micro/Win32-Software und der S7-200-CPU wurde das Schlüsselnachrichtenformat des Siemens-PPI-Protokolls ermittelt. Dieses Ergebnis ist für die Ingenieurpraxis von hohem Nutzen. Ohne die Verwendung von Siemens- oder anderer Konfigurationssoftware wurde das analysierte PPI-Protokoll zur Überwachung der SPS durch den Host-Rechner eingesetzt. Die Arbeiten zur Feldgeräte-SPS-Kommunikation werden fortgesetzt. Darüber hinaus bietet diese Methode zur Überwachung und Analyse von Kommunikationsports auch Hilfestellung bei der Bestimmung unbekannter Protokolle und der Überprüfung von Kommunikationsfehlern. Referenzen : 1. Zhou Xiaoping, Jiang Jianfang, Su Shaoyu, Chen Xun. Research on Communication Implementation between S7-200 Series PLC and Monitoring Computer. Microcomputer Information 2004;1. 2. SIEMENS. SIMATIC S7-200 Programmable Controller System Manual. 02 ed, 2000. 3. Hao Li, Wang Dongxing. Research on Communication between PROFIBUS Slave Station and S7-200 PLC. Zeitschrift des Pekinger Instituts für Maschinenbau (Gesamtausgabe) 2000;15