# SUBSCRIBE_2 ```{index} single: SUBSCRIBE_2 ``` image * * * * * * * * * * ## Einleitung Der SUBSCRIBE_2-Funktionsblock dient als Abonnent für einen PUBLISH_2-Block und ermöglicht den Empfang von Daten über ein Publish-Subscribe-Kommunikationsmuster. Der Block kann zwei verschiedene Datenwerte von einem Publisher empfangen und weiterverarbeiten. ![SUBSCRIBE_2](SUBSCRIBE_2.svg) ## Schnittstellenstruktur ### **Ereignis-Eingänge** - **INIT**: Initialisierungsereignis mit den zugehörigen Daten QI und ID - **RSP**: Response-Ereignis mit zugehörigem Datenwert QI ### **Ereignis-Ausgänge** - **INITO**: Initialisierungsbestätigung mit den Daten QO und STATUS - **IND**: Indikationsereignis bei neuen verfügbaren Daten mit QO, STATUS, RD_1 und RD_2 ### **Daten-Eingänge** - **QI** (BOOL): Qualifier Input - Steuert die Aktivierung des Blocks - **ID** (WSTRING): Identifikationsstring zur Zuordnung zum entsprechenden Publisher ### **Daten-Ausgänge** - **QO** (BOOL): Qualifier Output - Status der Blockoperation - **STATUS** (WSTRING): Statusinformationen als Unicode-String - **RD_1** (ANY): Empfangene Daten 1 (beliebiger Datentyp) - **RD_2** (ANY): Empfangene Daten 2 (beliebiger Datentyp) ### **Adapter** Keine Adapter-Schnittstellen vorhanden. ## Funktionsweise Der SUBSCRIBE_2-Block initialisiert sich über das INIT-Ereignis und abonniert dabei einen spezifischen Publisher mittels des ID-Identifikators. Nach erfolgreicher Initialisierung bestätigt der Block dies über INITO. Bei eingehenden Daten vom Publisher löst der Block das IND-Ereignis aus und stellt die empfangenen Daten über RD_1 und RD_2 zur Verfügung. ## Technische Besonderheiten - Unterstützt den Empfang von zwei verschiedenen Datenwerten gleichzeitig - Verwendet WSTRING für Status- und Identifikationsinformationen - Implementiert generische Datentypen (ANY) für maximale Flexibilität - Basiert auf dem GEN_SUBSCRIBE-Generic-Template ## Zustandsübersicht Der Block durchläuft folgende Hauptzustände: 1. **Nicht initialisiert**: Block wartet auf INIT-Ereignis 2. **Initialisiert**: Block ist bereit zum Empfang von Daten 3. **Datenempfang**: Verarbeitung eingehender Daten und Auslösen von IND ## Anwendungsszenarien - Verteilte Steuerungssysteme mit Datenverteilung - IoT-Anwendungen mit Publisher-Subscriber-Architektur - Industrielle Automatisierung mit dezentraler Datenkommunikation - Systeme mit flexiblen Datentypanforderungen ## ⚖️ Vergleich mit ähnlichen Bausteinen Im Vergleich zu einfacheren SUBSCRIBE-Blöcken bietet SUBSCRIBE_2 die Möglichkeit, zwei verschiedene Datenwerte parallel zu empfangen. Die Verwendung von ANY-Datentypen ermöglicht eine höhere Flexibilität gegenüber typspezifischen Implementationen. ## Fazit Der SUBSCRIBE_2-Block stellt eine erweiterte Lösung für Publish-Subscribe-Kommunikation in 4diac-Systemen dar, die durch die Unterstützung zweier Datenkanäle und generischer Datentypen besonders flexibel einsetzbar ist.