Vai al contenuto
PLC Forum


Funzione SCALE_X


Messaggi consigliati

Inserito:

Buongiorno a tutti,

sono Federico nuovo iscritto al forum, e avrei bisogno di un consiglio che penso potrebbe aiutare anche altri.

Mi è capitato su un impianto di dover interfacciare dei sensori ad ultrasuoni 4...20mA per misurare il livello di riempimento di un silos di liquido, il tutto con un plc Siemens S7-1200 1215C (dc/dc/rly).

Il sensore, monatato in cima al silo, restituisce un segnale che aumenta con l'aumentare della distanza del liquido dal sensore, quindi per indicare correttamente il livello di riempimento del silo bisogna inveritire il segnale (quando il sengale è prossimo ai 4mA significa che il serbatoio è pieno, quando il sgnale è prossimo ai 20mA il serbatoio è vuoto). 

Per elaborare correttamente il segnale ho usato innanzitutto la funzione "NORM_X", che mi rapporta il segnale in un range da 0.0 ad 1.0, e successivamente la funzione "SCALE_X" per rapportare il risultato nel range per me d'interesse (0-100%). Dato che devo inveritre il segnale ho pensato di sfruttare la funzione scale_x invertendo i parametri min e max, in particolare ho impostato come parametro MIN il valore 100 e come parametro MAX il valore 0. Ovviamente il risultato ottenuto non è stato quello aspettato, quindi sono andato a leggermi la guida in linea di questa funzione andando a vedere le operazioni che svolge. Ho provato a replicare le operazioni matematiche fu un'altra FC creando una DB d'appoggio per salvare le variabili, e i risultati delle due funzioni sono differenti (corretti quelli della funzione che ho creato).

C'è qualcuno che conosce una possibile spiegazione a questo caso? 

PS: allego screen del programma per una maggiore chiarezza.

 

Ringrazio tutti in anticipo per il tempo dedicatomi e resto a disposizione per qualsiasi,

Federico

ScaleX.png


Mattia Spoldi
Inserita:

la scale_X fa un controllo che MAX sia maggiore di MIN, se non è così ti mette su OUTPUT il valore di VALUE,

consiglio spassionato, fatti una tua funzione di scalatura e abbandona scale_X e norm_X

Inserita:

Non uso queste funzioni perchè come suggerito da Mattia ne ho una mai, comunque il valore dell'analogica va da 0 a 27648, il valore max del norm_X deve essere 27648.

 

Roberto Gioachin
Inserita:

Prendi il segnale in uscita da NORM_X, ed esegui (1,0 - NORM_X) invia il risultato a SCALE_X

Inserita:
13 ore fa, ilMondo ha scritto:

Dato che devo inveritre il segnale

 

valore_voluto = ABS(valore_letto - 27648)

Inserita:

Io di solito mi faccio una mia “funzione di retta”

 

OUT = ((O2 - O1) / (I2 - I1))*(IN - I2) + O2

 

Nel tuo caso

O1 = 100

O2 = 0

I1 = 0

I2 = 27648

IN = valore letto da analogica sensore

 

poi metto anche dei limiti per evitare che il valore di uscita vada fuori scala

 

Ciao

  • 2 weeks later...
Inserita:

La scalatura di un segnale analogico è una semplice retta:

(X-X0)/(X1-X0)=(Y-Yo)/(Y1-Y0) da cui con semplici passaggi si ottiene la formula della retta: Y=(X-X0)/(X1-X0)*(Y1-Y0)+Y0

 

Y è il valore finale scalato

X è la sonda

X0 è il valore minimo della sonda cioè 0

X1 è il valore massimo della sonda che è 27648

Y0 è il valore minimo scalato

Y1 è il valore massimo scalato

di solito il minimo e massimo della sonda lo trovi nel datasheet del sensore e lo comperi scegliendolo proprio in base al suo range. Se ad esempio il tuo sensore è 0-30 m metti Y0 =0 e Y1=30 e avrai il valore in metri. Oppure, se preferisci, fai 0-100% e quindi metti Y0=0 e Y1=100 e avrai il valore letto in %.

Questo sistema vale per qualunque tipo di sensore. Poi se vuoi puoi raffinare la scalatura mettendo controlli sui valori ecc. Ovviamente vale anche il ragionamento inverso se vuoi usare questa funzione per uscite analogiche.

 

Insomma parte tutto dalla formula della retta.

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