Key-Frames und Delta-Frames

In TwinCAT 3 OPC UA Pub/Sub können Datensätze entweder als Key-Frames oder als Delta-Frames übertragen werden. Diese Mechanismen dienen der Optimierung der Netzwerkbandbreite und der effizienten Übertragung von Prozessdaten.

Key-Frames

Ein Key-Frame enthält immer den vollständigen Datensatz aller konfigurierten Felder einer DataSetMessage. Der Empfänger kann mit einem Key-Frame den vollständigen Zustand aller übertragenen Variablen rekonstruieren.

Eigenschaften von Key-Frames:

Key-Frames bilden somit die Referenzbasis für nachfolgende Delta-Frames.

Delta-Frames

Ein Delta-Frame enthält nur die Werte der Felder, deren Inhalt sich seit dem letzten gesendeten Frame geändert hat. Dadurch wird die Größe der übertragenen Nachrichten reduziert, insbesondere wenn sich nur wenige Variablen innerhalb eines DataSets ändern.

Eigenschaften von Delta-Frames:

Ein Subscriber muss daher zunächst einen Key-Frame empfangen, bevor Delta-Frames korrekt angewendet werden können.

Zusammenspiel von Key-Frames und Delta-Frames

Bei aktivierter Delta-Frame-Funktionalität sendet der Publisher typischerweise eine Sequenz aus Delta-Frames, die regelmäßig durch einen Key-Frame unterbrochen wird.

Dies gewährleistet, dass:

Die Häufigkeit der Key-Frames wird über den Parameter „KeyFrameCount“ bestimmt.

Im Falle von UADP gibt es eine Besonderheit im Zusammenspiel von Key-Frames und Delta-Frames: Wenn sich alle Felder eines Datensatzes ändern, dann muss ein Key-Frame versendet werden. Auch wenn der Delta-Frame größer sein sollte als der Key-Frame (bedingt durch die Kodierung möglich), dann muss ein Key-Frame gesendet werden.

Parameter: KeyFrameCount

Der Parameter KeyFrameCount definiert, nach wie vielen gesendeten Nachrichten erneut ein Key-Frame übertragen wird.

Beispiel:

KeyFrameCount = 3

In diesem Fall wird:

  1. ein Key-Frame gesendet.
  2. anschließend bis zu zwei Delta-Frames.
  3. danach wieder ein Key-Frame.

Die Sequenz sieht somit beispielsweise wie folgt aus:

Key, Delta, Delta, Key, Delta, ...

Durch kleinere Werte für „KeyFrameCount“ wird häufiger ein vollständiger Datensatz übertragen, was die Robustheit erhöht, aber auch die Netzwerklast steigert.

Parameter: KeepAliveInterval

Der Parameter KeepAliveInterval stellt sicher, dass auch dann Nachrichten übertragen werden, wenn sich keine Werte im DataSet geändert haben.

Dies ist insbesondere relevant bei der Nutzung von Delta-Frames, da ohne Änderungen sonst keine Nachrichten gesendet würden.

Wenn das KeepAlive-Intervall erreicht wird, sendet der Publisher eine Nachricht, selbst wenn keine Feldänderungen vorliegen. Diese Nachricht dient dazu:

Abhängig von der Implementierung kann diese Nachricht als Key-Frame oder als Frame ohne Feldänderungen übertragen werden.

Zusammenfassung

Die Kombination aus Key-Frames, Delta-Frames, KeyFrameCount und KeepAliveInterval ermöglicht eine effiziente und robuste Datenübertragung:

Durch eine geeignete Parametrierung kann so ein optimaler Kompromiss zwischen Bandbreitenverbrauch und Systemrobustheit erreicht werden.

Das folgende Schaubild verdeutlicht diese Zusammenhänge noch einmal.

Key-Frames und Delta-Frames 1: