Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Blocchi Dati - Archiviazione sequenziale


Messaggi consigliati

Inserito:

Premessa: CPU utilizzata : 315-2DB

Com'è possibile salvare dei dati in una db in modo sequenziale (es.: da dw0 a dw 100)?

Far si che automaticamente si incrementi l' indirizzo delle DW dove scrivere.

Un esempio potrebbe essere quello di memorizzare l' ora ogniqualvolta si accenda e si spenga un motore.

Grazie


Inserita:

Devi usare un puntatore, memorizzare l'ultimo indirizzo che hai usato per una registrazione valida e incrementarlo.

Ma attento !!

Finirai il DB prima o poi, quindi devi prevedere la generazione di 1 nuovo db via software !!!

Consiglio : scrivi su MMC !!!

Ciao

Inserita:

Dovresti utilizzare i puntatori. In S7 non sono il massimo della vita...

Guarda sul manuale e buona fortuna.

Inserita:

Se usi AWL devi utilizzare dei puntatori semplici a 32 bit, se usi SCL in linguaggio evoluto è molto più facile ed intuitivo

Inserita:

Magari, nel caso ti servisse anche per altre cose, potresti valutare l'impiego di una CP343-IT che

se non sbaglio integra la funzionalità che richiedi, e in + permette di mandare i dati via email, sms,

e rende disponibili i files via ftp, oltre a farti da web server e interfaccia ethernet.

Inserita:

Ciao,

devi usare l'inidirizzamento indiretto ( F1 e poi cerca indirect adressing ).

Puoi usare anche l'SCL (pacchetto addizzionale) che é un linguaggio con sintassi simil pascal che permette facilmente di gestire l'inidizzamento indiretto:

es: se dichiare inel tuo DB un array ci accedi cosi: "DBNAME".ARNAME[index]

Se vuoi fare tutto in STL questo semplice esempio ti puó essere di aiuto

esempio di FC:

IN #ADDR INT

IN #DB INT

IN #VAL INT

L #ADDR //tipo INT che definisce la word che si vuole scrivere; es 100 -> DW100

ITD //conversione in puntatore

SLD 3 //...

LAR1 //caricamento del puntatore nel indirect address register 1

OPN #DB // tipo INT che é il numero del DB destinazione; es 250 -> DB250

L #VAL //tipo INT caricamento valore da scrivere

T DBW [AR1,P#0.0] // scrittura della DB250.DBW100 in modo indiretto

fine FC

Inserita:

Potresti usare l'FC84 ATT TABLE, pero' avrai il problema gia' sollevato da MrC che prima o poi il DB si riempira'. Lo puoi "svuotare" con l'FC85 FIFO TABLE (con il quale puoi prelevare un valore alla volta, se ti serve) o con l'SFC21 FILL MOVE (puoi azzerare di brutto il DB)

Inserita:

Ancora più velocemente

auf BDxx
L variabile che contiene puntatore
SLD 3
T variabile temporanea tipo LD0 oppure quelle del blocco
L dato da salvare
T DB(W,D)[variabile temporanea tipo LD0 oppure quelle del blocco]
Esempio: DB100 memorizzo 100 in db100.dbd10
AUF DB100
L #10
SLD3
T LD0
L #100
T DBD[lD0]

Se poi al posto di #10 e di #100 ci metti una varibile il gioco è fatto

Resta sempre il problema del riempirsi del DB

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