Frank681 Inserito: 5 febbraio 2015 Segnala Inserito: 5 febbraio 2015 Salve a tutti Sto cercando di leggere i valori da 2 centraline di rifasamento della lovato Comunicazione 485 stabilita , il mio problema e che alla lettura del registro vengono restituiite 2 word , come le memorizzo come 2 word separate o come dword , domani faccio delle prove. Inoltre in alcune word devo scomporle per leggere allinterno della word sia valore analogico che bit di stato . Qualche suggerimento su come procedere ?
francesco-ottosei Inserita: 5 febbraio 2015 Segnala Inserita: 5 febbraio 2015 Sui primi punti non mi è del tutto chiaro...qual' è il tuo problema Per l'ultinmo punto "Inoltre in alcune word devo scomporle per leggere allinterno della word sia valore analogico che bit di stato" potresti provare a "mascherare" la word facendo la "AND WORD" così riesci a separare i bit o i valori analogici di cui hai bisogno di elabrare... Ad esempio in SCL: MW100:=MW102 AND W#16#3 ... in questo modo consideri solo i primi 2 bit della MW102 (consideri solo il bit 0 e 1 della MW102 - (MW100 avrà come valori 1, 2 o 3) anche se la MW102 ha altri bit alti) Spero di essere stato chiaro....e di aiuto...
Frank681 Inserita: 7 febbraio 2015 Autore Segnala Inserita: 7 febbraio 2015 Ci ritorno ho una word in ingresso in un blocco fb voglio andare a valurare bit per bit i dati e elaborarli . avevo pensato di definire un array della word con una word STATW AT asw array[0..15] of bool il compilatore mi dice ok ma quando vado a verificare i bit sono sempre false . Dove sbaglio
batta Inserita: 7 febbraio 2015 Segnala Inserita: 7 febbraio 2015 (modificato) Per capire dove sbagli dovresti postare qualche immagine con dichiarazione delle variabili e codice. Comunque, per analizzare il singolo bit di una word c'è un sistema molto semplice: NomeVariabile.Xnn Dove "n n" è il numero del bit (partendo da zero). Modificato: 7 febbraio 2015 da batta
Frank681 Inserita: 8 febbraio 2015 Autore Segnala Inserita: 8 febbraio 2015 Ciao Batta Grazie della pasienza , ho profato a fare come mi consigli #tmpstw.%X0 := true; mi da errore dicendomi che l'uso di %x0 non ammesso per #tmpstw , variabile temp definita come word per ora sono riuscito a fare funzionare il tutto dando in uscita alla word il valore sorrispondente , ma è bruttino se la word si valorizasse in automatico a seconda dei bit settati sarebbe bello .sarebbe bello
batta Inserita: 8 febbraio 2015 Segnala Inserita: 8 febbraio 2015 Strano. Io ho appena provato e la compilazione va a buon fine.
Frank681 Inserita: 8 febbraio 2015 Autore Segnala Inserita: 8 febbraio 2015 Ciao Batta Ho TIA 13 sp1 mi sfugge qualcosa nell'uso del comando AT per esempio nel blocco FB da me creato ho la mia WORD di ingresso , all'interno del blocco vorrei scomporla nei singoli bit , pensavo di creare una variabile interna con il comando at come array[0..15] of bool dove poter leggere i singoli biut nell'array niente da fare la variabile word all'interno del blocco è 4000 ma il bit 14 è 0 , che è quello di ready. non so piu' cosa pensare . Dimenticavo CPU 315 2DP. Grazie a tutti
batta Inserita: 8 febbraio 2015 Segnala Inserita: 8 febbraio 2015 Fai attenzione all'ordinamento dei byte. Siemens usa il formato Motorola (o Big Endian): il primo byte (quello con indirizzo più basso) è quello più significativo. Quindi 4000 Hex significa che il primo byte ha valore 40 Hex, e il secondo ha valore 00 Hex. Quando leggi i bit dell'array il primo bit è il bit a destra del primo byte. Nel tuo caso: 40 Hex --> 0100 0000 Bin Non so se mi sono spiegato, ma prova a leggere lo stato del bit 06.
Frank681 Inserita: 8 febbraio 2015 Autore Segnala Inserita: 8 febbraio 2015 Ciao Batta Infatti dopo varie prove ho visto che i due byte sono invertiti , per invertirli in scl posso usare ilcomando ROL ruotato di 8 , oppure devo usare shr e leggere bit per bit ?
batta Inserita: 9 febbraio 2015 Segnala Inserita: 9 febbraio 2015 Per scambiare l'ordinamento dei bytes all'interno di una WORD (o DWORD) l'istruzione più appropriata è SWAP. Però, senza scambiare i byte, ti basta tenere conto del loro ordinamento quando effettui operazioni sui singoli bit.
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