QUARTER_TO_E

🎧 Podcast


image

Einleitung

Der Funktionsblock QUARTER_TO_E dient dazu, einen 2-Bit-Zustandswert (ein sogenanntes „Quarter Byte“) in vier verschiedene, eindeutige Ereignisse zu ĂŒbersetzen. Er ist ein Hilfsbaustein, der hĂ€ufig in Verbindung mit Bausteinen verwendet wird, die mehr als die ĂŒblichen zwei ZustĂ€nde (EIN/AUS) melden, wie z.B. Statusmeldungen von GerĂ€ten, die auch Fehler- oder Nicht-VerfĂŒgbarkeitszustĂ€nde anzeigen können.

QUARTER_TO_E

Schnittstellenstruktur

Ereignis-EingĂ€nge

  • REQ: Startet die Verarbeitung. Bei diesem Ereignis wird der aktuelle Wert am Daten-Eingang IB ausgewertet.

Ereignis-AusgĂ€nge

  • CNF: Signalisiert die erfolgreiche Beendigung der Verarbeitung, unabhĂ€ngig vom erkannten Zustand. Wird immer nach der Ausgabe eines der spezifischen Ereignisse generiert.

  • S (Enabled): Wird ausgelöst, wenn der Zustand „aktiviert“ oder „eingeschaltet“ erkannt wird.

  • R (Disabled): Wird ausgelöst, wenn der Zustand „deaktiviert“ oder „ausgeschaltet“ erkannt wird.

  • ERR (Error): Wird ausgelöst, wenn ein Fehlerzustand erkannt wird.

  • NONE (Not available): Wird ausgelöst, wenn der Zustand „nicht verfĂŒgbar“ oder „nicht installiert“ erkannt wird.

Daten-EingĂ€nge

  • IB (BYTE): EnthĂ€lt den zu interpretierenden 2-Bit-Zustandswert. Der Initialwert ist auf quarter::COMMAND_DISABLE gesetzt. Die tatsĂ€chliche Interpretation erfolgt anhand der definierten Konstanten aus dem quarter-Paket.

Daten-AusgĂ€nge

  • Q (BOOL): Ein boolescher Ausgang, dessen Wert je nach erkanntem Zustand gesetzt wird. Er dient als einfache, binĂ€re ReprĂ€sentation des Hauptzustands (aktiviert/deaktiviert).

Adapter

Dieser Funktionsblock verwendet keine Adapter.

Funktionsweise

Der QUARTER_TO_E ist ein Basic Function Block mit einem internen Zustandsautomaten (ECC). Bei Eintreffen des REQ-Ereignisses wird der Wert am Eingang IB mit vordefinierten Konstanten verglichen. AbhĂ€ngig vom Vergleich springt der Automat in einen der vier ZustĂ€nde SET, RESET, Error oder none. In jedem dieser ZustĂ€nde wird ein entsprechender Algorithmus ausgefĂŒhrt, der den booleschen Ausgang Q setzt (oder nicht Ă€ndert) und das zugehörige spezifische Ereignis (S, R, ERR, NONE) auslöst. Anschließend wechselt der Automat in den Zustand ok, von wo aus das BestĂ€tigungsereignis CNF ausgegeben wird, bevor der Automat in den Ausgangszustand START zurĂŒckkehrt und auf das nĂ€chste REQ wartet.

Technische Besonderheiten

  • Der Block nutzt Konstanten aus dem Paket logiBUS::utils::quarter::const::quarter (STATUS_ENABLED, STATUS_DISABLED, STATUS_ERROR, STATUS_NOT_AVAILABLE). Diese mĂŒssen im Projekt verfĂŒgbar sein.

  • Der Ausgang Q wird nur in den ZustĂ€nden SET (auf TRUE), RESET (auf FALSE) und ERROR (auf FALSE) verĂ€ndert. Im Zustand NONE wird Q explizit nicht verĂ€ndert („Don’t care“).

  • Die Ausgabe des CNF-Ereignisses erfolgt immer, unabhĂ€ngig davon, welcher spezifische Zustand erkannt wurde. Dies ermöglicht eine einheitliche Ablaufsteuerung in der Applikation.

ZustandsĂŒbersicht

  1. START: Wartezustand. Bei REQ erfolgt die Auswertung von IB und der Übergang zu einem Verarbeitungszustand.

  2. SET: Wird bei IB = STATUS_ENABLED erreicht. Setzt Q:=TRUE und löst S aus.

  3. RESET: Wird bei IB = STATUS_DISABLED erreicht. Setzt Q:=FALSE und löst R aus.

  4. Error: Wird bei IB = STATUS_ERROR erreicht. Setzt Q:=FALSE und löst ERR aus.

  5. none: Wird bei IB = STATUS_NOT_AVAILABLE erreicht. Löst NONE aus (Q bleibt unverÀndert).

  6. ok: Zwischenzustand, der das CNF-Ereignis auslöst und zurĂŒck zum START-Zustand fĂŒhrt.

Anwendungsszenarien

  • Interpretation von GerĂ€testatus: Ein Antriebsmeldet seinen Status nicht nur als EIN/AUS, sondern auch als „Fehler“ oder „Nicht bereit“. Dieser Block wandelt den GerĂ€testatus in separate, leicht verarbeitbare Ereignisse um.

  • Vereinfachung der Logik: Anstatt in nachfolgenden Blöcken stĂ€ndig den Byte-Wert abfragen zu mĂŒssen, können direkt auf die spezifischen Ereignisse (S, R, ERR) reagiert werden.

  • Abstraktion: Dient als Adapter zwischen Bausteinen, die einen Quarter-Byte-Status liefern, und einer Logik, die mit klassischen Ereignis-/Boolsignalen arbeitet.

⚖ Vergleich mit Ă€hnlichen Bausteinen

  • E_DEMUX / E_SELECT: Diese Blöcke leiten ein Eingangsereignis basierend auf einem Steuerwert an einen von mehreren AusgĂ€ngen weiter. QUARTER_TO_E ist spezialisierter: Er ĂŒbersetzt einen spezifischen Datenwert (IB) nicht nur in eine Auswahl, sondern löst auch unterschiedliche inhaltliche Ereignisse aus und berechnet zusĂ€tzlich einen booleschen Wert (Q).

  • BYTE_TO_E: Ein generischer Block, der jedes Bit eines Bytes in ein separates Ereignis umwandeln könnte. QUARTER_TO_E ist semantisch reicher, da er spezifische, vordefinierte ZustĂ€nde (Enabled, Disabled, Error, None) und deren Bedeutung kennt und ausgibt.

Fazit

Der QUARTER_TO_E ist ein nĂŒtzlicher und spezialisierter Baustein fĂŒr die strukturierte Verarbeitung von 4-Zustands-Signalen (Quad-State). Er entlastet die Applikationslogik, indem er die Rohdateninterpretation ĂŒbernimmt und klare, semantische Ereignisse sowie einen vereinfachten booleschen Status bereitstellt. Seine StĂ€rke liegt in der Kombination aus Datenverarbeitung und ereignisbasierter Ausgabe gemĂ€ĂŸ der IEC 61499.