+1 500 000 prodotti nell’offerta

7000 pacchi giornalmente

+300 000 clienti da 150 paesi

Quick Buy Preferiti
Carrello

Relè programmabile easyE4 (parte 3)

Data di pubblicazione: 18-03-2021 🕒 15 min di lettura

Eaton EasyE4

Utilizzo del relè programmabile easyE4 per la realizzazione di un contatore di persone presenti in un locale

Negli articoli precedenti abbiamo già visto come scrivere il programma per il controller easyE4 e caricarlo nel relè. Inoltre abbiamo eseguito l'interfaccia utente e ne abbiamo controllato il funzionamento. Non rimane altro che scrivere il software destinato alla gestione dei sensori (barriere luminose), che riconoscono la direzione del movimento di una persona e in base a questa informazione generano un impulso che aumenta o diminuisce lo stato del contatore del numero corrente di persone presenti nel locale. Sulla base di questo segnale controlleremo il funzionamento del segnalatore a 2 colori o dell'interruttore dell'illuminazione, della ventilazione, ecc.

Nell'automazione industriale troveremo molti esempi di soluzioni di rilevatori della direzione del movimento. Alcuni produttori di semiconduttori realizzano circuiti integrati, che collegati a un codificatore incrementale e trasmettono sulle uscite forme d’onda che determinano la direzione di rotazione e la sua velocità. Questo codificatore dispone di due uscite (A e B) in cui il segnale B è sfasato di ±90 gradi rispetto al segnale A. In linea di principio sarebbe possibile utilizzare tale sistema o una soluzione discreta (composta da gate e registri); tuttavia va ricordato che nonostante la sequenza di forme d’onda simili in corrispondenza degli ingressi del relè programmabile, le persone possono comportarsi in modo difficile da prevedere.

Ritorniamo alle figure 3 e 4 della prima parte dell'articolo. In queste figure è stata presentata la sequenza dei segnali presenti alle uscite delle barriere luminose e pertanto agli ingressi del relè programmabile easyE4 quando, una persona entra o esce dal locale. Entrambe le figure mostrano una situazione ideale, in cui si verifica una sequenza completa di segnali, tuttavia in condizioni reali non dovrà essere affatto così. Una persona che entra nel raggio d'azione del sensore 1 può cambiare idea e tornare indietro. Può anche entrare nel raggio d'azione del sensore 2 bypassando il sensore 1, ecc. La nostra soluzione dovrebbe tenere conto di tali comportamenti delle persone contate, quantomeno non dovrebbe interrompere il funzionamento del contatore, ma riavviare il processo e reagire correttamente quando si rileva la persona successiva.

3_livello

Sequenza di copertura/scopertura del sensore che causa l'aumento del contatore

4_livello

Sequenza di copertura/scopertura del sensore che causa la riduzione del contatore

Il rilevatore della direzione di movimento più semplice può essere realizzato sfruttando un registro di tipo D. All'ingresso delle informazioni di questo registro assegneremo la barriera 1, mentre all'ingresso di clock assegneremo la barriera 2. Posizioniamo le barriere abbastanza vicino l'una all'altra, in modo che l'oggetto che si muove dal lato del sensore 1. comporta prima l'invio di un segnale logico alto all'ingresso delle informazioni, e successivamente quando lo stato 1 è attivo, all'ingresso D avremo una rampa ascendente all'ingresso di clock, che assegnerà l'unità dell'ingresso di informazione all'uscita del registro. In caso di movimento dal lato del sensore 2., prima verrà inviato l'impulso di clock, che comporterà l'assegnazione dello 0 logico, presente all'ingresso del registro D, all'uscita Q. In questo modo potremo riconoscere la direzione del movimento e gestire l'ingresso della direzione di conteggio. Un problema separato è costituito dal fatto che l'impulso di clock deve verificarsi solo quando viene determinato lo stato dell'uscita del registro D. È possibile utilizzare l'impulso presente all'ingresso di clock del registro D, tuttavia sarà necessario ritardare tale impulso per tenere conto del tempo di propagazione del registro. Ora diamo un'occhiata alla situazione in cui una persona entra nel raggio d'azione del sensore 1. e torna indietro. Ciò non dovrebbe essere un problema, poiché l'impulso è stato inviato solo all'ingresso informativo del registro e non cambierà lo stato della sua uscita. Peggiore è la situazione, in direzione opposta, in quanto questo ingresso/uscita dal raggio d'azione verrà identificato come un ciclo completo a tutti gli effetti. Pertanto il nostro sistema di rilevamento della direzione del movimento non dovrà ancora reagire alla sequenza completa di segnali, non dovrà genera ancora un impulso più/meno per il contatore, se questa sequenza non viene realizzata completamente, ossia non sono presenti gli impulsi su entrambi gli ingressi del relè programmabile, in questo caso gli ingressi I01 e I02.

