Vai al contenuto
PLC Forum


Indirizzamento Dbw S7-300 - Traduzione indice


Messaggi consigliati

Inserito:

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.


Inserita:

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.

Inserita:

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.

Inserita:

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

Inserita:

Grazie rddiego hai praticamente risposto alla mia sec supposizione......molto gentile e utile :lol:

Inserita:

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

Inserita: (modificato)

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
  • 1 year later...
Inserita:

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.

Inserita:

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

Inserita:

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.

Inserita:

A casa tua come meglio ti piace. A casa del cliente a seconda di quanto vuole sborsare. :)

Inserita:

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

Inserita:

ciao il battiscopa è presente e non si puo' togliere,forse è buona l'idea di montare una canala sopra il battiscopa.escludendo la canala battiscopa

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