Vai al contenuto
PLC Forum


Scalare Un Ingresso Analogico


starktony

Messaggi consigliati

Buonasera,

partiamo dal presupposto che non sono molto pratico su plc Omron. Ho una cpu CP1L e vorrei capire come posso scalare un ingresso analogico definendo limite massimo e limite minimo, inoltre vorrei capire come fare il contrario dato un limite minimo e un massimo tradurre il numero nel corrispondente valore analogico.

Ho scovato un blocchetto SCL(194). In S dovrei mettere la word di ingresso, e poi in P, P1+1,P1+2,P1+3 rispettivamente il val minimo in bcd, il val minimo in binario,val max in bcd e il val max in binario per poi trovarmi il risultato in R.

Mi date qualche dritta per favore?

grazie

Link al commento
Condividi su altri siti


Io trovo molto scomoda la funzione SCL(194). Ecco perché mi sono creato il seguente blocco funzione:

(* FB normalizzazione valore IN-OUT *)

(* Inizializzo ENO = FALSE *)
ENO :=  FALSE ;

(* Procedo con calcoli solo se InMin e InMax sono diversi tra loro,
per evitare divisione per zero *)
IF InMin <> InMax THEN

    (* Conversione da INT a REAL e appoggio a variabili interne *)
    rInMin := INT_TO_REAL(InMin) ;
    rInMax := INT_TO_REAL(InMax) ;
    rOutMin := INT_TO_REAL(OutMin) ;
    rOutMax := INT_TO_REAL(OutMax) ;
    rIn := INT_TO_REAL(IN) ;

    (* Correggo valore interno ingresso se esce dai limiti *)
    IF rIn > rInMax THEN
        rIn := rInMax ;
    ELSIF rIn < rInMin THEN
        rIn := rInMin ;
    END_IF;

    (* Calcolo valore  uscita *)
    OUT := REAL_TO_INT(rOutMax + (rIn - rInMin) * (rOutMax - rOutMin) / (rInMax - rInMin)) ;
    
    (* Attivo ENO *)
    ENO := TRUE ;

END_IF;


Le variabili rInMin, rInMax, rOutMin, rOutMax, rIn sono variabili interne di tipo REAL.

Le variabili IN, InMin, InMax, OutMin, OutMax sono variabili di ingresso di tipo INT.

La variabile OUT è una variabile di uscita di tipo INT.

La funzione può essere usata sia per scalare un ingresso analogico, sia per una uscita analogica. Tutto dipende solamente da come imposti i valori.

Link al commento
Condividi su altri siti

Batta ti ringrazio molto dell'aiuto ma copiando quello che mi hai scritto in un fb mi da 17 errori, molti per la sintassi. Purtroppo non sono esperto di omron e non ho il tempo di studiare ora questa nuova piattaforma (per me nuova) quindi dovrei accontentarmi visto che non devo essere molto preciso devo solo leggere un ingresso analogico e poi restistuire un valore fisso tramite uscita analogica.

Piuttosto come si fa a capire a che indirizzo corrispondono gli ingressi analogici del plc? E quelli su un modulo di espansione?

Link al commento
Condividi su altri siti

Batta ti ringrazio molto dell'aiuto ma copiando quello che mi hai scritto in un fb mi da 17 errori

Hai dichiarato le variabili che ho elencato sotto al codice?

Piuttosto come si fa a capire a che indirizzo corrispondono gli ingressi analogici del plc? E quelli su un modulo di espansione?

Io ho ripreso in mano Omron da pochissimo tempo, dopo parecchi anni (diciamo dai tempi del CQM1) ma, se non sbaglio, dipende dalla CPU che stai usando.

Con alcune CPU vedi gli indirizzi in "Configurazione tabella I/O e moduli", mentre con altre CPU l'indirizzo dipende dalla posizione del modulo.

Penso che il modo migliore per avere la risposta giusta sia consultare il manuale della CPU che stai utilizzando.

Link al commento
Condividi su altri siti

Ti suggerisco di passare direttamente alla funzione APR.

Simile allo scaling ma più flessibile impari una cosa e la usi sempre.

