alan_ford444 Inserito: 26 ottobre 2006 Segnala Inserito: 26 ottobre 2006 (modificato) Ciao a tutti,devo costruire un puntatore ad un'area A in step 7 con cpu serie 300, ma non mi e' chiaro l'. della Siemens. Ho scritto cosi': LAR1 P##Index //Carica l'indirizzo iniziale del puntatore ANY in AR1 L B#16#10 //Carica l'ID-sintassi S7 e la trasferisce nel puntatore ANY T LB [AR1,P#0.0] L B#16#6 //Carica tipo di dati byte e la trasferisce nel puntatore ANY T LB [AR1,P#1.0] L 1 //Fattore di ripetizione (va a 1) T LW [AR1,P#2.0] L 0 //Numero della DB (non serve, quindi va a 0) T LW [AR1,P#4.0] L B#16#82 //Area di memoria A (uscite) T LB [AR1,P#6.0] L 3 //indirizzo del byte di uscita. E' qui l'errore? T LB [AR1,P#8.0] L 0 //Indirizzo del bit dell'uscita T LB [AR1,P#9.0] L P##Index T #Appoggio_Puntatore //variabile DWORDIl risultato non e' quello previsto, perche' se scrivo "L[#Appoggio_Puntatore]" mi trovo la lettura della AD 3 shiftata di 2 byte (esempio: se AD 3 vale FFFF FFFF, il load mi ritorna il valore FFFF FF00). Ho provato a cambiare l'operazione "L 3" con altri valori, ma il risultato non cambia. Modificato: 26 ottobre 2006 da alan_ford444
Luca Bab Inserita: 26 ottobre 2006 Segnala Inserita: 26 ottobre 2006 Se devi sempre e solo puntare un tipo di dati ( e nel tuo caso mi sembra di si )la cosa piu' semplice e' la seguenteVuoi interrogare se A23.7 e' alta ????23x8+7 = 191metto 191 in MD200U A[MD200]finitociaoLuca
alan_ford444 Inserita: 26 ottobre 2006 Autore Segnala Inserita: 26 ottobre 2006 (modificato) Grazie per avermi risposto, ma non devo interrogare un singolo bit. Devo leggere tutta la doppia word per poi eseguire dei mascheramenti di bit.La costante 3 l'ho messa solo per semplificare l'esempio, ma in realta' e' una variabile. Devo quindi puntare a un'area A il cui indirizzo (offset) sia variabile.Devo quindi eseguire alla fine una cosa tipo "T AD[offset]", ma non si puo' fare "T AD[MD200]" Modificato: 26 ottobre 2006 da alan_ford444
Luca Bab Inserita: 26 ottobre 2006 Segnala Inserita: 26 ottobre 2006 Il concetto e' lo stesso ( se devi leggere la Dword per poi mascherare i bit per puntare ad una uscita , e' meglio che punti direttamente all'uscita a bit )Comunque quello che devi fare e' praticamente ugualevuoi caricare la dw di uscita 40 ???40x8 = 320sposti 320 in MD200L AD [MD200]poi ti fai quello che ti serveNon si capische bene cosa vuoi fare T AD ( trasferisci , non carichi )se dai piu' informazioni , gli aiuti sono piu' miraticiaoLuca
alan_ford444 Inserita: 26 ottobre 2006 Autore Segnala Inserita: 26 ottobre 2006 Grazie del consiglio. Avevo provato a scrivere qualcosa di simile, ma avevo commesso l'errore di pensare che l'indirizzamento indiretto L AD [MD200] volesse come valore di MD200 il numero della dword o del byte di uscita, mentre invece vuole comunque l'offset espresso in bit.Lo scopo era leggere lo stato di 32 bit di uscita (con offset parametrizzabile) e azzerare solo il primo, il secondo, il terzo byte o tutta la dword in base ad altre condizioni di programma, mantenendo inoltre inalterati i byte non interessati. Fallito il primo tentativo di indirizzamento indiretto, avevo pensato di costruire un puntatore, ma con il problema che ho riportato sopra.Con quest'ultima modifica ho risolto. Ciao e grazie.
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