Nella realizzazione del rilevatore di direzione del movimento di una persona, si presume che questo disponga di due uscite di clock che similmente ai pulsanti „a destra”/„a sinistra” o „su”/„giù” utilizzati in questo programma, genereranno impulsi di clock su due uscite separate. Una di queste uscite aumenterà lo stato del contatore e l'altra lo diminuirà. La generazione del segnale per il blocco del contatore sarà gestita dai gateway logici posizionati su una singola rete insieme al contatore. Inoltre il rivelatore sarà insensibile a possibili "sfarfallii" del segnale presente ai suoi ingressi. Il segnale più/meno verrà generato solo quando la sequenza verrà soddisfatta:

  • Aumento dello stato del contatore: impulso su I01 –> impulso su I02.
  • Riduzione dello stato del contatore: impulso su I02 –> impulso su I01.

Il modo migliore per proteggersi dallo "sfarfallio" della forma d’onda all'ingresso è utilizzare un flip-flop RS. Questa soluzione ha il vantaggio che quando la tensione viene applicata all'ingresso che attiva l'uscita (SET) o di reset (RESET), il flip-flop rimarrà in uno stato stabile, indipendentemente dalla variazione del livello logico all'ingresso SET. Nel rilevatore di direzione di movimento presentato, su entrambi gli ingressi del relè easyE4 (I01, I02) sono stati utilizzati dei flip-flop RS. Questi vengono impostati ad un livello alto all'ingresso appropriato e rimangono in questo stato fino all'azzeramento.

Sarebbe ideale che l'impulso di reset per entrambi i flip-flop RS sia l'impulso di ingresso del contatore, poiché il suo ricevimento significherebbe che il ciclo di rilevamento della direzione di movimento è stato completato correttamente, il rivelatore ha generato un impulso per il misuratore ed è pronto per la sequenza di segnali successiva. Tuttavia la persona conteggiata può entrare nel raggio d'azione di uno dei sensori o tra di essi, e in questa situazione all'ingresso del relè programmabile comparirà solo uno dei segnali, non i due segnali necessari per il corretto rilevamento. Come ripristinare in questo caso i flip-flop d'ingresso e quale di essi? Potrebbe sembrare più logico resettare entrambi, semplicemente trascorso un determinato intervallo di tempo non eccessivamente lungo, previsto per l'intero ciclo. Questo intervallo di tempo nelle soluzioni software o hardware è chiamato timeout o limite di tempo.

Flip-flop RS – definizione del modulo utente

Uno dei vantaggi della programmazione mediante il diagramma a blocchi funzione (FBD) è la possibilità di definire dei blocchi utente personalizzati. Grazie ad essi è possibile non solo definire blocchi propri e usarli ripetutamente in diversi schemi, ma anche utilizzare blocchi realizzati da colleghi, produttori di soluzioni hardware, messi a disposizione su forum online e in altri luoghi. Per le vostre esigenze e come esercizio, realizzeremo un blocco utente simile, contenente un semplice flip-flop RS, realizzato mediante due porte logiche NAND. Il suo diagramma è illustrato nella figura 1. Nella nostra applicazione necessiteremo di un flip-flop triggerato da un livello logico alto, pertanto ai suoi ingressi aggiungeremo anche degli inverter (porte logiche NOT).

Flip-flop RS realizzato mediante porte logiche NAND Figura 1. Flip-flop RS realizzato mediante porte logiche NAND

Per realizzare il modulo utente dobbiamo selezionare dal menu Programma –> Crea modulo utente. Inoltre è possibile utilizzare l'icona di accesso rapido (simbolo della porta logica con asterisco presente sulla barra del menu) oppure fare clic con il pulsante destro del mouse sulla voce Moduli utente, presente sotto l'elenco dei moduli del produttore. Una volta richiamata l'opzione del menu, viene visualizzata una finestra, come nella figura 2. Digitare al suo interno il nome del nostro modulo (ad es. RS) e, cosa molto importante, il numero e il tipo di I/O. Nel nostro caso è sufficiente 1 uscita binaria e 2 uscite.

