Istruzioni TIA Portal

Operazioni di Confronto
Logica di decisione e Intervalli

Il confronto dei valori è il motore della logica decisionale industriale. Padroneggia i comparatori standard, i test di intervallo e le verifiche di validità.

Cosa sono le operazioni di confronto in TIA Portal?

Le operazioni di confronto consentono di confrontare due valori dello stesso tipo di dati (Interi, Reali, Tempo, ecc.) o di verificare se un valore si trova all'interno o all'esterno di un intervallo definito. Sono fondamentali per creare soglie di allarme, condizioni di transizione e cicli di regolazione.

TIA Portal offre comparatori standard (==, <>, >=, ecc.), istruzioni di intervallo (IN_Range, OUT_Range), test di validità per numeri a virgola mobile e istruzioni avanzate per tipi di dati Variant e puntatori DB.

Comparatori Standard

Valutazione dell'uguaglianza e delle disuguaglianze tra due operandi

CMP == — Uguale (Equal)

==

Cosa fa

Confronta due operandi (IN1 e IN2). Se IN1 è uguale a IN2, l'istruzione restituisce TRUE. Supporta quasi tutti i tipi di dati semplici.

Quando usarlo

Verificare se un contatore ha raggiunto l'obiettivo, se un setpoint HMI corrisponde al valore attuale o se uno specifico stato macchina è attivo.

Consigli Pro

Attenzione con i tipi Real: l'uguaglianza stretta può fallire a causa della precisione. Preferisci un margine o un intervallo.

In SCL: IF value1 = value2 THEN ...

Puoi confrontare stringhe di caratteri (String) per verificare codici di identificazione.

CMP <> — Diverso (Not equal)

<>

Cosa fa

Restituisce TRUE se i due operandi IN1 e IN2 sono diversi. È l'inverso dell'uguaglianza.

Quando usarlo

Rilevare una variazione di valore, assicurarsi che un sensore non restituisca 0 o verificare che una modalità di marcia non sia quella vietata.

Consigli Pro

Spesso utilizzato per attivare un'azione non appena un valore si discosta dal suo setpoint.

In SCL: IF value1 <> value2 THEN ...

Può essere utilizzato per confrontare timestamp (DTL) per vedere se una data è cambiata.

CMP >= — Maggiore o uguale

>=

Cosa fa

Restituisce TRUE se il primo valore (IN1) è maggiore o uguale al secondo (IN2).

Quando usarlo

Attivare un allarme di alto livello, consentire il riscaldamento finché non viene raggiunta una temperatura.

Consigli Pro

Ideale per soglie di sicurezza in cui il valore limite deve essere incluso nella condizione.

In SCL: IF level >= setpoint THEN ...

Può essere utilizzato con tipi Time per verificare se è trascorso un tempo minimo.

CMP <= — Minore o uguale

<=

Cosa fa

Restituisce TRUE se IN1 è minore o uguale a IN2.

Quando usarlo

Monitoraggio di basso livello, arresto di una pompa, validazione di una pressione minima.

Consigli Pro

Spesso accoppiato a un'isteresi per evitare oscillazioni dell'uscita.

Funziona nativamente con i tipi Date e Time.

In SCL: IF pressure <= min_limit THEN ...

CMP > — Maggiore (Greater than)

>

Cosa fa

Restituisce TRUE se IN1 è strettamente maggiore di IN2.

Quando usarlo

Confronto stretto che non deve includere il valore target.

Consigli Pro

Meno usato di >= in automazione, ma utile per algoritmi matematici.

In SCL: IF current > max THEN ...

Preferibile per i confronti di indici di cicli (FOR).

CMP < — Minore (Less than)

<

Cosa fa

Restituisce TRUE se IN1 è strettamente minore di IN2.

Quando usarlo

Test di limiti inferiori stretti.

Consigli Pro

Utile per verificare se un valore è 'negativo' (val < 0).

In SCL: IF val < 0 THEN ...

Funziona con i caratteri (ordinamento alfabetico).

Operazioni di Intervallo

Verifica dell'appartenenza a un intervallo [MIN..MAX]

IN_Range — All'interno

IN_Range

Cosa fa

Verifica se un valore (VAL) si trova tra un limite minimo (MIN) e un limite massimo (MAX). L'intervallo è chiuso: MIN <= VAL <= MAX.

Quando usarlo

Monitoraggio della finestra di funzionamento (es: pressione tra 2 e 5 bar), validazione della velocità macchina.

Consigli Pro

Sostituisce vantaggiosamente due comparatori messi in serie, rendendo il segmento più leggibile.

Se MIN > MAX, l'istruzione restituisce sempre FALSE.

Molto utile per i 'Ready to Run' che richiedono diverse condizioni analogiche.

OUT_Range — All'esterno

OUT_Range

Cosa fa

Restituisce TRUE se il valore (VAL) è all'esterno dell'intervallo definito da MIN e MAX. O VAL < MIN, o VAL > MAX.

