Das Framework unterstützt die Adressierung von Eingängen (engl. Input), Peripherieeingängen (engl. Periphery Input), Ausgängen (engl. Output), Peripherieausgängen (engl. Periphery Output), Merkern (engl. Flag), Datenbausteinen (engl. Data Block), Zählern (engl. Counter) und Zeitgebern (engl. Timer). Auf welchen der eben genannten Komponenten zugegriffen werden soll wird über den Operandenanteil (engl. Operand) der SPS Datenadresse (kurz SPS Adresse) beschrieben. Die folgende Tabelle beschreibt die dafür gültigen Kürzel die als Operand bezeichnet werden:
Name | Abkürzung (Siemens, DE) | Abkürzung (IEC) |
---|---|---|
Eingang | E | I |
Peripherieeingang | PE | PI |
Ausgang | A | Q |
Peripherieausgang | PA | PQ |
Merker | M | M |
Datenbaustein | DB | DB |
Zähler | Z | C |
Zeitgeber | T | T |
Auf den Operanden folgt, im Falle eines Datenbausteins, die Nummer des Datenbausteins. Darauf folgt ein Punkt und wiederholt das Kürzel für den Operanden für Datenbausteine.
Die Backus-Naur-Form eines Operanden ist dabei wie folgt festgelegt:
<Datenbaustein-Nummer> ::= 0-65535
<Siemens-Operand> ::= E | PE | A | PA | M | DB<Datenbaustein-Nummer>.DB | Z | T
<IEC-Operand> ::= I | PI | Q | PQ | M | DB<Datenbaustein-Nummer>.DB | C | T
Der eigentliche Adressierungsteil der SPS Adresse (engl. PLC Address) kommt nach dem Operanden und unterteilt sich in den Datentypbezeichner (im Rohdatenformat) und dem Offset für das zu adressierende Byte sowie gegebenfalls das zu adressierende Bit (getrennt durch einen Punkt). Die dabei unterstützten Datentypbezeichner und ihre gültigen Kürzel (für den Rohdatentypen) beschreibt die folgende Tabelle:
Datentyp | Kürzel | Bits | Wertebereich | Beschreibung | Array |
---|---|---|---|---|---|
BOOL | X | 1 | 0 bis 1 | ein einzelnes Bit zur Darstellung von wahr (1) oder falsch (0) | ja |
BYTE | B | 8 | 0 bis 255 | Vorzeichenlose 8-Bit Ganzzahl | ja |
WORD | W | 16 | 0 bis 65.535 | Vorzeichenlose 16-Bit Ganzzahl (Word) | ja |
DWORD | D | 32 | 0 bis 232 -1 | Vorzeichenlose 32-Bit Ganzzahl (Double Word) | ja |
CHAR | B | 8 | A+00 bis A+ff | Vorzeichenloses 8-Bit Zeichen im ASCII-Code | ja |
INT | W | 16 | -32.768 bis 32.767 | Vorzeichenbehaftete 16-Bit Ganzzahl | ja |
DINT | D | 32 | -231 bis 231-1 | Vorzeichenbehaftete 32-Bit Ganzzahl | ja |
REAL | D | 32 | +-1.5e-45 bis +-3.4e38 | 32-Bit Gleitkommazahl mit einfacher Genauigkeit (gemäß IEEE754) | ja |
S5TIME | W | 16 | 00.00:00:00.100 bis 00.02:46:30.000 | binär codierte Dezimalzahl (BCD), die eine Zeitspanne repräsentiert | |
TIME | D | 32 | 00.00:00:00.000 bis 24.20:31:23.647 | Vorzeichenbehaftete 16-Bit Ganzzahl, die eine Zeitspanne in Millisekunden repräsentiert | |
TIME_OF_DAY | D | 32 | 00.00:00:00.000 bis 00.23:59:59.999 | Vorzeichenlose 16-Bit Ganzzahl, die eine Zeitspanne in Millisekunden repräsentiert | |
DATE | W | 16 | 01.01.1990 bis 31.12.2168 | Vorzeichenlose 16-Bit Ganzzahl, die ein Datum in Tagen repräsentiert | |
DATE_AND_TIME | D | 64 | 00:00:00.000 01.01.1990 bis 23:59:59.999 31.12.2089 | binär codierte Dezimalzahl (BCD), die ein Datum mit Uhrzeit repräsentiert | |
S7STRING | B | - | A+00 bis A+ff | eine im ASCII-Code codierte Zeichenkette aus maximal 254 Bytes |
Dabei stehen die Kürzel für:
Werden Operandenteil und die eben genannten Datentypbezeichner zusammengesetzt, ergibt sich die folgende Backus-Naur-Form:
<Operand mit Datentypbezeichner> ::= (<Siemens-Operand> | <IEC-Operand>) [ X ] | B | W | D
Fügt man der PLC Address die Offset-Informationen hinzu, ist die Adresse vollständig und kann wie folgt aussehen:
Beispiel | Datentyp | PLC Address (Siemens, DE) | PLC Address (IEC) |
---|---|---|---|
Erstes Bit im ersten Byte des Eingangs | BOOL | E 1.0 | I 1.0 |
Siebtes Bit im ersten Byte des Ausgangs | BOOL | A 1.7 | Q 1.7 |
Erstes Bit im zehnten Byte des Merkers | BOOL | M 10.1 | M 10.1 |
Nulltes Bit im ersten Byte im Datenbaustein mit der Nummer 1 | BOOL | DB1.DBX 1.0 | DB1.DBX 1.0 |
Erstes Bytes im Eingang | BYTE | EB 1 | IB 1 |
Zehntes Byte im Ausgang | BYTE | AB 10 | QB 10 |
Hundertes Byte im Merker | BYTE | MB 100 | MB 100 |
Nulltes Byte im Peripherieeingang | BYTE | PEB 0 | PIB 0 |
Erstes Byte im Peripherieausgang | BYTE | PAB 1 | PQB 1 |
Erstes Byte im Datenbaustein mit der Nummer 2 | BYTE | DB2.DBB 1 | DB2.DBB 1 |
Nulltes Double Word im Peripherieeingang | DWORD | PED 0 | PID 0 |
Mit der Backus-Naur-Form für den Byte und Bit Offset ergibt sich die vollständige PLC Address wie folgt:
<Byte Offset> ::= 0-65535
<Bit Offset> ::= 0-7
<PLC Address> ::= <Operand mit Datentypbezeichner> <Byte Offset> [. <Bit Offset> ]
Das passiert beim Aufruf von 'Open':
Das passiert beim Aufruf von 'Connect':
Das passiert beim Aufruf von 'Close':
Die „BreakDetection“-Abbrucherkennung bezeichnet den Mechanismus, der für die Erkennung von Verbindungsabbrüchen zuständig ist. Hierbei kommt das KeepAlive Verfahren zum Einsatz, um so einen Timeout der Verbindung zur SPS zu erkennen. Kommt es zum Timeout, so versucht das Framework automatisch wieder eine Verbindung zur SPS herzustellen. Während beim KeepAlive in regelmäßigen Abständen KeepAlive-Nachrichten zur SPS gesendet werden, um so die Verbindung „zu testen“ und „aufrecht zu erhalten“, wird bei zu langen Antwortzeiten (= Timeout erreicht?) auf eine KeepAlive-Nachricht angenommen, dass die Verbindung unterbrochen ist. Ist das der Fall, wird in immer größeren Abständen eine weitere KeepAlive-Nachricht gesendet. Bleiben auch diese unbeantwortet, wird von einer abgebrochenen Verbindung ausgegangen und der zuvor beschriebene Mechanismus zur Wiederaufnahme der Verbindung tritt in Kraft. Aktiviert wird die Abbrucherkennung, welche standardmäßig nicht aktiviert ist, über die PlcDeviceConnection.UseBreakDetection Eigenschaft.
Damit eine Verbindung zur SPS aufgebaut werden kann, müssen die richtigen Parameter festgelegt werden. Generell wird die IP Adresse der SPS (IPDeviceEndPoint.Adress Eigenschaft) benötigt, unter der sie zu erreichen ist. Die dabei vom SiemensDevice erwartete Endpunkt-Instanz (engl. Endpoint) liefert der Verbindung alle primär nötigen Informationen über die SPS. Anstelle der statischen IP Adresse kann auch der DNS Name der SPS verwendet werden, so könnte anstelle von „192.168.0.80“ auch „plc_man_drill_001“ verwendet werden. Zusätzlich zur IP Adresse der SPS benötigt der Endpunkt die Nummer des Racks (die Position der Montageschiene) und die Nummer des Slots der CPU. Werden keine Rack beziehungsweise Slot Nummer beim Endpunkt konfiguriert, versucht das Framework automatisch die passenden Nummern festzulegen. Welche Nummer im Einzelfall manuell angegeben werden muss hängt immer vom Aufbau (engl. setup) der Anlage / des Schaltschranks ab. Die Rack Nummer (beginnend bei 0) legt die Position der Montageschiene, auf der die SPS angebracht wurde, im Aufbau fest. Die Slot Nummer (beginned bei 1) legt die Position der CPU im Setup der Module der SPS fest. Eine auf die erste Hutschiene montierte S7-300 hat somit die Rack Nummer 0. Entspricht die Anordnung der Module (auf der Montageschiene) dem Schema:
Dann gilt für diese SPS die Slot Nummer 2, weil an dieser Position die CPU positioniert wurde.