G.esse Inserito: 12 marzo 2021 Segnala Inserito: 12 marzo 2021 (modificato) Buonasera mi sto dedicando allo studio della programmazione e avrei una domanda per i programmatori. Il blocco shift right e un puntatore di bit giusto? Esempio con sensore ifm laser di distanza, il file iodd mi dice che i dati sono in una word e per essere Letto il valore di processo c'è necessità di un offset di 4 bit. 0000 0000 0000 **** (gli 0 sono i valori di processo utili) Come faccio a puntare il valore di processo? Prendendo per esempio un blocco shift right parametrizzato come segue In= iw68 N=4 Out=mw68. Come funziona Il Blocco shift right? In pratica il plc punta il bit x di iw68(leggi sotto) Iw68: 0000 000x 0000 0000 è restituisce in parametro out ciò che legge in iw68 ma a partire da 0000 0000 000x 0000 In pratica è come se il puntatore fosse sotto 0000 0000 0000 0000 ^ È si sposta di n posizioni verso dx? Cioè quello dichiarato in parametro N? 0000 0000 0000 0000. ^ n=1 ^ n=2 È corretto? Modificato: 12 marzo 2021 da G.esse
Mattia Spoldi Inserita: 15 marzo 2021 Segnala Inserita: 15 marzo 2021 (modificato) il 12/3/2021 at 23:52 , G.esse scrisse: Il blocco shift right e un puntatore di bit giusto? No, il blocco prende in ingresso un valore e lo shifta di n posizioni a sx o dx in base se shift left o right. ti faccio un esempio su 16 bit 1010 1111 0001 1000 lo shifti verso dx di 4 posizioni, come valore di ritorno avrai 0000 1010 1111 0001, dove i 12 bit a dx sono i tuoi vecchi bit che andavano dal quarto al sedicesimo mentre i 4 bit aggiunti in testa sono 4 bit a zero aggiunti dalla funzione lo shifti verso sx di 4 posizioni, come valore di ritorno avrai 1111 0001 1000 0000, dove i 12 bit a sx sono i tuoi vecchi bit che andavano dallo 0 al dodicesimo, mentre i 4 bit aggiunti in coda sono 4 bit a zero aggiunti dalla funzione parlando in "matematichese" se prendi un numero(senza segno) e lo shifti di n posizioni verso dx lo stai dividendo per 2^(n-1), se invece lo fai verso sx è come moltiplicarlo per 2^(n-1) nel caso del tuo sensore ifm, dovrebbe bastare fare uno shiftRight di 4 posizioni, anche se per essere sicuri andrebbe visto il datasheet PS, visto che hai usato il termine puntatore, sia qui, sia nell'altro post, i puntatori in programmazione, sono una cosa molto particolare, che andrebbe studiato dopo aver studiato più o meno tutto il resto e comunque andandoci con i piedi di piombo, al momento dimenticati il termine perchè altrimenti ti porterà a fare confusione Modificato: 15 marzo 2021 da Mattia Spoldi
G.esse Inserita: 15 marzo 2021 Autore Segnala Inserita: 15 marzo 2021 (modificato) 3 ore fa, Mattia Spoldi scrisse: il 12/3/2021 at 23:52 , G.esse scrisse: Il blocco shift right e un puntatore di bit giusto? No, il blocco prende in ingresso un valore e lo shifta di n posizioni a sx o dx in base se shift left o right. ti faccio un esempio su 16 bit 1010 1111 0001 1000 lo shifti verso dx di 4 posizioni, come valore di ritorno avrai 0000 1010 1111 0001, dove i 12 bit a dx sono i tuoi vecchi bit che andavano dal quarto al sedicesimo mentre i 4 bit aggiunti in testa sono 4 bit a zero aggiunti dalla funzione lo shifti verso sx di 4 posizioni, come valore di ritorno avrai 1111 0001 1000 0000, dove i 12 bit a sx sono i tuoi vecchi bit che andavano dallo 0 al dodicesimo, mentre i 4 bit aggiunti in coda sono 4 bit a zero aggiunti dalla funzione parlando in "matematichese" se prendi un numero(senza segno) e lo shifti di n posizioni verso dx lo stai dividendo per 2^(n-1), se invece lo fai verso sx è come moltiplicarlo per 2^(n-1) nel caso del tuo sensore ifm, dovrebbe bastare fare uno shiftRight di 4 posizioni, anche se per essere sicuri andrebbe visto il datasheet È come dire:" i 4 bit finali che sono bool della word spostali a destra(dove vanno?😅) perché su questa word voglio leggere solo il valore (distanza)? Se il sensore Invece avesse restituito una word ma con solo *(vedi sotto) come bool mi sarebbe bastato uno Shift dx di posizioni n =1? Per leggere il valore "pulito" di distanza? 0000 0000 0000 000* Modificato: 15 marzo 2021 da G.esse
Livio Orsini Inserita: 16 marzo 2021 Segnala Inserita: 16 marzo 2021 8 ore fa, G.esse scrisse: È come dire:" i 4 bit finali che sono bool della word spostali a destra(dove vanno?😅 I primi 4 bit si perdono, tutti gli altri si spostano di 4 posti a dx e gli ultimi 4 bit (i più significativi vengono sostituiti da zeri). 8 ore fa, G.esse scrisse: Se il sensore Invece avesse restituito una word ma con solo *(vedi sotto) come bool mi sarebbe bastato uno Shift dx di posizioni n =1? Per leggere il valore "pulito" di distanza? Se fai uno shift a dx di un passo avrai tutti zeri.
G.esse Inserita: 16 marzo 2021 Autore Segnala Inserita: 16 marzo 2021 2 ore fa, Livio Orsini scrisse: Se fai uno shift a dx di un passo avrai tutti zeri Come riferimento di lettura o come 16 bit tutti a zero? Grazie
Cip77 Inserita: 16 marzo 2021 Segnala Inserita: 16 marzo 2021 57 minuti fa, G.esse scrisse: Come riferimento di lettura o come 16 bit tutti a zero? Grazie Intende, prendendo a riferimento quello che hai scritto te, che ti ritrovi tutti 0. Te hai scritto 0000 0000 0000 000* che per convenienza facciamo diventare 0000 0000 0000 0001 Facendo lo shift a DX di uno, perdi il bit che ora è valorizzato come 1 ed introduci a sinistra un bit valorizzato come 0. Tutti gli altri restano invariati come valorizzazione, ma cambiano di posto. Siccome te hai scritto che sono a 0, ti è stato detto che ti ritrovi tutti 0. Dalla tua domanda intuisco che non hai capito il funzionamento dello shift.: rileggi e cerca di capire bene quello che ha scritto Mattia Spoldi. È spiegato benissimo. Ciao, Claudio.
G.esse Inserita: 16 marzo 2021 Autore Segnala Inserita: 16 marzo 2021 (modificato) Quindi uno shift right, nel caso del sensore distanza con range da dx a y mm con risoluzione 1 fornito da una word con i quattro bit finali che non servono perché magari sono bool di stato, serve a eliminare i bit che non mi sono utili a rilevare la misura ed ad avere il valore scritto corretto scritto in parametro out del blocco shift? E questo il concetto? Fino a qua ci ho preso? 😅😅 E come attribuire lo zero della misura di distanza a bit x? 0000 0000 0000 000x Ogni mm sarà uno 0-1 che varierà da dx verso sx nel range x y sopracitato ? Lo shift viene utile quando bisogna assegnare a una Memoria da usare poi nel codice, un valore che ci interessa ma ci troviamo dati superflui in fornitura segnale ? In pratica serve a misurare un offset? dato che il dato voglio metterlo nella mw0 pulito ma lo zero di questo dato è messo dal produttore del sensore su 0000 0000 000* 0000 so che le posizioni (offset) per avere il dato Qui 0000 0000 0000 000* sono 4 verso dx so che devo shift dx n 4 giusto? Grazie Modificato: 16 marzo 2021 da G.esse
Mattia Spoldi Inserita: 16 marzo 2021 Segnala Inserita: 16 marzo 2021 1 ora fa, G.esse scrisse: E questo il concetto? Fino a qua ci ho preso? Fino a qui si. 1 ora fa, G.esse scrisse: E come attribuire lo zero della misura di distanza a bit x? Volendo la si può vedere in questo modo. 1 ora fa, G.esse scrisse: Lo shift viene utile quando bisogna assegnare a una Memoria da usare poi nel codice, un valore che ci interessa ma ci troviamo dati superflui in fornitura segnale ? Serve anche per questo, ma non solo. 1 ora fa, G.esse scrisse: In pratica serve a misurare un offset? Lo shift non misura niente, tantomeno un offset. 1 ora fa, G.esse scrisse: Qui 0000 0000 0000 000* sono 4 verso dx so che devo shift dx n 4 giusto? Si
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