mpage Inserito: 23 marzo 2015 Segnala Inserito: 23 marzo 2015 Salve ragazzi, il passaggio da simatic al TIA portal mi sta mettendo a dura prova. E' possibile che io devo stare a dichiarare ogni variabile che utilizzo all'interno del programma. Per esempio se dichiaro un blocco dati come array di tipo word da 0...1000. In simatic una volta definito l'array si può puntare al bit, byte, word e dword di quel DB. In TIA portal, questo è possibile? o devo stare a dichiarare variabile per variabile (se ho n variabile ci metterei un'infinità di tempo)? Un'altra cosa che ho notato se dichiaro un variabile di tipo DB10.DBX19.7 come prima variabile, non mi fà variare l'offset e mi associa l'indirizzo fisico db10.dbx0.0. Grazie Saluti
drugo66 Inserita: 23 marzo 2015 Segnala Inserita: 23 marzo 2015 Ciao, in TIA (S7-1200) gli array esistono, ma non i puntatori, se non erro (forse solo ANY) ... Se vuoi l'indirizzo assoluto in un DB, devi togliere il segno di spunta dalla sua proprietà "Blocco ottimizzato" (destro del mouse sul nome del blocco, proprietà e trovi il segno di spunta da togliere). Secondo me è meglio lavorare con il simbolico (anch'io prima del TIA preferivo l'assoluto, ma dopo un po' ci si abitua) e definire tutto ciò che si utilizza, ma la mia è solo una opinione ...
ultimo 07 Inserita: 23 marzo 2015 Segnala Inserita: 23 marzo 2015 Ciao , guarda questo post http://www.plcforum.it/f/topic/168692-incremento-di-memorie-db-in-blocco/ forse ti chiarisce le idee , capisco che è dura ma vedrai che alla fine lavorare sarà più semplice e gradevole. Saluti.
Lucky67 Inserita: 24 marzo 2015 Segnala Inserita: 24 marzo 2015 (anch'io prima del TIA preferivo l'assoluto, ma dopo un po' ci si abitua) Devo dire che anche io dopo un pò di perplessità trovo che tutto sommato il simbolico, se uno crea dei simboli "intelligenti" aiuta molto e tante volte solo guardando il nome della variabile si evitano commenti che sono intrinseci nel nome stesso.
mpage Inserita: 24 marzo 2015 Autore Segnala Inserita: 24 marzo 2015 Grazie a tutti per le risposte.. Avevo provato con l'indirizzo assoluto, però se io definisco un array di word ed all'interno del programma vado a puntare un bool, ad esempio %DB10.DBX10.0, non mi da errore ma un warning dicendo che la variabile non appartiene ad un indirizzo. Con s7 300 funzionava, qui invece dovrei dichiarare un array per ogni tipo di variabile da quanto ho capito. Giusto? ( Ho provato anche con any ma stesso risultato) Per il puntamento all'id dell'array ci sono, però anche li è limitato al tipo di variabile definita nell'array. In sostanza non c'è più flessibilità da parte dell'array? Grazie Saluti MP
drugo66 Inserita: 24 marzo 2015 Segnala Inserita: 24 marzo 2015 (modificato) Ti chiedo scusa, non avevo capito che intendevi arrivare al bit: se hai una word, che derivi da array o meno, utilizzando la notazione <nomeword>.Xn, dove n è il numero del bit (ovviamente il primo è zero), arrivi a gestire il singolo bit; dovrebbe anche funzionare con le doppie word. Per la flessibilità non capisco cosa intendi: se utilizzi un array di UDT, non hai la flessibilità che vuoi ? Modificato: 24 marzo 2015 da drugo66
mpage Inserita: 24 marzo 2015 Autore Segnala Inserita: 24 marzo 2015 Per flessibilità intendevo arrivare al bit o alla double. Ho provato con il <nomeword>.Xn e funziona, per la double non riesco a capire come puntare alla DBD, non riesco nemmeno a trovarla in qualche manuale. Grazie Saluti MP
pomat Inserita: 24 marzo 2015 Segnala Inserita: 24 marzo 2015 per la double non riesco a capire come puntare alla DBD Se capisco bene, per poter usare double word, word, byte e bit allo stesso tempo, diventa necessario dichiarare il blocco dati come array di double word, per poter usare la suddetta notazione che consente solo di suddividere, quindi: <nomeDW>.wN con N=0,1 <nomeDW>.bN con N=0,...,3 <nomeDW>.xN con N=0,...,31 Attendo il parere di Drugo. Ci sarebbe anche la keyword AT (Another Type) ma non penso sia applicabile agevolmente in questo caso e in particolare per gli array.
drugo66 Inserita: 24 marzo 2015 Segnala Inserita: 24 marzo 2015 Ho usato solo la notazione xN, ma, dal manuale di sistema: Accesso a una "slice" di un tipo di dati con variabile L'accesso alle variabili del PLC e a quelle dei blocchi dati può essere effettuato a livello di bit, byte o parola in funzione della loro dimensione. La sintassi per l'accesso a una slice di dati è la seguente: ● "<nome variabile PLC>".xn (accesso a livello di bit) ● "<nome variabile PLC>".bn (accesso a livello di byte) ● "<nome variabile PLC>".wn (accesso a livello di parola) ● "<nome blocco dati>".<nome variabile>.xn (accesso a livello di bit) ● "<nome blocco dati>".<nome variabile>.bn (accesso a livello di byte) ● "<nome blocco dati>".<nome variabile>.wn (accesso a livello di parola) L'accesso a una variabile di doppia parola può essere effettuato tramite i bit 0 - 31, i byte 0 -3 o le parole 0 - 1. L'accesso a una variabile di parola può essere effettuato tramite i bit 0 -15, i byte 0 - 1 o la parola 0. L'accesso a una variabile di byte può essere effettuato tramite i bit 0 - 7 o il byte 0. Le slice di bit, byte e parola possono essere utilizzate ogni volta che i bit, i byte o le parole sono potenziali operandi. AT è detta sovrapposizione o overlay: La sovrapposizione AT consente di accedere alla variabile già dichiarata di un blocco con accesso standard alla quale è stata sovrapposta una dichiarazione con tipo di dati diverso. È ad es. possibile indirizzare singoli bit di una variabile con tipo di dati Byte, Word o DWord con un Array di Bool. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- La sovrapposizione può essere effettuata solo per le variabili dei blocchi FB ed FC con accesso standard (non ottimizzato). ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Nel caso dei parametri la sovrapposizione è possibile per tutti i tipi di blocco e tutte le sezioni di dichiarazione. I parametri per cui è stata effettuata una sovrapposizione possono essere utilizzati come qualsiasi altro parametro di blocco. Non è possibile effettuare la sovrapposizione per i parametri di tipo VARIANT. Il parametro sovrapposto deve essere più piccolo o uguale al parametro iniziale. La variabile sovrapposta deve essere dichiarata subito dopo quella iniziale, quindi si deve selezionare come tipo di dati iniziale la parola chiave "AT". Quindi, direi che è meglio l'accesso slice.
mpage Inserita: 27 marzo 2015 Autore Segnala Inserita: 27 marzo 2015 Grazie ragazzi, Ultima domanda: In soldoni l'approccio migliore da utilizzare è dichiarare variabile per variabile come si fa in programmazione C? Oppure andarsi a dichiarare un array e puntare ogni volta ad un bit, byte, word con il rischio di sbagliare numero di array ma più veloce (almeno credo)? Grazie per il supporto Saluti MP
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