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.

Beispiel für eine Datenstruktur mit 0 impliziten und 5 expliziten Einträgen.

Beispiel für eine Datenstruktur mit 10 impliziten und 10 expliziten Einträgen

Interner Datenpunkt für Buffer-Adressen