STRUCT_DEMUX
Einleitung
Der Funktionsblock (FB) STRUCT_DEMUX ist ein generischer Demultiplexer für strukturierte Datentypen. Seine Hauptaufgabe ist es, eine am Eingang anliegende Datenstruktur in ihre einzelnen Bestandteile (Member) aufzuspalten. Diese einzelnen Member werden dann über separate Daten-Ausgänge zur Verfügung gestellt, die dynamisch erzeugt werden.
Schnittstellenstruktur
Die Schnittstelle des STRUCT_DEMUX-Funktionsblocks ist generisch definiert. Die tatsächlichen Daten-Ausgänge werden erst bei der Instanziierung des Blocks festgelegt.
Ereignis-Eingänge
REQ: Löst die Ausführung des Bausteins aus und bewirkt das Auslesen der Eingangsstruktur.
Mit Datenvariable:
IN
Ereignis-Ausgänge
CNF: Bestätigt den Abschluss der Operation, nachdem die Werte der Struktur an die Ausgänge weitergeleitet wurden.
Mit Datenvariablen: Alle dynamisch erzeugten Daten-Ausgänge.
Daten-Eingänge
IN (Typ:
ANY_STRUCT): Die Eingangs-Datenstruktur, die aufgeteilt werden soll.
Daten-Ausgänge
Die Daten-Ausgänge dieses Funktionsblocks sind nicht fest vordefiniert. Stattdessen werden sie dynamisch basierend auf dem Datentyp erstellt, der mit dem IN-Eingang verbunden ist. Für jeden Member der Eingangsstruktur wird ein entsprechender Daten-Ausgang mit demselben Namen und Datentyp am Baustein erzeugt.
Beispiel:
Wenn eine Struktur vom Typ MyStruct mit den Membern a (Typ INT) and b (Typ BOOL) an den IN-Eingang angeschlossen wird, erzeugt der STRUCT_DEMUX-Baustein automatisch zwei Daten-Ausgänge:
a(TypINT)b(TypBOOL)
Das Bild oben illustriert genau diesen Fall.
Funktionsweise
Sobald ein REQ-Ereignis am Eingang des STRUCT_DEMUX-Funktionsblocks empfangen wird, liest der Baustein die am IN-Eingang anliegende Datenstruktur aus. Er extrahiert die Werte jedes einzelnen Members der Struktur und leitet sie an die entsprechenden, dynamisch erzeugten Daten-Ausgänge weiter. Nachdem alle Ausgangswerte aktualisiert wurden, wird das CNF-Ereignis ausgelöst, um den Abschluss des Vorgangs zu signalisieren.
Technische Besonderheiten
Generischer Baustein: Dank des Attributs
GEN_STRUCT_DEMUXist der Baustein in der Lage, sich an jeden beliebigen strukturierten Datentyp (ANY_STRUCT) anzupassen.Dynamische Schnittstelle: Die Fähigkeit, seine Ausgänge basierend auf dem Eingangs-Datentyp zu generieren, macht ihn extrem flexibel und wiederverwendbar.
Service Interface Function Block Type: Der Baustein ist als standardisierte Schnittstelle für diesen Dienst konzipiert.
Zustandsübersicht
Der STRUCT_DEMUX ist ein zustandsloser Baustein, der nach einem einfachen Anforderungs-Bestätigungs-Zyklus arbeitet:
Bereit: Wartet auf ein
REQ-Ereignis.Ausführend: Liest die Eingangsstruktur, extrahiert die Member-Werte und setzt die entsprechenden Ausgänge.
Abgeschlossen: Löst das
CNF-Ereignis aus und kehrt in den Bereitschaftszustand zurück.
Anwendungsszenarien
Aufspaltung komplexer Daten: Zerlegen von komplexen Datenstrukturen (z.B. Sensordaten, Statusinformationen) in einzelne Signale für die weitere Verarbeitung.
Verbesserung der Lesbarkeit: Anstatt auf Strukturmember über
GET_STRUCT_VALUEzuzugreifen, können die Member direkt als separate Datenleitungen in der Logik verwendet werden.Schnittstellenanpassung: Anpassen von Daten, die als eine einzelne Struktur von einem Baustein kommen, an mehrere Bausteine, die einzelne Eingänge erwarten.
⚖️ Vergleich mit ähnlichen Bausteinen
GET_STRUCT_VALUE: WährendGET_STRUCT_VALUEeinen einzelnen Member dynamisch über einenSTRING-Namen extrahiert, legtSTRUCT_DEMUXalle Member statisch als separate Ausgänge frei.STRUCT_DEMUXist oft einfacher zu verwenden, wenn alle Member benötigt werden, währendGET_STRUCT_VALUEflexibler ist, wenn nur bestimmte Member zur Laufzeit adressiert werden müssen.STRUCT_MUX: Der komplementäre Baustein, der einzelne Daten-Eingänge zu einer einzigen Datenstruktur zusammenfügt.
Metadaten
| Attribut | Wert |
| :— | :— |
| Copyright | (c) 2020 Johannes Kepler University Linz |
| Lizenz | EPL-2.0 |
| Version | 3.0 (2025-04-14, Patrick Aigner) |
| 4diac-Paket | eclipse4diac::convert |
🛠️ Zugehörige Übungen
Fazit
STRUCT_DEMUX ist ein fundamentaler und äußerst nützlicher Baustein für die Arbeit mit Datenstrukturen in 4diac. Seine Fähigkeit, jede beliebige Struktur automatisch in ihre Bestandteile zu zerlegen, vereinfacht die Anwendungslogik erheblich und fördert eine klare, lesbare Verdrahtung. Er ist das Standardwerkzeug, um auf die Inhalte von Strukturen zuzugreifen.