Vai al contenuto

Acquisizione segnali digitali ed analogici

Home Forum Controllori SlimLine e Netsyst (LogicLab) Acquisizione segnali digitali ed analogici

Stai visualizzando 10 post - dal 1 a 10 (di 10 totali)
  • Autore
    Post
  • #36182
    Flea
    Partecipante

    Devo acquisire un segnale 0-10V su una CPU Slimline MPS053. Mentre per i digitali semplicemente mappavo la mia variabile booleana dal SysCPU[x], per gli analogici non riesco a capire dove trovo il valore acquisto dalla CPU. Qualcuno sa darmi qualche suggerimento ?

    #40037
    Sergio Bertana
    Amministratore del forum

    Per la gestione degli ingressi analogici si utilizza il FB SysGetAnInp, per la gestione delle uscite analogiche si utilizza il FB SysSetAnOut. Devi definire come parametro l’indirizzo hardware (Impostato con i dip switches) del modulo ed il canale da gestire. Nel parametro Mode per gli ingressi è possibile definire il modo di acquisizione (Corrente, tensione, temperatura, resistenza), per le uscite il tipo di uscita (Corrente, tensione).

    Aggiungo una nota per quanto riguarda gli I/O digitali, il sistema operativo li gestisce in immagine di processo allocandoli automaticamente nei data block di ingresso e di uscita. Quindi basta mappare gli ingressi come %IXmc e %QXmc per le uscite (m:Indirizzo di modulo, c:Canale), quindi l’ingresso 5 del modulo con indirizzo 1 sarà %IX1.5 mentre l’uscita 7 del modulo 4 sarà %QX4.7. Da ricordare che l’indirizzo modulo della CPU è 255, quindi l’ingresso 1 del modulo CPU sarà %IX255.1.

    Anche per gli I/O digitali è comunque possibile acquisire/gestire direttamente il valore utilizzando il FB SysGetPhrDI per la lettura degli ingressi e SysSetPhrDO per la gestione delle uscite. Consiglio la lettura di: topic, topic, topic.

    #40066
    Anonimo
    Inattivo

    Scusate sono un principiante, se devo acquisire un valore di temperatura  di acqua di riscaldamento da un ingresso analogico, se ho capito bene devo fare:

    Aggiungere una function block chiamata per esempio “Temperatura” all’interno della quale devo dichiarare la variabile.
    Definire una variabile per esempio “TAcqua” come variabile globale, clicco su type e spunto Function Blocks e nell’elenco a destra richiamo la funzione “Temperatura” che avevo creato. E’ giusto ? che codice metto per dichiarare la variabile ? 

    Và bene come tipo mettere word? cioè, SlimLine ragiona in numeri interi, poi devo io formulare operazioni matematiche per ottenere il valore con i decimali desiderati, giusto ?

    #40067
    Sergio Bertana
    Amministratore del forum

    Nel tuo caso specifico acquisire temperature utilizzando sensori Pt100 o Pt1000 è estremamente semplice, il nostro modulo di espansione I/O analogico gestisce direttamente molti tipi di sensori ritornando in uscita un valore di temperatura già in gradi centigradi su di una variabile a virgola mobile di tipo REAL.

    Quindi basterà nel tuo programma istanziare un FB SysGetAnInp definendo l’indirizzo del modulo di I/O analogico ed il canale (Il modulo ne può avere 5 o 10) da cui vuoi acquisire il valore di temperatura, ecco lo screenshot di un programma in FBD.In pratica è un pò quello che hai descritto tu, istanziare infatti significa dichiarare una variabile assegnando un nome (Nel nostro caso Temperatura) di tipo FB, nel programma si definiranno i vari parametri in ingresso al FB (Nel nostro caso indirizzo di modulo, numero di canale e tipo di lettura) e si collegherà in uscita la variabile che dovrà contenere il valore (Nel nostro caso TAcqua).

    Come vedi per semplicità ho dichiarato la variabile TAcqua come variabile locale, ma se tu la vuoi utilizzare in altri program (POUs) del progetto dovrai dichiarare come hai detto tu una variabile globale.

    #45102
    Flea
    Partecipante

    Sto provando col blocco SysGetAnInp a leggere un canale 0-10V su una CPU MPS053A110… questo il programma.

    AI_Wind.Addressl:=255; (* Modulo CPU *)
    AI_Wind.Channel:=0;
    AI_Wind.Mode:=2; (* AD_VOLT_0_10_COMMON *)

    AI_Wind_Speed:=TO_USINT(ValueScale(AI_Wind.Value, 0.0, 10.0, 0.0 30.0)); (* Scaling 0-10Volt to 0-30 m/s *)

    Ma andando online il canale restituisce zero (no bit di fault) pur eseendoci circa 2V.. dove sbaglio?

    #45113
    Sergio Bertana
    Amministratore del forum

    L’errore è che istanzi il FB, lo parametrizzi, ne utilizzi il valore, ma non lo esegui… Devi aggiungere dopo la parametrizzazione:

    AI_Wind(); (* Eseguo acquisizione valore analogico *)

    #54364
    Alessandro Napoli
    Partecipante

    Scusate sono un principiante, devo acquisire un segnale analogico 0-10V su una CPU Slimline MPS053 tramite un sensore piezoelettrico per misurare delle vibrazioni. Come devo fare?

    E inoltre come faccio a visualizzare l’andamento del segnale acquisito?

    #54366
    Sergio Bertana
    Amministratore del forum

    Per acquisire il segnale analogico come scritto nei post precedenti devi utilizzare il FB SysGetAnInp, definendo come modo di acquisizione AD_VOLT_0_10_COMMON.

    Non capisco la seconda parte della domanda, cosa intendi per visualizzarne l’andamento… puoi visualizzarlo graficamente utilizzando l’utility oscilloscopio di LogicLab (Qui un esempio di utilizzo).

    Lo puoi appoggiare in una variabile accessibile da Modbus ed utilizzare un pannello HMI  per visualizzarlo in forma numerica e/o grafica (Vedi post).

    Puoi seguire questo articolo e visualizzare il trend del segnale in un oscilloscopio gestito da browser.

    #54382
    Alessandro Napoli
    Partecipante

    Come modo di acquisizione per un segnale analogico in mV devo utilizzare sempre  AD_VOLT_0_10_COMMON ?

    #54389
    Sergio Bertana
    Amministratore del forum

    Il modulo CPU MPS053 che hai tu gestisce solo ingressi 0-10 volt in modo comune, discorso diverso se avessi a disposizione un modulo di acquisizione analogica, questo modulo dispone di un convertitore A/D con molte possibilità di acquisizione.

    Intanto gestisce l’acquisizione in differenziale che permette di limitare i disturbi di crosstalk sul segnale acquisito, e nella configurazione con 1 Volt di fondo scala può acquisire con una risoluzione di 1.577uV. Mentre il modulo CPU ha una risoluzione di 9.7mV (Più di 6000 volte inferiore).

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