Finestra delle proprietà del modulo utente Figura 2. Finestra delle proprietà del modulo utente

Il modulo utente da noi realizzato sarà composto da pochi elementi: due porte logiche, contatti all'ingresso e bobine all'uscita. Inoltre dovremo utilizzare un tag per collegare l'ingresso con l'uscita. Per un numero così piccolo di componenti è sufficiente una rete singola.

Sarebbe più comodo definire i collegamenti come mostrato nello schema, purtroppo ciò non è possibile. Gli elementi sono disposti dal software in successione uno dopo l'altro, pertanto dobbiamo pianificare la loro disposizione "lineare". La disposizione dei blocchi utente dovrebbe essere iniziata a partire dall'elemento NAND di uscita. Ad uno dei suoi ingressi assegniamo l'uscita del secondo elemento NAND e un contatto. All'ingresso del primo gate NAND assegniamo due contatti. Non rimane che definire l'uscita, al secondo dei gate NAND assegniamo due bobine. Ora ci occuperemo delle proprietà dei singoli contatti e bobine:

  1. Contatti all'ingresso (primo elemento NAND da sinistra):
  • Tipo: Ingressi e uscite e tag binari; Commento: SET; Tipo di logica: NC; Argomento: I
    • Ingresso; Numero: 1.
  • Tipo: Ingressi e uscite e tag binari; Tipo di logica: NO; Argomento: M - Tag.; Numero: 1.
  1. Contatti di uscita (secondo elemento NAND):
  • Tipo: Ingressi e uscite binari; Commento: Q; Funzione bobina: Bobina standard negata; Argomento: Q
    • Uscita; Numero: 1.
  • Tipo: Uscite e tag binari; Funzione bobina: bobina standard; Argomento: M - Tag; Numero: 1.

Non rimane altro che impostare le proprietà del contatto che conduce il segnale di azzeramento RESET: Tipo: Ingressi e uscite e tag binari; Commento: RESET; Tipo di logica: NC; Argomento: I - Ingresso; Numero: 2.

Il modulo funzione realizzato dovrebbe essere simile a quello della figura 3.

Modulo funzione del flip-flop RS Figura 3. Modulo funzione del flip-flop RS

Cliccare sulla scheda con il nome del modulo creato e selezionare Chiudi. L'ambiente di programmazione chiederà di salvare il modulo sul disco: confermiamo e assegniamo al modulo il nome selezionato. Da questo momento in poi la definizione da noi eseguita sarà disponibile nell'elenco dei moduli e sarà pronta per l'uso.

La possibilità di definire i moduli è uno strumento utilissimo. Mediante questa funzione è possibile creare una libreria di soluzioni già pronte, che semplificherà notevolmente la creazione dei programmi successivi, inoltre faciliterà il lavoro del nostro team o dei colleghi. Inoltre sarà possibile suddividere il lavoro all'interno del team: lascia che ognuno realizzi e testi l'elemento selezionato, che successivamente inserirà nel resto del programma. Nel caso di un'applicazione semplice e del controller easyE4 del marchio Eaton, ciò non è necessario, ma è una buona abitudine di lavoro, che può essere utile per progetti più complessi.

Rilevatore di direzione del movimento

Per comprendere il funzionamento del rilevatore di direzione del movimento, vale la pena aprire il programma disponibile nei materiali aggiuntivi all'articolo. È possibile inserire le figure di tutte le reti descritte, tuttavia sarà più comodo visualizzarle (e i collegamenti tra di esse) durante la lettura sullo schermo dell'ambiente di programmazione easySoft 7. In caso di dubbi o se la descrizione sarà troppo lunga, sarà possibile lanciare il simulatore e osservare come si comporta il programma quando si clicca su di esso. Soprattutto poiché non è facile descrivere il funzionamento delle singole reti (a volte contenenti un singolo gate) separate tra di loro.

Scarica il software

