elesys66 Inserito: 23 marzo 2014 Segnala Inserito: 23 marzo 2014 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
drugo66 Inserita: 23 marzo 2014 Segnala Inserita: 23 marzo 2014 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
Giuseppe Signorella Inserita: 23 marzo 2014 Segnala Inserita: 23 marzo 2014 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
elesys66 Inserita: 23 marzo 2014 Autore Segnala Inserita: 23 marzo 2014 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 .....
drugo66 Inserita: 23 marzo 2014 Segnala Inserita: 23 marzo 2014 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.
valvolina Inserita: 23 marzo 2014 Segnala Inserita: 23 marzo 2014 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
elesys66 Inserita: 24 marzo 2014 Autore Segnala Inserita: 24 marzo 2014 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
bigalex Inserita: 24 marzo 2014 Segnala Inserita: 24 marzo 2014 (modificato) 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 Modificato: 24 marzo 2014 da bigalex
valvolina Inserita: 24 marzo 2014 Segnala Inserita: 24 marzo 2014 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
elesys66 Inserita: 26 marzo 2014 Autore Segnala Inserita: 26 marzo 2014 Ciao Valvolina Grazie mille per l'esempio Ora è tutto molto chiaro , appena rientro in sede provo a metterlo in pratica. Grazie anche a tutti gli altri per le risposte. Ciao
valvolina Inserita: 26 marzo 2014 Segnala Inserita: 26 marzo 2014 ciao fammi sapere, se posso ti aiuto ciao da Valvolina
j_watt Inserita: 9 novembre 2016 Segnala Inserita: 9 novembre 2016 non riesco ad aprire il pdf, succede solo a me?
Livio Orsini Inserita: 9 novembre 2016 Segnala Inserita: 9 novembre 2016 no, nemmeno io riesco ad aprirlo; forse c'è un problema nel link o nel file originale.
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