Vai al contenuto
PLC Forum


Codice Gray - conversione in numero


Messaggi consigliati

Inserito:

cercando ho trovato parecchi link, anche su questo stesso sito, che spiegano la struttura del codice gray

non ho trovato da nessuna parte invece le routines di conversione da gray a binario

specifico che non posso tabellarle essendo un codice a 25 bit per cui un valore variabile da zero a 67.108.863

esiste un modello matementico di conversione ?


Inserita: (modificato)

Qui fa un esempio a quattro bit con iterazione dello XOR (pagina 4)

Penso che si possa applicare un algoirtmo iterativo per arrivare a 23 bit

Io lavoro con micro non con PLC e per me la routine è fattibile. Ripeto non so se ti aiuta con un plc

altro link

Modificato: da accacca
Inserita:

grazie

il primo e' piu' completo ma il secondo e' di una chiarezza ineccepibile

Inserita:
:rolleyes: Caro Piero se vuoi ti mando io l'esempio, ce l'ho in ladder, l'ho usata parecchio tempo fa ed è un programma che allunghi e accorci in funzione del numero di bit, praticamente è una serie mi merker in serie e parallelo
Matteo Montanari
Inserita: (modificato)

volendo questo è "molto" più elegante che utilizzare

una serie mi merker in serie e parallelo

      L     #Gray
      SRW   1
      L     #Gray
      XOW   
      T     #Binario

(questo è per 16bit, volendolo trasformare a 32bit occorre sostituire le operazioni da Intero a DoppioIntero (o DoppiaWord) )

Modificato: da keosmm
Inserita: (modificato)

se mi ricordo bene xow e' l'exclusive_or a 16 bit

srw cos'e' ?

-----

ti ringrazio trc, il codice in ladder l'ho gia' scritto e testato come da indicazioni del secondo link di accacca, volevo anch'io lavorare per svolgerlo in meno passaggi in word, devo capire bene le indicazioni di keosmm

Modificato: da Piero Azzoni
Inserita:
srw cos'e' ?
Scorre a destra di (n) posizioni i bit della word caricata nell'accumulatore (Shift Right Word), i bit "liberati" a sinistra vengono messi a zero
Matteo Montanari
Inserita:

la risposta è stata data da Francesco.

scusa ma ho preso il codice scritto per PLC Siemens, pensando erronamente che il linguaggio AWL (almeno per quello che riguarda le operazioni matematiche) fosse compatibile con altri PLC.

Inserita:

c'e' qualcosa che non mi torna

nella conversione gray --> binario il risultato non e' lo xor tra il digit gray attuale e il digit di un peso piu' alto

e' lo xor tra il digit attuale ed il risultato dello xor precedente

la maschera di keosmm funziona solo per il bit piu' high e quello subito successivo, poi non fonziona piu'

in fatti il passaggio in ladder, pur complesso, funziona perche' ad ogni spostamento della mascera di un bit verso destra si riferisce oltre cha al bit gray, al risultato precedente

oppure non ho capito qualcosa

Matteo Montanari
Inserita:
la maschera di keosmm funziona solo per il bit piu' high e quello subito successivo, poi non fonziona piu'

io ho testato nuovamente la funzione ma non mi ha dato nessun problema (PLC Siemens).

di seguito ti riporto i dati riferiti alle operazioni:

SRW Fai scorrere parola a destra (a 16 bit)

Formati

SRW

SRW <numero>

Operando <numero>

Tipo dati Numero intero, senza segno

Descrizione Numero di bit, nella misura del quale si opera lo scorrimento; area da 0 a 15

Descrizione dell'operazione

SRW (Fai scorrere parola a destra) fa scorrere solo il contenuto dell'accumulatore 1-L verso destra, bit per bit. Le posizioni dei bit che risultano vuote in seguito all'operazione di scorrimento, vengono alimentate con zeri. Il bit traslato per ultimo viene caricato nel bit di stato A1. Il numero di bit nella misura del quale operare lo scorrimento viene indicato dall'operando <numero> oppure da un valore specificato nell'accumulatore 2-L-L.

SRW <numero>: il numero di bit nella misura del quale operare lo scorrimento viene indicato dall'operando <numero>. Sono consentiti valori compresi tra 0 e 15. I bit di stato A0 e OV vengono resettati a "0", se <numero> è maggiore di zero. Se il numero di scorrimento è "0", l'operazione di scorrimento viene elaborata come un'operazione NOP.

SRW: il numero di bit nella misura del quale operare lo scorrimento viene indicato dal valore riportato nell'accumulatore 2-L-L. Sono consentiti valori compresi tra 0 e 255. I numeri di scorrimento > 16 producono sempre il medesimo risultato: ACCU 1 = 0, A1 = 0, A0 = 0, OV = 0. Se 0 < numero di scorrimento <= 16, i bit di stato A0 e OV vengono resettati a "0". Se il numero di scorrimento è "0", l'operazione di scorrimento viene elaborata come un'operazione NOP.

Esempi

prima dell'esecuzione di SRW 6     0101    1111    0110    0100    0101    1101    0011    1011
dopo l'esecuzione di SRW 6         0101    1111    0110    0100    0000    0001    0111    0100
XOW R esclusivo a parola (a 16 bit) Formati XOW XOW <costante> Operando <costante> Tipo dati WORD, costante (a 16 bit) Descrizione Configurazione binaria da combinare a ACCU 1-L mediante OR esclusivo. Descrizione dell'operazione XOW (OR esclusivo a parola) combina il contenuto dell'accumulatore 1-L con il contenuto dell'accumulatore 2-L, oppure con una costante (a 16 bit), bit per bit, secondo l'operazione logica combinatoria OR esclusivo. Il bit della parola di risultato è "1" se almeno uno dei corrispondenti bit delle parole da combinare è "1". Il risultato viene memorizzato nell'accumulatore 1-L. Gli accumulatori 1-L e 2 (e per le CPU con quattro accumulatori ACCU 3 e ACCU 4) rimangono inalterati. Il bit di stato A1 viene settato conformemente all'esito dell'operazione (A1 = 1, se il risultato è diverso da zero). I bit di stato A0 e OV vengono resettati a "0". È possibile utilizzare la funzione OR esclusivo anche più volte di seguito. Il risultato logico combinatorio condiviso sarà pertanto "1", se un numero dispari di operandi interrogati dà come risultato dell'interrogazione "1". XOW: combina il contenuto degli accumulatori 1-L e 2-L. XOW <costante>: combina il contenuto dell'accumulatore 1-L ad una costante (a 16 bit). Esempi
ACCU 1 prima dell'esecuzione di XOW            0101    0101    0011    1011
ACCU 2-L o costante (a 16 bit):                1111    0110    1011    0101
Risultato (ACCU 1) dopo l'esecuzione di XOW    1010    0011    1000    1110

  • 2 years later...
Inserita:

Questo codice gira su tutti i forum come conversione GRAY->BINARIO:

L #Gray

SRW 1

L #Gray

XOW

T #Binario

io l'ho testato con s7 300 ma ho tutta l'impressione che converta BINARIO->GRAY e non GRAY->BINARIO

-fatemi sapere se mi sbaglio -

infatti se inseriamo #Gray = 0000 0000 0000 1001 il risultato binario è

#Binario=0000 0000 0000 1101 invece dovrebbe essere 0000 0000 0000 1110

mentre 0000 0000 0000 1001 in binario e

0000 0000 0000 1101 in gray

posto questo codice (meno elegante) funzionante per encoder assoluti con codifica gray

dove in MW100 viene trasferito il codice GRAY

e in MW112 viene restituito il codice BINARIO

facendo l'esempio precedente con 0000 0000 0000 1001 in MW100 il risultato in MW112 è appunto 0000 0000 0000 1110

questo è quello che si trova sul sito siemens su GRAY e BINARIO

libreria GRATUITA siemens X S7 200 conversione GRAY->BINARIO e viceversa

Esempio Siemens x S7 300-400 a pagamento per conversione GRAY->BINARIO e viceversa (SUPPORT CARD)

U M 100.1

= M 112.1

UN M 100.0

U M 112.1

O

U M 100.0

UN M 112.1

= M 112.0

UN M 101.7

U M 112.0

O

U M 101.7

UN M 112.0

= M 113.7

UN M 101.6

U M 113.7

O

U M 101.6

UN M 113.7

= M 113.6

UN M 101.5

U M 113.6

O

U M 101.5

UN M 113.6

= M 113.5

UN M 101.4

U M 113.5

O

U M 101.4

UN M 113.5

= M 113.4

UN M 101.3

U M 113.4

O

U M 101.3

UN M 113.4

= M 113.3

UN M 101.2

U M 113.3

O

U M 101.2

UN M 113.3

= M 113.2

UN M 101.1

U M 113.2

O

U M 101.1

UN M 113.2

= M 113.1

UN M 101.0

U M 113.1

O

U M 101.0

UN M 113.1

= M 113.0

Inserita:

Se vi interessano funzioni S7-300/400 aperte e gratuite per la conversione da Gray a binario e viceversa, le trovate QUI

Inserita: (modificato)

grazie batta ora abbiamo la certezza, visto il tuo codice, che le istruzioni indicate da matteo e

consigliate anche in altre discussioni di questo forum:

L #Gray

SRW 1

L #Gray

XOW

T #Binario

convertano BINARIO->GRAY e non viceversa quindi:

L #Binario

SRW 1

L #Binario

XOW

T #Gray

la domanda di questa discussione era:

non ho trovato da nessuna parte invece le routines di conversione da gray a binario

e qui si da lo stesso consiglio ERRATO

ovviamente mi riferisco all'inizio della discussione dove viene chiesto

Ho bisogno di convertire il codice gray (9 bit) fornito da un encoder assoluto in codice binario mediante plc siemens s7-300.

Mi potete aiutare?

e come consioglio viene data un istruzione per convertire binario in gray

Modificato: da antowery

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