Vai al contenuto
PLC Forum


Convertire "anno" Da Quattro A Due Cifre E Da Word A Byte


Messaggi consigliati

Cesare Nicola
Inserito:

Ciao a tutti. Mi spiego meglio, perchè nel titolo della discussione non sapevo esattamente come scrivere. Ho un pannello (Hakko) che può scrivere nel PLC una word contenente l'anno del suo orologio interno. L'anno che viene scritto è a quattro cifre, cioè 2007 e contenuto in una word, mentre io avrei bisogno nel PLC di considerare solo le ultime due cifre, cioè 07 e trasferirle in un byte, anzichè in una word. Come posso fare? Ho l'impressione che sia una stupidaggine ma finora non ho trovato una soluzione adeguata.

Grazie

Ciao


Inserita:

Forse 2007-2000

Leggi il solo byte dalla word relativa al risultato, forse. Comunque sia bisognerà poi risolvere il problema dell' anno 2256 :lol:

Inserita: (modificato)

semplice

int -->bcd

shift_R(8)

bcd -->int

la cosa invece che non riesco a comprendere e' cosa te ne fai di un byte di otto bit, e' una vita che non si usano piu' per nulla

Modificato: da Piero Azzoni
Cesare Nicola
Inserita:

Grazie per le risposte.

Per Dago: ci avevo pensato, ma non è che mi piace molto. Va bene che nel 2256 credo di essere già in pensione, ma volevo evitare pasticci nel caso venga erroneamente inserita una data tipo 1999 (1999-2000=-1 ??!!).

Per Piero Azzoni: questa è la soluzione giusta. Sapevo che era semplice ma non so districarmi bene tra quel genere di operazioni. Avere l'anno in un byte mi serve per poter impostare l'ora della CPU usando SFC0. L'ora da impostare nella CPU dev'essere espressa in formato DATE_AND_TIME, che è composto da 8 byte ognuno dei quali contiene il giorno, il mese, l'ora, ecc. Ecco perchè volevo avere l'anno in un byte, per comporre cioè, insieme agli altri byte, la variabile in fomato DATE_AND_TIME.

Non capisco bene cosa intendi dicendo che non si usano più i byte da otto bit.

Grazie

Ciao

Inserita:

scusa l'imprecisione, i byte saranno eternamente a 8 bit, mi rendo conto ora che quanto affermato crea confusione

intendevo che il concetto stesso di definizione di una variabile a 8 bit, il byte, e' superato

con la maggior parte dei plc e' trasmettibile il bit singolo o la word classica a 16 bit

Cesare Nicola
Inserita:

Susate ancora, ma non riesco a farlo funzionare o forse non è ciò di cui avevo bisogno. Io faccio così:

L "word anno"

ITB

SRW 8

BTI

T MW 90

Facciamo che "word anno" sia 2009 per esempio, quindi io voglio avere 09 in un byte. 2009 in esadecimale è W#16#07D9, quindi in MB91 dopo l'operazione mi trovo B#16#07, che non è lo 09 che cercavo. Dove sbaglio?

Ho anche allegato un file che forse spiega meglio ciò che mi succede.

Grazie

Ciao

Inserita:

forse Azzoni è stato affrettato, devi lavorare con doppie word per poter utilizzare il BCD con più di 3 cifre e poi non devi shiftare a destra perchè ti scompare il byte che ti serviva: devi fare un mascheramento.

Ecco l'esempio

L MD 0

DTB

L W#16#FF

UW

BTD

T MD 4

Inserita:

L "word anno"

DTB

SLD 24

SRD 24

BTD

T MB 90

Saluti

PS: non funzinoava il tuo perchè ITB va da -999 a + 999 quindi 2009 come anno andava fuori range.

Cesare Nicola
Inserita:

Grazie mille. Provo subito.

Ciao

Cesare

Inserita:

si e' giusto nella mia prima ipotesi mascheravo le cifre di destra

se l'anno e' 2007

int -->bcd

shift_R(8)

bcd -->int

rimane 20

int -->bcd

& 16#ff

bcd -->int

rimane 07

Inserita:

Forse esiste una soluzione + semplice

presume che l'anno venga scritto in formato numerico, per avere solo la parte bassa basta :

L "anno_numerico"

L W#16#00ff

uw

T "anno_solo_due_cifre"

Inserita:

No Cliff, non può funzionare.

Con il tuo esempio lavori su base 255 (FF).

Se metti per esempio come anno 2007 (07D7), con il mascheramento avresto D7 = 215.

Ciao

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