Vai al contenuto
PLC Forum


Conversione Da Int64 A Decimale


Namser

Messaggi consigliati

Buongiorno,

Da qualche giorno sto cercando di convertire tramite istruzione ladder, con rslogix 5000 v13.00, un dato rappresentato in int 64 in decimale, senza riuscirvi

Per quanto riguarda la conversione da 32 a decimale del dato 036E(reg1)E800(reg2)0000(reg3)0000(reg4)applico la formula:

[reg2+(reg1x65536)]/10^reg3

Ottenendo 57600000

Per quanto riguarda il numero 4093 (reg1)EC7A (reg2)E147 (reg3)AE10 (reg4) dal manuale di riferimento so che il risultato è 1275,12.

Avete un testo di riferimento o manuale da consigliarmi?

Grazie a tutti :)

Link al commento
Condividi su altri siti


Per quanto riguarda il numero 4093 (reg1)EC7A (reg2)E147 (reg3)AE10 (reg4) dal manuale di riferimento so che il risultato è 1275,12.

Scusa ma un int64 non può essere in virgola mobile.

bigalex :blink:

Link al commento
Condividi su altri siti

  • 1 month later...

Essendo che non si possono visualizzare e gestire numeri Interi a 64bits facilmente dovresti innanzi tutto creare alcune istruzioni, per poter gestire questi numeri a 64Bits.

In Pratica ti crei un Add-On cosi si chiamano queste istruzione costruite.

ed esegui li le operazioni basilari :

Insert64 => Inserzione di Un numero da Real a 64Int {Dint0 e Dint1}

View64 => Da un Int64 {Dint0 e Dint1} to Real

Add64 => Somma tra {Dint0 e Dint2} + {Dint2 e Dint3} = {Dint4 e Dint5}

Sub64 => Sottrazione tra {Dint0 e Dint2} - {Dint2 e Dint3} = {Dint4 e Dint5}

Mul64 => Multiplicazione tra {Dint0 e Dint2} * {Dint2 e Dint3} = {Dint4 e Dint5}

Div64 => Divisione tra {Dint0 e Dint2} / {Dint2 e Dint3} = {Dint4 e Dint5}

In pratica tramite confronti e opportuni scelte ti costruisci queste istruzioni.

Basta che prendi spunto in internet, ci sono molti esempio di come funzione l'aritmetica a 64bits.

Il Problema e' come rappresentare in Real tutte le cifre significative, perche' i Floatpoint Real usati su questo plc sono a singola precisione.

quindi perdi ua parte del valore, in mantissa.

Quindi una volta fatte le tue istruzioni devi sempre trattare i tui numeri a 64bits come insieme di 2Dints, e usare solamente le istruzioni fatte, e non cercare mai di

passare in visione su Real se poi devi ancora in futuro riprendere il tuo risultato per fare ulteriori operazioni in seguito.

Potresti convertire il tuo 64Bits Int64 in BCD e' visualizzare su 3Dints. questi li puoi visualizzare bene anche a video, perche' li metti uno in seguito al altro.

Cosi potrebbe essere una soluzione comoda per visualizzare ed imputare questi numeri, senza mai perdere nianche la piu' piccola cifra.

Quindi io aggiungerei anche le istruzioni :

ViewBCD64 => Visualizza in BCD da Int64 {Dint0 e Dint1} >> BCD{Dint2,Dint3,Dint4}

InsertBCD64 => Inserisce da BCD{Dint2,Dint3,Dint4} a Int64 {Dint0 e Dint1}.

Link al commento
Condividi su altri siti

Poi se devi crearti anche dei FloatPoint a 64bits cioe' a doppia precisione, anche li devi farti delle istruzioni tue.

ed in pratica implementare l'aritmetica Floatpoint a doppia precisione.

Ti consiglio di trovarti in internet :

http://en.wikipedia.org/wiki/Double-precision_floating-point_format,

http://en.wikipedia.org/wiki/Floating_point

ci cono diversi modi di trattare i Float-point con diversi standard

se vuoi passare a rappresentare un Real in DINT o viceversa da DINT a Real e fare la conversione come avevi fatto vedere

devi usare l-istruzione COP o CPS :

vedi qnche questo link

http://www.prosoft-technology.com/kb/article.php?id=449

In pratica se devi inviare un valore Real in una comunicazione in cui devi per forsa usare solamente Dint o Int,

devi fare uso del metodo, qui sopra descritto.

Quando poi ricevi il dato in Dint fai poi l'operazione opposta, e ti riptrovi il dato originale il Float-Point.

Link al commento
Condividi su altri siti

Ti aggiungo come e' fatta una FPU

http://www.ece.usu.edu/ece_store/spec/8087.pdf

pensa che una volta questi FPU o coprocessore matematici, erono montati a lato della normale CPU, per eseguire tutte le operazioni matematiche sia pe Interi, che per numeri a

virgola mobile, poi ultimamante gia dal intel486 veniva integrata nella CPU. {questo per il mondo Intel}

Posso eseguire anche operazioni con Precisione estesa a 80 bits, {le operazioni basilari di somma, sottrazione,multiplicazione,divisione, piu' Radice,trigonometria, log}

Oggi di sicuro sono integrate nelle CPU dei PLC, e sicuramente sanno fare benissimo le operazione anche a 80bits.

Solo che nessuno ha sviluppato le istruzioni su Firmware PLC per gestire queste estensioni per la virgola mobile.

Penso che a volte avere almeno la precisione Double o addirittura Extended, possa evitare errori di approssimazioni, specialmente in alcuni campi di applicazioni.

Normalmente pero' nell'automazione a nessuno importa di questa precisione, per questo molte volte si delega calcoli speciali e molto precisi, magari ad un PC interfacciato al PLC.

Io penso che per fare ad esempio interpolazione degli assi, internamente il firmware del ControlLogix fa uso di queste precisioni,

ma per il povero utente {Programmatore Software siano precluse}

http://flint.cs.yale.edu/cs422/doc/art-of-asm/pdf/CH14.PDF

Nessuno ti spiega mai che a volte ti serve anche riuscire a scrivere e leggere questi numeri anche a 80bits, infatti servono delle funzioni oppure librerie che ti permettono di far cio'.

Magari usando delle stringhe per inserire e visualizzare questi numero:

https://courses.engr.illinois.edu/ece390/books/artofasm/CH14/CH14-2.html#HEADING2-55

come per le librarie printf e printff .

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