LOG_16
Einleitung
Der Funktionsblock LOG_16 ist ein Ring-Logger, der für den zyklischen Aufzeichnung von Daten beliebigen Typs (ANY) konzipiert ist. Er dient dazu, eingehende Werte in einem Puffer mit 16 Speicherplätzen zu halten, wobei ältere Einträge bei neuen Aufrufen überschrieben werden (Ringpuffer-Prinzip). Dieser Baustein ist besonders für die Protokollierung von Prozessdaten oder Zuständen in Echtzeitsteuerungen geeignet.
Schnittstellenstruktur
Ereignis-Eingänge
REQ (Service Request): Löst einen Log-Vorgang aus. Bei Eintreten dieses Ereignisses wird der aktuelle Wert am Daten-Eingang
INin den Ringpuffer übernommen.
Ereignis-Ausgänge
CNF (Confirmation of Requested Service): Wird nach erfolgreicher Verarbeitung des
REQ-Ereignisses ausgelöst. Dieses Ereignis bestätigt den Log-Vorgang und stellt gleichzeitig alle 16 gespeicherten Werte an den Datenausgängen bereit.
Daten-Eingänge
IN (ANY): Der Datenwert, der bei einem
REQ-Ereignis in den Ringpuffer geschrieben werden soll. Der Datentyp ist beliebig (ANY).
Daten-Ausgänge
OUT1 bis OUT16 (ANY): Die 16 Ausgänge, die den gesamten aktuellen Inhalt des Ringpuffers repräsentieren.
OUT1enthält dabei den jüngsten Eintrag (das letzte geloggteIN),OUT16den ältesten. Bei jedem neuen Log-Vorgang (REQ) werden alle Werte im Puffer um eine Position verschoben.
Adapter
Dieser Funktionsblock verfügt über keine Adapterschnittstellen.
Funktionsweise
Der LOG_16 implementiert einen Ringpuffer (First-In-First-Out mit fester Größe) mit 16 Elementen. Bei jedem eintreffenden REQ-Ereignis wird der folgende Algorithmus ausgeführt:
Der aktuelle Wert am Eingang
INwird als neuester Eintrag gespeichert.Alle bisher gespeicherten Werte werden um eine Position „nach hinten“ (in Richtung
OUT16) verschoben.Der Wert, der sich zuvor an Position 16 (
OUT16) befand, wird verworfen.Das Bestätigungsereignis
CNFwird ausgelöst.Die neuen 16 Pufferinhalte werden an den Ausgängen
OUT1(neuester) bisOUT16(ältester) ausgegeben.
Technische Besonderheiten
Generischer Datentyp: Die Verwendung des
ANY-Datentyps für Ein- und Ausgänge macht den Baustein extrem flexibel. Er kann mit beliebigen Datentypen (z.B.BOOL,INT,REAL,STRINGoder sogar strukturierten Typen) instanziiert und verwendet werden.Feste Puffergröße: Die Puffergröße ist auf 16 Einträge festgelegt und nicht konfigurierbar.
Sofortige Ausgabe: Bei jedem Log-Vorgang wird der gesamte Pufferinhalt an den Ausgängen aktualisiert und mit dem
CNF-Ereignis bestätigt.
Zustandsübersicht
Der Baustein besitzt keinen persistenten internen Zustand im Sinne einer Zustandsmaschine außer dem Ringpuffer selbst. Sein Verhalten ist rein reaktiv: Auf ein REQ-Ereignis folgt stets eine Pufferaktualisierung und die Ausgabe von CNF mit den aktuellen Daten.
Anwendungsszenarien
Protokollierung von Prozesswerten: Kurzfristige Aufzeichnung von Sensordaten (z.B. Temperaturverlauf der letzten 16 Zyklen).
Fehlerhistorie: Speicherung der letzten 16 Fehlercodes oder Alarmmeldungen.
Datenvorverarbeitung: Bereitstellung eines gleitenden Fensters über die letzten 16 Werte für nachfolgende Berechnungen (z.B. in einem weiteren FB).
Debugging: Einfache Überwachung von Variablenverläufen während der Entwicklung und Inbetriebnahme.
⚖️ Vergleich mit ähnlichen Bausteinen
E_DELAY/ Verzögerungsbausteine: Diese Bausteine geben einen Eingangswert erst nach einer definierten Zeit verzögert wieder aus. DerLOG_16hingegen speichert eine Historie mehrerer Werte und gibt sie sofort, aber geordnet nach Aktualität, aus.FIFO-Bausteine: Klassische FIFO-Speicher (First-In-First-Out) haben oft variable Längen und ein separates Lese-/Schreib-Interface. DerLOG_16ist ein spezieller FIFO mit fester Länge (16), der bei jedem Schreibvorgang automatisch den gesamten Inhalt ausgibt und überschreibt.Einfache
LOG-Bausteine: Einfache Logger ohne Puffer schreiben typischerweise nur einen einzelnen Wert. Die Stärke desLOG_16liegt in der ringförmigen Historie.
🛠️ Zugehörige Übungen
Fazit
Der LOG_16 ist ein nützlicher und generischer Funktionsblock für grundlegende Logging- und Pufferaufgaben in 4diac FORTE-Applikationen. Seine Stärken liegen in der Einfachheit, der generischen Typunterstützung und dem deterministischen Verhalten. Die feste Puffergröße von 16 ist für viele Überwachungsaufgaben ausreichend, für Anwendungen, die eine andere Puffertiefe oder ein selektives Lesen benötigen, sind jedoch angepasste oder erweiterte Bausteine erforderlich.