Vai al contenuto

Effettuare la scalatura di un valore

Home Forum Programmazione IEC 61131 (LogicLab) Effettuare la scalatura di un valore

Stai visualizzando 8 post - dal 1 a 8 (di 8 totali)
  • Autore
    Post
  • #35251
    Sergio Bertana
    Amministratore del forum

    Molti clienti ci chiedono come effettuare la scalatura di un valore, questo si rende necessario ad esempio nel caso di acquisizione di sensori in corrente 4-20 mA. Al variare del valore di corrente acquisito dal sensore 4-20 mA corrisponde un corrispondente valore di grandezza acquisita.

    La funzione ValueScale (Estratto manuale), permette di fornire in ingresso il valore di corrente acquisita definendo come valore minimo 4 mA e come valore massimo 20 mA. Basterà definire i range del valore della grandezza da acquisire, la funzione eseguirà la conversione dal valore di corrente acquisita al valore ingegneristico della grandezza da acquisire.

    Nel semplice programma FBD di cui allego screenshot, viene eseguita l’acquisizione di un sensore di temperatura in 4-20 mA, il valore minimo di temperatura è -50 °C ed il massimo 150 °C. Come si vede dallo screenshot a 6 mA il valore di temperatura acquisito corrisponde a -30 °C.

    #37901
    Oscar_stb
    Partecipante

    Se devo acquisire dei valori in tensione che non sono lineari è possibile utilizzare questa funzione ? Mi spiego meglio: valore in tensione 1V valore ingegneristico 1, valore tensione 2V valore ingegneristico 1,5.  Nel caso quale blocco funzione utilizzare ?

    #37902
    Oscar_stb
    Partecipante

    Credo di averla trovata: Linearize ?

    #37903
    Sergio Bertana
    Amministratore del forum

    Si è proprio la funzione Linearize (Estratto manuale) che ti serve. Come vedi dal manuale devi fornire alla funzione gli indirizzi di due array di variabili REAL.

    VInReference, Array con i valori in ingresso da linearizzare (Nel tuo caso 1.0, 2.0, ecc.).
    VOutReference, Array con i valori di uscita linearizzati (Nel tuo caso 1.0, 1.5, ecc.).

    La funzione esegue la ricerca nell’array VinReference del valore immediatamente superiore al valore in ingresso interpolando linearmente tra il valore trovato e quello precedente, calcolando il valore in uscita in base ai due valori presenti nelle stesse posizioni dell’array VOutReference. Naturalmente il valore in uscita sarà molto piuù preciso quanti più punti avrai tabellato nei due arrays.

    #39983
    Anonimo
    Inattivo

    Volevo chiedere un informazione sulla funzione Linearize, è possibile utilizzare un file csv al posto dei due array in modo tale da tarare il sensore senza dover spegnere l’impianto ?

    Ho cercato sul forum una soluzione, ho trovato questa discussione e questa discussione, ma purtroppo non sono riuscito a modificarle al mio scopo.

    #39984
    Sergio Bertana
    Amministratore del forum

    La funzione Linearize esegue il calcolo del valore in uscita in base al valore in ingresso basandosi su due arrays VInReference e VOutReference, alla esecuzione della funzione i due arrays devono essere valorizzati. Quindi per leggere i valori da un file CSV devi leggere il file e trasferire i valori nei due arrays. Credo che basandosi sui due topics che hai citato puoi già avere una idea di come fare.

    Ma se la necessità è di modificare dinamicamente i valori negli arrays, basta molto più semplicemente dichiarare gli arrays come RETAIN e con LogicLab da debug modificarne i valori.

    Se definisci gli arrays RETAIN ogni volta che carichi il programma il loro valore viene reinizializzato al valore di init. Se desideri che rimangano i valori impostati da debug basterà allocare gli arrays nell’area di memoria tampone (Da DB100.2048 in avanti). In questo topic informazioni sull’uso della memoria ritentiva.

    #40064
    Flea
    Partecipante

    Sulla versione Logiclab 2.5 non trovo nella libreria eLLabUtyLib_C040 la funzione di scalatura… dove posso trovarla?

    #40065
    Sergio Bertana
    Amministratore del forum

    Le ultime versioni delle varie librerie di LogicLab sono disponibili nella zona download della pagina delle librerie sul nostro sito. Scarichi la libreria che ti interessa e poi importi dalla libreria (Topic) l’oggetto che ti serve (Nel tuo caso la funzione ValueScale).Quello che è strano è che nella libreria eLLabUtyLib_C040 la funzione è presente, sei sicuro di avere selezionato le funzioni (Screenshot) quando esegui l’import ?

Stai visualizzando 8 post - dal 1 a 8 (di 8 totali)
  • Devi essere connesso per rispondere a questo topic.