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.


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").