Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Conversione Da Dint A Byte


Messaggi consigliati

Inserito:

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


Inserita:

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

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

Inserita:

Ok grazie, provero a fare come mi avete detto.

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