# QUARTER_TO_E ## 🎧 Podcast * [QUARTER](https://podcasters.spotify.com/pod/show/iec-61499-grundkurs-de/episodes/QUARTER-e36741d) ---- ```{index} single: QUARTER_TO_E ``` 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](QUARTER_TO_E.svg) ## 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.