Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Shift Register


Messaggi consigliati

Enrico Ghisla
Inserito:

Salve a tutti, volevo chiedervi in maniera molto ignorante,a cosa servono effettivamente gli shift register? mi potreste fare un esempio pratico dove potrebbero venire usati? vi ringrazio!


Inserita:

A fare le luci di supercar :P

A parte gli scherzi, se intendi le istruzioni SLW SRW SLD SRD non fanno altro che lo scorrimento verso destra o sinistra di n posizioni dei loro bit.

L'applicazione più comune è lo scorrimento a sinistra di 3 bit (SLD 3) che si usa per costruire un puntatore da caricare in AR1, oppure lo scorrimento verso destra di 12 posizioni (SLW 12) per estrapolare la base dei tempi di un valore s5time:

s5time.JPG

Ma ci possono essere anche altre applicazioni... basta avere fantasia :)

p.s. in Step 5 ogni istruzione tolta valeva oro (poca memoria nel plc) e io usavo SLW (1,2,3,4,...) e SRW (1,2,3,4,...) per moltiplicare per 2,4,8,16,... risparmiando ben una istruzione !!! :)

Inserita:

Ad esempio io le ho usate per shiftare i dati dei posaggi di una tavola (presenza pezzo, esiti collaudi, etc.), alla rotazione della stessa tavola.

Ciao

Drugo

Enrico Ghisla
Inserita:

eh azz io i puntatori non li ho mai usati, so cosa sono in maniera teorica ma non so come usarli e per fare cosa! :S

Inserita: (modificato)
Ad esempio io le ho usate per shiftare i dati dei posaggi di una tavola (presenza pezzo, esiti collaudi, etc.), alla rotazione della stessa tavola.

In effetti non ho capito se Enrico intendeva lo scorrimento di bits o di word, per queste ultime si usa un registro FIFO (FC85) o LIFO (FC87) oppure un registro autocostruito...

Modificato: da JumpMan
Enrico Ghisla
Inserita:

mi intendevo di bit... ma sono molto confuso ahah la serie 300 è un po troppo difficile per un principiante. volevo solo sapere un esempio, dove potrebbero essere usati gli shift tanto per capire il suo lavoro ma da quanto ho capito puoi fargli fare tante cose.

Inserita:

