Jämförelseoperationer
Beslutslogik & Områden
Värdejämförelse är motorn i industriell beslutslogik. Bemästra standardkomparatorer, områdetester och validitetskontroller i TIA Portal.
Vad är jämförelseoperationer i TIA Portal?
Jämförelseoperationer gör det möjligt att jämföra två värden av samma datatyp (Heltal, Real, Tid, etc.) eller kontrollera om ett värde ligger inom eller utanför ett definierat område. De är grundläggande för att skapa larmtrösklar, övergångsvillkor och reglerloopar.
TIA Portal erbjuder standardkomparatorer (==, <>, >=, etc.), områdeinstruktioner (IN_Range, OUT_Range), validitetstester för flyttal och avancerade instruktioner för Variant-datatyp och DB-pekare.
Standardkomparatorer
Utvärdering av likhet och olikhet mellan två operander
CMP == — Lika med (Equal)
==Vad den gör
Jämför två operander (IN1 och IN2). Om IN1 är lika med IN2 returnerar instruktionen TRUE. Den stöder nästan alla enkla datatyper.
När den ska användas
Kontrollera om en räknare har nått sitt mål, om ett HMI-börvärde motsvarar det aktuella värdet, eller om ett specifikt maskintillstånd är aktivt.
Proffstips
Var försiktig med Real-typer: strikt likhet kan misslyckas på grund av precisionen. Föredra en marginal eller ett område.
I SCL: IF value1 = value2 THEN ...
Du kan jämföra strängar (String) för att verifiera identifikationskoder.
CMP <> — Inte lika med (Not equal)
<>Vad den gör
Returnerar TRUE om de båda operanderna IN1 och IN2 är olika. Det är motsatsen till lika med.
När den ska användas
Detektera en värdeändring, säkerställa att en givare inte returnerar 0, eller kontrollera att ett driftsläge inte är det förbjudna.
Proffstips
Ofta använd för att utlösa en åtgärd så snart ett värde avviker från sitt börvärde.
I SCL: IF value1 <> value2 THEN ...
Kan användas för att jämföra tidsstämplar (DTL) för att se om ett datum har ändrats.
CMP >= — Större än eller lika med
>=Vad den gör
Returnerar TRUE om det första värdet (IN1) är större än eller lika med det andra (IN2).
När den ska användas
Utlösa ett högnivålarm, tillåta uppvärmning så länge en temperatur inte har uppnåtts.
Proffstips
Idealisk för säkerhetströsklar där gränsvärdet ska inkluderas i villkoret.
I SCL: IF level >= setpoint THEN ...
Kan användas med Time-typer för att kontrollera om en minsta tid har förflutit.
CMP <= — Mindre än eller lika med
<=Vad den gör
Returnerar TRUE om IN1 är mindre än eller lika med IN2.
När den ska användas
Lågnivåövervakning, stopp av en pump, validering av ett minimitryck.
Proffstips
Ofta kopplad till en hysteres för att undvika utgångsfladder.
Fungerar nativt med Date och Time-typer.
I SCL: IF pressure <= min_limit THEN ...
CMP > — Större än (Greater than)
>Vad den gör
Returnerar TRUE om IN1 är strikt större än IN2.
När den ska användas
Strikt jämförelse som inte ska inkludera målvärdet.
Proffstips
Används mindre än >= i automatisering, men användbar för matematiska algoritmer.
I SCL: IF current > max THEN ...
Föredras för loop-index jämförelser (FOR).
CMP < — Mindre än (Less than)
<Vad den gör
Returnerar TRUE om IN1 är strikt mindre än IN2.
När den ska användas
Tester av strikta nedre gränser.
Proffstips
Användbar för att kontrollera om ett värde är 'negativt' (val < 0).
I SCL: IF val < 0 THEN ...
Fungerar med tecken (alfabetisk sortering).
Områdesoperationer
Kontrollera tillhörighet till ett intervall [MIN..MAX]
IN_Range — Inom området
IN_RangeVad den gör
Kontrollerar om ett värde (VAL) ligger mellan en nedre gräns (MIN) och en övre gräns (MAX). Intervallet är slutet: MIN <= VAL <= MAX.
När den ska användas
Övervakning av driftsfönster (t.ex. tryck mellan 2 och 5 bar), validering av maskinhastighet.
Proffstips
Ersätter fördelaktigt två seriekopplade komparatorer, vilket gör nätverket mer läsbart.
Om MIN > MAX returnerar instruktionen alltid FALSE.
Mycket användbar för 'Ready to Run'-villkor som kräver flera analoga förutsättningar.
OUT_Range — Utanför området
OUT_RangeVad den gör
Returnerar TRUE om värdet (VAL) ligger utanför intervallet definierat av MIN och MAX. Antingen VAL < MIN eller VAL > MAX.
När den ska användas
Detektering av avvikelser eller överskridande av extrema tröskelvärden (områdeslarm).
Proffstips
Det är den exakta motsatsen till IN_Range.
Använd den för att förenkla processlarmlogik.
I SCL: res := (val < min) OR (val > max);
Validitetstester
Kontrollera integriteten hos flyttal
|OK| — Kontrollera validitet
|OK|Vad den gör
Kontrollerar om ett flyttalsvärde (Real eller LReal) är ett giltigt tal. Returnerar FALSE om värdet är NaN (Not a Number) eller Inf (Infinity).
När den ska användas
Efter komplexa beräkningar (divisioner, kvadratrötter, log) för att undvika att sprida matematiska fel som kan stoppa PLC:n.
Proffstips
Oumbärlig innan ett Real-värde skickas till en analog utgång eller en omriktare.
Gör det möjligt att detektera en indirekt division med noll.
Praktisk för att filtrera returvärden från felaktiga givare.
|NOT_OK| — Kontrollera ogiltighet
|NOT_OK|Vad den gör
Returnerar TRUE om flyttalsvärdet är ogiltigt (NaN eller Inf).
När den ska användas
Utlösa en beräkningsfelsbit eller tvinga fram ett ersättningsvärde.
Proffstips
Använd den för att sätta maskinen i säkert tillstånd om en banberäkning misslyckas.
Det är motsvarigheten till IS_NAN i andra språk.
I SCL: IF NOT OK(value) THEN ...
Avancerade jämförelser (Variant)
Instruktioner för dynamisk programmering och komplexa typer
EQ_Type / NE_Type
Vad den gör
Jämför datatypen för en Variant-variabel med en annan variabel eller en definierad typ.
När den ska användas
I generiska block som ska hantera olika datatyper (t.ex. ett loggblock som accepterar Int eller Real).
Proffstips
Essenziell för objektorienterad programmering och återanvändbara bibliotek.
Gör det möjligt att säkra dynamisk minnesåtkomst.
Används med instruktionen VariantGet.
IS_NULL / NOT_NULL
Vad den gör
Kontrollerar om en pekare (Variant eller DB_ANY) är noll (pekar inte på någonting).
När den ska användas
Undvika åtkomstfel vid användning av indirekt adresserade DB.
Proffstips
Testa alltid NOT_NULL innan en metod anropas eller data läses via en pekare.
Motsvarighet till 'Nothing' eller 'null' objekt i C#/Java.
Oumbärlig för hantering av länkade listor eller dynamiska strukturer i PLC.
IS_ARRAY
Vad den gör
Kontrollerar om en Variant-variabel pekar på en array (Array).
När den ska användas
Programmering av batch-bearbetningsfunktioner eller databuffertar.
Proffstips
Kombinera den med CountOfElements för att få veta arrayens storlek.
Gör det möjligt att skapa universella sorteringsfunktioner.
Fungerar även för arrayer av strukturer (UDT).
Jämförelse av komparatorer — Vilken ska man använda?
Välj rätt instruktion för din PLC-logik
| Du vill... | Använd denna | Exempel |
|---|---|---|
| Testa exakt likhet | CMP == | Produktkod korrekt |
| Hög säkerhetströskel | CMP >= | Tryck > 10 bar |
| Hålla inom en zon | IN_Range | Temp mellan 18 och 24°C |
| Övervaka Real-fel | |OK| | Kontrollera divisionsresultat |
| Verifiera DB-pekare | NOT_NULL | Recept-DB laddat |
| Verifiera Variant-typ | EQ_Type | Ingången är verkligen Int |
Vanliga frågor
Varför misslyckas min == jämförelse ibland med Real-tal?
Real-tal (flyttal) har begränsad precision. En beräkning kan ge 10.000001 istället för 10.0. Använd alltid IN_Range med en liten tolerans (t.ex. mellan 9.99 och 10.01) för att jämföra flyttalsvärden.
Vad är skillnaden mellan IN_Range och två seriekopplade komparatorer?
Funktionellt är det identiskt. Men IN_Range är grafiskt mer kompakt, mer lättläst och mer effektiv eftersom PLC:n bearbetar instruktionen i ett enda steg.
Vad används instruktionerna |OK| och |NOT_OK| till?
De används för att upptäcka 'tysta' fel i Real-beräkningar. Om du drar kvadratroten ur ett negativt tal blir resultatet NaN. Utan |OK|-testet kommer detta NaN att förorena alla dina andra beräkningar och kan orsaka ett CPU-stopp.
Kan man jämföra hela strukturer (UDT)?
Instruktionen CMP == tillåter inte direkt jämförelse av två strukturer. Du måste jämföra varje medlem individuellt eller använda ett specifikt block som jämför minnesområden.