Dalia85 Inserito: 3 maggio 2014 Segnala Share Inserito: 3 maggio 2014 Salve a tutti, sono alle prime armi con la programmazione in Siemens Step 7 (AWL) e ho dei dubbi riguardo ai puntatori ANY. In pratica devo copiare dei dati da un DB ad un altro utilizzando la funzione BLKMOV che richiede nei parametri src e dest dei puntatori ANY. Io però vorrei che il puntatore non sia fisso ma dipenda da un'altra variabile che mi indica l'inizio della parte di memoria da dove copiare i dati Ad esempio: se la variabile x è 0 allora voglio che il puntatore ANY sia P# DBX 0.0 WORD 4 se la variabile x è 1 allora voglio che il puntatore ANY sia P# DBX 1.0 WORD 4 se la variabile x è 8 allora voglio che il puntatore ANY sia P# DBX 8.0 WORD 4 etc Qualcuno sa aiutarmi? Grazie Link al commento Condividi su altri siti More sharing options...
ken Inserita: 3 maggio 2014 Segnala Share Inserita: 3 maggio 2014 hai diverse soluzioni. la prima più banale ma meno efficace è quella di richiamare sfc20 diverse volte a seconda del valore della variabile X. se x=1 salta a sfc20 1 se x=2 salta a sfc20 2. questo è un modo semplice ma che usa molta memoria ed è poco elegante. http://www.plcforum.it/f/topic/150893-dati-in-formato-any/ nella discussione qui sopra si parla invece di come trasformare P# DBX 0.0 WORD 4 in una vera e propria variabile. nel tuo caso dovresti indicizzare il byte. Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 4 maggio 2014 Segnala Share Inserita: 4 maggio 2014 (modificato) Ho messo un progetto di esempio che carica tramite SFC20 una STRUCT (potrebbe essere una di 10 ricette selezionabili tramite una INT) da una DB ad un altra DB il codice dell'FC è molto semplice: // Preimposta AR1 per puntare al parametro di ingresso #Indirizzo_iniziale L P##Indirizzo_iniziale LAR1 // Copia il dato any #Indirizzo_iniziale nel un dato locale #Indirizzo_sorgente L D [AR1,P#0.0] // 10h, dati e fattore ripetizione T LD 0 L W [AR1,P#4.0] // nr.db T LW 4 L D [AR1,P#6.0] // pointer T LD 6 // Modifica il puntatore ANY secondo l'#Offset calcolato moltiplicando #NrRic per // il numero di bytes della ricetta L #NrRic // Nr. ricetta da caricare (0-1-2-...) L LW 2 // fattore ripetizione nell ANY (bytes) *D // * SLD 3 // trasforma in pointer L LD 6 +D // somma nell'ANY T LD 6 // Ora il dato locale #Indirizzo_sorgente contiene un puntatore ANY che punta a // #Indirizzo_iniziale + #Offset CALL "BLKMOV" SRCBLK :=#Indirizzo_sorgente RET_VAL:=#RV DSTBLK :="Ric".ACT Modificato: 4 maggio 2014 da JumpMan 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