roberto8303 Inserito: 10 aprile 2009 Segnala Share Inserito: 10 aprile 2009 Ragazzi ho un problemino con la s7 222 e il modulo em 235 praticamente collego all ingresso del modulo una tensione 0-10v e la leggo nella word AIW0 ora vorrei avere in uscita del modulo cioe in AQW0 il valore di ingresso diviso 1,5! ho trasferito il valore di AWI0 come numero reale e faccio la divisione il cui risultato è in una doppia word VD100fin qui tutto bene ma ora non riesco a riportare questo valore in vd100 in AQW0!!!ho provato tutte le conversioni anche da DI_R oppure DI_I ma niente il blocco diventa rosso oppure mi dice NAN all ingresso del box! quale operazione devo usare?? Link al commento Condividi su altri siti More sharing options...
pbono Inserita: 11 aprile 2009 Segnala Share Inserita: 11 aprile 2009 (modificato) Ciao, Roberto8303Il valore da trasferire sull'uscita analogica AQW0 deve essere una word. Il risultato della divisione è una doppia word. Prova a guardare il valore della VW100 e VW102 vedrai che la prima word è il risultato della divisione e la seconda word il resto della divisione. Hai cosi sulla word VW100 il valore da trasferire sulla analogica AQW0. (vado a memoria) vedi l'esempio sul manuale PLC S7 200 a pag. 154 Modificato: 11 aprile 2009 da pbono Link al commento Condividi su altri siti More sharing options...
batta Inserita: 11 aprile 2009 Segnala Share Inserita: 11 aprile 2009 Se vuoi effettuare il calcolo in virgola mobile, i passaggi da fare sono i seguenti:1) conversione di AIW0 da INT a DINT (box I_DI) e risultato in VDxx (oppure potresti usare AC0 o AC1)2) conversione di VDxx da DINT a REAL (box DI_R) e risultato ancora in VDxx3) divisione di VDxx per 1.5 (box DIV_R) e risultato ancora in VDxx4) conversione di VDxx da REAL a DINT (box ROUND) e risultato ancora in VDxx5) conversione di VDxx da DINT a INT (box DI_I) e risultato in VWxx (il box in uscita non accetta AQWxx)6) trasferimento di VWxx (box MOW_W) in AQW0In lista istruzioni (convertibile poi in ladder, se lo preferisci) risulta come segue:LD SM0.0 ITD AIW0, VD100 DTR VD100, VD100 /R 1.5, VD100 ROUND VD100, VD100 DTI VD100, VW100 MOVW VW100, AQW0 Oppure, utilizando l'accumulatore al posto di VD100: LD SM0.0 ITD AIW0, AC1 DTR AC1, AC1 /R 1.5, AC1 ROUND AC1, AC1 DTI AC1, AC1 MOVW AC1, AQW0Insomma, è più lunga la descrizione del codiceSi nota anche come per l'esecuzione di calcoli sia più chiara la lista istruzioni rispetto al ladder Si potrebbe completare il codice aggiungendo controlli per l'esecuzione delle operazioni solo se l'operazione precedente è stata eseguita correttamente.Questo lo ottieni in ladder mettendo i box in fila sulla stessa riga (risulta però una visualizzazione scomoda), ed in awl con l'istruzione AENO oppure con SM1.1Nel tuo caso (valore di partenza sicuramente compreso tra -32768 e 32767) questi controlli non sono, a mio avviso, necessari.N.B.: le conversioni da INT a DINT e viceversa non servono se i valori rimangono sempre compresi tra 0 e 32767. Sono invece indispensabili se si esce da questi limiti (es. valore negativo).Se vuoi fare le cose in modo corretto (anche da un punto di vista puramente concettuale e non solo pratico), non omettere queste conversioni. Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 11 aprile 2009 Autore Segnala Share Inserita: 11 aprile 2009 Grazie ragazzi! Scusa Batta le conversione da int a dint non sono necessarie se il campo è da 0 a 32767 ma come ho capito sono necessarie per la virgola! perche all inizio del programma hai messo SM0.0 se non lo metto cosa succede? Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 11 aprile 2009 Autore Segnala Share Inserita: 11 aprile 2009 Ah per pbono ho provato come mi hai detto tu a usare le word dispari per leggere il valore meno significativo della doppia word ma mi è uscito un numero strano descrivo:In AIw0 c era 20000 mi sembrano 6 volt ora non ricordo bene.. Aiw0 l ho portato in una VD100 e leggendo il valore nella VW101 mi usciva circa 18500!!ho provato anche a mettere il valore AIW0 nella vd101 e controllare sempre le word pari e dispari ma niente il valore diviso 1,5 non era quello! ora ho capito che devo usare il box round lo provero oggi stesso! Link al commento Condividi su altri siti More sharing options...
batta Inserita: 11 aprile 2009 Segnala Share Inserita: 11 aprile 2009 Scusa Batta le conversione da int a dint non sono necessarie se il campo è da 0 a 32767 ma come ho capito sono necessarie per la virgola! perche all inizio del programma hai messo SM0.0 se non lo metto cosa succede?La conversione in virgola mobile avviene sempre da DINT. Se come origine hai una variabile di tipo INT la devi prima trasformare in DINT.Se il valore è sempre compreso tra 0 e 32767 potresti, al posto della conversione, trasferire semplicemente il valore di AIW0 in VW100 (l'indirizzo è, ovviamente, solo di esempio), assicurati che VW102 sia ZERO, e convertire da DINT a REAL la variabile VD100.Insomma, più complicato che usare la conversione, oltre che concettualmente errato.Lo stesso vale per la conversione da DINT a INT. Con l'istruzione ROUND trasformi una variabile da REAL a DINT (arrotondando al valore intero più vicino). Se il valore è compreso tra 0 e 32767, potresti caricare il valore convertito da REAL a DINT in VD100, e poi trasferire all'uscita solo VW100.In questo caso risparmieresti un'istruzione, ma il procedimento sarebbe concettualmente, se non errato, almeno discutibile.SM0.0 è un merker sempre ON. Le istruzioni verrebbero quindi eseguite ad ogni scansione. Se invece devi effettuare i calcoli solo in determinate situazioni, devi usare un merker adatto allo scopo. Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 11 aprile 2009 Autore Segnala Share Inserita: 11 aprile 2009 Grazie Batta 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