Parameter Part
Das führende Byte im „Parameter Part“ stellt den Parameter Code dar. Über diesen definiert sich der weitere Aufbau, sowie die erwartete Antwort.
Parameter Code | Description | |
0xF0 | open S7 connection | |
0x00 | SSL (german: „SZL“) diagnostics | |
0x04 | read | |
0x05 | write | |
0x1A | request download | |
0x1B | download block | |
0x1C | end download | |
0x1D | start upload | |
0x1E | upload | |
0x1F | end upload | |
0x28 | insert block |
Open S7 Connection
Request:
Nach erfolgreichem Wechsel in den Peer-State signalisiet die Client-Seite die Kommunikation über das S7 Protokoll. Dabei ist folgender Aufbau des Parameterteils zu finden:
Byte | Description | |
0 | 0xF0 (open S7 connection) | |
1 | unknown | |
2 | unknown | |
3 | unknown | |
4 | unknown | |
5 | unknown | |
6 | offered PDU length |
Response:
Als Response erwartet der Client eine Nachricht vom PDU Typ 3 mit Fehlercode 0x0000 (no error), sowie dem zuvor versendeten Parameterteil.
SSL (SZL) Diagnostics
Request:
SSL steht für „System State List“ (SZL = „Systemzustandsliste“). Eine (wenn auch unvollständige) Liste kann man aus den entsprechenden Dokumentationen (System- und Standardfunktionen für S7-300/400 Band 1/2 Referenzhandbuch) oder (WinAC MP for MP370 User Manual) von Siemens entnehmen.
Direkt nach der Verständigung zum S7 Protokoll, erfolgt von der Client-Seite eine Anfrage zur SZL-ID 0x0131 mit SZL-Index 0x003 („B&B-Leistungsparameter“):
Byte | Description | |
0 | 0x00 (ssl diagnostics) | |
1 | 0x01 (unknown) | |
2 | 0x12 (unknown) | |
3 | 0x04 (number of bytes following) | |
4 | 0x11 (unknown) | |
5 | 0x44 (PG function; request ssl content) | |
6 | 0x01 (PG subfunction; request ssl content) | |
7 | 0x00 (unknown) |
Welche SZL angefodert wird, ist im dazugehörigen „Data Part“ enthalten.
Response:
Als Response erwartet der Client eine Nachricht vom PDU Typ 7 mit folgendem 12 Byte Parameter Part:
Byte | Description | |
0 | 0x00 (ssl diagnostics) | |
1 | 0x01 (unknown) | |
2 | 0x12 (unknown) | |
3 | 0x08 (number of bytes following) | |
4 | 0x12 (unknown; maybe 0x11 + 1) | |
5 | 0x84 (function; response to 0x44) | |
6 | 0x01 (subfunction) | |
7 | 0x01 (unknown) | |
8 | 0x00 (unknown) | |
9 | 0x00 (unknown) | |
10-11 | 0x0000 (parameter error code) |
Die Informationen aus der angeforderten SZL sind im Datenteil enthalten. Der Aufbau dieser Daten ist teilweise in der Siemens Dokumentation unter den entsprechenden SZL Anfragen enthalten. Leider ist gerade zu den B&B-Leisungsparametern (SZL-ID 0x0131, INDEX 0x0003) keine solche Beschreibung zu finden. Es ist jedoch möglich, ein mitgelauschtes Byte Array zu schicken, mit welchem dem Client mitgeteilt wird, dass keine Diagnosedaten vorhanden sind.
Read
Request:
Mittels eines Read Requests ist es dem Client möglich, Variablenbelegungen aus einem Datenbaustein auszulesen. Direkt nach dem Read Code folgt die Anzahl, sowie eine Liste der angeforderten Variablen. Ein Element der Liste besteht aus 12 Bytes (siehe unten).
Byte | Description | ||
0 | 0x04 (read) | ||
1 | number of data requests | ||
2 | 0x12 (unknown) | first data request | |
3 | 0x0A (10 bytes following) | first data request | |
4 | 0x10 (unknown) | first data request | |
5 | data type | first data request | |
6-7 | length | first data request | |
8-9 | DB number | first data request | |
10 | area code | first data request | |
11-13 | start address in bits | first data request | |
14 | 0x12 (unknown) | second data request | |
15 | 0x0A (10 bytes following) | second data request | |
16 | 0x10 (unknown) | second data request | |
17 | data type | second data request | |
18-19 | length | second data request | |
20-21 | DB number | second data request | |
22 | area code | second data request | |
23-25 | start address in bits | second data request | |
26-37 | … | third data request | |
…-… | … | following requests |
Read Requests haben keinen Datenteil.
Response:
Als gültige Antwort erwartet der Client vom Server ein PDU vom Typ 3 mit Fehlercode 0x0000 (no error). Der Parameteranteil ist zwei Byte groß und besteht aus dem Parameter Read Code sowie der Anzahl der angeforderten Variablen. Die eigentlichen Variablenbelegungen sind im Datenteil enthalten.
Write
Request:
Der Parameterteil eines Write Requests ist genauso aufgebaut wie der eines Read Requests. Lediglich der Parameter Code (zweites Byte) ist keine 0x04 (Read) sondern eine 0x05 (Write).
Die eigentlichen zu übertragenden Variablenbelegungen sind im Datenteil enthalten.
Response:
Als Antwort wird ein PDU vom Typ 3 mit Fehlercode 0x0000 (no error) erwartet. Der Parameterteil ist zwei Byte groß und besteht aus dem Parameter Write Code sowie der Anzahl der angeforderten Variablen.
Der Datenteil enthält die Statuscodes zu jeder Variablen.