OFFSET_UDINT
Einleitung
Der Funktionsblock OFFSET_UDINT dient dazu, einen Offsetwert zu berechnen. Bei der ersten Ausführung mit einem Eingangswert größer als Null speichert der Baustein diesen Wert als Referenz (FIRST). Bei jedem Aufruf wird die Differenz zwischen dem aktuellen Eingangswert und diesem gespeicherten Referenzwert als Ausgang (OUT) berechnet. Dies ist besonders nützlich, um relative Änderungen gegenüber einem initialen Startwert zu ermitteln.
Schnittstellenstruktur
Ereignis-Eingänge
REQ: Startet die normale Ausführung des Algorithmus. Wird mit dem Dateneingang
INverknüpft.
Ereignis-Ausgänge
CNF: Signalisiert die Beendigung der Berechnung. Wird mit den Datenausgängen
OUTundFIRSTverknüpft.
Daten-Eingänge
IN (UDINT): Der Eingangswert. Beim ersten Aufruf mit einem Wert >0 wird dieser Wert in
FIRSTgespeichert. Initialwert ist0.
Daten-Ausgänge
OUT (UDINT): Das Ergebnis der Berechnung
IN - FIRST. Initialwert ist0.FIRST (UDINT): Der beim ersten Aufruf (mit
IN> 0) gespeicherte Referenzwert. Initialwert ist0.
Adapter
Dieser Funktionsblock verwendet keine Adapter.
Funktionsweise
Der OFFSET_UDINT ist ein einfacher Funktionsblock (Simple FB) mit einem einzigen Zustand (REQ). Bei jedem Eintreffen des REQ-Ereignisses wird der zugehörige Algorithmus REQ ausgeführt.
Der Algorithmus überprüft zunächst, ob der Ausgang FIRST noch den Initialwert 0 hat. Falls ja, wird der aktuelle Wert von IN in FIRST gespeichert. Anschließend wird die Differenz OUT = IN - FIRST berechnet. Nach Abschluss der Berechnung wird das CNF-Ereignis ausgelöst, wobei die aktualisierten Werte von OUT und FIRST ausgegeben werden.
Wichtig: Die Prüfung FIRST = 0 stellt sicher, dass der Wert nur beim ersten Aufruf gesetzt wird, bei dem IN einen Wert größer 0 hat. Ein späteres IN von 0 ändert FIRST nicht mehr.
Technische Besonderheiten
Datentyp: Der Block arbeitet ausschließlich mit vorzeichenlosen 32-Bit-Ganzzahlen (
UDINT).Initialisierung: Sowohl
FIRSTals auchOUTsind mit0initialisiert. Der Block ist nach dem Start sofort betriebsbereit.Einmalige Setzung: Die Variable
FIRSTwird genau einmal gesetzt (beim erstenREQmitIN> 0) und bleibt danach für die Lebensdauer der FB-Instanz konstant, es sei denn, der FB wird neu initialisiert.
Zustandsübersicht
Der Funktionsblock besitzt einen einzigen, stabilen Zustand:
REQ: Wartet auf das eingehende
REQ-Ereignis. Bei Empfang wird der Algorithmus ausgeführt und unmittelbar danach wird dasCNF-Ereignis ausgelöst. Der FB verbleibt im ZustandREQ.
Anwendungsszenarien
Referenzpunktbildung in Messketten: In einem System, das absolute Positionswerte (z.B. von einem Encoder) liefert, kann dieser Block den ersten gültigen Messwert als Nullpunkt (Offset) speichern. Alle folgenden Werte werden relativ zu diesem Startpunkt ausgegeben.
Initialwert-Kompensation: Zur Eliminierung eines systembedingten Grundoffsets (z.B. einer Vorspannung) bei der ersten gültigen Messung.
Zählbeginn-Normierung: Wenn ein Zähler nicht bei 0 startet, kann der erste Wert gespeichert und von allen folgenden Werten subtrahiert werden, um eine Zählung ab 0 zu simulieren.
⚖️ Vergleich mit ähnlichen Bausteinen
SUB / DIF Bausteine: Standard-Subtraktionsbausteine berechnen stets die Differenz zwischen zwei variablen Eingängen.
OFFSET_UDINThingegen friert einen der Operanden (FIRST) nach der ersten Operation ein und verwendet ihn fortan als festen Subtrahenden.Schieberegister (FIFO) oder Verzögerungsbausteine: Diese speichern eine Historie von Werten.
OFFSET_UDINTspeichert dagegen nur einen einzigen, initialen Wert dauerhaft.Bausteine mit Merker (SR, RS): Diese speichern einen binären Zustand.
OFFSET_UDINTspeichert einen spezifischen numerischen (UDINT) Startwert.
🛠️ Zugehörige Übungen
Fazit
Der OFFSET_UDINT ist ein spezialisierter und effizienter Funktionsblock für Anwendungen, bei denen ein einmalig gemessener Startwert als Basis für alle folgenden relativen Berechnungen dienen soll. Seine Stärke liegt in der Einfachheit und der zuverlässigen, einmaligen Setzung des Referenzwertes, was manuelle Logik zur Erkennung des „ersten Zyklus“ überflüssig macht. Er ist ideal für Initialisierungs- und Normierungsaufgaben in Steuerungsanwendungen.