Mirco Tirrezzi Inserito: 22 agosto 2004 Segnala Inserito: 22 agosto 2004 Salve a tutti. Scusatemi se faccio una domanda probabilmente banale, ma stò studiando la memorizzazione dei dati allinterno delle DB e non riesco a capire come in awl si riesca a indicizzare la lettura e la scrittura delle variabili contenute all'interno di una struct posisionata dentro ad una DB. Ho creato delle STRUCT composte da variabili di diverso tipo, ma adesso non riesco a capire come fare per leggere e scrivere le variabili all'interno delle STRUCT.Dove posso trovare documentazione o esempi in merito ?GrazieMirco
Gianmario Pedrani Inserita: 22 agosto 2004 Segnala Inserita: 22 agosto 2004 Ci sono due modi per scrivere il primo, se non hai dichiarato la tua db nella lista simbolica, quando apri la tua db devi andare in visualizza struttura e cosi vedi gli indizizzi delle tue variabili, ed in awl è sufficente scrivere L mio dato T DB(numerodb).DBX10.3 se il dato è di tipo bool T DB(numerodb).DBb10 se è di tipo byteT DB(numerodb).DBw10 se è di tipo wordT DB(numerodb).DBd10 se è di tipo dword Laltro metodo è uguale solo che al posto dei numeri metti il nome della db che hai dichiarato nella lista simbolica ciaooooooooooooooooo
Mirco Tirrezzi Inserita: 23 agosto 2004 Autore Segnala Inserita: 23 agosto 2004 Ho provato.., e quando la DB assomiglia a questo come fai ad indirizzare il comando di load o transfer ?0.0+0.0 Alfa STRUCT TABELLA DATI ALFA +0.0 Alfa1 ARRAY[1..4] Codice Alfa1 *1.0 CHAR +4.0 Alfa2 ARRAY[1..4] Codice Alfa2 *1.0 CHAR +8.0 Alfa3 ARRAY[1..32] Codice Alfa3 *1.0 BYTE =40.0 END_STRUCT +40.0 Beta STRUCT TABELLA BETA+0.0 Beta BYTE B#16#0 Comando Beta+2.0 Beta1 ARRAY[1..16] Codice Beta1*1.0 CHAR +18.0 Beta2 ARRAY[1..16] Codice Beta2*1.0 CHAR +34.0 Beta3 ARRAY[1..4] Codice Beta3 *1.0 CHAR +38.0 Beta4 ARRAY[1..4] Codice Beta4 *1.0 CHAR +42.0 Beta5 ARRAY[1..28] *1.0 BYTE =70.0 END_STRUCT Supponendo che la DB sia la 50, come posso indirizzale T DB50.DB???? dato che esistono più indirizzi uguali ?Essendo la DB composta da più tabelle ( ne ho riportate solo due, ma in realta la DB ha 10 tabele ), credo ci si debba rifare all'indirizzo della tabella e poi all'indirizzo della variabile contenuta all'interno della tabella..., ma comesi fà ? T DB50.(indirizzo tabella).(indirizzo variabile) ??
walterword Inserita: 23 agosto 2004 Segnala Inserita: 23 agosto 2004 (modificato) le strutture , strutture di strutture , strutture di array , array di strutture , array di strutture di array non sono altro che modi per rendere una buona organizzazione dei dati Quando hai scritto la tua o tue strutture , dal menu Visualizza->Dati ti comparira la struttura reale del db sono SEMPRE una contiguita di dati composta da byte o word o dword o real e di fianco , cioe nella prima colonna , c'e' scritto il valore assoluto dell'indirizzo ho capito bene la tua domanda?ciao walterse invece vuoi caricare (L) o traferire (T) in maniera simbolica guardi nella colonna piu a destra (sempre in visualizza dati ) e vedi come vengono interpretati i dati simbolicamente .Se non sbaglio devi dare un nome simbolico anche al db , in modo da poter accedere al 100% in simbolico seno fai come ti ho detto prima ed accedi in maniera assoluta Ti dice tutto lo Step7 (con quello che costa... ) Modificato: 23 agosto 2004 da walterword
kroccodile Inserita: 8 settembre 2004 Segnala Inserita: 8 settembre 2004 Le DB sono un blocco di dati, in cui possiamo andare a scrivere o a leggere in qualunque momento ( e fin qui ci siamo senza problemi). Per cercare di rendere più "intuitivo" l'utilizzo dei dati, li possiamo dividere in strutture.La struttura si presenta quindi come una formattazione di dati all'interno della DB. No necessariamente deve essere un array, possono benissimo essere bit che vengono raggruppati insieme per senso logico, o elettrico ( ad esempio tutti i sensori di una determinata zona di un impianto).Questa divisione ci aiuta nella comprensione e nella scrittura del programma a patto che venga utilizzata la visualizzazione simbolica dei dati, infatti in caso di rappresentazione assoluta, avremo sempre il puntamento al punto della DB in cui viene salvato il dato ( per fare un esempio tangente DB50.DBW 12 ...).Se invece noi creiamo una struttura di questo tipo...+0.0 Alfa1 ARRAY[1..4] Codice Alfa1 *1.0 CHAR allora potremo permetterci di puntare i dati in questo modo L alfa1[2].Ovviamente per il PLC il riferimento sarà sempre DB50.DW0 8 ovvero l'indirizzo assoluto del primo carattere dei 4 che compongono il codice ALFA, ma la comprensione del nostro programma risulterà notevolmente aumentata.A questo punto penso che il gioco sia del tutto chiaro, se volessimo dare una matrice un poco più complicata potremmo dare due dimensioni ed avere Alfa [1..4,1..10]cosi da avere dieci codici da 4 caratteri ....Seguendo il tuo esempio, abbiamo però trattato di ARRAY più che di strutture....Le strutture hanno il vantaggio di avere fino ad 8 livelli, raggruppando però dati che possono essere diversi tra loro.... mentre gli ARRAY hanno tutti gli stessi dati.Se per caso venisse in mente di puntare i dati come Alfa [mw12].. o cose del genere, sconsiglio vivamente qualunque prova... non ci sono mai riuscito e ( ad ora ) non credo sia possibile, a meno da non acquistare ilpacchetto software SCL ( il quale in puntamenti di questo genere è un aiuto notevole!).Per finire, perchè mai utilizzare questo tipo di puntamento ? che risulta macchinoso, senza particolari aiuti se non la maggiore semplicità di lettura?.Perchè il puntamento con array, ci permette di allungare i campi senza stravolgere tutto il nostro lavoro....Per farlo dobbiamo però fare alcuni passaggi....1- Finito il nostro FB o FC , dobbiamo salvarlo e generarne une sorgente ( importante crearlo utilizzando i puntamenti simbolici e non assoluti, sennò non avremo l'effetto voluto).2- Modificare la DB di quanto vogliamo, ad esempio allungando Alfa di 100 elementi3- Dopo averla salvata, compilare la sorgente ottenuta con il passaggio al punto 1. Questo ricreerà la funzione, sovrascrivendola.Se adesso apriamo la funzione, vedremo che simbolicamente non è cambiato nulla, ma i puntatori assoluti saranno cambiati tutti in favore delle nuove posizioni.... .... e se sul momento vi sembra poso, vi assicuro che non lo è!Buon lavoro.Spero di essere stato utile ( anche se prolisso...)
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