Time Stamp Push Protocol (TSPP) Version 2
Für die Version 2 des Time Stamp Push Protocols wurde die Datenstruktur innerhalb der SPS überarbeitet und optimiert, was zu Leistungsverbesserungen und weniger komplexen Datenstrukturen für TSPP führt.
TSPP Version 2 kann durch Setzen des Config-Eintrags ../../cfg_doku/all_config_entries.html#s7plus__TsppVersion aktiviert werden:
[s7plus]
TsppVersion = 2
Standardmäßig ist nur Version 1 aktiv, um die Abwärtskompatibilität mit bestehenden SPS-Konfigurationen zu gewährleisten. Ein Wechsel zu Version 2 erfordert eine Überarbeitung der SPS-Daten zur unten beschriebenen Struktur.
TSPP-Datenstruktur
Die gesamte TSPP-Puffer-Datenstruktur muss ein Array von unsignierten 64-Bit-Integern enthalten, gefolgt von einem EOT-Byte (End-of-Transaction) und einer Konsistenz-Längen-Unsigned-Long-Integer, siehe Beispiel unten.

Struktur von 'ConsistencyLength'
Das Tag ConsistencyLength
wird vom Treiber abonniert. Wenn sich
etwas an diesem Tag ändert, sendet die SPS das gesamte Tag an den Treiber, der das
Array gemäß dem 'Length'-Teil liest.
Beispiel: 0x010203040000000A
- 4 High-Bytes: 0x01020304 ist ein zufälliger (möglicherweise immer um 1 erhöhter) Wert, den der Treiber erneut überprüft, wenn Array-Daten empfangen werden.
- 4 Low-Bytes: 0x0000000A ist die rohe Anzahl der zu lesenden Array-Einträge - diese Zahl wird vom Treiber verwendet, um zu wissen, wie viele Einträge des Arrays gelesen werden müssen.
Die Konsistenz-Bytes können 0x00000000 sein. Wenn die Länge 0x00000000 ist, wird nichts gelesen.
EOT (End-Of-Transaction) Byte
Der Wert, der in EOT geschrieben wird, enthält die aktive Sitzungsnummer in den Bits 0 und 1 sowie einen Indikator für das redundante System in Bit 2.
TSPP-Puffer-Array-Struktur
Es gibt zwei Arten von Elementen, die in Gruppen gesendet werden können. Implizite Elemente werden durch einen einzigen Zeitstempel definiert, der auf alle Elemente in der Gruppe angewendet wird. Explizite Elemente haben alle explizit zugewiesene Zeitstempel.
Konsistenz
Der erste Eintrag im Array ist das Konsistenz-Flag, das denselben Wert wie die Konsistenz-Bytes in der 'ConsistencyLength' haben muss. (siehe Struktur von 'ConsistencyLength')
Gruppen
Die Daten werden in Gruppen gesendet. Jede Gruppe wird entweder als implizite oder explizite Gruppe definiert und enthält eine bestimmte Anzahl von Elementen. Der erste Eintrag einer Gruppe besteht immer aus dem Typ der Gruppe (implizit oder explizit) und der Anzahl der enthaltenen Elemente.
Der erste Eintrag in einer Gruppe ist wie folgt strukturiert:
- 4 High-Bytes: entweder 1, um eine implizite Gruppe anzuzeigen, oder 2, um eine explizite Gruppe anzuzeigen
- 4 Low-Bytes: Anzahl der Elemente in der Gruppe.
-
Anmerkung:In einer expliziten Gruppe besteht ein Element aus der ID, dem Wert und einem separaten Zeitstempel.
Implizite Gruppe
Implizite Gruppen bestehen aus einem einzigen Zeitstempel, der auf alle darin enthaltenen Elemente angewendet wird. Der erste Eintrag einer impliziten Gruppe beginnt mit der Zahl 1 in den 4 High-Bytes und der Anzahl der Elemente in den 4 Low-Bytes.
Beispiel: 0x 0000 0001 0000 0003
- Die 4 High-Bytes
0x 0000 0001
zeigen an, dass die Gruppe implizite Elemente enthält. - Die 4 Low-Bytes
0x 0000 0003
zeigen an, dass die Gruppe aus 3 Elementen besteht.
Der zweite Eintrag ist der Zeitstempel, der auf alle Elemente der Gruppe angewendet wird. Die folgenden Einträge enthalten Informationen über die Werte mit den zugehörigen IDs.
Explizite Gruppe
Explizite Gruppen bestehen aus Elementen mit individuellen Zeitstempeln für jedes Element. Der erste Eintrag einer expliziten Gruppe beginnt mit der Zahl 2 in den 4 High-Bytes und der Anzahl der Elemente in den 4 Low-Bytes.
Beispiel: 0x 0000 0002 0000 0003
- Die 4 High-Bytes
0x 0000 0002
zeigen an, dass die Gruppe explizite Elemente enthält. - Die 4 Low-Bytes
0x 0000 0003
zeigen an, dass die Gruppe aus 3 Elementen besteht.
Die folgenden Einträge enthalten Informationen über die Werte mit den zugehörigen IDs, gefolgt von einem separaten Zeitstempel für jeden ID-Wert-Eintrag.
ID-Wert-Eintrag
Wenn ein Array-Eintrag aus einer ID und einem Wert besteht, definieren die 4 High-Bytes des unsignierten 64-Bit-Integers die ID und die 4 Low-Bytes den Wert.
Beispiel:Buffer[3] = 4997966434
4997966434 in Binärform als unsignierter 64-Bit-Integer sieht so aus:
00000000 00000000 00000000 00000001 00101001 11100110 11101010 01100010
Um die ID zu erhalten, sollten nur die 4 High-Bytes betrachtet werden:
00000000 00000000 00000000 00000001 --> ID = 1
Um den Wert zu erhalten, sollten nur die 4 Low-Bytes betrachtet werden:
00101001 11100110 11101010 01100010 --> Wert = 702999138
Also enthält Buffer[3]
ID = 1
mit dem entsprechenden Wert = 702999138
.
Daher werden die ID und der Wert in unsignierten 32-Bit-Integers gespeichert.

