Vai al contenuto
PLC Forum


Memorizzazione Eventi Su S7 1200


elesys66

Messaggi consigliati

Buongiorno

Ho una richiesta di una modifica da parte di un cliente su una macchina appena installata e colludata.

La CPU è una 1214C con un pannello operatore KTP600 PN.

In pratica vuole memorizzare l'ora, durante la giornata, di quando si verifica un determinato evento ( carico pallet)

Gli eventi sono al massimo 30 durante una giornata, e vorrebbe tenere in memoria un mese di produzione il tutto visualizzabile su pannello operatore KTP600.

Ho visto sul manuale Siemens che c'è la possibilità di creare dei log che però verrebbero salvati in formato CSV leggibili solo da rete e non sul pannello (se ho capito bene!)

Si potrebbe creare un DB di 31 word ciascuna con 30 word di array e andarli a memorizzare in base al giorno del mese ?

La vedo un pò incasinato gestire gli shift di ogni evento.

Sul pannello potrei visualizzare un giorno alla volta con 30 variabili da andare a caricare in base al giorno impostato ?

Qualcuno ha già fatto qualcosa di simile e mi può indirizzare ?

Grazie

Ciao

Link al commento
Condividi su altri siti


Avevo fatto una cosa simile, ma con WinGP della Proface caricato su un computer; se vuoi farla con il PLC, secondo me, è possibile, ma più lungo; ricordati anche di sincronizzare data e ora fra PLC e OP e di inserire la modifica della data e ora su OP, se non l'hai già fatto.

Drugo

Link al commento
Condividi su altri siti

Giuseppe Signorella

In questa CPU, come in tutte quelle della serie S7 1200, è presente la funzione DATALOG, che in automatico ogni qual volta vai a scrivere nel datalog, viene scritto anche l'ora e la data dell'evento.

Il file è poi consultabile mediate web server o scaricabile in formato excel.

Ciao

Link al commento
Condividi su altri siti

In questa CPU, come in tutte quelle della serie S7 1200, è presente la funzione DATALOG, che in automatico ogni qual volta vai a scrivere nel datalog, viene scritto anche l'ora e la data dell'evento.

Il file è poi consultabile mediate web server o scaricabile in formato excel.

Infatti è la funzione che avevo letto sul manuale e che avevo accennato sopra.... il problema è che il cliente vuole vedere i Log sul pannello operatore KTP600 (il PLC / HMI non sono connessi alla rete aziendale.) ( non ho utilizzato neanche uno switch di rete , sono connessi direttamente .....questione di costi!!)

ricordati anche di sincronizzare data e ora fra PLC e OP e di inserire la modifica della data e ora su OP, se non l'hai già fatto.

Si ho già creato una pagina con la sincronizzazione della data/ ora - PLC/HMI e la relativa modifica

Grazie delle risposte .. presumo che mi dovrò creare la gestione da PLC .....

Link al commento
Condividi su altri siti

Allora, provo a descrivere come farei io.

Direi di salvare gli eventi in un DB in una specie di lista FIFO, così se la mia lista è piena il primo che ho memorizzato (che si trova all'ultimo posto) lo perdo; in questo modo la lista è finita, determinata e dovrò solo stabilire quanti eventi massimi devo salvare (lo chiedo al cliente).

Conviene crearsi un UDT (Dato Utente), in modo da sapere se l'evento è memorizzato o meno, così visualizzerò e manipolerò solo gli eventi memorizzati: quindi il mio DB lo riempio di UDT; quindi la data, l'ora, non so se serve il nome ed infine un bool per sapere se l'evento è stato memorizzato o meno.

A questo punto, allo scatenarsi dell'evento avrò bisogno di una funzione che mi shifti tutti gli eventi memorizzati verso il basso (come dicevo l'ultimo lo perdo), per poi poter scrivere l'evento appena accaduto nella mia prima casellina; non dimentichiamoci di mettere ON il bool che mi dice che l'evento è memorizzato.

Penso sia utile prevedere un tasto su OP che cancelli la lista.

Sono andato a naso: spero di esserti stato utile.

Link al commento
Condividi su altri siti

ciao

ho fatto un piccolo esempio in linguaggio scl (molto duttile per queste cose)

prima ho creato dei tipi di dati utente per arrivare ad una sorta di data base composto da:

ogni registrazione evento(record_carico_pallet) composto : data_ora + prograssivo (nome: record_giorno)

poi ho fatto un tipo di dati utente (record_giorno) composto da : un array di 50 (record_carico_pallet)

poi ho fatto un altro tipo di dati utente (dati_carico_pallet_mese) composto da : un array di 31 (cioè giorni del mese) di record_giorno

a questo punto in una db ho creato una variabile (dati_carico_mese) di tipo (dati_carico_pallet_mese) che in pratica contiene:

