Vai al contenuto
PLC Forum


Controllo Segnale Analogico Da Pt100


Messaggi consigliati

Inserito: (modificato)

Buongiorno a tutti,

sono appena approdato nel mondo dei segnali analogici del PLC 313c. Quello che sto tentando di fare è collegare una PT100 all'ingresso per termoresistenze della scheda analogica del plc e cercare di controllare (con un confronto) l'accensione di una ventola di raffreddamento, che deve partire a 20 gradi.

Qui di seguito spiego quello che ho fatto nella pratica:

ho collegato la PT100 sull'ingresso.

ho creato un programma per leggere il segnale della termoresistenza:

L EW12

T MW10

LMW10

L20

>=I

= A 1.0

L'unica cosa che ho ottenuto sono dei segnali che variano in modo direttamente proporzionale rispetto al riscaldarsi o il raffreddarsi della PT100 e leggo dei numeri che vanno da 200 in su. Poi trovo inutile la conversione di EW12 con MW10, visto che producono lo stesso identico valore.

La mia domanda è.... Come posso ottenere un riferimento di temperatura sul valore che leggo? Come posso impostare il mio confronto per far sì che a 20 gradi parta il mio ventilatore?

Sono consapevole di aver fatto diversi errori, ma non riesco veramente a trovare un nesso con il valore letto e l'eventuale temperatura.... :senzasperanza:

Modificato: da TomCastagna

Inserita:

è probabile che la lettura della sonda sia in decimi di grado (200 = 20.0)

Inserita: (modificato)

Salve,

come postato da biros66, la lettura dell'ingresso analogico della PT100 è espresso in 1/10 di grado °C.

L'istruzione:

L EW12

T MW10

non è una conversione, ma un semplice trasferimento del dato letto su EW12 verso la variabile di indirizzo MW10 e niente altro...

Se può ti può andar bene a seguire allego il codice per fare quanto da te richiesto:

L PEW 12 //Valore in 1/10 di °C

ITD //Converte il dato da INT a DINT

DTR //Converte il dato da DINT a REAL

L 1.000000e+001 //Divisione per 10,0 ottenendo la temperatura nel formato es. 200==>20,0°C

/R //Risultato della divisione

L 2.000000e+001 //Soglia di confronto in °C (in questo caso 20,0°C) per avvio motore ventilatore

>R //Comparazione trà risultato della divisione (temp.misurata ed adattata) con la soglia di avvio motore ventialtore

= A 1.0 //Avvio motore ventilatore

Ora tieni presente che non vi è nessuna isteresi nella lettura della temperatura, ovvero appena il valore è uguale a 20.0 °C il motore parte,

appena la temperatura scende a 19,9 °C, il motore si arresta, per cui se per qualche motivo la tua temperatura dovesse oscillare intorno a questi valori, avresti una continua commutazione da marcia-arresto e cosi via del tuo motore.

Valuta se la cosa ti può andar bene, altrimenti come ribadito sopra bisogna inserire un'isteresi o una banda morta sulla gestione della soglia di avvio motore.

Saluti

Cagliostro

Modificato: da cagliostro
Inserita:

Grazie a tutti delle preziosissime informazioni!

Sarebbe infatti interessante ottenere un'isteresi.... C'è un modo per poterla aggiungere tramite programma?

Altra domanda: nel caso io avessi anche degli split su una condotta di aria e volessi farli aprirli in modo moduante rispetto alla temperatura... Esiste un modo per farlo tramite programma?

Grazie a tutti della pazienza!!!

Inserita:

Salve,

eccoti un'esempio con l'introduzione di una banda morta a +/- 1°C.........

 L     PEW   12                    //Valore in 1/10 di °C
      ITD                               //Converte il dato da INT a DINT
      DTR                               //Converte il dato da DINT a REAL
      L     1.000000e+001               //Divisione per 10,0 ottenendo il nel formato es. 200==>20,0°C
      /R                                //Risultato della divisione
      L     2.000000e+001               //Soglia di confronto in °C (in questo caso 20,0°C) per avvio ventilatore
      -R                                //Errore in °C trà temperatura letta e soglia avvio ventilatore
      L     1.000000e+000               //Banda morta superiore in °C
      >=R                               //Sè errore maggiore di banda morte superiore
      SPB   RUN                         //Salta alla label RUN per avvio motore ventilatore
      TAK                               //Inverte valori ACC1 con ACC 2
      L     -1.000000e+000              //Banda morta inferiore superiore in -°C
      <=R                               //Sè errore minore di banda morta inferiore
      R     M      1.0                  //Mette ad OFF il flag per arresto motore ventilatore
      SPA   END                         //Salta alla label END per gestione sequenza marcia-arresto motore ventilatore