Lo schema del rilevatore di direzione del movimento inizia con il numero di rete 0010. Dalla rete numero 0010 alla 0016 sono presenti elementi logici che rispondono della gestione dell'ingresso I01, mentre dalla 0017 fino alla fine, alla rete 0023, gli elementi che gestiscono l'ingresso I02. Entrambe le parti sono simmetriche e sono modellate sul rivelatore di sequenza di impulsi (rivelatore di quadratura) con un flip-flop di tipo D. Visto che i rivelatori a quadratura operano con segnali sfasati di 90 gradi, e quello nel contatore di persone deve reagire alle sequenze "assenza – I01 – assenza – I02 – assenza" o "assenza – I02 – assenza – I01 – assenza", sono stati aggiunti dei flip-flop RS per memorizzare gli stati degli ingressi, per prevenire lo sfarfallio della tensione agli ingressi e che consentono di ottenere lo sfasamento necessario nel rilevatore a quadratura.

Ad entrambi i flip-flop sono stati aggiunti dei timer per misurare il timeout, che generano un impulso di reset dei flip-flop RS di ingresso e di uscita e dei gate che bloccano gli impulsi di ingresso, fino al ripristino dei flip-flop, ossia fino a quando non saranno pronti per il ciclo di rilevamento successivo. I singoli elementi sono disposti e collegati negli schemi allo stesso modo descritto in precedenza, e non avrebbe senso effettuarlo nuovamente. L'analisi del funzionamento del rivelatore viene eseguita meglio sfruttando il simulatore attivabile tramite il pulsante Simulazione. Sfortunatamente, lo schema nel software easySoft7 deve essere suddiviso in piccole reti e pertanto sarà difficile da analizzare. Pertanto consigliamo alle persone curiose, che vogliono esplorare il problema, di stampare le singole reti e disegnare un diagramma composto da porte logiche. In questo caso saremo in grado di distinguere facilmente gli elementi del flip-flop D e separarli dalle funzionalità aggiuntive di blocco e ripristino dei flip-flop.

Memorizzazione dello stato dei contatori in caso di scollegamento della tensione di alimentazione

Dal punto di vista dell'utente è comodo che in caso di assenza della tensione di alimentazione, non sia necessario dover reintrodurre i set-point, ma solo correggere il valore dell'indicazione corrente, in caso ciò sia necessario. In questa applicazione a tal fine dobbiamo memorizzare e riprodurre il contenuto di due contatori: si tratta dei moduli C01 e C02.

Il produttore dell'ambiente di programmazione ha chiamato la funzione di memorizzazione e riproduzione dello stato dei moduli o dei tag rimanenza. Per saperne di più, vale la pena utilizzare il menu "Guida" disponibile dopo aver puntato l'icona "?" sulla barra del menu (è anche possibile premere F1). Nella scheda "Cerca" digitare la parola "rimanenza". È inoltre possibile utilizzare la guida utente disponibile nello stesso menu.

Per i byte rimanenti, ossia riprodotti dopo lo spegnimento dell'alimentazione, sono previsti 400 byte di memoria. Probabilmente si tratta di un circuito integrato separato o un frammento della memoria del processore, alimentato da una sorgente separata, come ad es. un super condensatore o una batteria. Come descritto nel menu della Guida inerente il modulo del contatore "C", la memorizzazione/il ripristino del suo stato richiede 4 byte di memoria, pertanto senza problemi in 400 byte vi sarà spazio sufficiente per i due contatori.

Per attivare la memorizzazione/il ripristino del contenuto del contatore, fare clic sul pulsante nell'angolo inferiore sinistro in "Progetto". Quindi selezionare la scheda "Impostazioni di sistema". Il terzo campo da sinistra sarà "Rimanenza" (figura 4). A questo punto, vale la pena notare il valore nel campo "Liberi:" – nell'esempio è visibile un valore di 400 byte. Ciascun modulo contatore "C" richiede 4 byte.

Campo Rimanenza Figura 4. Campo "Rimanenza"

Per questa applicazione è importante il contenuto dei moduli contatore C01 e C02, pertanto nel campo del valore accanto a "C" digiteremo "01" e nel campo successivo "02", come nella figura 5. I restanti campi, come ad es. i moduli dei contatori rapidi "CH", il modulo del contatore incrementale "CI", il modulo dati "DB" e il modulo del relè temporizzato "T" verranno ommessi. A questo punto, non ci occuperemo anche dei tag (MW, MB, MD). È facile notare che dopo aver digitato correttamente l'intervallo, il valore "Liberi" diminuirà di 8 byte, ossia del numero di byte necessario per memorizzare i due moduli del contatore.

