GET_ULINT¶
Einleitung¶
Der Funktionsblock GET_ULINT dient dazu, den aktuellen Wert einer als InOut-Parameter bereitgestellten Variable vom Typ ULINT (unsigned 64‑Bit‑Integer) zu lesen und an einem Datenausgang als gepufferten Wert bereitzustellen. Auf eine Anfrage (REQ) wird der Wert der Quelle eingelesen und am Ausgang OUT ausgegeben. Anschließend wird die Bestätigung (CNF) gesendet. Damit ist GET_ULINT ein einfacher Lese-Baustein für InOut‑Variablen.
Schnittstellenstruktur¶
Ereignis-Eingänge¶
| Name | Typ | Kommentar | Mit Daten |
|---|---|---|---|
REQ |
Event | Normal Execution Request | IN |
Ereignis-Ausgänge¶
| Name | Typ | Kommentar | Mit Daten |
|---|---|---|---|
CNF |
Event | Execution Confirmation | OUT, IN |
Daten-Eingänge¶
| Name | Typ | Kommentar |
|---|---|---|
| - | - | - |
Daten-Ausgänge¶
| Name | Typ | Kommentar | Initialwert |
|---|---|---|---|
OUT |
ULINT | Buffered output value | 0 |
Adapter¶
Keine Adapter vorhanden.
InOut‑Variablen (intern)¶
Zusätzlich zu den reinen Ein‑/Ausgängen besitzt der Baustein eine InOut‑Variable:
| Name | Typ | Kommentar | Initialwert |
|---|---|---|---|
IN |
ULINT | Source variable (InOut) | 0 |
Funktionsweise¶
Der Baustein verarbeitet eine einzige Aktion:
1. Ein eingehendes Ereignis am Eingang REQ löst die Ausführung des Algorithmus REQ aus.
2. Im Algorithmus wird der aktuelle Wert der InOut‑Variablen IN direkt in den Ausgang OUT kopiert:
OUT := IN;
3. Nach Abschluss der Zuweisung wird das Ereignis CNF ausgegeben. Die Ausgänge OUT und IN werden mit dem Ereignis CNF assoziiert, sodass aufrufende Bausteine den aktualisierten Wert verarbeiten können.
Durch die Verwendung einer InOut‑Variablen kann der Baustein auf einen Speicherplatz außerhalb des eigenen Kontexts zugreifen, ohne diesen über einen herkömmlichen Eingang zu erhalten. Der Wert wird bei jeder Anfrage frisch gelesen, wodurch sich der Baustein als Lese‑Puffer eignet.
Technische Besonderheiten¶
- InOut‑Variable: Der Baustein nutzt eine
IN‑Variable mit der EigenschaftInOut. Dies ermöglicht das Verknüpfen mit einer übergeordneten Variablen (z.B. aus einem Ressourcen‑ oder globalen Datenraum), ohne dass der Baustein die Variable über einen normalen Daten‑Eingang erhalten muss. Der Zugriff erfolgt referenzbasiert. - Typ ULINT: Sowohl
INals auchOUTsind als vorzeichenloser 64‑Bit‑Integer (ULINT) deklariert – geeignet für große Zählwerte, Zeitstempel oder andere Werte im Bereich 0 … 2⁶⁴‑1. - Sofortiges Lesen: Der Algorithmus ist extrem kurz (eine Zuweisung), wodurch die Ausführungszeit vernachlässigbar ist.
Zustandsübersicht¶
Der Baustein ist als SimpleFB mit einem einzigen ECC‑Zustand implementiert:
| Zustand | Aktion | Ausgabeereignis | Bedeutung |
|---|---|---|---|
REQ |
REQ (OUT := IN) |
CNF |
Auf eine Anfrage wird der Wert gelesen und bestätigt. |
Es gibt keine weiteren Zustände, keine Verzweigungen und keine internen Speichervariablen (außer dem Ausgang OUT selbst, der den letzten gelesenen Wert puffert).
Anwendungsszenarien¶
- Sichere Leseoperation: Ein übergeordneter Baustein möchte einen aktuellen Wert aus einer gemeinsam genutzten Variablen (z.B. einem Sensorwert, der von einer anderen Steuerungskomponente beschrieben wird) abfragen, ohne den Wert dauerhaft zu referenzieren.
- Wertpuffer für asynchrone Verarbeitung: In einem zeitgesteuerten Ablauf kann
GET_ULINTaufgerufen werden, um einen Schnappschuss einer globalen Zählervariablen zu nehmen und diesen zwischenzuspeichern. - Parametrierung über InOut‑Schnittstellen: Wenn der Baustein in eine übergeordnete Komponente eingebettet ist, kann die InOut‑Variable direkt mit einer Datenverbindung des Elternbausteins verbunden werden, sodass Leseanfragen auf diese Variable zeigen.
Vergleich mit ähnlichen Bausteinen¶
- GET_DINT / GET_LINT / GET_UINT: Analoge Bausteine für andere Integer‑Typen (DINT, LINT, UINT etc.). Die Funktionsweise ist identisch, der einzige Unterschied ist der Datentyp.
- READ_ULINT (hypothetisch): Ein Baustein, der statt einer InOut‑Variable einen separaten Dateneingang für den Quellwert verwendet. Das hätte den Vorteil, dass der Baustein lose gekoppelt ist, aber den Nachteil, dass der Quellwert als Datenstrom mitgeführt werden müsste. Der InOut‑Ansatz von
GET_ULINTerlaubt eine direkte Referenz auf eine gemeinsam genutzte Variable, was in manchen Architekturen bevorzugt wird. - SAMPLE_ULINT: Ein Baustein, der bei jedem Ereignis den aktuellen Wert eines Eingangs abtastet und puffert – ebenfalls ähnlich, jedoch mit normalem Dateneingang statt InOut.
Fazit¶
Der GET_ULINT‑Funktionsblock bietet eine einfache und effiziente Möglichkeit, den aktuellen Wert einer InOut‑Variablen vom Typ ULINT zu lesen und als gepufferten Ausgang bereitzustellen. Die Verwendung einer InOut‑Variable erlaubt den direkten, referenzbasierten Zugriff auf externe Speicherstellen, ohne zusätzliche Datenkopien während des Aufrufs. Dank seines minimalistischen Zustandsautomaten eignet er sich hervorragend für zeitkritische Anwendungen, in denen ein schnelles Lesen eines Wertes ohne Nebenwirkungen erforderlich ist.