STRUCT_DEMUX

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.

STRUCT_DEMUX

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 (Typ INT)

  • b (Typ BOOL)

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_DEMUX ist 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:

  1. Bereit: Wartet auf ein REQ-Ereignis.

  2. Ausführend: Liest die Eingangsstruktur, extrahiert die Member-Werte und setzt die entsprechenden Ausgänge.

  3. 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_VALUE zuzugreifen, 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ährend GET_STRUCT_VALUE einen einzelnen Member dynamisch über einen STRING-Namen extrahiert, legt STRUCT_DEMUX alle Member statisch als separate Ausgänge frei. STRUCT_DEMUX ist oft einfacher zu verwenden, wenn alle Member benötigt werden, während GET_STRUCT_VALUE flexibler 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.