Vai al contenuto
PLC Forum


Indirizzamento Dbw S7-300 - Traduzione indice


anarchico

Messaggi consigliati

Salve,mi sto ritrovando a sbattere contro un blocco di codice da cui non riesco a venirne fuori.Il blocco di codice è il seguente:

L DB2.DBW4

L 100

+I

T "MW150"

AUF DB["MW 150"]

L "Z2"

L 200

+I

T "MW150"

L "MW150"

SLW 4

T MD 150

L DBW [MD 150]

T "MW116"

Il problema è relativo alle ultime tre righe di codice sopo lo shift a sx.Nel caso ad esempio che MD 150 acquisisca valore in esadecimale CC0 opp. D00 opp. CF0 opp CD0 opp. CA0, il risultato di DBW [MD 150] è 8 sempre ed è il valore di MW116.Non riesco a comprendere l'associazione,e per questo chiedo il vostro aiuto....

Buona giornata,vi ringrazio anticipatamente scusandomi per l'eventuale ignoranza.

Link al commento
Condividi su altri siti


MW150 e poi MD150 sono utilizzate come variabili di appoggio.

In MW150 all'inizio viene caricato il numero del DB da aprire, poi viene caricato il numero della word, contenuta nel db aperto, che si andrà successivamente a leggere, poi viene effettuato lo shift a sx di 4 per trasformarla in puntatore ed il valore scritto in MD150.

L'istruzione

L DBW [MD150]

legge semplicemente il valore della variabile puntata da MD150 del DB precedentemente aperto.

Personalmente trovo il codice migliorabile, ma comunque funzionante.

Link al commento
Condividi su altri siti

l'operazione di shift serve per puntare sempre ad una word:

siccome l'indirizzo MD150 è l'indirizzo di un bit con lo shift verso sinistra di 4 bit in sostanza si moltiplica MD150 per 16 cioè si punta sempre ad un multiplo di 16 e quindi sempre ad una word.

Per esempio se "MW150" fosse = 1 l'indirizzo MD150 sarebbe = 16 e quindi la variabile puntata = DBxx.DBW 2 (16 bit a partire da dbx0.0)

Per esempio se "MW150" fosse = 2 l'indirizzo MD150 sarebbe = 32 e quindi la variabile puntata = DBxx.DBW 4

Per esempio se "MW150" fosse = 3 l'indirizzo MD150 sarebbe = 48 e quindi la variabile puntata = DBxx.DBW 6

Per esempio se "MW150" fosse = 4 l'indirizzo MD150 sarebbe = 64 e quindi la variabile puntata = DBxx.DBW 8

etc etc.

Link al commento
Condividi su altri siti

Grazie Batta,gentilissimo;ricapitolando se ho ben capito(anche da cio che ho trovato su questo sito):

supponiamo che il mio MD 150 valga in esad D00.A partire da cio che leggo sui 6 byte del puntatore, e tenendo presente che il DB precedentemente aperto è il DB 102,ad esempio,

vuol dire che io con DBW [MD 150] sto indirizzando la DB102.DBW 414 che nel mio caso ha valore W#16#8 appunto.....

Grazie comunque.........................Buon prosieguo

Link al commento
Condividi su altri siti

Come già scritto da rddiego, alcuni (anch'io) usano a vole l'operazione SLW o SLD al posto *I o *D quando il moltiplicatore è 2^n.

Esempio, per moltiplicare per 2 posso usare:

...

SLW 1

...

al posto di:

...

L 2

*I

...

Per moltiplicare per 4 posso usare:

...

SLW 2

...

al posto di:

...

L 4

*I

...

Si risparmia una istruzione :)

Ciao

Link al commento
Condividi su altri siti

Dimenticavo di dire, se non si era già capito che bisogna moltiplicare per 16 perchè i puntatori di s7-300 a differenza di altri linguaggi di programmazione, puntano al bit.

Quindi per puntare al byte bisogna moltiplicare per 8 (o shiftare di 3), alla word si moltiplica per 16 (o shifta di 4), alle doppie word si moltiplica per 32 (o si shifta di 5).

Modificato: da JumpMan
Link al commento
Condividi su altri siti

  • 1 year later...

ciao a tutti,secondo voi è meglio esteticamente montare della canala a battiscopa,ovvero che sostituisca il vero battiscopa.oppure montarla sopra il vero battiscopa esistente.come credete che sembra esteticamente.

Link al commento
Condividi su altri siti

Per "sopra" intendi piu' in alto o "addosso" (cioe' a coprire il vero battiscopa)?

In entrambi i casi, secondo me e' meglio evitare il "sopra" e sostituire la canala al vero battiscopa, se non puoi fare altrimenti (tubi sottotraccia o altro)...

Alessandro

Link al commento
Condividi su altri siti

Daccordo con Alxcav, istallare una canala a battiscopa sopra ad un battiscopa esistente a mio avviso non è proprio bello esteticamente, fai conto che ci sono canale a battiscopa abbastanza carine come estetica.

Link al commento
Condividi su altri siti

Se si realizza in canale la totalità dell'impianto e quindi si devono predisporre le filature per la f.m., i punti luce, le deviate ed i vari comandi, allora è bene usare il canale a battiscopa da sostituire al battiscopa esistente.

Se invece si tratta di modifiche su parte dell'impianto o comunque la filatura da passare nel canale è limitata in quantità, trovo sia migliore la scelta del minicanale da posare sopra al battiscopa (per sopra intendo più in alto a sfiorare il battiscopa esistente).

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