Vergleichsoperationen
Entscheidungslogik & Bereiche
Der Wertevergleich ist der Motor der industriellen Entscheidungslogik. Beherrschen Sie Standardvergleicher, Bereichstests und Gültigkeitsprüfungen in TIA Portal.
Was sind Vergleichsoperationen in TIA Portal?
Vergleichsoperationen ermöglichen es Ihnen, zwei Werte desselben Datentyps (Ganzzahlen, Real, Zeit usw.) zu vergleichen oder zu prüfen, ob ein Wert innerhalb oder außerhalb eines definierten Bereichs liegt. Sie sind grundlegend für die Erstellung von Alarmschwellen, Übergangsbedingungen und Regelschleifen.
TIA Portal bietet Standardvergleicher (==, <>, >= usw.), Bereichsanweisungen (IN_Range, OUT_Range), Gültigkeitstests für Gleitpunktzahlen sowie erweiterte Anweisungen für Variant-Datentypen und DB-Pointer.
Standardvergleicher
Bewertung von Gleichheit und Ungleichheit zwischen zwei Operanden
CMP == — Gleich (Equal)
==Was es macht
Vergleicht zwei Operanden (IN1 und IN2). Wenn IN1 gleich IN2 ist, liefert die Anweisung TRUE. Sie unterstützt fast alle einfachen Datentypen.
Wann man es verwendet
Prüfen, ob ein Zähler sein Ziel erreicht hat, ob ein HMI-Sollwert dem aktuellen Wert entspricht oder ob ein bestimmter Maschinenzustand aktiv ist.
Profi-Tipps
Vorsicht bei Real-Typen: Strikte Gleichheit kann aufgrund der Genauigkeit fehlschlagen. Bevorzugen Sie eine Marge oder einen Bereich.
In SCL: IF value1 = value2 THEN ...
Sie können Strings vergleichen, um Identifikationscodes zu überprüfen.
CMP <> — Ungleich (Not equal)
<>Was es macht
Liefert TRUE, wenn beide Operanden IN1 und IN2 unterschiedlich sind. Es ist das Gegenteil der Gleichheit.
Wann man es verwendet
Erkennung einer Wertänderung, Sicherstellung, dass ein Sensor nicht 0 liefert, oder Überprüfung, ob ein Betriebsmodus nicht der verbotene ist.
Profi-Tipps
Oft verwendet, um eine Aktion auszulösen, sobald ein Wert von seinem Sollwert abweicht.
In SCL: IF value1 <> value2 THEN ...
Kann verwendet werden, um Zeitstempel (DTL) zu vergleichen, um zu sehen, ob sich ein Datum geändert hat.
CMP >= — Größer oder gleich
>=Was es macht
Liefert TRUE, wenn der erste Wert (IN1) größer oder gleich dem zweiten (IN2) ist.
Wann man es verwendet
Auslösen eines Hochalarm-Schwellenwerts, Erlauben des Heizens, solange eine Temperatur nicht erreicht ist.
Profi-Tipps
Ideal für Sicherheitsschwellen, bei denen der Grenzwert in die Bedingung einbezogen werden muss.
In SCL: IF level >= setpoint THEN ...
Kann mit Zeit-Typen verwendet werden, um zu prüfen, ob eine Mindestdauer verstrichen ist.
CMP <= — Kleiner oder gleich
<=Was es macht
Liefert TRUE, wenn IN1 kleiner oder gleich IN2 ist.
Wann man es verwendet
Niedrigstandüberwachung, Stoppen einer Pumpe, Validierung eines Mindestdrucks.
Profi-Tipps
Oft gekoppelt mit einer Hysterese, um Ausgangsflattern zu vermeiden.
Funktioniert nativ mit Datums- und Zeit-Typen.
In SCL: IF pressure <= min_limit THEN ...
CMP > — Größer (Greater than)
>Was es macht
Liefert TRUE, wenn IN1 strikt größer als IN2 ist.
Wann man es verwendet
Strikter Vergleich, der den Zielwert nicht enthalten darf.
Profi-Tipps
Seltener verwendet als >= in der Automatisierung, aber nützlich für mathematische Algorithmen.
In SCL: IF current > max THEN ...
Bevorzugt für Schleifenindexvergleiche (FOR).
CMP < — Kleiner (Less than)
<Was es macht
Liefert TRUE, wenn IN1 strikt kleiner als IN2 ist.
Wann man es verwendet
Strikte Untergrenzen-Tests.
Profi-Tipps
Nützlich, um zu prüfen, ob ein Wert 'im Negativen' liegt (val < 0).
In SCL: IF val < 0 THEN ...
Funktioniert mit Zeichen (alphabetische Sortierung).
Bereichsoperationen
Prüfung der Zugehörigkeit zu einem Intervall [MIN..MAX]
IN_Range — Im Bereich
IN_RangeWas es macht
Prüft, ob ein Wert (VAL) zwischen einer Untergrenze (MIN) und einer Obergrenze (MAX) liegt. Das Intervall ist geschlossen: MIN <= VAL <= MAX.
Wann man es verwendet
Überwachung von Betriebsfenstern (z. B. Druck zwischen 2 und 5 bar), Validierung der Maschinengeschwindigkeit.
Profi-Tipps
Ersetzt vorteilhaft zwei in Reihe geschaltete Vergleicher, was das Netzwerk lesbarer macht.
Wenn MIN > MAX ist, liefert die Anweisung immer FALSE.
Sehr nützlich für 'Ready to Run'-Verriegelungen, die mehrere Analogbedingungen erfordern.
OUT_Range — Außerhalb Bereich
OUT_RangeWas es macht
Liefert TRUE, wenn der Wert (VAL) außerhalb des durch MIN und MAX definierten Intervalls liegt. Entweder VAL < MIN oder VAL > MAX.
Wann man es verwendet
Anomalieerkennung oder Überschreitung extremer Schwellenwerte (Bereichsalarm).
Profi-Tipps
Es ist das exakte Gegenteil von IN_Range.
Verwenden Sie es, um die Prozessalarmlogik zu vereinfachen.
In SCL: res := (val < min) OR (val > max);
Gültigkeitstests
Überprüfung der Integrität von Gleitpunktzahlen
|OK| — Gültigkeit prüfen
|OK|Was es macht
Prüft, ob ein Gleitpunktwert (Real oder LReal) eine gültige Zahl ist. Liefert FALSE, wenn der Wert NaN (Not a Number) oder Inf (Unendlich) ist.
Wann man es verwendet
Nach komplexen Berechnungen (Divisionen, Wurzeln, Log), um die Verbreitung mathematischer Fehler zu vermeiden, die die SPS stoppen könnten.
Profi-Tipps
Unverzichtbar, bevor ein Real-Wert an einen Analogausgang oder einen Umrichter gesendet wird.
Ermöglicht die Erkennung einer indirekten Division durch Null.
Praktisch zum Filtern von Rückmeldungen fehlerhafter Sensoren.
|NOT_OK| — Ungültigkeit prüfen
|NOT_OK|Was es macht
Liefert TRUE, wenn der Gleitpunktwert ungültig ist (NaN oder Inf).
Wann man es verwendet
Auslösen eines Berechnungsfehler-Bits oder Erzwingen eines Ersatzwertes.
Profi-Tipps
Verwenden Sie es, um Ihre Maschine in den sicheren Zustand zu versetzen, wenn eine Bahnberechnung fehlschlägt.
Es ist das Äquivalent zu IS_NAN in anderen Sprachen.
In SCL: IF NOT OK(value) THEN ...
Erweiterte Vergleiche (Variant)
Anweisungen für dynamische Programmierung und komplexe Typen
EQ_Type / NE_Type
Was es macht
Vergleicht den Datentyp einer Variant-Variablen mit dem einer anderen Variablen oder einem definierten Typ.
Wann man es verwendet
In generischen Bausteinen, die verschiedene Datentypen verarbeiten müssen (z. B. ein Log-Baustein, der Int oder Real akzeptiert).
Profi-Tipps
Essenziell für objektorientierte Programmierung und wiederverwendbare Bibliotheken.
Ermöglicht die Absicherung dynamischer Speicherzugriffe.
Verwendet mit der VariantGet-Anweisung.
IS_NULL / NOT_NULL
Was es macht
Prüft, ob ein Pointer (Variant oder DB_ANY) null ist (auf nichts zeigt).
Wann man es verwendet
Vermeiden von Zugriffsfehlern bei der Verwendung indirekt adressierter DBs.
Profi-Tipps
Immer NOT_NULL testen, bevor eine Methode aufgerufen oder Daten über einen Pointer gelesen werden.
Äquivalent zum 'Nothing'- oder 'null'-Objekt in C#/Java.
Unverzichtbar für die Verwaltung verketteter Listen oder dynamischer Strukturen in der SPS.
IS_ARRAY
Was es macht
Prüft, ob eine Variant-Variable auf ein Array zeigt.
Wann man es verwendet
Programmierung von Batch-Verarbeitungsfunktionen oder Datenpuffern.
Profi-Tipps
Koppeln Sie es mit CountOfElements, um die Array-Größe zu erfahren.
Ermöglicht die Erstellung universeller Sortierfunktionen.
Funktioniert auch für Arrays von Strukturen (UDT).
Vergleicher-Vergleich — Welchen verwenden?
Wählen Sie die richtige Anweisung für Ihre SPS-Logik
| Sie möchten... | Verwenden Sie dies | Beispiel |
|---|---|---|
| Exakte Gleichheit testen | CMP == | Produktcode korrekt |
| Hohe Sicherheitsschwelle | CMP >= | Druck > 10 bar |
| In einer Zone halten | IN_Range | Temp zwischen 18 und 24°C |
| Real-Fehler überwachen | |OK| | Divisionsergebnis prüfen |
| DB-Pointer prüfen | NOT_NULL | Rezept-DB geladen |
| Variant-Typ prüfen | EQ_Type | Eingang ist tatsächlich Int |
Häufig gestellte Fragen
Warum schlägt mein == Vergleich bei Real-Zahlen manchmal fehl?
Real-Zahlen (Gleitpunkt) haben eine begrenzte Genauigkeit. Eine Berechnung kann 10.000001 statt 10.0 ergeben. Verwenden Sie immer IN_Range mit einer kleinen Toleranz (z. B. zwischen 9.99 und 10.01), um Gleitpunktwerte zu vergleichen.
Was ist der Unterschied zwischen IN_Range und zwei in Reihe geschalteten Vergleichern?
Funktional ist es identisch. IN_Range ist jedoch grafisch kompakter, einfacher zu lesen und performanter, da die SPS die Anweisung in einem Schritt verarbeitet.
Wozu dienen die Anweisungen |OK| und |NOT_OK|?
Sie dienen dazu, 'stille' Fehler bei Real-Berechnungen zu erkennen. Wenn Sie die Wurzel aus einer negativen Zahl ziehen, ist das Ergebnis NaN. Ohne den |OK|-Test würde dieses NaN alle weiteren Berechnungen verfälschen und könnte einen CPU-Stopp verursachen.
Kann man komplette Strukturen (UDT) vergleichen?
Die CMP == Anweisung erlaubt den direkten Vergleich von zwei Strukturen nicht. Sie müssen jedes Mitglied einzeln vergleichen oder einen speziellen Baustein verwenden, der Speicherbereiche vergleicht.