Vai al contenuto
PLC Forum


Conversione in unità ingegneristiche


electrofranco

Messaggi consigliati

Salve, ho un PLC 1212C della Siemens e devo effettuare una conversione in unità ingegneristiche di un segnale analogico (0-10V) relativo a un sensore di temperatura -40:100 gradi.

Cercando della documentazione in rete ho un po' capito come fare a livello software la conversione, nonostante ciò ho ancora molti dubbi sulla questione.

 

1) Nel datasheet del PLC viene detto che la risoluzione è di 10 bit (incluso il bit di segno), dunque i bit effettivi per la conversione Analog to Digital sono 9?

2) Ho usato i blocchi NORM_X e SCALE_X, per effettuare alcuni calcoli matematici. Su internet ho trovato che il valore MAX in NORM_X per il mio PLC deve essere impostato a 27648. Adesso mi chiedo da dove salti fuori tale valore dal momento che con 9-10 bit il valore max non supera 1024. Le formule usate dai blocchi le ho abbastanza capite, ma quel numero secondo me dovrebbe essere pari a 2^n (con n numero di bit), sbaglio?

 

Quelli sopra sono i miei dubbi principali che ancora non sono riuscito a risolvere, ma ammetto che ho le idee abbastanza confuse. Potete aiutarmi?

Link al commento
Condividi su altri siti


Ciao,

siemens, che tu abbia 10 12 13 15 bit sulla scheda analogica, standardizza sempre a +/- 27648 più over e underflow

A livello logico la scalatura rimane sempre su quei valori, ciò che cambia, in base alla tipologia di hardware (se 10 12 o altre risoluzioni), sarà l'incremento che avrai in scalatura 27648 al variare della misura

Per semplificare, una 10bit, sul campo 27648, avrà variazioni di 64al variare della misura letta

una 14bit ne avrà di 4

 

Ciao :)

 

Link al commento
Condividi su altri siti

Ciao DesmoGiec, intanto grazie per la risposta. Per cui mi sembra di capire che Siemens si riporta sempre al caso 16 bit, giusto? Dunque, riprendendo il tuo esempio, se ho 10 bit di risoluzione, fa 1024 per 64 in modo da ottenere 2^16. 

Però qui mi blocco, vorrei capire un po' meglio il meccanismo di conversione. Se per esempio ho un segnale di ingresso di 5V, l'ADC interno al PLC immagino faccia comunque una operazione del tipo 5V/(10V/2^10) = 512, valore che viene rappresentato in binario con 10 bit. A questo punto, da quel che ho capito viene fatto uno scaling ulteriore per utilizzare tutti i 16 bit, ma non capisco in che modo. Scusatemi se insisto ma dai vari documenti non sono mai riuscito a capire questa cosa, un esempio numerico mi sarebbe molto comodo.

Link al commento
Condividi su altri siti

No, il valore analogico che tu abbia una scheda a 10-12-14 o 15 bit varia sempre da 0 a 27648, la differenza è nella risoluzione, se hai una scheda a 15 bit il valore dell'analogica varia di 1 in 1, con una scheda da 14 bit il valore varia di 2 in 2 unità, con una da 13 bit il valore varia di 4 in 4 e così via.

La tua scalatura software non dipende dal tipo di scheda ma sarà sempre da 0 a 27648.

Link al commento
Condividi su altri siti

Nei manuali (questi sconosciuti) è specificato come vengono scalati i valori.
Siemens, da sempre, ha scelto di far corrispondere il 100% del valore analogico (sia in ingresso che in uscita) a 27648 (6C00 Hex), e di tenere così un margine per gestire anche valori moderatamente oltre i limiti nominali.
Far corrispondere sempre lo stesso valore indipendentemente dal numero di bit del convertitore A/D o D/A, non è poi una scelta solo di Siemens, ma di molti costruttori. E direi che è una scelta che semplifica la vita del programmatore, che non deve preoccuparsi (se non per valutare la precisione) delle caratteristiche del modulo analogico.
Nel caso specifico degli ingressi a bordo della CPU S7-1200 (almeno mi pare di capire che tu stia usando questi ingressi analogici), non c'è scelta tra ±10 V 0 0..10V, ma sono solo 0..10 V, quindi non c'è bit del segno. Sono ingressi analogici scadenti, da non usare se hai bisogno di precisione. Nel tuo caso, hai 1024 divisioni, che comprendono anche sovrapilotaggio e sottopilotaggio dell'ingresso. Le divisioni per il campo 0..10 V (0..27648) sono solo 864. Quindi, la risoluzione sarà di (100 + 40) / 864 = 0.162 °C. Per una temperatura, probabilmente va più che bene. Un modulo per RTD, per dire, ti dà la lettura in decimi di grado centigrado (possibile anche configurare in decimi di °F, ma chi li usa i Fahrenheit?).

Link al commento
Condividi su altri siti

8 minuti fa, batta ha scritto:

ma chi li usa i Fahrenheit?).

 

