Vai al contenuto
PLC Forum


Normalizzazione E Scalatura Dei Segnali Analogici


PinokkioPLC

Messaggi consigliati

Salve, oggi ho iniziato a studiare la gestione dei segnali analogici, argomento che affronto per la prima volta.... sono arrivato ad una conclusione, vi espongo il ragionamento in attesa di eventuali conferme o smentite.

Allora, sto cercando di convertire esempi didattici della Siemens esposti in FUP in KOP, dunque mi sono imbattuto nel seguente esempio, nel quale sono riportate le istruzioni NORM_X e SCALE_X:

bc506a3ff0e430d2f9033df3ffbfbd45.png

Supponendo di avere un serbatoio da controllare, con un livello di riempimento da 100 a 1000 litri, e di avere un trasduttore che mi fornisce in uscita un segnale 0-10V, ciò significa che a 0V corrispondono 100L ed a 10V corrispondono 1000L e fin qui ci siamo.....

Adesso mediante il convertitore A/D presente nel mio PLC la tensione variabile tra 0-10V mi è convertita in binario, alla fine mi ritrovo una word interna al PLC che mi contiene il valore digitalizzato della tensione, per l's7-1200 questa word contiene valori che vanno da 0 a 27648, come mi è indicato in una figura nel PDF:

fb24f6cbe9a774813ac0b74838671001.png

Prima domanda: Perchè poi proprio questo valore 27648, da dove salta fuori?

In seguito con la funzione NORM_X ciò che si fà è andare ad associare l'intervallo numerico 0-27648 (valori interi) all'intervallo numerico 0-1 (valori reali).

Seconda domanda: Perchè è necessaria questa operazione?

Infine con la funzione SCALE_X, nell'esempio, ciò che si fà è andare ad associare l'intervallo numerico 0-1 (valori reali) all'intervallo di variabilità del livello di riempimento del serbatoio ovvero 100-1000L, dunque in tal caso grazie alla funzione SCALE_X riesco a capire il valore attuale del liquido nel serbatoio, a partire da un valore di tensione in ingresso al PLC, giusto?

GRAZIE per l'eventuale aiuto, ciao.

Modificato: da PinokkioPLC
Link al commento
Condividi su altri siti


Se fai una ricerca sull'argomento relativo alle scalature degli ingressi analogici dello S7-300 trovi almeno 2 discussioni dove Batta spiega in modo chiaro, completo ed esaustivo come e perchè Siemens usa questa scalatura.

Link al commento
Condividi su altri siti

Buongiorno Livio, prima di postare il messaggio ho fatto una bella ricerca ed ho trovato molte discussioni, però alcuni dubbi mi sono rimasti :( adesso sto rivedendo/rileggendo tutto, magari a mente fresca qualcosa mi si è chiarito.

Link al commento
Condividi su altri siti

Questa discussione mi è stata molto di aiuto:

dopo provo il mio esempio per vedere se i risultati sono coerenti, però il dubbio che mi rimane è sul fatto che con l's7-1200 si utilizzi quella funzione NORM_X per riportare l'intero in real, mentre nell's7-300 questa funzione non la trovo e mi sembra non si utilizzi neanche questa conversione....

Link al commento
Condividi su altri siti

.. però il dubbio che mi rimane è sul fatto che con l's7-1200 si utilizzi quella funzione NORM_X per riportare l'intero in real, mentre nell's7-300 questa funzione non la trovo e mi sembra non si utilizzi neanche questa conversione...

Semplicemente perchè sullo Step7 con il 300 la funzione non c'è: era esterna (mi pare FC101 o giù di lì); tu importi il blocco e lo utilizzi.

Link al commento
Condividi su altri siti

Salve drugo66, però qualcosa mi sfugge.... per l's7-1200 nell'esempio del primo messaggio alla funzione SCALE_X si invia un valore reale (precedentemente convertito con NORM_X) invece per l's7-300 la funzione SCALE_X può benissimamente (da quello che vedo sulla guida in linea) ricevere in ingresso un valore intero, dunque questa cosa mi sta un pò disorientando.....

Link al commento
Condividi su altri siti

NORM_X: la normalizzazione a 1 rende le operazioni matematiche come quelle di regolazione pid indipendenti dall'unità di misura adottata e dall'ordine di grandezza. Le funzioni costruite col programma si adattano in modo più semplice ad una nuova situazione.

27648: Per le normali esigenze un numero a 16 bit ha una risoluzione sufficiente per descrivere una grandezza fisica elaborata nel plc. con 16 bit si possono rappresentare i valori nel campo -32768 ÷ +32767. E' anche neccessario tenere un margine per gestire l'overrange, quindi si adotta un campo un po' inferiore a +32767. Non c'è uno standard unico. Nei siemens 300-400-1200 è adottato il 27648 che in binario (110110000000000) ha molti bit a destra 0 e facilita il riconoscimento, nel simatic 200 era 32000. In altri plc, Rockwell, il valore cambia da un modulo all'altro e questo crea problemi al programmatore, mentre nei controllogix la scalatura la fa direttamente il modulo analogico che così fornisce il valore real desisderato

Link al commento
Condividi su altri siti

27648: Per le normali esigenze un numero a 16 bit ha una risoluzione sufficiente per descrivere una grandezza fisica elaborata nel plc. con 16 bit si possono rappresentare i valori nel campo -32768 ÷ +32767. E' anche neccessario tenere un margine per gestire l'overrange, quindi si adotta un campo un po' inferiore a +32767. Non c'è uno standard unico. Nei siemens 300-400-1200 è adottato il 27648 che in binario (110110000000000) ha molti bit a destra 0 e facilita il riconoscimento, nel simatic 200 era 32000. In altri plc, Rockwell, il valore cambia da un modulo all'altro e questo crea problemi al programmatore, mentre nei controllogix la scalatura la fa direttamente il modulo analogico che così fornisce il valore real desisderato

Perfetto :) almeno mi sn tolto un dubbio sul perchè di quel 27648...... GRAZIE

