# BOOLS_TO_QUARTERS ## 🎧 Podcast * [QUARTER](https://podcasters.spotify.com/pod/show/iec-61499-grundkurs-de/episodes/QUARTER-e36741d) ---- ```{index} single: BOOLS_TO_QUARTERS ``` image * * * * * * * * * * ## Einleitung Der Funktionsblock `BOOLS_TO_QUARTERS` ist ein zusammengesetzter Baustein (Composite FB), der 16 einzelne boolesche Eingangssignale in ein spezielles 2-Bit-Format, genannt "Quarter Byte", umwandelt. Er dient als BĂŒndelung und serielle Abarbeitung mehrerer grundlegender Konvertierungsfunktionen und ist fĂŒr Anwendungen vorgesehen, in denen viele binĂ€re ZustĂ€nde in ein kompaktes, mehrwertiges Steuerformat ĂŒberfĂŒhrt werden mĂŒssen. ![BOOLS_TO_QUARTERS](BOOLS_TO_QUARTERS.svg) ## Schnittstellenstruktur ### **Ereignis-EingĂ€nge** * **REQ (Normal Execution Request):** Startet die Verarbeitungskette. Bei einem eingehenden REQ-Ereignis werden alle mitgefĂŒhrten Daten-EingĂ€nge (`I_00` bis `I_15`) eingelesen und die Konvertierung initiiert. ### **Ereignis-AusgĂ€nge** * **CNF (Execution Confirmation):** Dieses Ereignis wird ausgegeben, nachdem alle 16 internen Konvertierungen abgeschlossen sind. Es bestĂ€tigt die Beendigung der Operation und liefert die berechneten Quarter-Byte-Werte (`QB_00` bis `QB_15`) an die nachgelagerte Applikation. ### **Daten-EingĂ€nge** * **I_00 bis I_15 (BOOL Input):** 16 unabhĂ€ngige boolesche EingĂ€nge (`BOOL`). Jeder reprĂ€sentiert einen binĂ€ren Schaltzustand (TRUE/FALSE). Der Initialwert aller EingĂ€nge ist `FALSE`. ### **Daten-AusgĂ€nge** * **QB_00 bis QB_15 (2bit (quarter Byte) Output):** 16 AusgĂ€nge vom Typ `BYTE`. Jeder Ausgang kodiert das Ergebnis der Konvertierung des entsprechenden booleschen Eingangs in ein Quarter-Byte. Ein Quarter-Byte nutzt nur die unteren zwei Bits eines Bytes und kann theoretisch vier ZustĂ€nde darstellen. In dieser Implementierung werden primĂ€r zwei ZustĂ€nde genutzt, die durch die Konstanten `quarter::COMMAND_DISABLE` und ihr GegenstĂŒck definiert sind. Der Initialwert aller AusgĂ€nge ist `quarter::COMMAND_DISABLE`. ### **Adapter** Dieser Funktionsblock verwendet keine Adapter-Schnittstellen. ## Funktionsweise `BOOLS_TO_QUARTERS` ist ein Composite FB, der intern aus 16 Instanzen eines Basisfunktionsblocks `BOOL_TO_QUARTER` aufgebaut ist. Jede Instanz ist fĂŒr die Konvertierung eines einzelnen booleschen Wertes zustĂ€ndig. Die Funktionsweise folgt einem seriellen Kettenprinzip: 1. Das eingehende `REQ`-Ereignis triggert die erste interne Instanz `BOOL_TO_QUARTER_00`. 2. Diese Instanz liest ihren zugeordneten Daten-Eingang `I_00`, fĂŒhrt die Konvertierung durch und setzt ihren Ausgang `QB_00`. 3. Nach Abschluss ihrer Operation generiert `BOOL_TO_QUARTER_00` ein `CNF`-Ereignis, das direkt als `REQ`-Ereignis fĂŒr die nĂ€chste Instanz (`BOOL_TO_QUARTER_01`) weitergeleitet wird. 4. Dieser Prozess setzt sich kaskadenartig durch alle 16 Instanzen fort. 5. Die letzte Instanz (`BOOL_TO_QUARTER_15`) leitet ihr abschließendes `CNF`-Ereignis an den `CNF`-Ausgang des umschließenden `BOOLS_TO_QUARTERS`-Blocks weiter. Zu diesem Zeitpunkt liegen alle 16 Quarter-Byte-AusgĂ€nge (`QB_00` bis `QB_15`) mit ihren neuen Werten vor. Die Datenpfade sind parallel organisiert: Jeder boolesche Eingang `I_xx` ist direkt mit dem entsprechenden `I`-Eingang der internen Instanz verbunden, und jeder `QB`-Ausgang einer Instanz ist direkt mit dem entsprechenden `QB_xx`-Ausgang des Composite FB verbunden. ## Technische Besonderheiten * **Serielle AusfĂŒhrung:** Die 16 Konvertierungen werden nacheinander, nicht parallel, ausgefĂŒhrt. Dies fĂŒhrt zu einer definierten, aber nicht gleichzeitigen Aktualisierung der AusgĂ€nge. Die Gesamtzykluszeit ist die Summe der AusfĂŒhrungszeiten aller 16 internen Blöcke. * **Konstanten-Nutzung:** Die Initialwerte und die konkreten Ausgabewerte der Konvertierung basieren auf vordefinierten Konstanten aus dem `quarter`-Namespace (z.B. `quarter::COMMAND_DISABLE`). Die genaue Semantik der möglichen Quarter-Byte-ZustĂ€nde (z.B. `COMMAND_DISABLE` vs. `COMMAND_ENABLE`) muss der Dokumentation des zugrundeliegenden `BOOL_TO_QUARTER`-Blocks oder der `quarter`-Bibliothek entnommen werden. * **Komposite Struktur:** Der Block dient primĂ€r der BĂŒndelung und Vereinfachung der Verdrahtung in ĂŒbergeordneten Applikationen. Die eigentliche Logik liegt in den eingebetteten `BOOL_TO_QUARTER`-Funktionsblöcken. ## ZustandsĂŒbersicht Als Composite FB ohne eigene, explizite Zustandsmaschine besitzt `BOOLS_TO_QUARTERS` keinen internen Zustand im engeren Sinne. Sein Verhalten wird vollstĂ€ndig durch die Kaskade der untergeordneten Blöcke und deren ZustĂ€nde bestimmt. Der Block kann sich in einem von zwei makroskopischen ZustĂ€nden befinden: 1. **Idle:** Warten auf ein `REQ`-Ereignis. Alle AusgĂ€nge behalten ihren letzten Wert. 2. **Verarbeitend (Processing):** Ein `REQ`-Ereignis lĂ€uft durch die Kaskade der 16 internen Blöcke. WĂ€hrend dieser Phase werden die AusgĂ€nge nacheinander aktualisiert. ## Anwendungsszenarien * **Ansteuerung von kompakten Mehrwert-Aktoren:** Bei Aktoren oder Treibern, die Steuerbefehle nicht als einfache Ein-/Aus-Signale, sondern als 2-Bit-Kommandos (z.B. Ein/Aus/Fehlerreset/Notstop) erwarten. * **Datenkomprimierung fĂŒr Bus-Kommunikation:** Vor der Übertragung ĂŒber Feldbusse, wo viele binĂ€re Signale in ein platzsparendes Byte- oder Wort-orientiertes Protokoll gepackt werden mĂŒssen. * **Schnittstelle zu Legacy-Systemen:** Als Adapter zwischen modernen IEC 61499-Steuerungen und Ă€lteren Systemen, die Daten in einem speziellen Quarter-Byte-Format erwarten oder liefern. ## ⚖ Vergleich mit Ă€hnlichen Bausteinen * **GegenĂŒber `BOOL_TO_QUARTER`:** `BOOLS_TO_QUARTERS` ist im Wesentlichen ein Array aus 16 `BOOL_TO_QUARTER`-Blöcken mit einer fest verdrahteten seriellen Ereigniskette. WĂ€hrend `BOOL_TO_QUARTER` eine einzelne Konvertierung durchfĂŒhrt, aggregiert `BOOLS_TO_QUARTERS` viele solcher Konvertierungen in einem wiederverwendbaren Baustein. * **GegenĂŒber generischen Pack-Blöcken (z.B. `BOOLx_TO_BYTE`):** Blöcke wie `BOOL8_TO_BYTE` packen mehrere BOOL-Werte in die Bits eines einzelnen BYTEs. `BOOLS_TO_QUARTERS` hingegen erzeugt fĂŒr jeden Eingang ein eigenes (wenn auch nur teilweise genutztes) BYTE. Es findet keine Bit-Packung in ein gemeinsames Byte statt, sondern eine 1:1-Abbildung auf ein spezielles Kodierungsformat. ## đŸ› ïž Zugehörige Übungen * [Uebung_060](../../../../../training1/Ventilsteuerung/4diacIDE-workspace/test_B/Uebungen_doc/Uebung_060.md) ## Fazit Der `BOOLS_TO_QUARTERS`-Funktionsblock bietet eine praktische und vorkonfektionierte Lösung, um eine große Anzahl boolescher Signale seriell in das Quarter-Byte-Format zu konvertieren. Seine komposite Natur macht ihn einfach zu verstehen und zu verwenden, da er die Verdrahtung von 16 einzelnen Blöcken und ihrer Ereignislogik abstrahiert. Die serielle Abarbeitung ist ein entscheidendes Merkmal, das bei Echtzeitanforderungen berĂŒcksichtigt werden muss. Der Block ist ideal fĂŒr spezifische Anwendungen, die das Quarter-Byte-Format erfordern, weniger jedoch fĂŒr allgemeine Bit-Pack- oder -Unpack-Operationen.