Vai al contenuto
PLC Forum


Sizeof() - s7


mkdev

Messaggi consigliati

ciao,

ma scusate, esiste una funzione tipo il sizeof() per le UDT che mi creo???

supponiamo mi abbia creato la UDT10 e poi mi scrivo una ricerca in un vettore di UDT10.

poi cambio la definizione di UDT (aggiungo un campo ad es) e se non ho il sizeof() mi devo cambiare il codice della ricerca!!!!!

mah...

grazie in anticipo.

Link al commento
Condividi su altri siti


Ciao,

L'UDT è una descrizione di dati, non dati fisici ... quindi non esiste una funzione del tipo sizeof().

puoi a priori leggere la dimensione del DB, e sampendo il numero di elementi ricavarti la dimensione della struttura dati o UDT associata ... io lo faccio spesso.

ciao

Link al commento
Condividi su altri siti

Gianmario Pedrani

Puoi usare la sfc24 test-db

Con la SFC 24 "TEST_DB" (test data block) si ottengono informazioni su un blocco dati presente nella memoria di lavoro della CPU. La SFC rileva il numero dei byte di dati per il DB selezionato e verifica se il DB è protetto in scrittura.

Parametri Dichiarazione Tipo Area di memoria Descrizione

DB_NUMBER INPUT WORD E, A, M, D, L, cost. Numero del DB da verificare

RET_VAL OUTPUT INT E, A, M, D, L Informazione di errore

DB_LENTH OUTPUT WORD E, A, M, D, L Numero dei byte di dati contenuti nel DB selezionato.

WRITE_PROT OUTPUT BOOL E, A, M, D, L Informazione sulla protezione da scrittura del DB selezionato (1 significa protetto in scrittura).

Informazioni di errore

Codice di errore (W#16#...) Significato

0000 Nessun errore

80A1 Errore nel parametro di ingresso DB_NUMBER: il parametro attuale selezionatoha il valore 0è maggiore del numero di DB massimo ammesso per la CPU utilizzata

80B1 Il DB con il numero indicato non è presente nella CPU.

80B2 Il DB con il numero indicato è stato creato con la parola chiave UNLINKED.

Link al commento
Condividi su altri siti

Ciao Gianmario, però sebbene ottieni info sul DB, non otterrai info su una UDT ... almeno non mi sembra proprio possibile.

Se ho capito quello che vuole mkdev, è parametrizzare a "runtime" i sui DB. Cosa ovviamente non possibile se non recuperare la lunghezza della DB e a riori conoscendo la dimensione dei dati trovare il numero di strutture indicizzate. Queste operazioni si possono fare. Quello che non si può fare programmare in modo dinamico le DB, probabilmente, derivando da una programmazione c/c++ è abituato ad usare ogetti, creazioni dinamiche in memoria, cosa che con i PLC è un po' diverso anche se in parte lo si emula ...

ciao

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