NORM_X: la normalizzazione a 1 rende le operazioni matematiche come quelle di regolazione pid indipendenti dall'unità di misura adottata e dall'ordine di grandezza. Le funzioni costruite col programma si adattano in modo più semplice ad una nuova situazione.

Questa cosa l'avevo pensata leggendo sia l'esempio della Siemens che varie discussioni sul forum, però perchè per l's7-300 non c'è? o almeno in TIA Portal non la trovo per un s7-300.

GRAZIE dell'aiuto.

Link al commento
Condividi su altri siti

perchè per l's7-300 non c'è?

E' vero, non c'è però con:

istruzioni di base / operazioni di conversione / scale

puoi convertire a 0.0 ÷ 1.0

Link al commento
Condividi su altri siti

E' vero, non c'è però con:

istruzioni di base / operazioni di conversione / scale

puoi convertire a 0.0 ÷ 1.0

Perfetto, allora dopo effettuo delle prove e riporto i risultati.

GRAZIE per tutto l'aiuto.

Link al commento
Condividi su altri siti

E' vero, non c'è però con:

istruzioni di base / operazioni di conversione / scale

puoi convertire a 0.0 ÷ 1.0

Sto facendo delle prove, però mi sorge un dubbio..... volendo prima scalare sull'intervallo 0.0/1.0 e poi sull'intervallo che a me interessa, ovvero il livello del serbatoio 100/1000L, ho delle incompatibilità di dati, ovvero dopo la prima scalatura con la funzione SCALE quello che mi trovo in uscita è un reale, dunque questo mi creerebbe problemi quando dovrei scalarlo nuovamente, in quanto la seconda funzione SCALE in ingresso vuole un intero.

Il software mi fà lui "un casting" convertendomi quel Reale in uscita al primo SCALE in un intero in ingresso al secondo SCALE ?

Link al commento
Condividi su altri siti

mi fà lui "un casting"

No, non è così gentile. Probabilomente chi l'ha ideato non pensava alla normalizzazione.

L'operazione inversa da real a integer con scalatura è UNSCALE.

Link al commento
Condividi su altri siti

L'operazione inversa da real a integer con scalatura è UNSCALE.

Però a questo punto, se dopo la prima scalatura mi ritrovo un valore reale compreso tra l'intervallo 0.0-1.0 e questo valore con UNSCALE lo riporto ad intero, per poi scalarlo sull'intervallo 100-1000L alla fine la prima scalatura non mi è servita a molto, o mi sbaglio?

PS: Perdona la mia ignoranza se dovessi dire delle cavolate....

Link al commento
Condividi su altri siti

Ho utilizzato una singola scalatura, evitando la conversione del segnale originario in reale nell'intervallo 0.0-1.0, il programma sembra funzionare perfettamente:

ed43c7e3d8dae5395c069141d4ef4a87.png

Adesso vedo se riesco a convertire, prima della scalatura, l'intero di partenza in un reale compreso tra 0.0-1.0, però per l'S7-300 non trovo la funzione NORM_X riportata nella prima figura della discussione, figura riferita all's7-1200 :(

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