Campo „Rimanenza” dopo aver inserito i set-point dei contatori C01 e C02 Figura 5. Campo „Rimanenza” dopo aver inserito i set-point dei contatori C01 e C02

Simulazione del funzionamento del contatore nel software easySoft 7

L'ambiente di programmazione easySoft 7 dispone di un simulatore integrato che consente di controllare il funzionamento del programma, visualizzare lo stato degli ingressi, delle uscite e i livelli logici presenti sui singoli elementi dello schema FBD. L'uso del simulatore ci offre la possibilità di provare il funzionamento del programma e ci permetterà di individuare gli errori, anche se per ovvie ragioni non saranno esattamente le condizioni di lavoro che la nostra applicazione troverà nella realtà. Ora utilizzeremo il simulatore per controllare il funzionamento dell'applicazione del contatore di persone.

Il simulatore viene attivato cliccando il pulsante "Simulazione" situato a sinistra, nella parte inferiore della finestra del software easySoft 7. Simulando il funzionamento del contatore lasceremo invariata la maggior parte dei parametri e non predisporremo alcuna trappola, tuttavia, il simulatore offre possibilità molto interessanti, che invano potremo cercare in prodotti simili della concorrenza. Oltre a impostare le trappole, consente ad es. di utilizzare un oscilloscopio virtuale, che presenterà le forme d'onda dei segnali scelti. Proveremo le sue possibilità durante il controllo del programma che abbiamo realizzato.

Con il programma "Contatore persone v11.e70" aperto, fare clic sul pulsante "Simulazione" e successivamente espandere l'elenco sopra di esso Display e fare clic su Finestra argomento + oscilloscopio. Sul lato destro verrà visualizzata la Finestra di argomento + oscilloscopio vuota. Fare clic sul simbolo dell'asterisco (*) nella colonna Argomento e digitare M05. Accanto ad esso, nella colonna Commento, dovrebbe essere visualizzato il messaggio IMPULSO CRESCENTE. Facendo clic nella colonna Oscilloscopio verrà visualizzato la casella checkmark e come canale dell'analizzatore degli stati logici nella finestra Oscilloscopio. Allo stesso modo aggiungeremo: M04 (IMPULSI CRESCENTI), I01 (INGRESSI 1) e I02 (INGRESSI 2). Dovremmo ottenere l'effetto presentato nella figura 4.

Schermata dell'oscilloscopio dopo la configurazione Figura 6. Schermata dell'oscilloscopio dopo la configurazione

