Operazioni logiche a bit
Contatti, Bobine e Rilevamento fronti
Il cuore della programmazione PLC. Le istruzioni logiche a bit gestiscono ogni operazione booleana — dai semplici contatti e bobine ai flip-flop e al rilevamento dei fronti. Padroneggiale e potrai costruire qualsiasi logica di automazione.
Cosa sono le operazioni logiche a bit?
Le operazioni logiche a bit sono le istruzioni più fondamentali nella programmazione dei PLC. Lavorano con segnali booleani (TRUE/FALSE, 1/0) — leggendo gli stati degli ingressi, combinando le condizioni con logica AND/OR e controllando le uscite. In LAD, queste appaiono come contatti e bobine sui segmenti. In FBD, appaiono come blocchi di porte AND/OR/NOT.
Ogni programma PLC utilizza ampiamente le istruzioni logiche a bit. Un circuito di marcia/arresto motore, una condizione di allarme, un interblocco valvola — iniziano tutti con contatti che leggono gli stati dei sensori e finiscono con bobine che pilotano gli attuatori.
Contatti — Lettura degli stati d'ingresso
I contatti leggono lo stato booleano di una variabile e lo trasmettono lungo la catena logica
Contatto normalmente aperto
—| |—Cosa fa
Legge una variabile booleana (BOOL). Se la variabile è TRUE (1), il contatto si chiude e passa il segnale (RLO = TRUE) all'elemento successivo. Se la variabile è FALSE (0), il contatto è aperto e blocca il flusso del segnale. Questa è l'istruzione più usata nella programmazione LAD.
Quando usarlo
Ogni volta che devi verificare se una condizione è TRUE: un pulsante è premuto? Un sensore è attivo? Un flag è impostato? Posiziona un contatto normalmente aperto e assegna la tua variabile.
Consigli professionali
Il nome 'Normalmente Aperto' deriva dalla logica a relè — il contatto è aperto (non passa corrente) nel suo stato normale/di riposo. Si chiude quando viene eccitato.
Più contatti NO in serie creano una logica AND. Più contatti NO in rami paralleli creano una logica OR.
In FBD, l'equivalente è semplicemente collegare una variabile BOOL all'ingresso di un blocco AND/OR — non è necessario alcun simbolo di contatto esplicito.
Contatto normalmente chiuso
—|/|—Cosa fa
L'inverso di un contatto normalmente aperto. Se la variabile è FALSE (0), il contatto è chiuso e passa il segnale. Se la variabile è TRUE (1), il contatto si apre e blocca il segnale. Agisce come un'operazione NOT sul valore della variabile.
Quando usarlo
Quando devi verificare che una condizione NON sia vera: arresto di emergenza non premuto, nessun guasto attivo, finecorsa non raggiunto. Molto comune per gli interblocchi di sicurezza e le condizioni di allarme.
Consigli professionali
Usa i contatti NC per gli arresti di emergenza e i circuiti di sicurezza — sono a prova di guasto. Se il filo si rompe, il contatto NC si apre e arresta la macchina.
In FBD, l'equivalente è un ingresso negato (piccolo cerchio sul pin di ingresso di un blocco AND/OR).
Non confondere l'istruzione di contatto NC con un pulsante fisicamente NC. Sono concetti indipendenti.
Inverti RLO
—|NOT|—Cosa fa
Inverte (nega) l'attuale Risultato dell'Operazione Logica (RLO). Se la catena logica fino a questo punto valuta TRUE, NOT la rende FALSE e viceversa. Opera sul risultato logico accumulato, non su una variabile specifica.
Quando usarlo
Quando devi invertire una espressione logica complessa invece di una singola variabile. Invece di riscrivere l'intera condizione con contatti invertiti, posiziona NOT alla fine per invertire il risultato.
Consigli professionali
NOT inverte l'intero RLO in quel punto della catena — è diverso da un contatto NC che inverte solo una variabile.
In FBD, usa il blocco NOT o nega l'uscita di una porta logica.
Usa con parsimonia — l'uso eccessivo di NOT rende la logica difficile da leggere. Spesso, ristrutturare la logica è più chiaro.
Bobine — Controllo delle uscite
Le bobine scrivono il risultato della catena logica su una variabile di uscita
Assegnazione
—( )—Cosa fa
Scrive l'attuale RLO (Risultato dell'Operazione Logica) in una variabile booleana. Se la catena logica è TRUE, la variabile diventa TRUE. Se FALSE, la variabile diventa FALSE. Questa è la bobina di uscita standard — riflette direttamente la logica di ingresso ad ogni ciclo di scansione.
Quando usarlo
Per qualsiasi uscita che dovrebbe seguire direttamente le sue condizioni di ingresso. Una spia luminosa che è ACCESA quando un motore gira, una valvola che si apre quando le condizioni sono soddisfatte. L'uscita segue l'ingresso — quando le condizioni diventano FALSE, anche l'uscita diventa FALSE.
Consigli professionali
La bobina di assegnazione è 'non ritentiva' — scrive ad ogni scansione. Se la logica diventa FALSE, l'uscita diventa immediatamente FALSE.
Una variabile dovrebbe essere assegnata in UN solo segmento. Più assegnazioni alla stessa variabile fanno sì che l'ultima vinca, portando a comportamenti imprevedibili.
In FBD, l'assegnazione è semplicemente il collegamento dell'uscita di una porta logica a una variabile BOOL.
Assegnazione negata
—(/)—Cosa fa
Scrive l'RLO invertito in una variabile booleana. Se la catena logica è TRUE, la variabile diventa FALSE. Se la catena logica è FALSE, la variabile diventa TRUE. Combina Assegnazione + NOT in un'unica istruzione.
Quando usarlo
Quando un'uscita dovrebbe essere attiva nella condizione opposta. Ad esempio, una lampada 'sistema OK' che si SPEGNE quando viene rilevato un guasto. Invece di invertire l'intera catena logica, usa la bobina negata.
Consigli professionali
Equivalente a posizionare un NOT prima di una regolare bobina di assegnazione, ma più compatto.
Usa con cautela — le bobine negate possono essere confuse da leggere. A volte è più chiaro ristrutturare la logica.
In FBD, questo è un collegamento di uscita negato.
Reset uscita
—(R)—Cosa fa
Quando l'RLO è TRUE, la variabile viene impostata su FALSE (0). Quando l'RLO è FALSE, la variabile rimane invariata (mantiene il suo valore attuale). Questa è un'operazione unidirezionale — può solo spegnere le cose, mai accenderle.
Quando usarlo
Nei circuiti Set/Reset: un segmento imposta l'uscita (Set, accende), un altro la resetta (Reset, spegne). Usa Reset per condizioni di arresto, eliminazione guasti e riconoscimento allarmi. Il Reset ha tipicamente la priorità nella logica di sicurezza.
Consigli professionali
Reset agisce solo quando il suo RLO è TRUE. Quando RLO è FALSE, l'uscita rimane invariata — NON la imposta su TRUE.
In una coppia S/R, l'istruzione che appare per ULTIMA nel programma ha la priorità (se entrambe le condizioni sono TRUE simultaneamente).
Il Reset è ritentivo — dopo un Reset, l'uscita rimane FALSE finché non viene esplicitamente impostata di nuovo con un Set.
Set uscita
—(S)—Cosa fa
Quando l'RLO è TRUE, la variabile viene impostata su TRUE (1). Quando l'RLO è FALSE, la variabile rimane invariata (mantiene il suo valore attuale). Questa è un'operazione unidirezionale — può solo accendere le cose, mai spegnerle.
Quando usarlo
Nei circuiti Set/Reset: usa Set per condizioni di avvio, segnali di autoritenuta e flag di primo ciclo. Una volta impostata, l'uscita rimane TRUE finché non viene esplicitamente resettata — rendendola 'auto-ritenuta' senza bisogno di un contatto di autoritenuta.
Consigli professionali
Set agisce solo quando il suo RLO è TRUE. Quando RLO è FALSE, l'uscita rimane invariata — NON la resetta.
Controllo motore classico: Segmento 1 = Pulsante Marcia → Set Motore. Segmento 2 = Pulsante Arresto OPPURE Guasto → Reset Motore.
Fai attenzione con le variabili ritentive nei circuiti di sicurezza — dopo un ciclo di alimentazione, le uscite Set potrebbero mantenere il loro ultimo stato a seconda delle impostazioni del DB.
Operazioni su campo di bit
Imposta o resetta un intervallo di bit in un'unica operazione
SET_BF — Imposta campo di bit
Cosa fa
Imposta un gruppo contiguo di bit su TRUE a partire da un indirizzo specificato. Definisci il bit iniziale e il numero di bit da impostare. Quando l'RLO è TRUE, tutti i bit specificati vengono impostati a 1.
Quando usarlo
Quando devi attivare più uscite correlate simultaneamente — ad esempio, impostando tutti i bit di una parola di stato, inizializzando un gruppo di flag o attivando un banco di uscite in una sola volta.
Consigli professionali
Utile per operazioni batch invece di scrivere singole istruzioni Set per ogni bit.
Il parametro del numero di bit determina quanti bit consecutivi sono influenzati.
Come Set, questo agisce solo quando RLO è TRUE — i bit rimangono invariati quando RLO è FALSE.
RESET_BF — Resetta campo di bit
Cosa fa
Resetta un gruppo contiguo di bit su FALSE a partire da un indirizzo specificato. Definisci il bit iniziale e il numero di bit da resettare. Quando l'RLO è TRUE, tutti i bit specificati vengono azzerati (0).
Quando usarlo
Quando devi cancellare più flag o uscite contemporaneamente — ad esempio, cancellando tutti i bit di allarme in una parola di stato, resettando un gruppo di uscite durante lo spegnimento o inizializzando un'area dati.
Consigli professionali
La controparte di SET_BF — usali insieme per operazioni di Set/Reset a livello di gruppo.
Particolarmente utile per cancellare parole di allarme o registri di stato in un'unica operazione.
Come Reset, questo agisce solo quando RLO è TRUE — i bit rimangono invariati quando RLO è FALSE.
Flip-Flop — Circuiti di memoria
Elementi bistabili che ricordano il loro stato finché non vengono esplicitamente modificati
SR — Flip-Flop Set/Reset
Cosa fa
Un flip-flop bistabile con priorità al Set. Ha due ingressi: S (Set) e R (Reset), e un'uscita Q. Quando S=TRUE, Q diventa TRUE. Quando R=TRUE, Q diventa FALSE. Quando sia S che R sono TRUE simultaneamente, Q è TRUE (il Set domina).
Quando usarlo
Per circuiti di autoritenuta dove la condizione di Set dovrebbe avere la priorità. In un flip-flop SR, se sia marcia che arresto vengono premuti contemporaneamente, l'uscita rimane ACCESA. Usa questo quando la 'priorità alla marcia' è accettabile.
Consigli professionali
SR = Priorità al Set. Se S=1 e R=1 → Q=1. Usalo quando l'avvio è più importante dell'arresto.
Nelle applicazioni critiche per la sicurezza, preferisci RS (priorità al Reset) — è più sicuro se entrambe le condizioni si attivano simultaneamente.
Il flip-flop è un singolo blocco sia in LAD che in FBD con ingressi S, R e uscita Q.
RS — Flip-Flop Reset/Set
Cosa fa
Un flip-flop bistabile con priorità al Reset. Ha due ingressi: R (Reset) e S (Set), e un'uscita Q. Quando S=TRUE, Q diventa TRUE. Quando R=TRUE, Q diventa FALSE. Quando sia R che S sono TRUE simultaneamente, Q è FALSE (il Reset domina).
Quando usarlo
Per circuiti di autoritenuta dove la sicurezza è fondamentale. La condizione di Reset (arresto) ha la priorità — se sia marcia che arresto sono attivi, l'uscita è SPENTA. Questa è la scelta standard per il controllo motore e gli interblocchi di sicurezza.
Consigli professionali
RS = Priorità al Reset. Se S=1 e R=1 → Q=0. La scelta più sicura per la maggior parte delle applicazioni industriali.
Modello classico di controllo motore: S = Pulsante_Marcia AND NOT Guasto, R = Pulsante_Arresto OR Arresto_Emergenza OR Guasto.
L'uscita Q è ritentiva all'interno del ciclo di scansione — mantiene il suo valore finché il flip-flop non viene valutato di nuovo.
Rilevamento fronti — Rilevamento dei cambiamenti di segnale
Rileva quando un segnale passa da FALSE→TRUE o da TRUE→FALSE
Interroga operando per fronte positivo
—|P|—Cosa fa
Rileva un fronte di salita (transizione FALSE→TRUE) su uno specifico operando. L'istruzione confronta il valore attuale con il valore della scansione precedente. Se il valore è cambiato da 0 a 1, l'RLO è TRUE per esattamente un ciclo di scansione. Richiede un bit di memoria di fronte (bit M) per memorizzare lo stato precedente.
Quando usarlo
Quando serve un impulso singolo da un segnale prolungato: contare la pressione di un pulsante, attivare un'azione singola su un cambio di livello, incrementare un contatore ad ogni attivazione. Senza rilevamento del fronte, un pulsante tenuto premuto si attiverebbe ad ogni ciclo di scansione.
Consigli professionali
DEVI assegnare un bit di memoria di fronte univoco (bit M) — NON riutilizzare lo stesso bit M per più rilevamenti di fronte, altrimenti interferiranno.
L'uscita è TRUE per esattamente un ciclo di scansione del PLC (tipicamente 1-50ms). Se serve un impulso più lungo, usa un temporizzatore.
In LAD, questo appare come un contatto con la marcatura 'P'. La variabile del bit M è mostrata sopra/sotto il contatto.
Interroga operando per fronte negativo
—|N|—Cosa fa
Rileva un fronte di discesa (transizione TRUE→FALSE) su uno specifico operando. L'istruzione confronta il valore attuale con il valore della scansione precedente. Se il valore è cambiato da 1 a 0, l'RLO è TRUE per esattamente un ciclo di scansione. Richiede un bit di memoria di fronte.
Quando usarlo
Quando devi reagire allo spegnimento di un segnale: rilevare quando un pulsante viene rilasciato, attivarsi alla disattivazione di un sensore o catturare il momento in cui una fase del processo termina.
Consigli professionali
Stesse regole del fronte positivo — ogni rilevamento di fronte negativo necessita del proprio bit M univoco.
Utile per azioni al 'rilascio del pulsante': avviare un temporizzatore quando un pulsante viene rilasciato, non quando viene premuto.
In una sequenza di spegnimento, usa i fronti negativi per rilevare quando ogni fase termina (l'uscita passa da ON a OFF).
Imposta operando su fronte positivo
—(P)—Cosa fa
Imposta (scrive TRUE) uno specifico operando per un ciclo di scansione quando viene rilevato un fronte positivo (FALSE→TRUE) sull'RLO. Combina il rilevamento del fronte e l'assegnazione dell'uscita in un'unica istruzione.
Quando usarlo
Quando vuoi impostare un flag o un'uscita per esattamente una scansione su un fronte di salita, senza bisogno di un contatto di rilevamento fronte separato seguito da una bobina.
Consigli professionali
Questa è un'istruzione di tipo bobina — va alla fine di un segmento, non nel mezzo.
Richiede un bit di memoria di fronte proprio come la versione a contatto.
L'operando è TRUE per una sola scansione, poi ritorna automaticamente a FALSE.
Imposta operando su fronte negativo
—(N)—Cosa fa
Imposta (scrive TRUE) uno specifico operando per un ciclo di scansione quando viene rilevato un fronte negativo (TRUE→FALSE) sull'RLO. Combina il rilevamento del fronte di discesa e l'assegnazione dell'uscita in un'unica istruzione.
Quando usarlo
Quando vuoi impostare un flag o un'uscita per esattamente una scansione su un fronte di discesa. Utile per attivare azioni post-disattivazione.
Consigli professionali
Istruzione di tipo bobina — posizionare alla fine di un segmento.
Richiede il proprio bit di memoria di fronte univoco.
Spesso usato per azioni di 'pulizia' che dovrebbero avvenire una volta quando un processo si ferma.
P_TRIG — Interroga RLO per fronte positivo
Cosa fa
Rileva un fronte di salita sull'RLO (Risultato dell'Operazione Logica) invece che su uno specifico operando. Quando il risultato logico combinato passa da FALSE a TRUE, l'uscita è TRUE per un ciclo di scansione. La memoria di fronte è memorizzata all'interno dell'istanza dell'istruzione.
Quando usarlo
Quando vuoi rilevare un fronte di salita su una combinazione logica complessa, non solo su una singola variabile. Ad esempio: rilevare quando (Sensore1 AND Sensore2 AND NOT Guasto) diventa TRUE per la prima volta.
Consigli professionali
P_TRIG opera sull'RLO accumulato — rileva il fronte dell'intera catena logica che lo precede.
La memoria di fronte è integrata nell'istruzione — non è necessario alcun bit M separato.
In FBD, P_TRIG è un blocco con ingresso CLK e uscita Q.
N_TRIG — Interroga RLO per fronte negativo
Cosa fa
Rileva un fronte di discesa sull'RLO. Quando il risultato logico combinato passa da TRUE a FALSE, l'uscita è TRUE per un ciclo di scansione. La memoria di fronte è memorizzata all'interno dell'istanza dell'istruzione.
Quando usarlo
Quando vuoi rilevare quando una condizione complessa smette di essere vera. Ad esempio: rilevare il momento in cui (Modo_Auto AND Tutto_Libero) passa da TRUE a FALSE.
Consigli professionali
N_TRIG è la controparte per fronte di discesa di P_TRIG.
Nessun bit M separato necessario — la memoria di fronte è interna.
Utile per rilevare la fine di una condizione combinata piuttosto che un singolo segnale.
R_TRIG — Rileva fronte del segnale positivo
Cosa fa
Un blocco funzionale per il rilevamento del fronte di salita conforme allo standard IEC 61131-3. Ha un ingresso CLK e un'uscita Q. Quando CLK passa da FALSE a TRUE, Q è TRUE per un ciclo di scansione. La memoria di fronte è memorizzata nei dati di istanza dell'FB.
Quando usarlo
Quando vuoi un rilevamento del fronte conforme allo standard IEC con i propri dati di istanza. R_TRIG è un blocco funzionale — ogni istanza mantiene automaticamente la propria memoria di fronte. Preferito in codice strutturato e riutilizzabile.
Consigli professionali
R_TRIG è un FB — necessita di dati di istanza (un proprio DB o come multi-istanza in un FB padre). Questo lo rende autonomo e riutilizzabile.
Disponibile dalla versione V1.0 su S7-1200/1500. Questo è il modo standard IEC 61131-3 per il rilevamento del fronte.
In SCL: mioRTRIG(CLK := mioSegnale); IF mioRTRIG.Q THEN ... END_IF;
F_TRIG — Rileva fronte del segnale negativo
Cosa fa
Un blocco funzionale per il rilevamento del fronte di discesa conforme allo standard IEC 61131-3. Ha un ingresso CLK e un'uscita Q. Quando CLK passa da TRUE a FALSE, Q è TRUE per un ciclo di scansione. La memoria di fronte è memorizzata nei dati di istanza dell'FB.
Quando usarlo
Quando vuoi un rilevamento del fronte di discesa conforme allo standard IEC con i propri dati di istanza. F_TRIG è la controparte per fronte di discesa di R_TRIG.
Consigli professionali
F_TRIG è un FB con la propria istanza — come R_TRIG, è autonomo e conforme allo standard IEC 61131-3.
In SCL: mioFTRIG(CLK := mioSegnale); IF mioFTRIG.Q THEN ... END_IF;
Preferisci R_TRIG/F_TRIG rispetto ai contatti |P|/|N| quando scrivi codice di libreria riutilizzabile, poiché non richiedono bit M esterni.
Riferimento rapido — Tutte le 20 istruzioni logiche a bit
| # | Istruzione | Simbolo LAD | Scorciatoia | Descrizione |
|---|---|---|---|---|
| 1 | Contatto normalmente aperto | —| |— | F9 | Passa il segnale quando la variabile è TRUE |
| 2 | Contatto normalmente chiuso | —|/|— | F10 | Passa il segnale quando la variabile è FALSE |
| 3 | Inverti RLO | —|NOT|— | — | Inverte il risultato dell'operazione logica |
| 4 | Assegnazione | —( )— | Shift + F7 | Scrive l'RLO nella variabile di uscita |
| 5 | Assegnazione negata | —(/)— | — | Scrive l'RLO invertito nella variabile di uscita |
| 6 | Reset uscita | —(R)— | — | Imposta la variabile su FALSE quando l'RLO è TRUE |
| 7 | Set uscita | —(S)— | — | Imposta la variabile su TRUE quando l'RLO è TRUE |
| 8 | SET_BF — Imposta campo di bit | — | — | Imposta un intervallo di bit su TRUE |
| 9 | RESET_BF — Resetta campo di bit | — | — | Resetta un intervallo di bit su FALSE |
| 10 | SR — Flip-Flop Set/Reset | — | — | Flip-flop con priorità al Set (S=1,R=1 → Q=1) |
| 11 | RS — Flip-Flop Reset/Set | — | — | Flip-flop con priorità al Reset (S=1,R=1 → Q=0) |
| 12 | Interroga operando per fronte positivo | —|P|— | — | Rileva il fronte di salita su un operando |
| 13 | Interroga operando per fronte negativo | —|N|— | — | Rileva il fronte di discesa su un operando |
| 14 | Imposta operando su fronte positivo | —(P)— | — | Imposta l'operando per 1 scansione su fronte di salita |
| 15 | Imposta operando su fronte negativo | —(N)— | — | Imposta l'operando per 1 scansione su fronte di discesa |
| 16 | P_TRIG — Interroga RLO per fronte positivo | — | — | Rileva il fronte di salita sull'RLO |
| 17 | N_TRIG — Interroga RLO per fronte negativo | — | — | Rileva il fronte di discesa sull'RLO |
| 18 | R_TRIG — Rileva fronte del segnale positivo | — | — | Rilevatore di fronte di salita IEC (FB) |
| 19 | F_TRIG — Rileva fronte del segnale negativo | — | — | Rilevatore di fronte di discesa IEC (FB) |
Domande frequenti
Qual è la differenza tra le bobine Set/Reset e i flip-flop SR/RS?
Le bobine Set (S) e Reset (R) sono istruzioni individuali posizionate in segmenti separati — controlli la priorità in base a quale segmento viene eseguito per ultimo. I flip-flop SR/RS sono blocchi singoli con entrambi gli ingressi — la priorità è integrata (SR = priorità al Set, RS = priorità al Reset). I flip-flop sono più compatti e rendono la priorità esplicita.
Quale rilevamento di fronte dovrei usare: |P|/|N|, (P)/(N), P_TRIG/N_TRIG o R_TRIG/F_TRIG?
I contatti |P|/|N| rilevano i fronti su una variabile specifica e necessitano di un bit M esterno. Le bobine (P)/(N) combinano il rilevamento del fronte con l'assegnazione dell'uscita. P_TRIG/N_TRIG rilevano i fronti sull'RLO (logica combinata). R_TRIG/F_TRIG sono FB standard IEC con memoria integrata. Per codice di libreria riutilizzabile, preferisci R_TRIG/F_TRIG. Per logica inline semplice, i contatti |P|/|N| vanno benissimo.
Perché il mio circuito Set/Reset si comporta in modo imprevisto?
La causa più comune è che sia la condizione di Set che quella di Reset sono TRUE contemporaneamente. In tal caso, vince l'ultima istruzione nel programma. Se il segmento di Reset è prima di quello di Set, l'uscita sarà Set. Soluzione: usa un flip-flop RS (priorità al Reset) per i circuiti critici per la sicurezza, o assicurati che le tue condizioni si escludano a vicenda.
Il rilevamento del fronte può funzionare su valori analogici o solo su BOOL?
Le istruzioni di rilevamento del fronte (|P|, |N|, R_TRIG, F_TRIG) funzionano solo su segnali booleani. Per i valori analogici, è necessario creare un confronto (ad esempio, valore > soglia) che produca un risultato BOOL, quindi applicare il rilevamento del fronte a quel BOOL.