ZMQ SUB Source

Empfängt einen Stream oder einzelne Nachrichten von einem ZeroMQ-Publisher — das Gegenstück zu ZMQ PUB Sink.

1. Beschreibung des Blocks

Der ZMQ SUB Source-Block verbindet sich als Subscriber mit einem ZeroMQ-PUB-Endpoint und speist dessen Daten in den Flowgraph ein — entweder als kontinuierlicher Stream (ZMQ SUB Source) oder als einzelne Nachrichten über einen Message-Port (ZMQ SUB Message Source). Anders als bei ZMQ PULL Source können sich beliebig viele SUB-Sources gleichzeitig mit demselben Publisher verbinden und erhalten alle dieselben Daten.

ZMQ SUB Source

ZMQ SUB Message Source

2. Technischer Einsatz

Immer dann, wenn Daten von einem ZMQ PUB Sink empfangen werden sollen — sei es aus einer anderen GNU-Radio-Instanz oder einem völlig eigenständigen Programm. Die Stream-Variante eignet sich für rohe Abtastwerte (z. B. IQ-Samples), die Message-Variante für strukturierte Einzelereignisse wie im DCF77-Projekt, wo eine externe Qt-Anzeige die dekodierte Uhrzeit per SUB-Socket empfängt (dort allerdings direkt in Python mit pyzmq implementiert statt als GRC-Block — siehe ZeroMQ-Schnittstelle).

3. Parameter und Dimensionierung

Parameter Typ/Einheit Bedeutung Dimensionierungshinweis
Address String ZeroMQ-Endpoint des Publishers, z. B. tcp://127.0.0.1:5555 muss exakt der Adresse entsprechen, auf der der PUB-Sink bindet
Timeout (msec) Millisekunden wie lange auf eingehende Daten gewartet wird, bevor der Block einen leeren Zyklus abschließt Standard 100 ms; beeinflusst primär die Reaktionszeit beim Beenden des Flowgraphs
Connection Enum (Bind/Connect) ob der Block sich verbindet (Connect) oder selbst einen Port öffnet (Bind) SUB-Blöcke verbinden sich per Default — der Publisher ist die feste, bekannte Adresse
Pass Tags (nur Stream-Variante) Bool ob übertragene Stream-Tags ausgewertet und in den lokalen Flowgraph übernommen werden „Yes" nur, wenn die Gegenseite ebenfalls GNU Radio ist und Tags sendet
Filter Key (nur Stream-Variante) String Topic-Präfix, auf den gefiltert wird leer = alle Nachrichten unabhängig vom Topic empfangen

4. Ein- und Ausgänge

Ein-/Ausgang Typ
Ausgang (ZMQ SUB Source) beliebiger Stream-Typ (Complex, Float, Int, Short, Byte)
Ausgang (ZMQ SUB Message Source) Message-Port (PMT)
Eingang keiner (Quelle)

5. Weitere wichtige Aspekte

Verpasste Nachrichten werden nicht nachgeliefert: Verbindet sich der Subscriber erst, nachdem der Publisher bereits gesendet hat, ist diese Nachricht endgültig verloren — ZeroMQ puffert bei PUB/SUB nicht rückwirkend.

PMT-Deserialisierung bei der Message-Variante: Empfangene Nachrichten liegen in PMTs eigenem Binärformat vor, nicht als reiner Text. Ein externer, nicht-GNU-Radio-Client muss dieses Format selbst dekodieren (z. B. mit pmt.deserialize_str(...)) — Details siehe ZeroMQ-Schnittstelle (Abschnitt „Stolperstein: PMT-Serialisierung").