RUN:  S     M      1.0                  //Mette ad ON il flag per avvio motore ventilatore

//PS1:Se vuoi escludere il controllo sulla banda morta superiore/inferiore o entrambe porta a 0 i valori 
//PS2:Ho usato M1.0 ovviamente vedi se può andarti bene altrimenti cambia indirizzamento con uno a te più congeniale

//Ho utilizzato M1.0 come bit di attivazione START/STOP motore ventilatore
//In questo modo puoi gestire più liberamente la tua sequenza mettendo altri flag in serie ad M1.0
//Per esempio consensi legati alla marcia, protezione motore ventilatore, emergenza etc.etc.

END:  U     M      1.0
      =     A      1.0

Esiste un modo per farlo tramite programma?

Sicuramente si.....dipende dall'hardware in tuo possesso per comandare questi split????? Uscite digitali???analogiche????

Poi e non per ultimo che cosa vuoi ottenere in termini di precisione...ti basta un sistema controllato ad anello aperto??

Oppure qualcosa di più performante in termini di regolazione adottando un PID??

Come vedi le possibilità ci sono, basta fare un'analisi più dettagliata del tuo sistema e sicuramente troverai la soluzione più idonea alla tua applicazione.

Buona serata

Cagliostro

Inserita:
L PEW 12 //Valore in 1/10 di °C

ITD //Converte il dato da INT a DINT

DTR //Converte il dato da DINT a REAL

L 1.000000e+001 //Divisione per 10,0 ottenendo il nel formato es. 200==>20,0°C

Buonasera Cagliostro,

grazie tantissimo del tuo aiuto e grazie anche agl'altri delle pronte risposte, molto utili tutti, grazie! Sulla risposta sopra citata ho trovato dei problemi... Dopo che arrivo al punto da te indicato mi ritrovo con i seguenti valori sulle stringhe di controllo (valori in decimale):

L PEW 12 224

ITD 224

DTR 1130364928

L 1.000000e+001 1092616192

... C'è il passaggio della divisione che purtroppo mi sfugge e che non mi fa ottere il risultato nel formato sperato.... Sbaglio qualcosa? :senzasperanza:

Inserita:

Dopo l'istruzione DTR il valore è in virgola mobile.

Per la corretta visualizzazione, devi scegliere la rappresentazione in virgola mobile.

Personalmente per la gestione di una temperatura che si legge già in decimi di grado centigrado, non farei la conversione in virgola mobile, ma lavorerei con interi, tenendo ovviamente sempre conto che il valore è, appunto, in decimi di grado.

Questo si presta benissimo anche alla gestione su pannelli operatore, dove basta fissare la visualizzazione con una cifra decimale.

In compenso, si utilizzano solo 2 byte al posto di 4, e si evitano inutili conversioni, calcoli e confronti in virgola mobile, molto più impegnativi per la cpu.

Inserita: (modificato)

Salve,

il pezzo di codice da te postato con i valori a fianco, credo rappresentino la visualizzazione del dato nei vari passaggi.

non mi fa ottere il risultato nel formato sperato.... Sbaglio qualcosa?

Per avere la corretta rappresentazione del dato a partire dall'istruzione DTR......

quando sei online con il mouse portati sopra il valore visualizzato, quindi clicca il tasto destro e ti comparirà un qualcosa tipo scelta visualizzazione o formato di rappresentazione (in questo momento vado a memoria), quindi scegli il formato virgola mobile o real (anche qui vado a memoria) a questo punto tutte le visualizzazioni saranno rappresentate con il punto decimale.......

Tutto dovrebbe quindi ritornarti.......

Buona serata

Cagliostro

Modificato: da cagliostro
Inserita:

Ho preferito alla fine lasciare il la lettura del segnale in decimi di grado... ORa mi sorge un altro problema.

Avendo una PT100 in ingresso EW12 e due uscite AW3 e AW5, come riesco a far uscire una modulazione con il segnale 4-20 mA nelle uscite indicate? Devo creare una funzione particolare? Perché la mia intenzione sarebbe di mettere un inverter che modula la frequenza del motore della ventola di raffreddamento in base alla temperatura in ingresso, mantenendo la temperatura di 25° + o - costante ... Come potrei fare?

Inserita:

La prima cosa da fare... è leggere il manuale!

Facciamo così: cerca la soluzione sul manuale, e poi poni domande specifiche su quello che eventualmente non capisci.

Non ti arrabbiare, ma come si utilizzano ingressi ed uscite analogiche sul manuale è spiegato.

Se poni questo tipo di domande, mi sorge quindi il dubbio che tu non abbia mai cercato la risposta seguendo i metodi tradizionali, ovvero consultando la documentazione dell'apparecchiatura che si deve utilizzare.

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...