# QUARTERS_TO_BOOLS ## 🎧 Podcast * [QUARTER](https://podcasters.spotify.com/pod/show/iec-61499-grundkurs-de/episodes/QUARTER-e36741d) ---- ```{index} single: QUARTERS_TO_BOOLS ``` image * * * * * * * * * * ## Einleitung Der Funktionsblock `QUARTERS_TO_BOOLS` ist ein Composite Function Block, der 16 separate 2-Bit-Eingabewerte (sogenannte "Quarter Bytes") parallel in entsprechende boolesche Ausgangssignale umwandelt. Er dient als Wrapper und vereinfacht die Handhabung, indem er eine Vielzahl einzelner Konvertierungsbausteine zu einem einzigen, ĂŒbersichtlichen Baustein zusammenfasst. Dieser Block ist besonders nĂŒtzlich in Steuerungssystemen, in denen kompakte Datenformate (wie 2-Bit-ZustĂ€nde in einem Byte) in einfache binĂ€re Steuersignale fĂŒr Aktoren oder Statusanzeigen umgesetzt werden mĂŒssen. ![QUARTERS_TO_BOOLS](QUARTERS_TO_BOOLS.svg) ## Schnittstellenstruktur ### **Ereignis-EingĂ€nge** * **REQ**: Startet die Verarbeitung. Bei Eintreffen dieses Ereignisses werden alle 16 Eingabewerte (`IB_00` bis `IB_15`) ausgelesen und verarbeitet. ### **Ereignis-AusgĂ€nge** * **CNF**: Signalisiert die erfolgreiche Beendigung der Verarbeitung. Dieses Ereignis wird ausgegeben, nachdem alle 16 internen Konvertierungen abgeschlossen und die Ausgangsdaten (`Q_00` bis `Q_15`) aktualisiert sind. ### **Daten-EingĂ€nge** * **IB_00** bis **IB_15** (Typ: `BYTE`): 16 EingĂ€nge fĂŒr 2-Bit-Daten (Quarter Bytes). Jeder Eingang kann einen von vier definierten ZustĂ€nden reprĂ€sentieren (z.B. `quarter::COMMAND_DISABLE`). Der Standard-Initialwert fĂŒr alle EingĂ€nge ist `quarter::COMMAND_DISABLE`. ### **Daten-AusgĂ€nge** * **Q_00** bis **Q_15** (Typ: `BOOL`): 16 boolesche AusgĂ€nge, die den konvertierten Zustand des jeweiligen Quarter-Byte-Eingangs widerspiegeln. Der Initialwert aller AusgĂ€nge ist `FALSE`. ### **Adapter** Dieser Funktionsblock verwendet keine Adapter-Schnittstellen. ## Funktionsweise `QUARTERS_TO_BOOLS` ist ein Composite FB, der intern aus 16 Instanzen des Basisfunktionsblocks `QUARTER_TO_BOOL` besteht. Jede dieser Instanzen ist fĂŒr die Konvertierung eines spezifischen Eingangs (`IB_xx`) zustĂ€ndig. 1. **Auslösung**: Das Eintreffen des Ereignisses `REQ` löst die Verarbeitungskette aus. 2. **Parallele Datenverteilung**: Die an den EingĂ€ngen `IB_00` bis `IB_15` anliegenden Byte-Werte werden parallel an die entsprechenden EingĂ€nge (`IB`) der 16 internen `QUARTER_TO_BOOL`-Blöcke weitergeleitet. 3. **Serielle Ereignisverarbeitung**: Das `REQ`-Ereignis wird seriell durch die Kette der internen Blöcke propagiert. Es startet bei `QUARTER_TO_BOOL_00` und wird nacheinander von einem Block zum nĂ€chsten weitergereicht (`CNF` -> `REQ`), bis der letzte Block (`QUARTER_TO_BOOL_15`) seine Verarbeitung abschließt. 4. **Konvertierung**: Jeder interne `QUARTER_TO_BOOL`-Block interpretiert seinen Byte-Eingangswert gemĂ€ĂŸ einer definierten Logik (vermutlich basierend auf den zwei niederwertigsten Bits) und setzt ihn auf einen booleschen Wahrheitswert (`TRUE` oder `FALSE`) um. 5. **Ergebnisausgabe**: Die booleschen Ergebnisse (`Q`) der internen Blöcke werden auf die entsprechenden AusgĂ€nge `Q_00` bis `Q_15` des Composite-Blocks geschaltet. 6. **Abschluss**: Sobald der letzte interne Block fertig ist, löst der Composite-Block sein `CNF`-Ereignis aus, um den Abschluss des gesamten Konvertierungszyklus fĂŒr alle 16 KanĂ€le zu signalisieren. ## Technische Besonderheiten * **Initialisierung**: Alle EingĂ€nge sind mit dem spezifischen Wert `quarter::COMMAND_DISABLE` vorbelegt, und alle AusgĂ€nge starten mit `FALSE`. Dies gewĂ€hrleistet einen definierten, inaktiven Ausgangszustand. * **Verarbeitungsreihenfolge**: WĂ€hrend die DateneingĂ€nge parallel verteilt werden, erfolgt die Ereignisverarbeitung streng sequenziell von Index 00 bis 15. Dies fĂŒhrt zu einer deterministischen, wenn auch nicht gleichzeitigen, Aktualisierung der AusgĂ€nge. * **Komposit-Bauweise**: Der Block kapselt die KomplexitĂ€t von 16 einzelnen Konvertierungen und bietet eine saubere, vereinheitlichte Schnittstelle, was die Wiederverwendbarkeit und Lesbarkeit in ĂŒbergeordneten Applikationen erhöht. ## ZustandsĂŒbersicht Als Composite Function Block besitzt `QUARTERS_TO_BOOLS` keinen eigenen komplexen Zustandsautomaten im herkömmlichen Sinne. Sein Verhalten wird durch das Netzwerk der internen Blöcke definiert. Vereinfacht kann der Gesamtzustand als **Idle** (wartet auf `REQ`) und **Processing** (Ereignis lĂ€uft durch die interne Kette) betrachtet werden. Der `CNF`-Ausgang markiert den Übergang zurĂŒck in den Idle-Zustand. ## Anwendungsszenarien * **Kompakte SPS-Anbindung**: Umwandlung von kompakten 32-Bit-Datenwörtern (die 16 2-Bit-ZustĂ€nde enthalten) in 16 einzelne binĂ€re Steuersignale fĂŒr Ventile, Lampen oder Relais. * **Statusdekodierung**: Dekodierung von GerĂ€testatusinformationen, die in einem "Quarter Byte"-Format ĂŒbertragen werden, in einzelne, leicht verarbeitbare Fehler- oder Betriebszustandsbits. * **Vereinfachung von Funktionsplanern**: Ersetzt 16 separate `QUARTER_TO_BOOL`-Blöcke und deren Verdrahtung in einem Funktionsplan durch einen einzigen, ĂŒbersichtlichen Block, was die Projektwartung erleichtert. ## ⚖ Vergleich mit Ă€hnlichen Bausteinen * **`QUARTER_TO_BOOL`**: Dies ist der elementare Baustein, der einen einzelnen 2-Bit-Eingang konvertiert. `QUARTERS_TO_BOOLS` bĂŒndelt 16 Instanzen dieses Blocks zu einer Einheit. Die Verwendung des Composite-Blocks ist effizienter fĂŒr die Handhabung mehrerer KanĂ€le, wĂ€hrend der Einzelblock maximale FlexibilitĂ€t bei der individuellen Platzierung und Verdrahtung bietet. * **`BYTE_TO_BOOL`-Blöcke**: Konventionelle Blöcke, die ein ganzes Byte in 8 einzelne Bits aufspalten. `QUARTERS_TO_BOOLS` ist spezialisierter, da er davon ausgeht, dass jedes Byte bereits in vier unabhĂ€ngige 2-Bit-Einheiten unterteilt ist, die separat interpretiert werden mĂŒssen. ## đŸ› ïž Zugehörige Übungen * [Uebung_060](../../../../../training1/Ventilsteuerung/4diacIDE-workspace/test_B/Uebungen_doc/Uebung_060.md) ## Fazit Der `QUARTERS_TO_BOOLS`-Funktionsblock ist ein praktisches und zeitsparendes Hilfsmittel fĂŒr die IEC 61499-Programmierung, wenn hĂ€ufig mehrere 2-Bit-DatenkanĂ€le in boolesche Signale umgewandelt werden mĂŒssen. Durch die Kapselung von 16 Konvertierungen in einem Block reduziert er den Verdrahtungsaufwand in ĂŒbergeordneten Applikationen erheblich und verbessert die Übersichtlichkeit. Seine deterministische, serielle Ereignisabarbeitung gewĂ€hrleistet ein zuverlĂ€ssiges Verhalten, das fĂŒr Steuerungsaufgaben gut geeignet ist.