Jonnywolf Inserito: 25 ottobre 2006 Segnala Share Inserito: 25 ottobre 2006 Scusatemi, ma nelle discussioni che già affrontano questo tema non sono riuscito ha fare molta chiarezza su questo argomento, sarà perchè di AWL non ci capisco molto ed ho sempre programmato il ladder. Comunque il mio problema è: devo archiviare ogni 10sec un byte in un DB già progettato di dimensioni 400 byte, quindi puntare ogni 10sec al byte successivo del DB. Grazie anticipatamente.Ciao Link al commento Condividi su altri siti More sharing options...
varlux Inserita: 25 ottobre 2006 Segnala Share Inserita: 25 ottobre 2006 devo archiviare ogni 10sec un byte in un DB già progettato di dimensioni 400 byte, quindi puntare ogni 10sec al byte successivo del DB.- Potresti implementare un contatore che, ogni dieci secondi, aumenta di una unità una variabile......- Potresti implementare una semplice operazione matematica del tipo A:=A+1 (ogni 10 sec).....Buon lavoro Link al commento Condividi su altri siti More sharing options...
Jonnywolf Inserita: 25 ottobre 2006 Autore Segnala Share Inserita: 25 ottobre 2006 Si ma come indicizzare per esempio l'istruzione MOVE per trasferire il byte al DB. Link al commento Condividi su altri siti More sharing options...
Luca Bab Inserita: 25 ottobre 2006 Segnala Share Inserita: 25 ottobre 2006 Molto brevemente poiche' si sono gia' spesi fiumi di messaggi sui puntatoritimer da 10 secondifronte di salita del timer incremento una MDapro la DB che mi interessacarico il byte che mi interessatrasferisco in DBB[MDsopra]non scordare di fare il confronto con MDsopra quando passa il campo dei byte della Db per rimetterla a zeroattenzione , se usi byte nella db puoi incrementare di 1 la MDse usi word ovviamente moltiplichi per 2 ( o incrementi 2 )ciaoLuca Link al commento Condividi su altri siti More sharing options...
batta Inserita: 25 ottobre 2006 Segnala Share Inserita: 25 ottobre 2006 Luca, hai trascurato una cosa fondamentale: in Step7 si punta al bit. Per puntare al byte successivo si deve incrementare di 8.Nella cartella "Sorgenti"del tuo progetto inserisci una nuova "Sorgente AWL". Apri il nuovo file sorgente e incollagli dentro il codice che segue. Compila.FUNCTION "Esempio" : VOID TITLE =Esempio //A questa FC devi passare i seguenti parametri: //- AdrPrimoByte: devi passare l'indirizzo del byte del DB dal quale desideri //iniziare l'archiviazione dei tuoi dati. //Esempio: se vuoi inziare ad archiviare i dati da DB20.DBB50 dovrai scrivere: //P#DB20.DBX50.0 //- ID: numero del byte da scrivere, allineato a zero //- Dato: valore da scrivere in formato byte AUTHOR : batta VERSION : 0.1 VAR_INPUT AdrPrimoByte : POINTER; //Indirizzo primo byte ID : INT; Dato : BYTE; END_VAR VAR_TEMP N_DB : INT; END_VAR BEGIN NETWORK TITLE = L P##AdrPrimoByte; //Carica indirizzo puntatore LAR1 ; //in registro indirizzi AR1 L W [AR1,P#0.0]; //Estrai numero DB da indirizzo T #N_DB; AUF DB [#N_DB]; //apri DB L D [AR1,P#2.0]; //Estrai indirizzo primo byte LAR1 ; //e caricalo in registro indirizzi AR1 //Caica indice puntatore //N.B.: in questo esempio l'indice è allineato a zero. //Per scrivere nel primo byte del DB si deve quindi //impostare ID = 0 L #ID; //Carica indice ITD ; //trasforma in DINT SLD 3; //Shift a sx di 3 bit per puntamento a byte +AR1 ; //Incrementa registro indirizzi AR1 L #Dato; //Carica valore T B [AR1,P#0.0]; //e scrivilo nel byte puntato END_FUNCTIONQuesto è solo uno dei tanti modi. Sono poche istruzioni buttate giù di corsa senza essere testate, ma vedrai che funziona.A te l'onere di gestire incremento e limiti dell'indice da passare alla FC. Link al commento Condividi su altri siti More sharing options...
Luca Bab Inserita: 26 ottobre 2006 Segnala Share Inserita: 26 ottobre 2006 Luca, hai trascurato una cosa fondamentale: in Step7 si punta al bit.verissimoPer puntare al byte successivo si deve incrementare di 8.verissimo , ma scomododa quello che dicevo prima , la MD del puntatore ti basta moltiplicarla per 8 o shiftarla a sinistra di 3prima di interrogare la DBBciaoLuca Link al commento Condividi su altri siti More sharing options...
STEU Inserita: 27 ottobre 2006 Segnala Share Inserita: 27 ottobre 2006 guarda questo ling e il post sucessivo ed hai le risposte che ti servono Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 29 ottobre 2006 Segnala Share Inserita: 29 ottobre 2006 Vorrei aggiungere una piccola postilla alle perfetta spiegazione di batta,ricordare sempre :Quando si usa il registro AR1 per l'indirizzamento indiretto, si deve sempre caricare in AR1 l'indirizzo corretto. tratto dal . in linea di step7, ovvero quando si carica un offset tipoL P#1.5L AR1SET= A[AR1,P#0.0]scrivo a uno l'uscita A1.5, sino a qui niente di strano, ma se volessi puntare al byte 1 bit 5 della MW0 della DB20 devo scrivereL 20T N_DBAUF DB [#N_DB]L P#DBX0.0 //CARICO IL PUNTATORE AL PRIMO DATO DELLA DBLAR1 // ADESSO SONO SICURO CHE IL PUNTATORE PUNTA ALLA PRIMA LOCAZIONE DELLA DBL P#1.5 // CARICO L'OFFSET+D // SOMMO L'OFFSET AL MIO PUNTATORELAR1 // ADESSO IL PUNTATORE PUNTA ESATTAMENTE A DB20.DBX1.5 DI DB20.DBW0Aggiungo, per finire, che all'interno della mia FC / FB dove faccio uso di AR1 e/o AR2 di aggiungere all'inizio della FC/FB quanto segueTAR1 #STar1 // Dove STar1 e STar2 sono due variabili locali in formato DBWordTAR1 #STar2ed alla fine della FC / FBLAR1 #STar1LAR1 #STar2Il commento a quanto scritto qui sopra lo trovate sul . in line del Step7 Link al commento Condividi su altri siti More sharing options...
mbedaisu Inserita: 25 ottobre 2008 Segnala Share Inserita: 25 ottobre 2008 Dovendo collegare un'elettrovalvola con contatto ausiliario di cui non sono in possesso dello schema di collegamento,ho proceduto nel seguente modo:Con il tester impostato sugli ohm ho rilevato un valore tot su due (blu e marrone) dei 4 fili provenienti dall'elettrovalvola, determinado che questi sono i due fili per l'eccitazione della bobina, sugli altri due fili (grigio e nero) ho rilevato un valore di zero ohm determinando che questi sono i due fili del contato ausiliario. Per ulteriore conferma ho azionato manualmente l'elettrovalvola rilevando un valore di fondoscala tra il filo grigio e nero confermando in tal modo che questi sono il contatto ausiliario,ed ho sempre rilevato un valore tot per quelli della bobina di eccitazione dell'elettrovalvola.Quindi vi chiedo cortesemente di confermarmi se quanto da me effettuato e' corretto.Vi ringrazio per la vostra disponibilita'.Se la sezione dove ho posto questa domanda dovesse essere sbagliata,me ne scuso. Link al commento Condividi su altri siti More sharing options...
Ivan Botta Inserita: 25 ottobre 2008 Segnala Share Inserita: 25 ottobre 2008 Quindi vi chiedo cortesemente di confermarmi se quanto da me effettuato e' corretto.Confermo che hai individuato correttamente i fili che alimentano la bobina e quelli del micro, le prove che hai fatto sono corrette. Link al commento Condividi su altri siti More sharing options...
mbedaisu Inserita: 25 ottobre 2008 Segnala Share Inserita: 25 ottobre 2008 Ti ringrazio di cuore. 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