Pagina 1 di 1

operazioni di conversione

Inviato: 18 ott 2007, 11:37
da dep
ciao
sto iniziado a provare le operazioni di conversione col plc..e sto provando l'esempio di programma di pagina 108 del manuale sell's7-200,io ho solamente aggiunto un contatore per il conteggio dei pollici come vederete nel codice che riporto sotto ma che troverete pure nel manuale eccezion fatta per il contatore.

Codice: Seleziona tutto

segmento 1 conteggio pollici
LD     I0.0
ITD    C10, AC1
DTR    AC1, VD0
MOVR   VD0, VD8
*R     VD4, VD8
ROUND  VD8, VD12
segmento 2 convertire il numero bcd in un numero reale
LD     I0.3
BCDI   AC0
segmento 3 conteggio pollici
LD     I0.1
LD     I0.2
CTU    C10, 10

in partica il mio problema è andare a moltiplicare i pollici per 2,54 per ottenere i centimetri....e quindi come faccio ad impostare la costante di 2,54 in VD4?
ho provato ad inserire nella tabella di stato il valore di 2,54 convertito in codice ascii oppure in codice binario,lo forzato ed il risultato non è quello auspicato...
ci sarà sicuramente un modo...avevo pensato di attivare dei merker speciali SM1.0 che si attiva non appena rileva il valore 0 dopo una moltiplicazione...oppure trasferisco il valore reale(movr)ecc...forse sto dicendo un mucchio di stupidaggini ma spero di aver fornito delle buone indicazioni per risolvere il problemino....grazie a atutti in anticipo

:cry:

Re: operazioni di conversione

Inviato: 18 ott 2007, 16:16
da Ivan_Iamoni
Ciao Dep,
in partica il mio problema è andare a moltiplicare i pollici per 2,54 per ottenere i centimetri

Quello che stai cercando di fare e' un'operazione matemetica tra due numeri "reali".
i numeri reali o in virgola mobile sono rappresentati con il formato descritto nella norma 754-1985 ANSI/IEEE (in precisione singola).
Un numero reale e' compsto da tre parti ,"mantissa"+"segno"+"esponente", tipo +1,175 495E-38.
La trattazione dei numeri reali ,in riferimento ai microprocessori e' lunghina da spiegare , ma sicuramente se fai riferimento alla norma che ti citavo troverai molti documenti on-line.
Tornando al tuo problema.
Non e' possibile eseguire operazioni matemetiche tra numeri di diversa natura, quindi un'intero non puo' essere moltiplicato per un reale , ma deve essere sempre convertito prima.
Quindi devi prendere il valore di ritorno dal contatore , che non e' reale, convertirlo in reale , spostarlo in una doppiaword, che puo' contenere un valore reale, e moltiplicarlo con la costante 2.54, cioe':
LD SM0.0 //bit sempre ON
DTR VD1000, AC1 //prendi il valore del contatore (esempio VD1000) convertilo in reale e spostalo nell'accumulatore1
MOVR AC1, VD1004 //sposta il valore dell'accumulatore 1 in VD1004
*R 2.54, VD1004 //moltiplica VD1004 per la costante 2.54

Il risultato dell'operazione sara' nella VD1004.

Ciao
Ivan

Re: operazioni di conversione

Inviato: 18 ott 2007, 16:58
da dep
grazie kamikaze per essermi venuto incontro..dopo aver elaborato quanto mi hai detto ti faccio sapere :o

Re: operazioni di conversione

Inviato: 18 ott 2007, 19:09
da dep
caspita se non ho capito male si tratta di convertire il valore di 2,54 in virgola mobile giusto?
la parte di programma che mi hai descritto lo capita...alla fine per ottenere il risultato voluto devo fare questa conversione da numero reale a virgola mobile è cosi? :shock:

Re: operazioni di conversione

Inviato: 19 ott 2007, 13:45
da dep
ho trovato un quintale di materiale che mi dicevi di cercare però sono un po' complessi nel senso che metono in rilievo alcun esempio per comprendere meglio...
inoltre ho trovato un documento dove mi accennano il floating to point arithmetic ansi ieee....dove viene spiegato come dicevi te che un numero in virgola mobile
è diviso in 3 parti nel seguente ordine corrispondente segno(s)-esponente(e)-mantissa(m)
formula generica:[s][E][M] -----(-1)elevato alla base x (1+M) x 2elevato all'esponente
questa formula si applica direttamente al numero 2,54 oppure occorre una conversione in un altro formato? :?
ciao grazie per la disponibilità

Re: operazioni di conversione

Inviato: 19 ott 2007, 19:19
da dep
Alla fine ci sono riuscito ma che macello ho combinato però :shock: ..grazie ciao :D