Ti faccio un esempio terra terra da cui partire.

Allora prova magari in emulazione o sulla macchina con questi canali di esempio:

Canale di controllo D0

canale di ingresso W0

canale di uscita W1

Poi carichi sull' area D i seguenti valori:

D0 &1

D1 &4000

D2 &0

D3 &4000

D4 &100


Mi scappato un invia...

completo qui il mio intervento.

Se poi dai in "pasto" alla W0 dei valori tra 0 e 4000 tu avrai la proporzione sulla W1.

Ovviamente sul manuale trovi poi tutte le peculiarità della funzione.

Per l'indirizzo delle schede si devi guardare il manuale perché sulle CP1L al primo scan devi scrivere sulle uscite la configurazione che ti serve.

Cordialità

Modificato: da TiBo
Link al commento
Condividi su altri siti

Batta non ho dubitato minimamente della bontà del codice che mi hai scritto avendo guardato molte volte le tue librerie.... ho poco tempo e devo velocemente portare a casa dei risultati, infatti devo anche trovare il modo di comunicare in seriale con un altro strano oggetto. Ho capito che avrei dovuto dichiarare le variabili ma ripeto ora è un po tardi per studiare preferirei usare i blocchetti già pronti.

Grazie a TiBo per la spiegazione!

Modificato: da starktony
Link al commento
Condividi su altri siti

Riguardando il codice mi sono accorto di un grossolano errore.

Il codice corretto è il seguente (in rosso la modifica):

(* FB normalizzazione valore IN-OUT *)

(* Inizializzo ENO = FALSE *)
ENO := FALSE ;

(* Procedo con calcoli solo se InMin e InMax sono diversi tra loro,
per evitare divisione per zero *)
IF InMin <> InMax THEN

(* Conversione da INT a REAL e appoggio a variabili interne *)
rInMin := INT_TO_REAL(InMin) ;
rInMax := INT_TO_REAL(InMax) ;
rOutMin := INT_TO_REAL(OutMin) ;
rOutMax := INT_TO_REAL(OutMax) ;
rIn := INT_TO_REAL(IN) ;

(* Correggo valore interno ingresso se esce dai limiti *)
IF rIn > rInMax THEN
rIn
:= rInMax ;
ELSIF rIn < rInMin THEN
rIn
:= rInMin ;
END_IF;

(* Calcolo valore uscita *)
OUT := REAL_TO_INT(rOutMin + (rIn - rInMin) * (rOutMax - rOutMin) / (rInMax - rInMin)) ;

(* Attivo ENO *)
ENO := TRUE ;

END_IF;

Link al commento
Condividi su altri siti

Ciao,

per effettuare le scalature solitamente uso la scaling SCL (esistono anche le istruzioni SCL2 E SCL3 ma dipende dai vari modelli).

L'APR (arithmetic process) è un'istruzione molto potente e puoi fare tanti diversi tipi di scalatura, ma occorre stare attenti alla parametrizzazione del canale di controllo.

Secondo me usare la scaling ti semplifica la vita, anche se è un po' limitata quindi non è sempre utile perchè lavora solo sul primo qudrante degli assi cartesiani.

Ciao

Link al commento
Condividi su altri siti

Buonasera ragazzi.

L'ingresso analogico che va dato in pasto a APR deve essere converito? leggendo il canale in decimale questo va da 2 fino a 811 (0..10v) sul manuale dice che dovrebbe arrivare a 6000.

Non capisco come scalarlo. E se volessi usare numeri il virgola mobile? es. al max del valore analogico deve corrispondere 100.00.

Grazie

Modificato: da starktony
Link al commento
Condividi su altri siti

Allora vediamo.

Il segnale in ingresso all'apr può essere quello del canale analogico.

Se proponendo un segnale 0-10V non hai il campo 0-4000 (mi risulta 4000) hai un problema sulle impostazioni.

Per avere l'uscita dell'apr in reale ed usare la virgola mobile puoi, più tardi ti mando una parametrizzazione.

Cordiali saluti.

Link al commento
Condividi su altri siti

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