Vai al contenuto
PLC Forum


Cosa Può Servire 'shiftare' Di Un Bit A Destra O A Sinistra


step-80

Messaggi consigliati

Ragazzi mi scuso con l'autore del la mia intromissione ma volevo chiedere da perfetto ignorante cosa può servire 'shiftare' di un bit a destra o a sinistra.

Nelle mie semplici applicazioni non ho mai dovuto utilizzarlo ma mi sono sempre chiesto cosa possa servire.

Se qualche anima pia volesse perdere dieci minuti gliene sarei enormemente grato :smile:

Grazie

Matteo

Modificato: da Livio Migliaresi
Link al commento
Condividi su altri siti


Livio Migliaresi

Separato il tuo messaggio dalla discussione in cui l'avevi inserito, conservandone il link.

Il regolamento prima, e la logica poi, vietano gli accodamenti.

Link al commento
Condividi su altri siti

La ringrazio e mi scuso per l'errore.

***

releghiamo il 'lei' ai rapporti formali, informalmente nel Forum ci diamo tutti del 'tu'.

;)

Modificato: da Livio Migliaresi
Link al commento
Condividi su altri siti

Credo che quello che intenda lelos sia un utilizzo del genere.

Supponi di avere una tavola rotante a 10 stazioni, dove alla stazione 2 (numero a caso) viene effettuato un controllo sulla validità del pezzo. La stazione 8 invece si occupa dell'espulsione dei pezzi che non hanno passato il "controllo qualità". Questa macchina usa un registro tra la postazione 2 e 8, dove la postazione 2 va a mettere un "1" se il controllo è passato o uno "0" se il controllo ha avuto esito negativo. Quando la postazione 8, trova un bit 0, scarta il pezzo.

Qui entra in gioco lo shift, a ogni rotazione della tavola, il bit appena registrato nella postazione 2 viene spostato di un bit, "seguendo", di fatto, il pezzo nella stazione 3, 4, 5, ecc... fino a portare il bit corretto (test passato, o meno) alla stazione 8, insieme al pezzo corrispondente.

Spero di essermi spiegato :thumb_yello:

Comunque questo credo sia solo uno dei tanti possibili utilizzi di questa funzione, ma anche la più usata nel mio settore

Modificato: da Stef U.
Link al commento
Condividi su altri siti

Credo di aver capito. Almeno l'esempio riportato. In effetti mi sono sempre chiesto come fosse possibile rilevare uno scarto su una ' catena' e poi scartarlo fisicamente n pezzi dopo.

Praticamente è come se il bit che memorizza lo stato "corresse" lungo il registro.. Sino ad arrivare al punto dove voglio verificarne lo stato. Sbaglio?

Grazie Stefano e Lelos...

Qualche altro esempio?

Link al commento
Condividi su altri siti

Esatto! Il bit associato alla validità o meno del pezzo nella posizione X della tavola rotante, viene traslato di N bit, posizione per posizione, fino a quando il pezzo arriva in posizione Y, dove a seconda del bit scritto in posizione X, avviene un azione particolare.

Guarda tutti i miei esempi sarebbero riconducibili a quello sopra, cambierebbe solo l'azione del sistema. Al posto di uno scarto, potrebbe essere regolare un dosaggio in base a determinate misurazioni. Purtroppo altre idee non mi vengono :(

Figurati, è un piacere :thumb_yello:

Link al commento
Condividi su altri siti

Dato che ci siamo.. Io ho una macchina con una tavola rotante a 10 posizioni. Nella stazione N1 il pezzo viene caricato, nel passaggio tra la 1 e la 2 vi è un sensore che rileva la presenza o meno del pezzo per effettuare o meno il riempimento.

Ora, tralasciando le stazioni intermedie, alla stazione n7 ho una cesoia che avrei piacere NON funzionasse se il pezzo non è presente. Mi sono sempre chiesto come potevo fare per discriminare la presenza senza mettere un sensore anche li...

Grazie a voi credo di esserci arrivato mediante l'uso dello shift. Dunque, per prima cosa che variabile è meglio dichiarare? Word? Int? Array?

Come dicevo le stazioni sono 10.

Supponendo una word, al rilevamento del pezzo metto ad"1" il primo bit. Ad ogni fronte del finecorsa della tavola rotante, effettuo uno shift a sx di un posto, e controllo lo stato del 7* bit.

Ho detto una stupidata?

Link al commento
Condividi su altri siti

Grazie 1000 Stefano sei stato chiarissimo!

Spero di poter ricambiare

Figurati, per così poco! Quando posso, data la mia inesperienza, aiuto volentieri gli altri :thumb_yello:

Supponendo una word, al rilevamento del pezzo metto ad"1" il primo bit. Ad ogni fronte del finecorsa della tavola rotante, effettuo uno shift a sx di un posto, e controllo lo stato del 7* bit.

Comunque il tuo ragionamento è esatto, però mi sfugge un dettaglio. Non dovresti shiftare a destra, quando la tavola ruota? così dopo 7 rotazioni il bit del primo pezzo è arrivato alla settima posizione e la cesoia taglia o meno!

Adesso apro il tia e faccio una prova :thumb_yello:

Link al commento
Condividi su altri siti

Ignorantemente intendevo il primo bit quello meno significativo,cioè quello a dx.

'Shiftando' a sx ho inteso si andasse verso i bit più significativi. Forse c' è un altro errore. Al rilevamento del pezzo dovrei scrivere '1' sul 2° bit,e non sul primo,per poter leggere lo stato corrispondente alla stazione cesoia al 7° bit. Sbaglio?

Se lo scrivo sul primo,dovrei andare a leggere sul 6°,secondo la mia mente da premio No-bel :superlol:

Link al commento
Condividi su altri siti

Ignorantemente intendevo il primo bit quello meno significativo,cioè quello a dx.

Aaaaaaaah ok, allora dovresti shiftare a sinistra! Adesso è chiaro :thumb_yello:

Se lo scrivo sul primo,dovrei andare a leggere sul 6°,secondo la mia mente da premio No-bel :superlol:

Ahahahahahahah battute a parte, hai ragione: se il rilevamento (e quindi la scrittura del bit) avviene tra la stazione 1 e 2, il bit da leggere alla postazione 7 è il numero 6! Ma io comunque scriverei in posizione 1 e leggerei in posizione 6

Link al commento
Condividi su altri siti

Ribadisco la domanda di qualche post fa: che variabile è consigliabile dichiarare? O meglio: che variabile posso dichiarare per eseguire uno shift?

Link al commento
Condividi su altri siti

Giuseppe Signorella

Ribadisco la domanda di qualche post fa: che variabile è consigliabile dichiarare? O meglio: che variabile posso dichiarare per eseguire uno shift?

Ma che domanda è?

Dipende da ciò che vuoi realizzare.

Tanto per farti un esempio, se vuoi realizzare delle luci tipo supercar, la domanda da porsi sarebbe:

Quante lampadine voglio inserire?

8? dichiaro un byte

16? dichiaro una word

32? dichiaro un double

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

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