# GET_AT_INDEX ```{index} single: GET_AT_INDEX ``` image * * * * * * * * * * ## Einleitung Dieser Funktionsblock (FB) dient dazu, einen Wert aus einem Array an einer spezifischen Indexposition abzurufen. Eine wichtige Voraussetzung für die korrekte Funktionsweise ist, dass der Datentyp des Eingabe-Arrays mit dem Datentyp des Ausgabewerts übereinstimmt. Es handelt sich um einen grundlegenden Baustein für den Zugriff auf Array-Elemente. ![GET_AT_INDEX](GET_AT_INDEX.svg) ## Schnittstellenstruktur Der `GET_AT_INDEX`-Funktionsblock verfügt über eine klar definierte Schnittstellenstruktur mit Ereignis- und Dateneingängen sowie -ausgängen. ### **Ereignis-Eingänge** * **REQ** (Typ: `Event`) * Dienstanfrage zur Ausführung des Funktionsblocks. * Ist verknüpft mit den Daten-Eingängen `IN_ARRAY` und `INDEX`, die bei der Auslösung des Ereignisses gelesen werden. ### **Ereignis-Ausgänge** * **CNF** (Typ: `Event`) * Bestätigung des angefragten Dienstes nach erfolgreicher Verarbeitung. * Ist verknüpft mit den Daten-Ausgängen `QO` und `OUT`, die nach der Verarbeitung bereitgestellt werden. ### **Daten-Eingänge** * **IN_ARRAY** (Typ: `ANY`) * Das Eingabe-Array, aus dem ein Wert abgerufen werden soll. Der Datentyp ist generisch (`ANY`), muss aber zur Ausgabe passen. * **INDEX** (Typ: `UINT`) * Der Index (Position) innerhalb des `IN_ARRAY`, von dem der Wert abgerufen werden soll. ### **Daten-Ausgänge** * **QO** (Typ: `BOOL`) * Ein Qualifizierer für den Ereignis-Ausgang, der typischerweise den Erfolg oder Misserfolg des Vorgangs anzeigt (z.B. `TRUE` bei Erfolg, `FALSE` bei Fehler). * **OUT** (Typ: `ANY`) * Der abgerufene Wert aus dem `IN_ARRAY` an der angegebenen `INDEX`-Position. Der Datentyp ist generisch (`ANY`). ### **Adapter** Dieser Funktionsblock verwendet keine Adapter. ## Funktionsweise Wenn ein `REQ`-Ereignis am Eingang des Funktionsblocks empfangen wird, liest der `GET_AT_INDEX`-FB die aktuellen Werte der Daten-Eingänge `IN_ARRAY` und `INDEX`. Er greift dann auf das `IN_ARRAY` zu und extrahiert den Wert an der durch `INDEX` angegebenen Position. Dieser abgerufene Wert wird an den Daten-Ausgang `OUT` weitergeleitet. Gleichzeitig wird der `QO`-Ausgang entsprechend dem Ergebnis des Vorgangs gesetzt (z.B. `TRUE` bei erfolgreichem Zugriff). Abschließend wird das `CNF`-Ereignis ausgelöst, um die Beendigung des Dienstes zu signalisieren. ## Technische Besonderheiten * **Datentyp-Übereinstimmung**: Es ist entscheidend, dass der Datentyp des Eingabe-Arrays (`IN_ARRAY`) mit dem erwarteten Datentyp des abgerufenen Werts (`OUT`) kompatibel ist, um Typfehler zu vermeiden. * **Indexbereich**: Der Wert von `INDEX` muss innerhalb der gültigen Grenzen des `IN_ARRAY` liegen, um Laufzeitfehler oder undefiniertes Verhalten zu verhindern. Eine Überprüfung des Indexbereichs muss ggf. durch vor- oder nachgeschaltete Logik sichergestellt werden. * **ANY-Typ**: Die Verwendung des `ANY`-Typs für `IN_ARRAY` und `OUT` macht den Baustein sehr flexibel, erfordert aber eine sorgfältige Typisierung in der Anwendung. ## Zustandsübersicht Der `GET_AT_INDEX`-Funktionsblock ist im Wesentlichen zustandslos in Bezug auf die Datenhaltung. Seine Zustände beschränken sich auf den Ausführungszyklus: 1. **Bereit**: Wartet auf ein `REQ`-Ereignis. 2. **Ausführend**: Liest Eingänge, führt den Array-Zugriff durch und setzt Ausgänge. 3. **Abgeschlossen**: Löst das `CNF`-Ereignis aus und kehrt in den Zustand "Bereit" zurück. ## Anwendungsszenarien * **Datenprotokollierung und -analyse**: Abrufen spezifischer Messwerte aus einem Zeitreihen-Array. * **Konfigurationsverwaltung**: Lesen einzelner Parameter aus einem Array von Konfigurationswerten. * **Abarbeitung von Listen**: Sequenzielles oder zufälliges Abrufen von Elementen aus einer Liste von Aufgaben oder Objekten. * **Robotersteuerung**: Zugriff auf Positionen oder Bewegungsparameter, die in Arrays gespeichert sind. * **Visualisierung**: Abrufen von Datenpunkten für die Darstellung auf einer Benutzeroberfläche. ## ⚖️ Vergleich mit ähnlichen Bausteinen Der `GET_AT_INDEX`-Baustein ist ein spezialisierter Baustein für den Array-Zugriff. Er unterscheidet sich von: * **`SET_AT_INDEX`**: Einem komplementären Baustein, der Werte an einer bestimmten Array-Position setzt, anstatt sie abzurufen. * **Array-Iteratoren**: Bausteinen, die typischerweise das gesamte Array durchlaufen, anstatt nur ein einzelnes Element über einen direkten Index abzurufen. * **Allgemeinen Datenmanipulationsbausteinen**: Die nicht speziell für Array-Zugriffe konzipiert sind, sondern allgemeinere Operationen (z.B. Addition, Vergleich) durchführen. `GET_AT_INDEX` füllt somit eine grundlegende Lücke für den direkten, indizierten Lesezugriff auf Array-Datenstrukturen. ## Metadaten | Attribut | Wert | | :--- | :--- | | Copyright | (c) 2014 Profactor GmbH | | Lizenz | EPL-2.0 | | Version | 3.0 (2025-04-14, Patrick Aigner), 1.0 (2014-07-11, Matthias Plasch) | | 4diac-Paket | eclipse4diac::convert | ## Fazit Der `GET_AT_INDEX`-Funktionsblock ist ein elementarer und flexibler Baustein, der den direkten und indizierten Zugriff auf Array-Elemente ermöglicht. Seine Einfachheit und die Unterstützung generischer Datentypen (`ANY`) machen ihn zu einem vielseitigen Werkzeug in zahlreichen Automatisierungs- und Steuerungsanwendungen, bei denen Daten in geordneten Listen oder Tabellen vorliegen. Die korrekte Anwendung erfordert lediglich die Beachtung der Datentyp-Kompatibilität und des gültigen Indexbereichs.