starktony Inserito: 17 febbraio 2015 Segnala Share Inserito: 17 febbraio 2015 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 More sharing options...
batta Inserita: 17 febbraio 2015 Segnala Share Inserita: 17 febbraio 2015 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 More sharing options...
starktony Inserita: 18 febbraio 2015 Autore Segnala Share Inserita: 18 febbraio 2015 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 More sharing options...
batta Inserita: 18 febbraio 2015 Segnala Share Inserita: 18 febbraio 2015 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 More sharing options...
TiBo Inserita: 18 febbraio 2015 Segnala Share Inserita: 18 febbraio 2015 (modificato) 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: 18 febbraio 2015 da TiBo Link al commento Condividi su altri siti More sharing options...
starktony Inserita: 18 febbraio 2015 Autore Segnala Share Inserita: 18 febbraio 2015 (modificato) 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: 18 febbraio 2015 da starktony Link al commento Condividi su altri siti More sharing options...
batta Inserita: 24 febbraio 2015 Segnala Share Inserita: 24 febbraio 2015 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 More sharing options...
claubo Inserita: 24 febbraio 2015 Segnala Share Inserita: 24 febbraio 2015 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 More sharing options...
starktony Inserita: 25 febbraio 2015 Autore Segnala Share Inserita: 25 febbraio 2015 (modificato) 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: 25 febbraio 2015 da starktony Link al commento Condividi su altri siti More sharing options...
TiBo Inserita: 27 febbraio 2015 Segnala Share Inserita: 27 febbraio 2015 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora