Siemens S7
Siemens S7-Steuerungen über S7comm anbinden - Rack und Slot, Speicherbereiche, typisierte Adressierung über Byte und Bit und die nativen Datentypen.
Der Treiber Siemens S7 spricht mit Siemens S7-Steuerungen über S7comm, das klassische Protokoll von Step 7, getragen von ISO-on-TCP. Er verwendet absolute Adressierung, also Speicherbereich, Nummer des Datenbausteins, Byte und Bit, und kommt damit ohne jeden Export von Symbolen aus dem Projektierungsprojekt aus. Legen Sie im Connector ein Gerät unter dem Treiber Siemens S7 an und füllen Sie die Felder unten aus; der Bereich zeigt nur die Felder, die dieses Protokoll verwendet.
Verbindung
| Feld | Bedeutung | Standard |
|---|---|---|
| Host | IP-Adresse oder Hostname der CPU (oder der CP-Baugruppe davor). | leer |
| Rack / Slot | Die Nummern von Rack und Slot der CPU, wie im Hardwareaufbau von Siemens projektiert. Zwei Zahlenfelder in einer Zeile: zuerst Rack, dann Slot. | 0 / 0 |
| Abfrageintervall (ms) | Lesetakt für das ganze Gerät, für Tags, die ihn nicht selbst festlegen. | 1.000 |
Der TCP-Port ist fest auf 102 gesetzt (ISO-on-TCP), es gibt also kein Feld für den Port.
Die Kopfzeile des Geräts zeigt den zusammengesetzten Endpunkt, zum Beispiel
s7://192.168.0.2:0:1 (Host, Rack, Slot).
Rack und Slot müssen zur Hardware passen: CPUs der Reihen S7-1200 und S7-1500 antworten auf Rack 0, Slot 0 oder 1; eine übliche S7-300-CPU sitzt auf Rack 0, Slot 2; bei S7-400 hängt es vom Aufbau ab. Ein falscher Slot lässt die Verbindung fehlschlagen, statt falsche Daten zu lesen.
Jeder Tag darf sein eigenes Abfrageintervall (ms) setzen; der Wert 0 an einem Tag fällt auf das Intervall des Geräts zurück.
Adressierung
Ein S7-Tag wird über typisierte Felder adressiert, nicht über eine Freitextzeichenkette. Der Bereich zeigt sie auf der Karte Quelle des Tags:
| Feld | Bedeutung | Angenommene Werte | Standard |
|---|---|---|---|
| Bereich | Der Speicherbereich, der gelesen wird. | DataBlock, Merker, ProcessInput, ProcessOutput, Timer, Counter |
DataBlock |
| DB-Nummer | Welcher Datenbaustein, nur gezeigt, wenn Bereich DataBlock ist. |
0 und aufwärts | 1 |
| Startbyte | Byte-Versatz innerhalb des Bereichs, an dem der Wert beginnt. In den Bereichen Timer und Counter heißt das Feld Timer-Nummer oder Zähler-Nummer und fragt stattdessen nach der Nummer des Zeitglieds oder Zählers. |
0 und aufwärts | 0 |
| Bit (0–7) | Position des Bits im Startbyte. Nur bei Tags vom Typ Boolean gezeigt. | 0–7 | 0 |
| Maximale Länge (leer = 254) | Erklärtes Maximum eines S7-STRING. Nur bei Tags vom Typ String außerhalb der Bereiche Timer und Counter gezeigt. |
1 und aufwärts, leer | leer |
Die Bereiche entsprechen der üblichen Siemens-Schreibweise: Merker ist der Merkerbereich
(M), ProcessInput das Prozessabbild der Eingänge (I/E), ProcessOutput das Prozessabbild
der Ausgänge (Q/A), und Timer/Counter sind die Bereiche der Zeitglieder und Zähler von
S7. Zeitglieder und Zähler werden über ihre Nummer adressiert, nicht über ein Byte:
Timer mit der Nummer 5 liest T5, und Counter mit der Nummer 3 liest C3. Klassische
absolute Adressen übersetzt:
| Klassische Adresse | Datentyp | Einzutragende Felder |
|---|---|---|
DB5.DBD12 mit einem REAL |
Float | Bereich DataBlock, DB-Nummer 5, Startbyte 12 |
DB1.DBX3.4 |
Boolean | Bereich DataBlock, DB-Nummer 1, Startbyte 3, Bit 4 |
DB2.DBW20 mit einem INT |
Int16 | Bereich DataBlock, DB-Nummer 2, Startbyte 20 |
MW10 |
Int16 | Bereich Merker, Startbyte 10 |
M10.3 |
Boolean | Bereich Merker, Startbyte 10, Bit 3 |
IB2 |
Byte | Bereich ProcessInput, Startbyte 2 |
Q4.1 |
Boolean | Bereich ProcessOutput, Startbyte 4, Bit 1 |
T5 |
Int16 | Bereich Timer, Timer-Nummer 5 |
C3 |
Int16 | Bereich Counter, Zähler-Nummer 3 |
Ein Tag vom Typ Boolean liest und schreibt auf dem Bus genau ein Bit; er schreibt nie das umgebende Byte neu. Jeder andere Typ wird ab dem Startbyte byteweise adressiert, mit genau der Breite seines Datentyps. Die Zeile Quelladresse (Bus) auf der Karte Quelle, die nur gelesen wird, zeigt die zusammengesetzte Adresse, während Sie tippen.
Datentypen
Der Datentyp des Tags entscheidet über den nativen S7-Typ auf dem Bus. Alle dreizehn nativen Breiten von S7 stehen zur Verfügung:
| Datentyp | S7-Typ | Größe auf dem Bus |
|---|---|---|
| Boolean | BOOL | 1 Bit |
| SByte | SINT | 1 Byte |
| Byte | USINT | 1 Byte |
| Int16 | INT | 2 Bytes |
| UInt16 | UINT | 2 Bytes |
| Int32 | DINT | 4 Bytes |
| UInt32 | UDINT | 4 Bytes |
| Int64 | LINT | 8 Bytes |
| UInt64 | ULINT | 8 Bytes |
| Float | REAL | 4 Bytes |
| Double | LREAL | 8 Bytes |
| String | STRING | maximale Länge + 2 Bytes |
| DateTime | DTL | 12 Bytes |
Werte aus mehreren Bytes verwenden automatisch die native Byte-Reihenfolge von S7 (Big-Endian); eine Wahl der Byte-Reihenfolge gibt es nicht, weil keine nötig ist.
Ein Tag vom Typ String liest die übliche Anordnung eines S7-STRING: ein Byte mit dem erklärten Maximum, ein Byte mit der aktuellen Länge, dann ASCII-Zeichen. Maximale Länge muss zur Erklärung des STRING im Baustein passen (leer bedeutet das S7-Maximum von 254); der Treiber überträgt je Lesevorgang die maximale Länge + 2 Bytes. Ein Tag vom Typ DateTime bildet auf die Struktur DTL der Familie S7-1200/1500 ab (Jahr bis Nanosekunden); das ältere, 8 Bytes große DATE_AND_TIME wird nicht angeboten.
Schreiben
Tags, deren Zugriff Lesen und schreiben oder Nur schreiben ist, lassen sich schreiben. Schreibvorgänge adressieren denselben Bereich, dasselbe Byte und dasselbe Bit wie Lesevorgänge: Ein Schreibvorgang auf Boolean setzt sein einzelnes Bit, alles andere schreibt genau die Bytes des Typs. Ein neuer Tag beginnt als Nur lesen.
Gerätesuche
S7comm kennt keine Suche über Rundruf, der Connector zeigt für diesen Treiber also keine Schaltfläche Suchen. Legen Sie das Gerät und seine Tags von Hand an.
Gut zu wissen
- Auf CPUs der Reihen S7-1200 und S7-1500 verlangt die absolute Adressierung von S7comm zwei Einstellungen im Siemens-Projekt: Zugriff über PUT/GET-Kommunikation erlauben an der CPU und optimierten Bausteinzugriff ausgeschaltet an jedem Datenbaustein, den Sie adressieren. Ein optimierter DB hat keine Byte-Versätze zum Adressieren.
- Die Bereiche Timer und Counter werden über die Nummer adressiert, nicht über einen Byte-Versatz: Das Feld fragt nach dem Zeitglied oder dem Zähler selbst (T0, T1, T2 sowie C0, C1, C2). Jeder Wert ist ein 16-Bit-Wort, paaren Sie ihn also mit Int16; ein breiterer oder schmalerer Datentyp wird abgelehnt, mit dem Tag benannt im Journal, und die übrigen Tags des Geräts lesen weiter.
- Eine nicht erreichbare Steuerung kostet beim Start nichts: Das Gerät versucht es im Hintergrund weiter, und seine Tags lesen schlechte Qualität, bis die Verbindung steht.
- Ein Kabel, das gezogen wird, nachdem das Gerät online ist, fällt beim nächsten Lesevorgang auf: Das Gerät geht offline, seine Tags werden von schlechter Qualität, und es verbindet sich von selbst wieder, sobald das Netz zurück ist. Eine Adresse, die die CPU ablehnt, tut das nicht, ein einziger vertippter Tag reißt also nie den Rest des Geräts mit.