Guarda che i byte e le word sono sempre composte da bit, devi solo capire bene come sono piazzati (e sul manuale siemens c'è la spiegazione più esauriente che ho trovato - io ho imparato da lì).

Allora, immagina una tavola composta da 8 postazioni o posaggi o come preferisci chiamarli e da altrettante stazioni fisse sopraa la tavola ed i posaggi; ad ogni rotazione tutte le singole stazioni devono partire se il pezzo è presente; ma quando la tavola è vuota, alla prima rotazione il primo pezzo va sulla stazione 2, che deve lavorare, (la stazione di carico è la 1, automatica o manuale che sia), ma le altre sono ancora vuote e non devono lavorare, quindi come fai ? Metti dei sensori che rilevano la presenza ? Puo' costare ...

Allora usi un byte (8 bit=8 postazioni) oppure una word (16 bit=16 postazioni); tra parentesi a memoria non ricordo se le istruzioni del 300 accettano anche i byte o no, ma per l'esempio non è importante ...

A tavola vuota il tuo Dato di presenza (byte o word che sia, chiamamolo così) è 0 e devi occuparti tu di metterlo sempre a zero quando svuoti la tavola (con un apposito comando); quando si carica il pezzo sulla stazione 1 (in automatico o è l'operatore a caricarlo a mano, non è importante; magari lì sì che ci infili un sensore che controlla se il pezzo è presente prima della rotazione) metti a 1 (oppure ON o come sei abituato) il primo bit del Dato di presenza; quando invece la tavola ruota, shifti a sinistra: ti troverai il primo bit nuovamente a 0, il secondo bit è a 1 e gli altri tutti a 0; quindi se assegni ogni singolo bit del tuo Dato di presenza ad ogni singolo posaggio, sarai in grado di sapere, a fine rotazione, quale posaggio ha il pezzo presente e quindi quale stazione far lavorare.

Per complicarti la vita, potremmo poi dire, che so, che nella stazione 4 c'è un collaudo, quindi avrai bisogno di un altro dato che è l'esito, buono o scarto, del collaudo, magari per non lavorare più il pezzo sulle stazioni successive, sicuramente per sapere che devi scaricarlo nel contenitore degli scarti: quindi dovrai caricare anche quel particolare bit e shiftare anche il Dato esito insieme al Dato di presenza e via dicendo.

Spero di essermi spiegato bene: oggi qui è nuvolo, ma non vuol piovere ed in queste giornate di solito sono un po' sconnesso ... :blink:

Ciao

Drugo

Enrico Ghisla
Inserita:

ciao drugo ti ringrazio molto perchè mi hai fatto capire. alla fine è un po come veramente le luci di super car che citava prima jump no? :D

Inserita:

sì, in pratica sì, anche se detto così non capisci tutte le eventuali implicazioni dell'istruzione.

Dovresti dare un occhio anche alle operazioni binarie, anche se adesso lo shift per le operazioni non si usa più (esistino le istruzioni che prima non esistevano), potrebbe essere un buon esercizio.

Invece per i puntatori, ti consiglio prima di capire bene cosa sono sui generis:

mentre una variabile contiene il valore della variabile stessa, un puntatore contiene l'indirizzo di memoria dove si trova la variabile a cui "punta" (questa è l'espressione che io ho imparato ad usare); quindi se tu hai un tot di variabili in indirizzi contigui, ogni locazione contiene una sola variabile ed il puntatore PUNT punta alla prima, cosa accade se incrementi il puntatore di 1 ?

Se riesci a capire come rispondere a questa domanda, sei già a buon punto per capirci qualcosa ed anche per capire la potenza, ed anche i pericoli, dell'utilizzo dei puntatori. Ci sarà un motivo per il quale in C, ad esempio, si usano tantissimo ... Io proverei a cercare qualche spiegazione in rete, ma, ripeto, sui generis.

Poi, invece di buttarti subito con il 300, il cui utilizzo con i puntatori io ad esempio ho trovato un po' ostico (ma potrebbe non voler dire nulla, magari sono io che sono negato con il 300 :wacko:), proverei magari qualche esempio con il 200, dove si usano e sono molto più semplici (almeno per me).

Facciamo quest'altro esempio:

hai una serie N di parametri Par_1 ed un'altra serie N Par_2; devi copiare i valori di tutti i Par_1 nei valori di tutti i Par_2 (quindi Par_2[0] =Par_1[0] e così via fino a N); come fai ?

Con il 200 ho dovuto fare una cosa del genere ed ho usato i puntatori: è venuta fuori una routine abbastanza corta ...

In rete girava un simulatore per 200 scritto da uno spagnolo, credo, ed ai tempi l'avevo usato parecchio per queste prove, senza avere un PLC e qualche volta senza neanche Microwin; dovevi solo scrivere nella lista istruzioni del 200 in un file di testo e poi caricarlo nel simulatore: lì riuscivi a simulare quasi tutto ...

Buono studio

Drugo

Enrico Ghisla
Inserita:

grazie mille drugo..correggimi se sbaglio la risposta alla prima domanda. se incrementi di 1 punti al byte successivo?

Inserita: (modificato)

Occhio alle parole: io non li ho definiti byte, ma variabili ... a parte quello è proprio così.

Riesce a capire la potenza del loro utilizzo ? Pensa ad un array enorme, se lo devi "passare" ad una funzione certi compilatori, se non sbaglio, ne fanno una copia; invece se passi un puntatore dell'array ? Cosa accade ?

E i pericoli ? Pensa ad un incremento errato del puntatore, che va oltre ...

Buon week-end

Drugo

Modificato: da drugo66
Enrico Ghisla
Inserita:

Ciao ragazzi vi ringrazio intanto. Drugo rispondendoti alla domanda che dici se ho capito la potenza, e' no perché non riesco proprio a capire dove dovrebbero venire usati :S

Inserita:

Grazie a Federico per aver scritto la guida e a jumpman per averla segnalata: mi auguro che mi renda meno ostici i puntatori per lo step7.

Per Enrico: io i puntatori ho cominciato ad usarli con il VC++ nel lontano 1996 con il compilatore MSC 6.0, studiando parecchio ed applicandoli nei progetti che volevo/dovevo fare: e lì ho capito tutte le loro implicazioni e la potenza del loro utilizzo; utilizzarli nei PLC non è proprio la stessa cosa, ma mi sono reso conto che, conoscendo già il C, applicare certe regole alla programmazione dei PLC mi ha sempre avvantaggiato, rispetto ad altri colleghi che sapevano poco o nulla di C.

Sono un ex sperimentatore, quindi l'unica cosa che posso consigliarti è studia e poi prova: cerca di avviare un progetto che ti coinvolge; cercando di trovare soluzioni, capisci meglio la teoria e ti rimane impressa più a lungo. Tra l'altro, postando domande più specifiche, secondo me, avrai anche sicuramente più risposte.

Ciao

Drugo

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