alex81go Inserito: 22 luglio 2011 Segnala Share Inserito: 22 luglio 2011 Buongiorno a tutti,ho un problema da risolvere e non riesco a trovare una soluzione rapida e soprattutto semplice, vi spiego:ho una CPU 300 connessa in ethernet con un PC, e scambio una serie di dati,uno di questi dati è un DINT che mi da un codice di lavorazione. Esmpio, il codice è 1732 e io devo scompattarlo in Bytela prima cifra 1 per me è la lavorazione di un prodotto,la seconda cifra 7 è il materiale che devo utilizzare,la terza cifra 3 è l'utensile ecc.Quindi per semplificare il tutto dovrei mettere la prima cifra (migliaia) del codice su di un byte, la seconda cifra (centinaia) su un altro byte eccHo provato a fare una conversione tra dint e ascii tramite l'FC5 DI_STRNG e appoggio il risultato su una stringa composta da 4 byte, il problema nasce nel riconvertire i byte da codice ascii in decimale.Non so se mi sono spiegato beneSEgmento 1 CALL FC 5 I :=DB1.DBD12 RET_VAL:=P#db1.dbx0.0SEgmento 2 L DB1.DBB 3 T DB1.DBW 16 L DB1.DBB 4 T DB1.DBW 18 L DB1.DBB 5 T DB1.DBW 20 L DB1.DBB 6 T DB1.DBW 22 L DB1.DBB 7 T DB1.DBW 24 L DB1.DBB 8 T DB1.DBW 26 L DB1.DBB 9 T DB1.DBW 28 L DB1.DBB 10 T DB1.DBW 30 L DB1.DBB 11 T DB1.DBW 32Ora i valori che io ottengo nei singoli byte sono in ASCII cioè (il valore che ho scritto nella db1.dbb12 è 1735)DB1.DBB 3 = 49DB1.DBB 4 = 55DB1.DBB 5 = 51DB1.DBB 6 = 50io invecie vorrei:DB1.DBB 3 = 1DB1.DBB 4 = 7DB1.DBB 5 = 3DB1.DBB 6 = 5Grazie per l'aiuto!!! Link al commento Condividi su altri siti More sharing options...
bleny Inserita: 22 luglio 2011 Segnala Share Inserita: 22 luglio 2011 Ciao Alex,se ho capito bene quello che ti serve credo che la soluzione più pratica sia trasformare l'intero in BCD: l'istruzione è "DTB" e il risultato finale sarà quello di avere una cifra ogni 4 bit. A questo punto mascherando la doppia parola o facendo degli scorrimenti puoi estrarre le cifre singolarmente. L'operazione è reversibile ("BTD") e ha come unico limite che il valore massimo del tuo codice non può avere più di 7 cifre (ovvero 9999999).Ciao.Massimo Link al commento Condividi su altri siti More sharing options...
busanela Inserita: 23 luglio 2011 Segnala Share Inserita: 23 luglio 2011 DB1.DBB 3 = 49DB1.DBB 4 = 55DB1.DBB 5 = 51DB1.DBB 6 = 50Mi sembra ci sia un'errore: l'ASCII di 5 non è 50 ma 53. E' un errore di battitura o la cpu ti restituisce proprio quel valore?Al di là di questo, c'è una costante che sotratta al valore appoggiato in DB1.DBB4 fino a DB1.DBB6 ti permette di avere il tuo numero 1735: 48.Sottrai questo valore ad ogni singola DBB ed avrai la cifra che intendi ricavare. Link al commento Condividi su altri siti More sharing options...
alex81go Inserita: 25 luglio 2011 Autore Segnala Share Inserita: 25 luglio 2011 Ok grazie, provero a fare come mi avete detto. 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