Quando usarlo

Rilevamento di anomalie o superamento di soglie estreme (allarme di intervallo).

Consigli Pro

È l'esatto inverso di IN_Range.

Usalo per semplificare la logica di allarme di processo.

In SCL: res := (val < min) OR (val > max);

Test di Validità

Verifica dell'integrità dei numeri a virgola mobile

|OK| — Verifica validità

|OK|

Cosa fa

Verifica se un valore mobile (Real o LReal) è un numero valido. Restituisce FALSE se il valore è NaN (Not a Number) o Inf (Infinito).

Quando usarlo

Dopo calcoli complessi (divisioni, radici quadrate, log) per evitare di propagare errori matematici che potrebbero arrestare il PLC.

Consigli Pro

Indispensabile prima di inviare un valore Real a un'uscita analogica o a un inverter.

Permette di rilevare una divisione per zero indiretta.

Pratico per filtrare i feedback di sensori guasti.

|NOT_OK| — Verifica invalidità

|NOT_OK|

Cosa fa

Restituisce TRUE se il valore mobile è invalido (NaN o Inf).

Quando usarlo

Attivare un bit di errore di calcolo o forzare un valore di sicurezza.

Consigli Pro

Usalo per mettere la tua macchina in sicurezza se un calcolo di traiettoria fallisce.

È l'equivalente di IS_NAN in altri linguaggi.

In SCL: IF NOT OK(value) THEN ...

Confronti avanzati (Variant)

Istruzioni per la programmazione dinamica e i tipi complessi

EQ_Type / NE_Type

Cosa fa

Confronta il tipo di dati di una variabile di tipo Variant con quello di un'altra variabile o di un tipo definito.

Quando usarlo

In blocchi generici che devono elaborare diversi tipi di dati (es: un blocco di log che accetta Int o Real).

Consigli Pro

Essenziale per la programmazione orientata agli oggetti e le librerie riutilizzabili.

Permette di rendere sicuri gli accessi alla memoria dinamica.

Usato con l'istruzione VariantGet.

IS_NULL / NOT_NULL

Cosa fa

Verifica se un puntatore (Variant o DB_ANY) è nullo (non punta a nulla).

Quando usarlo

Evitare errori di accesso quando si utilizzano DB indirizzati indirettamente.

Consigli Pro

Testare sempre NOT_NULL prima di chiamare un metodo o leggere un dato tramite un puntatore.

Equivalente dell'oggetto 'Nothing' o 'null' in C#/Java.

Indispensabile per la gestione di liste concatenate o strutture dinamiche in PLC.

IS_ARRAY

Cosa fa

Verifica se una variabile Variant punta a un array (Array).

Quando usarlo

Programmazione di funzioni di elaborazione batch o di buffer di dati.

Consigli Pro

Accoppialo con CountOfElements per conoscere la dimensione dell'array.

Permette di creare funzioni di ordinamento universali.

Funziona anche per gli array di strutture (UDT).

Confronto dei comparatori — Quale usare?

Scegliere l'istruzione giusta per la tua logica PLC

Vuoi...Usa questoEsempio
Testare l'uguaglianza esattaCMP ==Codice prodotto corretto
Soglia di sicurezza altaCMP >=Pressione > 10 bar
Mantenere in una zonaIN_RangeTemp tra 18 e 24°C
Monitorare errori Real|OK|Verifica risultato divisione
Verificare un puntatore DBNOT_NULLDB di ricetta caricato
Verificare un tipo VariantEQ_TypeL'ingresso è Int

Domande Frequenti

Perché il mio confronto == fallisce a volte con i numeri Real?

I numeri Real (virgola mobile) hanno una precisione limitata. Un calcolo può dare 10.000001 invece di 10.0. Usa sempre IN_Range con una piccola tolleranza (es: tra 9.99 e 10.01) per confrontare valori mobili.

Qual è la differenza tra IN_Range e due comparatori messi in serie?

Funzionalmente è identico. Tuttavia, IN_Range è graficamente più compatto, più facile da leggere e più performante poiché il PLC elabora l'istruzione in un unico passaggio.

A cosa servono le istruzioni |OK| e |NOT_OK|?

Servono a rilevare gli errori 'silenziosi' dei calcoli Real. Se fai una radice quadrata di un numero negativo, il risultato è NaN. Senza il test |OK|, questo NaN inquinerebbe tutti gli altri calcoli e potrebbe causare un arresto della CPU.

Si possono confrontare strutture complete (UDT)?

L'istruzione CMP == non permette di confrontare direttamente due strutture. Devi confrontare ogni membro individualmente o utilizzare un blocco specifico che confronti le zone di memoria.

Genera la tua logica di confronto tramite IA

Descrivi le tue soglie e condizioni in linguaggio naturale, T-IA Connect genererà i segmenti di confronto ottimizzati con gestione degli errori.