Cesare Nicola Inserito: 18 aprile 2007 Segnala Inserito: 18 aprile 2007 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.GrazieCiao
dago_ Inserita: 18 aprile 2007 Segnala Inserita: 18 aprile 2007 Forse 2007-2000Leggi il solo byte dalla word relativa al risultato, forse. Comunque sia bisognerà poi risolvere il problema dell' anno 2256
Piero Azzoni Inserita: 18 aprile 2007 Segnala Inserita: 18 aprile 2007 (modificato) sempliceint -->bcdshift_R(8)bcd -->intla 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: 18 aprile 2007 da Piero Azzoni
Cesare Nicola Inserita: 19 aprile 2007 Autore Segnala Inserita: 19 aprile 2007 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.GrazieCiao
Piero Azzoni Inserita: 19 aprile 2007 Segnala Inserita: 19 aprile 2007 scusa l'imprecisione, i byte saranno eternamente a 8 bit, mi rendo conto ora che quanto affermato crea confusioneintendevo che il concetto stesso di definizione di una variabile a 8 bit, il byte, e' superatocon la maggior parte dei plc e' trasmettibile il bit singolo o la word classica a 16 bit
Cesare Nicola Inserita: 19 aprile 2007 Autore Segnala Inserita: 19 aprile 2007 Susate ancora, ma non riesco a farlo funzionare o forse non è ciò di cui avevo bisogno. Io faccio così:L "word anno"ITB SRW 8BTI T MW 90Facciamo 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.GrazieCiao
rddiego Inserita: 19 aprile 2007 Segnala Inserita: 19 aprile 2007 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'esempioL MD 0DTB L W#16#FFUW BTD T MD 4
Vince73PLC Inserita: 19 aprile 2007 Segnala Inserita: 19 aprile 2007 L "word anno"DTB SLD 24SRD 24BTD T MB 90SalutiPS: non funzinoava il tuo perchè ITB va da -999 a + 999 quindi 2009 come anno andava fuori range.
Vince73PLC Inserita: 19 aprile 2007 Segnala Inserita: 19 aprile 2007 opps... Rddiego mi ha preceduto...
Cesare Nicola Inserita: 19 aprile 2007 Autore Segnala Inserita: 19 aprile 2007 Grazie mille. Provo subito.CiaoCesare
Cesare Nicola Inserita: 19 aprile 2007 Autore Segnala Inserita: 19 aprile 2007 Perfetto!Grazie mille!
Piero Azzoni Inserita: 19 aprile 2007 Segnala Inserita: 19 aprile 2007 si e' giusto nella mia prima ipotesi mascheravo le cifre di destrase l'anno e' 2007int -->bcdshift_R(8)bcd -->intrimane 20int -->bcd& 16#ffbcd -->intrimane 07
cliff Inserita: 19 aprile 2007 Segnala Inserita: 19 aprile 2007 Forse esiste una soluzione + semplicepresume che l'anno venga scritto in formato numerico, per avere solo la parte bassa basta :L "anno_numerico"L W#16#00ffuwT "anno_solo_due_cifre"
Vince73PLC Inserita: 20 aprile 2007 Segnala Inserita: 20 aprile 2007 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
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