Vai al contenuto
PLC Forum


Conversione da esadecimale in decimale linguaggio LADDER


Messaggi consigliati

Salve, 

ho la necessità di convertire dei dati da esadecimale in decimale in linguaggio di programmazione LADDER.

 

Questi dati vengono letti da un compressore attraverso il protocollo RS 485 e li ho salvati in word.

 

Esistono già dei blocchi per tale conversione? Se non ci sono devo creare una funzione che esegua tale conversione.

 

 

Per farla però ho bisogno di sapere come poter prendere ogni singola cifra del numero in decimale per poterla moltiplicare alla potenza di 16 in base alla sua posizione.

 

Esempio:

 

numero esadecimale 21F in esadecimale per trasformarlo in esadecimale devo fare questi passaggi ( 15*16) + ( 1*16) + ( 2*16) = 543

 

Quindi mi serve come prendere singolarmente le cifre del numero esadecimale 21F per moltiplicarle per la potenza di 16 corretta.

 

 

Potete darmi per favore una mano?

 

 

Grazie.

 

 

Link al commento
Condividi su altri siti


Dalla rs485 ti arriva il numero o una stringa?

Se ti arriva il numero ti basa visualizzarla in decimale, non serve una conversione. 

Se ti arriva invece una stringa di caratteri puoi provare ad usare l'istruzione ATH.

 

Link al commento
Condividi su altri siti

Ciao Acquaman,

da RS 485 mi arrivano i numeri in esadecimale che salvo in un array di word, in allegato la lettura fatta con modscan32 e ho gli stessi valori.

 

I valori sono espressi in esadecimale e mi servono in decimale per porter leggere dei dati dal compressore (assorbimento elettrico, lettura sonde temperatura, frequenza inverter, stato del compressore, allarmi) e poter quindi attivare le varie protezioni oltre a farli accendere.

 

Come esempio nell'allegato al registro 48195 ho il valore 502 esadecimale che corrisponde a 1282 decimale .

 

Come faccio a visualizzare 502 esadecimale in 1282 decimale senza fare la conversione?

 

Come si evince dalla mia richiesta non ho esperienza nella gestione di dispositivi attraverso il protocollo modbus RS 485.

 

Mi spieghi anche cosa è l'istruzione ATH e dove la trovo sul tia portal?

 

Attendo precisazioni, grazie.

 

 

Lettura_Compr_VFD_HEX.jpg

Modificato: da Marsala_1
Link al commento
Condividi su altri siti

Il numero non va convertito, esadecimale o decimale è sono un modo di visualizzare un numero.

metti il tuo array in una tabella e visualizzala in decimale.

ATH serve a convertire una stringa contenete un numero esadecimale, in un numero. la trovi nelle istruzioni avanzate per stringhe e caratteri.

 

Modificato: da acquaman
Link al commento
Condividi su altri siti

23 minuti fa, acquaman ha scritto:

Il numero non va convertito, esadecimale o decimale è sono un modo di visualizzare un numero.

metti il tuo array in una tabella e visualizzala in decimale.

ATH serve a convertire una stringa contenete un numero esadecimale, in un numero. la trovi nelle istruzioni avanzate per stringhe e caratteri.

 

23 minuti fa, acquaman ha scritto:

Il numero non va convertito, esadecimale o decimale è sono un modo di visualizzare un numero.

metti il tuo array in una tabella e visualizzala in decimale.

ATH serve a convertire una stringa contenete un numero esadecimale, in un numero. la trovi nelle istruzioni avanzate per stringhe e caratteri.

 

23 minuti fa, acquaman ha scritto:

Il numero non va convertito, esadecimale o decimale è sono un modo di visualizzare un numero.

metti il tuo array in una tabella e visualizzala in decimale.

ATH serve a convertire una stringa contenete un numero esadecimale, in un numero. la trovi nelle istruzioni avanzate per stringhe e caratteri.

 

23 minuti fa, acquaman ha scritto:

Il numero no

metti il tuo array in una tabella e visualizzala in decimale.

ATH serve a convertire una stringa contenete un numero esadecimale, in un numero. la trovi nelle istruzioni avanzate per stringhe e caratteri.

1 ora fa, Marsala_1 ha scritto:

 

 

 

 

 

Ciao Acquaman,

scusa ma non capisco cosa devo fare.

 

Nella tabella in cui devo copiare il mio array di word, letto con RS 485, che variabili devo creare? Di che tipo devono essere?

 

Se il valore è espresso in esadecimale come viene visualizzato in decimale?

 

Grazie.

 

 

 

Modificato: da Marsala_1
Link al commento
Condividi su altri siti

cattura.thumb.png.b4e360c00b477d429400ccee7dfb0fdf.png

 In esadecimale o decimale è solo un modo di visualizzare un numero, nell'esempio si vede la stessa variabile visualizzata in esadecimale e in decimale.

Il numero è lo stesso, solo un diverso modo di visualizzazione.

Link al commento
Condividi su altri siti

Puoi anche cambiare la visualizzazione direttamente nell'editorIMG_20220201_173454.thumb.jpg.5d294249e3cf4bba0965685499b33ed4.jpg

Ma è comunque un cambio di rappresentazione non una conversione, un numero visualizzato in esadecimale o in decimale contiene sempre lo stesso numero.

Modificato: da acquaman
Link al commento
Condividi su altri siti

Buongiorno Acquaman,

ora è tutto molto chiaro e riesco a leggere i valori in decimale senza alcuna conversione.

 

Per i miei controlli però sono obbligato ad utilizzare delle variabili di appoggio, mi spiego meglio con il seguente esempio.

 

Nel segmento successivo leggo tramite modbus il valore del Voltaggio in continua del compressore nella variabile word   Read_Compr_1_Word.dati[7],

 

copio il valore su una variabile di appoggio DWord     VFD DC voltage DWord,

 

divido la variabile di appoggio per il fattore di scala (10) mettendolo in una variabile Real   VFD DC voltage div 10,

 

a questo punto posso fare il mio controllo ( VFD DC voltage div 10 > 100.0 ) ed in questo caso abilto il tag_2.

 

image.thumb.png.f62ced80372593b9e9898c63ea40753d.png

 

 

Se non faccio in questo modo, non posso fare direttamente il controllo sulla variabile Word   Read_Compr_1_Word.dati[7] > 100.0  (NON CONSENTITO).

 

Come vedi ho ancora molto da imparare anche sul tia portal.

 

Grazie per il supporto e per la pazienza.

 

Saluti.

Link al commento
Condividi su altri siti

Scrivendo cosi, tu dividi un numero intero per 10, e lo converti in un reale, rischi di perdere il decimale.

Converti il tuo intero in reale e poi dividi per 10.0 cosi non rischi di perdere il decimale.

cattura.thumb.png.1ebbd2f85aba796d6854c111f4feeb80.png

Link al commento
Condividi su altri siti

cattura.thumb.png.f81cb1ca3a5dc2453ad9395f6ab2fde4.png

Scusa immagine sbagliata.

Il passaggio da dalla conversione alla divisione l'ho fatta con una variabile temporanea, così ho evitato una variabile inutile.

Modificato: da acquaman
Link al commento
Condividi su altri siti

Ciao Acquaman,

grazie per avermi fatto notare che mi sono perso una cifra con la mia conversione.

 

Ora il mio segmento è corretto

 

image.thumb.png.2a3ea6db05004e2f217c5662def3a1b9.png

 

in questo modo posso gestire tutte le grandezze del compressore.

 

Grazie ancora.

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