Acquisizione segnali digitali ed analogici
Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Acquisizione segnali digitali ed analogici
- Questo topic ha 9 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 5 anni fa da
Sergio Bertana.
-
AutorePost
-
Marzo 6, 2018 alle 10:14 pm #36182
Flea
PartecipanteDevo 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 ?
Marzo 10, 2018 alle 7:16 am #40037Sergio Bertana
Amministratore del forumPer 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.
Aprile 4, 2018 alle 7:58 am #40066Anonimo
InattivoScusate 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 ?
Aprile 5, 2018 alle 5:52 am #40067Sergio Bertana
Amministratore del forumNel 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.
Luglio 10, 2018 alle 11:59 am #45102Flea
PartecipanteSto 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?
Luglio 10, 2018 alle 12:02 pm #45113Sergio Bertana
Amministratore del forumL’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 *)
Marzo 30, 2020 alle 7:33 pm #54364Alessandro Napoli
PartecipanteScusate 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?
Marzo 30, 2020 alle 7:45 pm #54366Sergio Bertana
Amministratore del forumPer 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.
Marzo 31, 2020 alle 1:08 pm #54382Alessandro Napoli
PartecipanteCome modo di acquisizione per un segnale analogico in mV devo utilizzare sempre AD_VOLT_0_10_COMMON ?
Marzo 31, 2020 alle 1:15 pm #54389Sergio Bertana
Amministratore del forumIl 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).
-
AutorePost
- Devi essere connesso per rispondere a questo topic.