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:
- Enthalten immer alle Felder des DataSets.
- Ermöglichen eine Synchronisation des vollständigen Zustands.
- Werden regelmäßig gesendet, um sicherzustellen, dass ein Subscriber auch nach Paketverlust wieder einen konsistenten Zustand erhält.
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:
- Übertragen nur geänderte Felder.
- Reduzieren die Netzwerklast und Bandbreitennutzung.
- Können nur interpretiert werden, wenn zuvor ein gültiger Key-Frame empfangen wurde.
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:
- verlorene Pakete kompensiert werden können.
- ein Subscriber jederzeit wieder synchronisiert werden kann.
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 = 3In diesem Fall wird:
- ein Key-Frame gesendet.
- anschließend bis zu zwei Delta-Frames.
- 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:
- die Verbindung aktiv zu halten.
- dem Subscriber zu signalisieren, dass der Publisher weiterhin aktiv ist.
- Zeitüberschreitungen oder Watchdog-Mechanismen zu vermeiden.
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:
- Key-Frames übertragen den vollständigen Zustand.
- Delta-Frames übertragen nur Änderungen.
- KeyFrameCount definiert die maximale Anzahl von Delta-Frames zwischen zwei vollständigen Zustandsübertragungen.
- KeepAliveInterval stellt sicher, dass auch bei unveränderten Daten regelmäßig Nachrichten gesendet werden.
Durch eine geeignete Parametrierung kann so ein optimaler Kompromiss zwischen Bandbreitenverbrauch und Systemrobustheit erreicht werden.
Das folgende Schaubild verdeutlicht diese Zusammenhänge noch einmal.
