TIA Portal Anweisungen

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_Range

Was 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_Range

Was 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 diesBeispiel
Exakte Gleichheit testenCMP ==Produktcode korrekt
Hohe SicherheitsschwelleCMP >=Druck > 10 bar
In einer Zone haltenIN_RangeTemp zwischen 18 und 24°C
Real-Fehler überwachen|OK|Divisionsergebnis prüfen
DB-Pointer prüfenNOT_NULLRezept-DB geladen
Variant-Typ prüfenEQ_TypeEingang 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.

Generieren Sie Ihre Vergleichslogik per KI

Beschreiben Sie Ihre Schwellenwerte und Bedingungen in natürlicher Sprache, T-IA Connect generiert die optimierten Vergleichsnetzwerke mit Fehlerbehandlung.