Time Stamp Push Protocol (TSPP) Version 2
Für das Time Stamp Push Protocol Version 2 wurde die innerhalb der SPS benötigte Datenstruktur überarbeitet und gestrafft, was zu Leistungsverbesserungen und einer weniger komplexen Datenstruktur für TSPP führt.
TSPP Version 2 kann durch Setzen des Konfigurationseintrags ../../cfg_doku/all_config_entries.html#s7plus__TsppVersion aktiviert werden:
[s7plus]
TsppVersion = 2
Standardmäßig ist nur die 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 auf die unten beschriebene Struktur.
TSPP-Datenstruktur
Die gesamte TSPP-Pufferdatenstruktur muss ein Array von vorzeichenlosen 64-Bit-Ganzzahlen enthalten, gefolgt von einem EOT-Byte (End-of-Transaction), siehe nachstehendes Beispiel.
Je nachdem, ob implizite Einträge enthalten sind oder nicht, sieht die Datenstruktur anders aus. Es ist möglich, nur implizite, nur explizite oder implizite und explizite Einträge in einer Übertragung zu senden.
Implizite Einträge werden durch einen einzigen Zeitstempel definiert, der für alle Einträge gilt.
Explizite Einträge haben alle explizit zugewiesene Zeitstempel.
Keine Impliziten Einträge
EventLog[0..n]
EventLog[0] // Amount of implicit entries = 0
EventLog[1] // ID_1 and Value_1
EventLog[2] // TimeStamp_1
EventLog[3] // ID_2 and Value_2
EventLog[4] // TimeStamp_2
…
EventLog[n-1] // ID_n and Value_n
EventLog[n] // TimeStamp_n
EOT
- Das EventLog-Array muss vom Typ unsigned 64Bit Integer sein.
- Der erste Eintrag des Arrays bestimmt, wie viele implizite Einträge folgen. In diesem speziellen Beispiel bedeutet EventLog[0] = 0, dass es keine impliziten Einträge gibt.
- Wenn EventLog[0] gleich 0 ist, kommen die folgenden Einträge immer paarweise, um ein Element zu definieren. Der erste Eintrag eines Paares besteht aus der ID und dem Wert des Eintrags. Der zweite Eintrag ist der Zeitstempel des Eintrags.
- Das Ende des Puffer-Arrays oder ein ID-Wert von 0 (siehe TSPP Item-Struktur unten) wird als Ende der Übertragung betrachtet und stoppt das Lesen der Puffer-Elemente.
- Der in EOT geschriebene Wert enthält die aktive Session ID in den Bits 0 und 1 und einen Indikator für das redundante System in Bit 2.
- Die IDs müssen nicht in der richtigen Reihenfolge sein.
Mit Impliziten Einträgen
EventLog[0..n]
EventLog[0] // Amount of Implicit Entries = m
EventLog[1] // Single timestamp for all implicit entries (TimeStamp_(1-m))
EventLog[2] // ID_1 and Value_1
EventLog[3] // ID_2 and Value_2
…
EventLog[m+1] // ID_m and Value_m
EventLog[m+2] // ID_m+1 and Value_m+1
EventLog[m+3] // TimeStamp_m+1
EventLog[m+4] // ID_m+2 and Value_m+2
EventLog[m+5] // TimeStamp_m+2
…
EventLog[n-1] // ID_n and Value_n
EventLog[n] // TimeStamp_n
EOT
- Das EventLog-Array muss vom Typ unsigned 64Bit Integer sein.
- Der erste Eintrag des Arrays bestimmt, wie viele implizite Einträge folgen. In diesem speziellen Beispiel bedeutet EventLog[0] = m, dass es m implizite Einträge gibt.
- Wenn EventLog[0] != 0 ist, enthält der folgende Eintrag EventLog[1] einen einzigen Zeitstempel, der auf alle nachfolgenden impliziten Einträge angewendet wird.
- Beginnend mit EventLog[2] bis EventLog[m+1] enthalten alle Einträge eine ID und einen Wert eines impliziten Eintrags. Der einzige implizite Zeitstempel wird auf alle diese Einträge angewendet.
- Beginnend mit EventLog[m+2] bis EventLog[n] sind alle folgenden Einträge paarweise, um ein explizites Element zu definieren. Der erste Eintrag eines Paares besteht aus der ID und dem Wert des Elements. Der zweite Eintrag ist der Zeitstempel des Eintrags.
- Das Ende des Puffer-Arrays oder ein ID-Wert von 0 (siehe TSPP Item-Struktur unten) wird als Ende der Übertragung betrachtet und stoppt das Lesen der Puffer-Elemente.
- Der in EOT geschriebene Wert enthält die aktive Session ID in den Bits 0 und 1 und einen Indikator für das redundante System in Bit 2.
- Die IDs müssen nicht in der richtigen Reihenfolge sein.
TSPP Array Struktur
Wenn ein Array-Eintrag aus einer ID und einem Wert besteht, definieren die ersten 4 Bytes der vorzeichenlosen 64-Bit-Ganzzahl die ID und die letzten 4 Bytes den Wert.
Zum Beispiel:
EventLog[2] = 4997966434
4997966434 in binärer Form als vorzeichenlose 64-Bit-Ganzzahl sieht wie folgt aus:
00000000 00000000 00000000 00000001 00101001 11100110 11101010 01100010
Um die ID zu erhalten, sollten nur die ersten 4 Bytes betrachtet werden:
00000000 00000000 00000000 00000001 --> ID = 1
Um den Wert zu erhalten, sollten nur die letzten 4 Bytes betrachtet werden:
00101001 11100110 11101010 01100010 --> Value = 702999138
EventLog[2] enthält also ID = 1 mit dem entsprechenden Wert = 702999138.
Daher werden die ID und der Wert in vorzeichenlosen 32-Bit-Ganzzahlen gespeichert.