Vai al contenuto
PLC Forum


Conversione Da Dint A Byte


alex81go

Messaggi consigliati

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 Byte

la 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 ecc

Ho 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 bene

SEgmento 1

CALL FC 5

I :=DB1.DBD12

RET_VAL:=P#db1.dbx0.0

SEgmento 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 32

Ora i valori che io ottengo nei singoli byte sono in ASCII cioè

(il valore che ho scritto nella db1.dbb12 è 1735)

DB1.DBB 3 = 49

DB1.DBB 4 = 55

DB1.DBB 5 = 51

DB1.DBB 6 = 50

io invecie vorrei:

DB1.DBB 3 = 1

DB1.DBB 4 = 7

DB1.DBB 5 = 3

DB1.DBB 6 = 5

Grazie per l'aiuto!!!

Link al commento
Condividi su altri siti


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

DB1.DBB 3 = 49

DB1.DBB 4 = 55

DB1.DBB 5 = 51

DB1.DBB 6 = 50

Mi 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

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