per ogni giorno del mese 50 registrazioni composte da data e ora + progressivo

non che scrivere il codice :

// legge data ora attuali cpu ++++++++++++++++++++++++++++
#ret_val_dtl := RD_SYS_T(#data_ora_act);
// estrazione del numero del giorno del mese +++++++++++++
#giorno_del_mese := #data_ora_act.DAY;
// verifica cambio giorno del mese ++++++++++++++++++++++++++++++++++++++++++
// inizzializzazione del numero di evento giornaliero
IF #giorno_del_mese <> "dati_carico_pallet".giorno_del_mese_appo THEN

"dati_carico_pallet".num_event_day := 1 ;
"dati_carico_pallet".giorno_del_mese_appo := #giorno_del_mese;

END_IF;
// generazione fronte di salita evento carico pallet ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
"R_TRIG_DB"(CLK:=#evento);
// registrazione evento +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// il num_day_event è il numero di evento giornaliero che può assumere un valore da 1 a 50 (sono stati fatti 50 record giornalieri)
IF "R_TRIG_DB".Q THEN

"dati_carico_pallet".dati_carico_mese.record_giornaliero[#giorno_del_mese].dati_giorno["dati_carico_pallet".num_event_day].data_ora := #data_ora_act;
"dati_carico_pallet".dati_carico_mese.record_giornaliero[#giorno_del_mese].dati_giorno["dati_carico_pallet".num_event_day].progressivo := "dati_carico_pallet".progressivo_carico;

END_IF;

puoi quindi combinare dati fatti coi log come già ti hanno consigliato

e anche registrare dati in una db, che quindi puoi puntare con un pannello operatore

certo la db occupa un pò di memoria.

se ti può servire fammi sapere ti invio il progetto di esempio

saluti da Valvolina

Link al commento
Condividi su altri siti

Ciao Valvolina

Purtroppo di scl non ne capisco quasi niente, ho provato a rileggere varie volte i tuo esempio ,ma non sono riuscito a capire.

Da quanto ho letto dai manuali per l'S71200 non esiste la funzione FIFO e la gestione delle word indicizzate ( cosa che avrei utilizzato se il PLC fosse stato Omron )

Grazie comunque

Ciao

Link al commento
Condividi su altri siti

Ciao Elesys66.

Credo che tu possa fare tutto in Ladder .
La prima cosa da fare è strutturare la tua DB in modo il più possibile efficiente.
Personalmente creerei prima una UDT "record" che definisce il record della registrazione così composta :
- Anno - tipo di dato USint (8bit) solo le due ultime cifre dell'anno es: 2014 ---> 14 ;
- Mese - tipo di dato USint (8bit) ;
- Giorno - tipo di dato USint (8bit) ;
- Ora - tipo di dato USint (8bit) ;
- Minuti - tipo di dato USint (8bit) ;
- Secondi - tipo di dato USint (8bit) ;
- Progressivo - tipo di dato USint (8bit) - Numero registrazione progressiva della giornata ;
- Operatore - tipo di dato USint (8bit) - Codice Numerico (1-255) che identifica un eventuale operatore di macchina .
Così fatta la UDT "record" occupa un totale di 8 byte.
La DB potrebbe avere dimensione 8 byte x 50 eventi/giorno (UDT) x 31 giorni (Array di UDT "record") = 12400 byte (un sacco di memoria).
Se consideriamo i 30 eventi/giorno avresti 7440 byte un poco più ragionevole ma sempre molto .

Tutto dipende da quanta memoria dati hai a disposizione .

Quindi creerei la DB utilizzando la UDT sopradescritta .
Leggerei la data-ora dalla cpu del plc in modo da poter scrivere i singoli elementi in formato USint o byte.
Quindi sul fronte di salita dell'evento da registrare gestirei la funzionalità di un FIFO.
s7-1200 ha a disposizione la funzione MOVE_BLK che dovrebbe aiutarti nella costruzione del FIFO.

bigalex :blink:

Modificato: da bigalex
Link al commento
Condividi su altri siti

ciao

ti ho messo giù lo stesso programma fatto in scl

in linguaggio a contatti (vedi allegato)

prova a vedere se così è piu chiaro

eventualmente sono disponibile per spiegazioni

saluti da Valvolina


scusa non ho aggiunto l'allegato

adesso dovrebbe esserci

ciao

Valvolina

Blocco_1 (FC2).pdf

Link al commento
Condividi su altri siti

Ciao Valvolina

Grazie mille per l'esempio :smile:

Ora è tutto molto chiaro , appena rientro in sede provo a metterlo in pratica.

Grazie anche a tutti gli altri per le risposte.

Ciao

Link al commento
Condividi su altri siti

  • 2 years later...

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