anarchico Inserito: 19 ottobre 2007 Segnala Share Inserito: 19 ottobre 2007 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.DBW4L 100+IT "MW150"AUF DB["MW 150"]L "Z2"L 200+IT "MW150"L "MW150"SLW 4T MD 150L 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 More sharing options...
batta Inserita: 19 ottobre 2007 Segnala Share Inserita: 19 ottobre 2007 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'istruzioneL 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 More sharing options...
rddiego Inserita: 19 ottobre 2007 Segnala Share Inserita: 19 ottobre 2007 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 4Per esempio se "MW150" fosse = 3 l'indirizzo MD150 sarebbe = 48 e quindi la variabile puntata = DBxx.DBW 6Per esempio se "MW150" fosse = 4 l'indirizzo MD150 sarebbe = 64 e quindi la variabile puntata = DBxx.DBW 8etc etc. Link al commento Condividi su altri siti More sharing options...
anarchico Inserita: 19 ottobre 2007 Autore Segnala Share Inserita: 19 ottobre 2007 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 More sharing options...
anarchico Inserita: 19 ottobre 2007 Autore Segnala Share Inserita: 19 ottobre 2007 Grazie rddiego hai praticamente risposto alla mia sec supposizione......molto gentile e utile Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 19 ottobre 2007 Segnala Share Inserita: 19 ottobre 2007 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 More sharing options...
JumpMan Inserita: 19 ottobre 2007 Segnala Share Inserita: 19 ottobre 2007 (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: 19 ottobre 2007 da JumpMan Link al commento Condividi su altri siti More sharing options...
acarrua Inserita: 14 febbraio 2009 Segnala Share Inserita: 14 febbraio 2009 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 More sharing options...
alxcav Inserita: 14 febbraio 2009 Segnala Share Inserita: 14 febbraio 2009 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 More sharing options...
Ivan Botta Inserita: 14 febbraio 2009 Segnala Share Inserita: 14 febbraio 2009 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 More sharing options...
Nino1001 Inserita: 14 febbraio 2009 Segnala Share Inserita: 14 febbraio 2009 A casa tua come meglio ti piace. A casa del cliente a seconda di quanto vuole sborsare. Link al commento Condividi su altri siti More sharing options...
cordalenta Inserita: 16 febbraio 2009 Segnala Share Inserita: 16 febbraio 2009 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 More sharing options...
acarrua Inserita: 16 febbraio 2009 Segnala Share Inserita: 16 febbraio 2009 ciao il battiscopa è presente e non si puo' togliere,forse è buona l'idea di montare una canala sopra il battiscopa.escludendo la canala battiscopa Link al commento Condividi su altri siti More sharing options...
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