ilMondo Inserito: 3 febbraio Segnala Inserito: 3 febbraio 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
Mattia Spoldi Inserita: 4 febbraio Segnala Inserita: 4 febbraio 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
acquaman Inserita: 4 febbraio Segnala Inserita: 4 febbraio 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: 4 febbraio Segnala Inserita: 4 febbraio Prendi il segnale in uscita da NORM_X, ed esegui (1,0 - NORM_X) invia il risultato a SCALE_X
drn5 Inserita: 4 febbraio Segnala Inserita: 4 febbraio 13 ore fa, ilMondo ha scritto: Dato che devo inveritre il segnale valore_voluto = ABS(valore_letto - 27648)
marco1278 Inserita: 6 febbraio Segnala Inserita: 6 febbraio 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
Massimo_Fra Inserita: lunedì alle 08:36 Segnala Inserita: lunedì alle 08:36 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.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora