Vai al contenuto
PLC Forum


Accesso All'area Di Memoria Di Un Db S7 1200


mpage

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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 ...

Link al commento
Condividi su altri siti

(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.

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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: da drugo66
Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...