Vai al contenuto
PLC Forum


Conversioni - Da stringa a numero decimale


Messaggi consigliati

Inserito:

Ciao a tutti!

Vorrei sapere se esiste in AWL per s7-300 una funzione per convertire una stringa in valore numerico decimale (es: "FD0C" -> 64780) o se esistono funzioni intermedie che mi evitino di scrivere tutto il codice di conversione.

Grazie

Davide


Inserita:

Cerca nella libreria

IEC Function block :

FC37 STRNG_DI

FC38 STRNG_I

FC39 STRNG_R

Inserita:

Ho guardato come lavorano queste funzioni ma credo che dovrò costruirmi io tutta la conversione perché non mi vanno bene...

Grazie comunque

ciao

Davide

Inserita:

Ma tu intendi inserire un valore esadecimale con un pannello operatore? perchè di solito i pannelli hanno già la possibilità di dichiarare una variabile come esadecimale.

Nel tuo caso se tramite OP scrivi nella DBnn.DBWnnn (dichiarata come HEX) il valore "FB0C" otterrai in quella DW esattamente quello che vuoi:

- Se la leggi in esadecimale = FB0C

- Se la leggi in decimale = 64268

- Se la leggi in binario = 1111101100001100

Se non ho capito la domanda spiegati meglio...

Inserita:

Ciao!

il mio problema é ottenere il valore numerico in base 10 a partire da un array di caratteri letti tramite seriale e memorizzati in un DB. Per esempio io ricevo una stringa di 32 caratteri (byte) "0809FD0CA0423.....", devo estrarre pezzi di stringa a blocchi di 4 caratteri alla volta e poi ricavare l'equivalente valore numerico. Qui il secondo blocco é "FD0C" che é uguale a 64780, ma come faccio a calcolarlo usando le funzioni già esistenti?

Ho cominciato la decodifica in questo modo:

-estraggo i blocchi di 4 caratteri

-assegno ad ogni carattere il suo equivalente decimale (F=15,D=13,0=0,C=12)

-calcolo il valore 15*16^3+13*16^2+12*16^1 = 64780

Questa é la teoria ma sto impazzendo a scriverlo perché non é così facile....

Qualunque suggerimento é ben accetto!

Grazie

ciao

Davide

Inserita:

Forse ti puo' andar bene la funzione FC37 (STRNG_DI)

Descrizione

Con la funzione FC 37 è possibile convertire una stringa di caratteri in una variabile con formato DINT. Il primo carattere nella stringa di caratteri può essere un segno o una cifra, i caratteri successivi devono essere costituiti da cifre. Se la lunghezza della stringa di caratteri è zero o maggiore di 11 oppure si trovano caratteri inammissibili nella stringa di caratteri, non avviene alcuna conversione ed il bit BIE viene azzerato. Se il risultato della conversione si trova fuori del campo numerico DINT, il risultato viene limitato al valore corrispondente ed il risultato binario BIE viene azzerato.

Parametro Dichiarazione Tipo di dati Area di memoria Descrizione

S INPUT STRING D, L Stringa di caratteri di ingresso

RET_VAL OUTPUT DINT E, A, M, D, L Risultato

Per il parametro di ingresso è possibile assegnare solo una variabile definita in modo simbolico .

La trovi in Biblioteche > Standard Library > IEC Function Blocks.

Inserita:

NIURON forse ho capito che ti serve... Prova a guardare nella libreria TI-S7 Converting Blocks la FC94 ATH_CONVERT

Inserita:

ciao!

questa funzione mi potrebbe servire, perché mi converte una stringa in esadecimale, però mi serve ancora passare da esadecimale a decimale.

Se per esempio ho 2 byte B#16#42 e B#16#39 la funzione ATH mi fornisce B#16#B9 ma a me serve il valore decimale di B9 che é 185. La conversione da BCD a intero (BTI a 16 bit o BTD a 32 bit) accetta solo i numeri da 0 a 9 e non A,B,C... quindi non mi converte B9....

Suggerimenti?

Inserita:
ma a me serve il valore decimale di B9 che é 185

Forse se muovi B9 in una variabile dichiarata come INT.

Inserita:

Niuron, ma dove lo devi visualizzare sto numero? Su un pannello? Su un pc? Non importa.... ricorda che una sequenza di bit puoi leggerla come ti pare in base 16 o base 10 al PLC non frega niente. Non devi fare nessuna conversione.

il numero decimale 185 = esadecimale B9 = binario 10111001

Qualsiasi operazione tu debba fare con questi dati, NON devi fare nessuna conversione perchè non ha senso.

La visualizzazione è compito del "visualizzatore" al quale gli si dice prendi questo dato e visualizzamelo in decimale, o esadecimale, o ASCII etc. (NON è una conversione).

Se per comodità vuoi fare operazioni con numeri decimali purtroppo Step 7 crea delle limitazioni in quanto, se dichiari il tipo di dato di una variabile, non ti permette di fare operazioni in altri formati. O copi il tuo dato Hex in un altro dichiarato INT, oppure utilizza i Merker senza dichiararli nella tabella dei simboli.

Ho detto 'Se per comodità..', ma prova a fare conti in esadecimale: è identico al sistema decimale (abitudine)

  • 2 weeks later...
Inserita:

Ciao rddiego!

con la tua "dritta" ho cambiato il mio codice di conversione (che avevo scritto e funzionava) in uno più semplice e snello. Hai perfettamente ragione, mi spiace solo che non ci ho pensato prima io... ahahaha

Comunque 1000 grazie per il tuo prezioso aiuto!

Davide

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