# SET_STRUCT_VALUE ```{index} single: SET_STRUCT_VALUE ``` image * * * * * * * * * * ## Einleitung Der Funktionsblock `SET_STRUCT_VALUE` ist ein Service-Schnittstellen-Funktionsblock, der dazu dient, einen bestimmten Wert innerhalb einer Datenstruktur zu setzen. Er ermöglicht die dynamische Manipulation von Strukturelementen, indem er einen neuen Wert für ein benanntes Mitglied der Struktur zuweist. ![SET_STRUCT_VALUE](SET_STRUCT_VALUE.svg) ## Schnittstellenstruktur Der Funktionsblock verfügt über Ereignis- und Datenschnittstellen, um seine Funktionalität zu ermöglichen. ### **Ereignis-Eingänge** * **REQ**: Dieses Ereignis fordert den Funktionsblock auf, den Wert in der angegebenen Struktur zu setzen. Es ist mit den Datenvariablen `member`, `in_struct` und `element_value` assoziiert. ### **Ereignis-Ausgänge** * **CNF**: Dieses Ereignis wird ausgelöst, wenn die `REQ`-Anforderung abgeschlossen wurde. Es ist mit der Datenvariable `out_struct` assoziiert. ### **Daten-Eingänge** * **in_struct** (Typ: ANY): Die Eingabestruktur, in der ein Wert geändert werden soll. Der Typ `ANY` ermöglicht die Verarbeitung beliebiger Strukturtypen. * **member** (Typ: STRING): Der Name des Strukturmitglieds, dessen Wert gesetzt werden soll. Innere Mitglieder können über den Punktoperator (`.`) angesprochen werden (z.B. "config.port"). * **element_value** (Typ: ANY): Der neue Wert, der dem angegebenen Strukturmitglied zugewiesen werden soll. ### **Daten-Ausgänge** * **out_struct** (Typ: ANY): Die modifizierte Struktur nach dem Setzen des Elements. Der Kommentar im XML besagt "TRUE if no errors ocurred, FALSE otherwise", was ein Überbleibsel eines `STATUS`-Ausgangs ist, aber hier bezieht es sich auf die ausgegebene, geänderte Struktur. ### **Adapter** Keine Adapter vorhanden. ## Funktionsweise Nach Empfang eines `REQ`-Ereignisses greift der Funktionsblock auf die über `in_struct` bereitgestellte Datenstruktur zu. Basierend auf dem als `member` übergebenen String wird das entsprechende Element innerhalb der Struktur identifiziert. Der Funktionsblock weist dann den über `element_value` bereitgestellten Wert diesem Element zu. Anschließend gibt der Funktionsblock die modifizierte Struktur über `out_struct` aus und signalisiert den Abschluss des Vorgangs durch das `CNF`-Ereignis. ## Technische Besonderheiten * **Generische Typen (ANY)**: Durch die Verwendung des Datentyps `ANY` für `in_struct`, `element_value` und `out_struct` bietet dieser Funktionsblock hohe Flexibilität. Er kann mit beliebigen benutzerdefinierten oder vordefinierten Strukturtypen und Werten arbeiten, ohne dass spezifische Typen zur Kompilierzeit bekannt sein müssen. * **Zugriff auf verschachtelte Mitglieder**: Die `member`-Variable unterstützt den Zugriff auf tiefere Ebenen einer verschachtelten Struktur mithilfe der Punktnotation (z.B. "outer.inner.value"). Dies vereinfacht die Handhabung komplexer Datenmodelle. ## Zustandsübersicht Der Funktionsblock operiert hauptsächlich in einem anforderungsbasierten (`REQ`) und bestätigungsbasierten (`CNF`) Schema. Er verarbeitet eine Anforderung, ändert die Daten und signalisiert den Abschluss. Es gibt keine komplexen internen Zustände, die über diesen einfachen Request/Confirm-Zyklus hinausgehen. ## Anwendungsszenarien * **Konfigurationsmanagement zur Laufzeit**: Dynamisches Ändern von Konfigurationsparametern, die in Strukturen gespeichert sind, ohne den Funktionsblock neu kompilieren zu müssen. * **Datenmanipulation in SCADA/HMI-Systemen**: Aktualisieren spezifischer Werte in komplexen Datenobjekten, die von übergeordneten Systemen empfangen oder an diese gesendet werden. * **Schnittstellen zu externen Systemen**: Anpassen von Datenstrukturen, die für die Kommunikation mit externen APIs oder Datenbanken verwendet werden. * **Prozesssteuerung**: Modifizieren von Prozessparametern, die in Strukturen organisiert sind, basierend auf dynamischen Bedingungen oder Benutzereingaben. ## ⚖️ Vergleich mit ähnlichen Bausteinen Im Vergleich zu Bausteinen, die fest verdrahtete Strukturen oder nur das Auslesen von Werten unterstützen, bietet `SET_STRUCT_VALUE` eine einzigartige Flexibilität durch: * **Schreibzugriff**: Ermöglicht das Setzen von Werten, nicht nur das Lesen. * **Generischer Zugriff**: Arbeitet mit beliebigen `ANY`-Typen, was ihn universeller macht als Bausteine, die an spezifische Strukturtypen gebunden sind. * **Dynamische Member-Auswahl**: Der Member-Name wird zur Laufzeit als String übergeben, was eine dynamischere Feldselektion als bei fest definierten Ein-/Ausgängen erlaubt. Er ergänzt oft Bausteine, die Werte aus Strukturen auslesen (`GET_STRUCT_VALUE`), um eine vollständige Lese-/Schreibfunktionalität für generische Strukturen zu bieten. ## Metadaten | Attribut | Wert | | :--- | :--- | | Copyright | (c) 2023 Primetals Technologies Austria GmbH | | Lizenz | EPL-2.0 | | Version | 3.0 (2025-04-14, Patrick Aigner), 1.0 (2023-03-06, Alois Zoitl) | | 4diac-Paket | eclipse4diac::convert | ## Fazit Der `SET_STRUCT_VALUE`-Funktionsblock ist ein mächtiges Werkzeug für die dynamische Manipulation von Datenstrukturen innerhalb einer 4diac-Anwendung. Seine generische Natur und die Unterstützung für den Zugriff auf verschachtelte Mitglieder machen ihn äußerst vielseitig für Anwendungen, die eine flexible Konfiguration oder Datenverarbeitung zur Laufzeit erfordern.