Vai al contenuto
PLC Forum


Controllo Valore Analogico


Messaggi consigliati

Inserito: (modificato)

buonasera a tutti,

qualcuno mi sa indicare quale istruzione/i (in KOP) utilizare per trasformare un valore 4-20mA in percentuale? nel dettaglio i segnali provengono da un sistema di pesatura che non deve indicare il peso esatto del<contenuto ma lapercentuale di materiale contenuta.

grazie

saluti a tutti

Modificato: da thesla

Inserita:

Con una semplicissima scalatura.

Tieni presente che a 4mA corrisponde il valore 0, e a 20 mA corrisponde il valore 27648.

Non devi far altro che scalare tali valori in maniera da far corrispondere 0 allo 0%, e 27648 al 100%.

Se non vuoi fare il calcolo, puoi utilizzare la funzione SCALE che trovi nelle librerie Siemens.

Inserita:

grazie batta!

domani mi metto al lavoro e ti faccio sapere il risultato

ciao

grazie!

Inserita:

ho provato ma i risultati sono stati "scarsi"

vista la tua disponibilità ti illustro il problema, mi aiuterai sicuramente per la soluzione

ho tre seganli ma parliamo di uno tanto vale per tutti gli altri

un segnale analogico EW18 arriva dalla scheda

con l'operazione move la indirizzo a MW18

MW 18 sarà l'IN di SCALE

MD20 in HI_LIM come faccio a settarlo a 100

MD30 in LO_LIM come faccio a settarlo a 0

passando all'uscita: devo comunicare in profibus con un master che ha impostato come id locale A102.0 con lunghezza 4byte che penso di convertire con la funzione MOVE in MD102 per poi assegnarlo all'uscita OUT di SCALE.

per quello che riguarda RAT_VAL cosa imposto?

ti ricordo solo che ho un 4-20mA e devo rappresentarlo in percentuale

ciao grazie!

Inserita:

Prima di tutto, normalmente per ingressi ed uscite analogici si utilizzano indirizzi da 256 in su, e si interrogano con PEWxxx.

Riguardo all'unità in Profibus dove devi, invece, scrivere un valore, dovresti dire qualcosa di più.

Intanto vale la stessa regola sopraccitata: indirizzi da 256 in avanti e scrittura su PAWxxx.

Poi non capisco cosa intendi con: "devo comunicare in profibus con un master che ha impostato come id locale A102.0 con lunghezza 4byte".

Sembra che il modulo non sia un modulo di uscite analogiche, ma di uscite digitali. Se così fosse, non potrebbe certo funzionare.

Dopo bisogna rispettare i formati.

Per esempio, se si tratta di uscita analogica, si dovrà scrivere un valore di tipo INT o WORD, e non DWORD.

Se sono uscite analogiche e scrivi una DWORD, vai a scrivere valori su due uscite analogiche consecutive, e non su una sola. Valori, inoltre, che non hanno senso, soprattutto se il formato della variabile è REAL.

Quindi, le prime operazioni che ti consiglierei di fare sono:

1) configurazione dell'indirizzo dell'ingresso analogico da PEW256 in su

2) configurazione dell'indirizzo dell'uscita analogica da PAW256 in su

Poi, per la scalatura, puoi seguire due strade: fare il calcolo o utilizzare la funzione SCALE.

Esempio di calcolo (gli indirizzi usati sono, ovviamente, solo di esempio):

      L     PEW  256                    //Leggi ingresso analogico
      ITD                               //Converti in DIT
      L     L#100                       //Carica 100 in formato DINT
      *D                                //Moltiplicazione di DINT
      L     L#27648                     //Carica 27648 in formato DINT
      /D                                //Divisione tra DINT
      T     MW   100                    //Scrivi il risultato in una variabile INT
Se poi devi trasferire il valore scalato ad una uscita analogica, ti basta scrivere:
      L     MW   100
      T     PAW  256
Se invece utilizzi la funzione SCALE, devi tener presente quanto segue: 1) se posizioni il cursore del mouse sulla funzione e premi F1, si apre la pagina con tutte le istruzioni necessarie 2) devi prestare attenzione ai formati. La funzione SCALE vole i parametri nei seguenti formati: IN: (INT). Se hai compilato la tabella dei simboli, di default a PEW viene assegnato il formato WORD. Devi correggere in INT. HI_LIM: (REAL). Qui ti basta scrivere direttamente il valore, basta rispettare il formato. Quindi, scrivi 100.0 (e non solo 100) LO_LIM: (REAL). Come sopra. Scrivi 0.0 BIPOLAR: (BOOL). Bipolare è, per esempio, per segnali ±10V. Nel caso di segnale 4-20mA non è bipolare, quindi scrivi FALSE RET_VAL: (WORD). Qui la funzione restituisce un eventuale codice di errore (0=nessun errore). Puoi mettere quello che vuoi, basta che sia una variabile dichiarata come WORD OUT: (REAL). Qui la funzione restituisce il valore scalato in formato REAL. Nel caso dovessi poi trasferire il risultato scalato ad una uscita analogica, lo dovresti prima convertire in INT.
      L     MD   100                    //valore scalato in formato REAL
      RND                               //Converte in DINT arrotondando all'intero più vicino
      T     PAW  256                    //Invia il valore all'uscita analogica

Da notare che il valore viene prima convertito da REAL a DINT e poi scritto in una INT (o WORD, ma il concetto non cambia).

Perché ciò non comporti errori, il valore di partenza non deve superare il limite ammesso da una variabile INT (-32768..+32767).

Nel tuo caso si parla di 0-100%, quindi non c'è problema.

Inserita:

ho seguito i tuoi consigli ma purtroppo non ho potuto apprezzare i risultati in quanto tutte e tre le centraline di pesatura risultano essere guaste, davano in uscita ciraca 40mA e con il test della centralina per variare manualmente il valore, nulla accadeva. l'assistenza dell'azienda mi ha confermato che le centraline non funzionavano.

sicuramente andrà tutto bene sostituendo le centraline, ti darò notizie in merito solo a fine mese.

grazie per la tua competenza, gentilezza e professionalità

ciao

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