Vergelijkingsoperaties
Beslissingslogica & Bereiken
Waardevergelijking is de motor van industriële beslissingslogica. Beheers standaard vergelijkers, bereiktests en geldigheidstests in TIA Portal.
Wat zijn vergelijkingsoperaties in TIA Portal?
Met vergelijkingsoperaties kunt u twee waarden van hetzelfde datatype (Integers, Reals, Tijd, enz.) vergelijken of controleren of een waarde binnen of buiten een gedefinieerd bereik valt. Ze zijn fundamenteel voor het maken van alarmdrempels, overgangsvoorwaarden en regelkringen.
TIA Portal biedt standaard vergelijkers (==, <>, >=, enz.), bereikinstructies (IN_Range, OUT_Range), geldigheidstests voor zwevende-kommagetallen en geavanceerde instructies voor Variant-datatypes en DB-pointers.
Standaard Vergelijkers
Beoordelen van gelijkheid en ongelijkheid tussen twee operanden
CMP == — Gelijk (Equal)
==Wat het doet
Vergelijkt twee operanden (IN1 en IN2). Als IN1 gelijk is aan IN2, geeft de instructie TRUE terug. Het ondersteunt bijna alle eenvoudige datatypes.
Wanneer te gebruiken
Controleren of een teller zijn doel heeft bereikt, of een HMI-instelpunt overeenkomt met de huidige waarde, of een specifieke machinetoestand actief is.
Pro Tips
Wees voorzichtig met Real-types: strikte gelijkheid kan mislukken door precisie. Geef de voorkeur aan een marge of bereik.
In SCL: IF value1 = value2 THEN ...
U kunt Strings vergelijken om identificatiecodes te controleren.
CMP <> — Niet gelijk (Not equal)
<>Wat het doet
Geeft TRUE terug als beide operanden IN1 en IN2 verschillend zijn. Het is het omgekeerde van gelijkheid.
Wanneer te gebruiken
Een verandering in waarde detecteren, ervoor zorgen dat een sensor geen 0 teruggeeft, of controleren of een bedrijfsmodus niet de verboden modus is.
Pro Tips
Vaak gebruikt om een actie te triggeren zodra een waarde afwijkt van het instelpunt.
In SCL: IF value1 <> value2 THEN ...
Kan worden gebruikt om tijdstempels (DTL) te vergelijken om te zien of een datum is gewijzigd.
CMP >= — Groter dan of gelijk
>=Wat het doet
Geeft TRUE terug als de eerste waarde (IN1) groter dan of gelijk is aan de tweede (IN2).
Wanneer te gebruiken
Een hoog-niveau alarm triggeren, verwarming toestaan zolang een temperatuur niet is bereikt.
Pro Tips
Ideaal voor veiligheidsdrempels waarbij de limietwaarde in de voorwaarde moet worden opgenomen.
In SCL: IF level >= setpoint THEN ...
Kan worden gebruikt met Time-types om te controleren of een minimale duur is verstreken.
CMP <= — Kleiner dan of gelijk
<=Wat het doet
Geeft TRUE terug als IN1 kleiner dan of gelijk is aan IN2.
Wanneer te gebruiken
Laag-niveau bewaking, een pomp stoppen, een minimale druk valideren.
Pro Tips
Vaak gekoppeld aan een hysterese om klapperen van de uitgang te voorkomen.
Werkt standaard met de types Date en Time.
In SCL: IF pressure <= min_limit THEN ...
CMP > — Groter dan
>Wat het doet
Geeft TRUE terug als IN1 strikt groter is dan IN2.
Wanneer te gebruiken
Strikte vergelijking die de doelwaarde niet mag bevatten.
Pro Tips
Minder gebruikt dan >= in automatisering, maar nuttig voor wiskundige algoritmen.
In SCL: IF current > max THEN ...
Bij voorkeur gebruiken voor lus-index vergelijkingen (FOR).
CMP < — Kleiner dan
<Wat het doet
Geeft TRUE terug als IN1 strikt kleiner is dan IN2.
Wanneer te gebruiken
Strikte ondergrens tests.
Pro Tips
Nuttig om te controleren of een waarde 'negatief' is (val < 0).
In SCL: IF val < 0 THEN ...
Werkt met karakters (alfabetisch sorteren).
Bereikoperaties
Controleren of een waarde binnen een interval [MIN..MAX] valt
IN_Range — Binnen bereik
IN_RangeWat het doet
Controleert of een waarde (VAL) tussen een ondergrens (MIN) en een bovengrens (MAX) ligt. Het interval is gesloten: MIN <= VAL <= MAX.
Wanneer te gebruiken
Bewaking van bedrijfsvensters (bijv. druk tussen 2 en 5 bar), validatie van machinesnelheid.
Pro Tips
Vervangt op voordelige wijze twee in serie geplaatste vergelijkers, wat het netwerk leesbaarder maakt.
Als MIN > MAX, geeft de instructie altijd FALSE terug.
Zeer nuttig voor 'Ready to Run' interlocks die meerdere analoge condities vereisen.
OUT_Range — Buiten bereik
OUT_RangeWat het doet
Geeft TRUE terug als de waarde (VAL) buiten het interval ligt dat gedefinieerd is door MIN en MAX. Ofwel VAL < MIN, ofwel VAL > MAX.
Wanneer te gebruiken
Detectie van anomalieën of het overschrijden van extreme drempels (bereikalarm).
Pro Tips
Het is het exacte omgekeerde van IN_Range.
Gebruik het om proces-alarmlogica te vereenvoudigen.
In SCL: res := (val < min) OR (val > max);
Geldigheidstests
De integriteit van zwevende-kommagetallen controleren
|OK| — Geldigheid controleren
|OK|Wat het doet
Controleert of een zwevende-kommawaarde (Real of LReal) een geldig getal is. Geeft FALSE terug als de waarde NaN (Not a Number) of Inf (Oneindig) is.
Wanneer te gebruiken
Na complexe berekeningen (delingen, worteltrekken, log) om te voorkomen dat wiskundige fouten worden doorgegeven die de PLC kunnen stoppen.
Pro Tips
Onmisbaar voordat u een Real-waarde naar een analoge uitgang of een drive stuurt.
Maakt het mogelijk om indirecte deling door nul te detecteren.
Handig voor het filteren van feedback van falende sensoren.
|NOT_OK| — Ongeldigheid controleren
|NOT_OK|Wat het doet
Geeft TRUE terug als de zwevende-kommawaarde ongeldig is (NaN of Inf).
Wanneer te gebruiken
Een berekeningsfout-bit triggeren of een fallback-waarde forceren.
Pro Tips
Gebruik het om uw machine in veiligheid te brengen als een trajectberekening mislukt.
Het is het equivalent van IS_NAN in andere talen.
In SCL: IF NOT OK(value) THEN ...
Geavanceerde Vergelijkingen (Variant)
Instructies voor dynamisch programmeren en complexe types
EQ_Type / NE_Type
Wat het doet
Vergelijkt het datatype van een Variant-variabele met dat van een andere variabele of een gedefinieerd type.
Wanneer te gebruiken
In generieke blokken die verschillende datatypes moeten verwerken (bijv. een log-blok dat Int of Real accepteert).
Pro Tips
Essentieel voor objectgeoriënteerd programmeren en herbruikbare bibliotheken.
Maakt het mogelijk om dynamische geheugentoegang te beveiligen.
Gebruikt met de VariantGet instructie.
IS_NULL / NOT_NULL
Wat het doet
Controleert of een pointer (Variant of DB_ANY) nul is (naar niets wijst).
Wanneer te gebruiken
Toegangsfouten vermijden bij het gebruik van indirect geadresseerde DB's.
Pro Tips
Test altijd NOT_NULL voordat u een methode aanroept of gegevens leest via een pointer.
Equivalent aan het 'Nothing' of 'null' object in C#/Java.
Onmisbaar voor het beheer van gekoppelde lijsten of dynamische structuren in PLC.
IS_ARRAY
Wat het doet
Controleert of een Variant-variabele naar een Array wijst.
Wanneer te gebruiken
Programmeren van batch-verwerkingsfuncties of databuffers.
Pro Tips
Koppel het aan CountOfElements om de array-grootte te kennen.
Maakt het mogelijk om universele sorteerfuncties te maken.
Werkt ook voor arrays van structuren (UDT).
Vergelijker Vergelijking — Welke te gebruiken?
Kies de juiste instructie voor uw PLC-logica
| U wilt... | Gebruik dit | Voorbeeld |
|---|---|---|
| Exacte gelijkheid testen | CMP == | Productcode correct |
| Hoge veiligheidsdrempel | CMP >= | Druk > 10 bar |
| In een zone houden | IN_Range | Temp tussen 18 en 24°C |
| Real-fouten bewaken | |OK| | Resultaat deling controleren |
| DB-pointer controleren | NOT_NULL | Recept DB geladen |
| Variant-type controleren | EQ_Type | Ingang is wel degelijk Int |
Veelgestelde Vragen
Waarom mislukt mijn == vergelijking soms met Real-getallen?
Real-getallen (zwevende-komma) hebben een beperkte precisie. Een berekening kan 10.000001 opleveren in plaats van 10.0. Gebruik altijd IN_Range met een kleine tolerantie (bijv. tussen 9.99 en 10.01) om zwevende-kommawaarden te vergelijken.
Wat is het verschil tussen IN_Range en twee vergelijkers in serie?
Functioneel is het identiek. IN_Range is echter grafisch compacter, gemakkelijker te lezen en performanter omdat de PLC de instructie in één stap verwerkt.
Waarvoor dienen de instructies |OK| en |NOT_OK|?
Ze dienen om 'stille' fouten in Real-berekeningen te detecteren. Als u de wortel uit een negatief getal trekt, is het resultaat NaN. Zonder de |OK|-test zal dit NaN al uw andere berekeningen vervuilen en kan het een CPU-stop veroorzaken.
Kunnen we complete structuren (UDT) vergelijken?
De CMP == instructie staat het niet toe om direct twee structuren te vergelijken. U moet elk lid afzonderlijk vergelijken of een specifiek blok gebruiken dat geheugenzones vergelijkt.