Inglesi e USA certamente, come usano solo unità del sistema inglese per lunghezze e volumi. New Zeland e Australia officialmente, ma in alcune applicazioni usano anche il sistema metrico decimale.

Sai che rottura dale i valori di pressione in "psi" e visualizzare la velocità di macchina in feets(yards)/minuto.

Link al commento
Condividi su altri siti

3 ore fa, Livio Orsini ha scritto:

Inglesi e USA certamente

Sì, lo so, ma qui da noi?
Che poi, sarebbe ora che anche loro si adeguassero a sistemi di misura più razionali.
Se non ricordo male, parecchi anni fa la messa in orbita di un satellite fallì (con la totale distruzione di vettore e satellite) perché, nella collaborazione USA/Europa, c'è chi aveva fatto i calcoli con il sistema metrico, e chi no.

 

Link al commento
Condividi su altri siti

9 ore fa, batta ha scritto:

Che poi, sarebbe ora che anche loro si adeguassero a sistemi di misura più razionali.

 

Tutto il resto del mondo ha adottato il sistema metrico decimale tranne questi stati; tutte le volte che andavo a leggere una temperatura avevo un attimo di panico anche se sapevo che era espressain °F

Link al commento
Condividi su altri siti

Grazie mille a tutti, ora mi sembra tutto più chiaro. Ricapitolando, con 10 bit (9 + 1 di segno, ma per misure 0....10V è considerato un bit normale) ho 1024 divisioni. Di questi 1024 valori alcuni sono usati per sovrapilotaggio e sottopilotaggio, dunque ne rimangono 864. La risoluzione ottenuta è (100 - (-40))/864 = 0.16, ma il valore che ottengo nel PLC è portato fra 0 e 27648 (dunque immagino venga fatta una operazione del tipo 864*32 = 27648, dove 32 deriva dal fatto che devo rappresentare un numero 16 bit  con uno a 10 bit). Se ho detto qualche cavolata correggetemi per favore.

Link al commento
Condividi su altri siti

3 ore fa, electrofranco ha scritto:

dunque immagino venga fatta una operazione del tipo 864*32 = 27648, dove 32 deriva dal fatto che devo rappresentare un numero 16 bit  con uno a 10 bit

Sì, è così.

O, per essere più precisi, quando l'ingresso analogico (ragionamento identico anche per le uscite analogiche) ha meno di 16 bit, viene effettuato uno shift a sinistra. O, se preferisci dirlo in un altro modo, i bit usati saranno quelli a partire da sinistra. I bit non usati, quelli che rimarranno sempre a zero, sono quelli a destra. E, siccome effettuare uno spostamento a sinistra di un bit equivale a moltiplicare per due, ecco che si spiega perché, con risoluzioni inferiori ai 16 bit avremo letture con gradini, a seconda dei bit in meno, di 2, 4, 8, 16, 32, 64, 128, 256...
Questo sistema viene eusato da quasi tutti i costruttori, e permette di scrivere il programma senza conoscere la risoluzione del canale analogico. Pensa che grande rottura sarebbe, ogni volta, andar a consultare il manuale del modulo analogico per poter fare la scalatura del segnale.
L'unica cosa che potrebbe apparire strana nelle scelte di Siemens, è quel 27648, mentre altri, per esempio, hanno come valore massimo 32000. Raramente si trova chi utilizza tutto il campo disponibile (-32768..+32767). Generalmente, valori oltre il campo valido vengono utilizzati per la diagnostica.
Ci sono pro e contro, in questa scelta di Siemens. Il contro è che perdi qualcosa in risoluzione, il pro è che riesci a gestire anche valori che superano di circa il 17% il valore nominale.
A volte capita di andare oltre il campo nominale di un segnale analogico e, tutto sommato, avere a disposizione questo margine non mi dispiace.

 

immagine.png.74ba5ea6166710997f7311d1a9e64a58.png

 

Nel caso di un segnale unipolare (es. 0..10 V), avresti il campo di sottocomando che arriva fino a -4864, corrispondente a -17,593%
Tutto chiaramente descritto nei manuali.

 

 

Modificato: da batta
Link al commento
Condividi su altri siti

1 ora fa, batta ha scritto:

quando l'ingresso analogico (ragionamento identico anche per le uscite analogiche) ha meno di 16 bit, viene effettuato uno shift a sinistra.

Ottimo adesso tutto ha un senso! Questo spiega quel per 32. 

 

2 ore fa, batta ha scritto:

L'unica cosa che potrebbe apparire strana nelle scelte di Siemens, è quel 27648, mentre altri, per esempio, hanno come valore massimo 32000. Raramente si trova chi utilizza tutto il campo disponibile (-32768..+32767). Generalmente, valori oltre il campo valido vengono utilizzati per la diagnostica.

Grazie mille, anche questa era una cosa che non ero mai riuscito a capire. Dedicherò più tempo alla lettura del manuale.

Link al commento
Condividi su altri siti

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...