Lanciare il simulatore premendo F9 o selezionando dal menu Simulazione –> Start. Nel menu selezionare Oscilloscopio –> Inizio registrazione (oppure utilizzare l'icona appropriata sulla barra degli strumenti – quadrato con cerchio rosso). Sul lato sinistro dello schermo vedremo l'elenco Display aperto. Cliccare su di esso in Display + pulsanti. Nella parte inferiore della finestra verrà visualizzata la schermata di lavoro della nostra applicazione del contatore e qui mediante i pulsanti a destra / sinistra potremo impostare il valore CONSENTITO su maggiore di 0, ad esempio 5, come nella figura 5. Ora clicchiamo su Display –> Ingresso digitale, quindi in successione, due volte sul quadrato accanto a 1:INGRESSO 1 e 2:INGRESSO 2.

Schermata del contatore durante la simulazione Figura 7. Schermata del contatore durante la simulazione (con il numero di persone consentite nel locale impostato).

L'effetto del funzionamento dell'oscilloscopio è presentato nella figura 6. Nella figura si vede che il primo è l'impulso all'ingresso I01, e quello successivo è l'impulso sull'ingresso I02. Contemporaneamente in presenza di una rampa ascendente su I02, viene generato un impulso sull'uscita M05:IMPULSO ASCENDENTE, che aumenta di un'unità lo stato del contatore ATTUALMENTE e viene visualizzato questo valore sul display. La trasmissione di impulsi in ordine inverso comporta la generazione di un impulso sull'uscita M04:IMPULSO DISCENDENTE e la diminuzione del numero sul contatore ATTUALMENTE. Ad esempio allo schermo dell'oscilloscopio inoltre è possibile aggiungere uscite e osservare come varia il ritmo degli impulsi su I01 e I02 presenti al loro livello, tuttavia in questa situazione ciò potrebbe condurre ad un eccesso di informazioni. È inoltre possibile visualizzare lo stato delle uscite facendo clic su Display–> Uscite digitali.

Forme d'onda agli ingressi/uscite del contatore Figura 8. Forme d'onda agli ingressi/uscite del contatore durante la simulazione

Grazie all'oscilloscopio è possibile notare che le persone successive verranno rilevate solo dopo il superamento del tempo di timeout impostato (in questo caso 2,5 secondi), pertanto se le barriere sono posizionate l'una vicino all'altra, questa tempo potrà essere ridotto. Inoltre sarà possibile osservare che in una sequenza di impulsi per cui il contatore funziona correttamente, questi possono anche sovrapporsi. Ciò nel caso in cui le barriere vengano montate troppo vicine tra di loro. Dopo aver controllato il funzionamento del programma, è sufficiente caricarlo nel controller easyE4, condurre i segnali dagli ingressi dei sensori e collegare il segnalatore. Nella figura 7 è stata presentata un'applicazione già pronta, collocata in una scatola di plastica, tipicamente utilizzata nei quadri residenziali. Accanto al controller, sotto il coperchio apribile, è stato installato un pulsante di ripristino.

Contatore di persone Figura 9. Contatore di persone basato sul relè programmabile easyE4

Controller easyE4 – conclusioni

In tre articoli abbiamo preparato l'applicazione del contatore di persone. Questa soluzione può essere utilizzata in due modi: o per segnalare il superamento del numero consentito di persone nel locale, introdotto in relazione ai requisiti di sicurezza, o per accendere/spegnere l'illuminazione o la ventilazione in una stanza in cui queste devono funzionare solo quando qualcuno è presente all'interno. Nel dispositivo è stata utilizza la proprietà della rimanenza, in modo che il software funzioni in modo tale che i blocchi dei contatori contenenti i set-point e lo stato corrente, vengano memorizzati nella memoria non volatile e ripristinati quando la tensione di alimentazione è attiva. In caso di interruzione dell'alimentazione, non sarà necessario impostare nuovamente i parametri del contatore: se necessario, sarà sufficiente contare le persone nel locale e correggere l'indicazione.

Tuttavia il controller easyE4 rispetto ai prodotti meno recenti, rappresenta un enorme passo avanti. L'ottimo ambiente di programmazione easySoft 7 sarà sicuramente ulteriormente migliorato.

In passato per una particolare applicazione venivano utilizzati controller dedicati. Ora sull'esempio del controller easyE4 non è difficile notare che non vale la pena realizzare questi ultimi sulla base dei microcontrollori disponibili. Ad un prezzo relativamente contenuto possiamo acquistare un controller dotato di processore veloce, in un alloggiamento resistente destinato all'installazione su guida DIN, con display e tastiera integrati. Può essere facilmente collegato in rete e connesso all'ambiente software, possono essere ampliate le sue funzionalità, e cosa molto importante in qualsiasi applicazione professionale, è conforme a numerose norme armonizzate, anche per gli ambienti industriali. Pertanto potremo essere sicuri di affidare nelle mani dell'utente un dispositivo il cui core è stato testato in un laboratorio certificato e dietro il quale si trova anche il marchio e la reputazione del produttore.

Transfer Multisort Elektronik (TME) è uno dei maggiori distributori mondiali di componenti elettronici, parti elettrotecniche, attrezzature da laboratorio e automazione industriale. Il catalogo include oltre 1.500.000 di prodotti di 1.300 produttori leader. I moderni centri logistici di TME a Łódź e Rzgów (Polonia), con una superficie complessiva di oltre 40.000 m², spediscono quasi 6.000 pacchi al giorno a clienti in più di 150 paesi.

TME investe anche nello sviluppo delle conoscenze e competenze di giovani ingegneri e appassionati di elettronica attraverso il progetto TME Education e supporta la comunità tecnologica organizzando la serie di eventi TechMasterEvent, promuovendo l’innovazione e lo scambio di esperienze.

rightColumnPicture rightColumnPicture

LEGGI ANCHE