Marsala_1 Inserito: 1 febbraio 2022 Segnala Share Inserito: 1 febbraio 2022 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*160 ) + ( 1*161 ) + ( 2*162 ) = 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 More sharing options...
acquaman Inserita: 1 febbraio 2022 Segnala Share Inserita: 1 febbraio 2022 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 More sharing options...
Marsala_1 Inserita: 1 febbraio 2022 Autore Segnala Share Inserita: 1 febbraio 2022 (modificato) 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. Modificato: 1 febbraio 2022 da Marsala_1 Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 1 febbraio 2022 Segnala Share Inserita: 1 febbraio 2022 (modificato) 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: 1 febbraio 2022 da acquaman Link al commento Condividi su altri siti More sharing options...
Marsala_1 Inserita: 1 febbraio 2022 Autore Segnala Share Inserita: 1 febbraio 2022 (modificato) 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: 1 febbraio 2022 da Marsala_1 Link al commento Condividi su altri siti More sharing options...
dott.cicala Inserita: 1 febbraio 2022 Segnala Share Inserita: 1 febbraio 2022 invece che array di word definisci array di int Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 1 febbraio 2022 Segnala Share Inserita: 1 febbraio 2022 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 More sharing options...
acquaman Inserita: 1 febbraio 2022 Segnala Share Inserita: 1 febbraio 2022 (modificato) Puoi anche cambiare la visualizzazione direttamente nell'editor Ma è comunque un cambio di rappresentazione non una conversione, un numero visualizzato in esadecimale o in decimale contiene sempre lo stesso numero. Modificato: 1 febbraio 2022 da acquaman Link al commento Condividi su altri siti More sharing options...
Marsala_1 Inserita: 2 febbraio 2022 Autore Segnala Share Inserita: 2 febbraio 2022 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. 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 More sharing options...
acquaman Inserita: 2 febbraio 2022 Segnala Share Inserita: 2 febbraio 2022 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. Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 2 febbraio 2022 Segnala Share Inserita: 2 febbraio 2022 (modificato) Scusa immagine sbagliata. Il passaggio da dalla conversione alla divisione l'ho fatta con una variabile temporanea, così ho evitato una variabile inutile. Modificato: 2 febbraio 2022 da acquaman Link al commento Condividi su altri siti More sharing options...
Marsala_1 Inserita: 2 febbraio 2022 Autore Segnala Share Inserita: 2 febbraio 2022 Ciao Acquaman, grazie per avermi fatto notare che mi sono perso una cifra con la mia conversione. Ora il mio segmento è corretto in questo modo posso gestire tutte le grandezze del compressore. Grazie ancora. 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