Vai al contenuto
PLC Forum


Conteggio Produzione con Reportistica


Roberto_M

Messaggi consigliati

Buongiorno,

Prima di scrivere sul forum ho cercato delle soluzioni e spunti operativi, ma vi chiedo il vostro aiuto su come impostare il programma.

Vi descrivo l'applicazione ho un PLC 1212C ed un KTP700 e devo contare la produzione di un nastro tramite una fotocellula.

Ho già un contatore che conta il numero dei cartoni e lo visualizza a pannello ed eventualmente lo resetta.

Devo salvare il valore contato della fotocellula discriminandolo in giorno, mese e anno, per poi salvarlo su file .csv, inviarlo via mail, oppure semplicemente conservandolo nel PLC.

Sto studiando come utilizzare la funzione Datalog e TCMail, a primo impatto sembra essere chiaro.

       Il mio dubbio è:  non riesco a creare la struttura del programma che mi consenta di contare pacchi in un giorno , in un mese o in un anno.

Come posso impostare il programma? E quale è la forma più semplice e basica per farlo?

Vi ringrazio, vi sarei grato per la risposta.

Saluti

 

 

Link al commento
Condividi su altri siti


Potresti fare un db con un vettore di 372 celle di interi (12 mesi da 31giorni) Poi ogni volta che leggi la fotocellula calcoli X=il giorno corrente del mese x il mese, leggi il contenuto della cella X e lo incrementi di 1. Così giorno dopo giorno avrai la quantità di pezzi prodotti nelle varie celle. Da lì estrarre la qta del mese o dell'anno è semplice...

Link al commento
Condividi su altri siti

Simone.Salarsi

oppure potresti creare un UDT che replichi mesi e giorni di un anno e poi leggendo la data&ora di sistema andare a riempire il giorno esatto con il tuo conteggio giornaliero

qualcosa del genere : anno contiene un array di 12 mesi, ed ogni mese contiene un array di 31 giorni.

 

in questo moto leggendo la data attuale risulta molto veloce individuare il giorno giusto

Per esempio :

 - #indice_mese = 8

 - #indice_giorno = 14

 

"Datalog".Anno.Mese[#indice_mese].Giorno[#indice_giorno] := ConteggioGiornaliero;

 

Poi c'è da vedere se una struttura del genere data in pasto al blocchetto dei datalog viene accettata e se si, come viene creata.

Non ho mai usato tale istruzione.

 

 

image.thumb.png.1a8aa8ae504fc5fdc1f57af3d8dbf1f8.png

 

 

Link al commento
Condividi su altri siti

Premesso che le indicazioni che ti sono state suggerite come spunto dagli altri utenti del Forum vanno bene, in particolare quella di Simone Salarsi dal momento che con la struttura dati che ti ha suggerito risulta più immediata l'estrazione dei valori di reportistica dei pacchi al giorno, nei mesi e nell'anno. 

 

A seguire ho comunque inserito degli screenshot come possibile esempio per l'archiviazione dei dati.   

 

 1) Creazione di una UDT come da screenshot chiamata Archivio, che contiene Il valore del contatore e la data.

  image.jpeg.d464b49ec19d0f14b342df45ebe8b1cf.jpeg

 

2) Nello screenshot successivo al segmento 1 viene effettuata la lettura della data ed ora della Cpu mediante istruzione RD_LOC_T.

Se ti è più conveniente puoi impostare la data ed ora per eventuali correzioni/sincronizzazioni etc. etc. direttamente dal KPT700.

 

Dopodiché attraverso l'istruzione  LGF_GetCalendarDay (Questa libreria la scarichi a parte e liberamente dal sito della SIemens) ti viene restituito il giorno dell'anno attuale da usare poi come indice nel DB "Report". 

 

Il DB "Report" contiene un array di 366 elementi di tipo "Archivio" (tipo creato nella UDT nel precedente screenshot). Quindi un DB che gestisce 366 giorni.........

L'istruzione T_CONV viene usata per estrarre dalla data ed ora della Cpu solamente la Data, come richiestoti nella reportistica.

 

3) Al segmento 2 è stato realizzato un banale contatore con i reset del caso anche se mi sembra di capire tu abbia già realizzato come scritto nel tuo post di apertura.   

 

Da qui in poi il DB "Report" dovrà essere gestito per le successive operazioni di DataLogging mediante le istruzioni di DataLogCreate, Write,etc. etc. 

 

Come ultima cosa, ma questo dipende sempre dalle tue esigenze, considera che l'esempio gestisce 365 giorni, poi con l'avvento del nuovo anno la funzione LGF_GetCalendarDay come ovvio che sia restituisce dal primo di gennaio il nuovo giorno, per cui i dati presenti nell'archivio verranno via via sovrascritti partendo dal giorno 1,2,3,4 etc. etc.

Forse potrebbe essere un problema o forse no, ma questo lo valuterai Tu. 

 

Buon lavoro

 

Demo.thumb.JPG.2460a324e4e26b16159869282f19aaff.JPG

 

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Rimanendo in tema,

Sfruttando l'indice #DayIndex e il DB Report che ho creato nel PLC.

image.png.27ef9299d0743b0d0d3d4707b4e0891c.png

Vorrei consentire all'operatore di visualizzare tramite KTP i valori registrati, magari tramite un menù a tendina o un normale campo che tiene conto dell'indice.

Pretendo troppo da un KTP? Oppure esiste un modo anche diverso per farlo?

Vorrei ricreare quanto nell'immagine ma non so in che modo collegare i vari campi dell'HMI all'array del PLC.

image.png.cd79bfb0def2696d2820dca6e31df052.png

Vorrei evitare di creare 366 volte , le quattro celle in questione.

Mi scuso per le domande banali.

Grazie mille

 

 

Modificato: da Roberto_M
Link al commento
Condividi su altri siti

Simone.Salarsi

con un menu a tendina dovrai creare una lista testi con i valori da 1 a 366 ed assegnare un testo ad ognuno di questi il nome del giorno

nella pagina crei un menu a tendina comandato da una tag (dovrebbe andare bene anche una tag locale dell'hmi, ma non mi ricordo al momento) e gli associ la lista testi creata 

Ovviamente con un normalissimo I/O field ti basta inserire il numero del giorno da visualizzare senza creare tutti i testi per l'elenco a tendina.

 

Dopo fai drag&drop con il mouse di un array del report da PLC alla tebella tag dell'hmi ed automaticamente di verrà creata la medesima struttura

image.thumb.png.b88d9c6a22589105a48046ced69f7f31.png

A questo punto sotto la voce Address (in italiano non so come sia, comunque vedi dall'img) apri il menu a tendina, selezioni HMI_tag e vai a selezionare il tuo indiceGiornoHMI

image.thumb.png.13262065621899d457d50b7d865ed52d.png

 

nella tua schermata crei i tuoi campi I/O e li associ alle tag sopra

image.thumb.png.e389191fdf89224a7dae76ff2dcbec23.png

 

 

Link al commento
Condividi su altri siti

Il 17/8/2022 alle 16:46 , cagliostro ha scritto:

Il KTP 700 che hai è un Basic o Comfort?

 

Ho un KTP700 Basic.

 

Ho eseguito la procedura di Simone.Salarsi  e ho anche visto dei video (link youtube), ma purtroppo anche cambiando il valore nel DB del PLC. I campi I/O dell'HMI restano invariati.

Devo attivare la funzione multiplex come nel video?

Mi sembra stano anche perché assegnando i valori nella tabella HMI, i Tag assumono la proprietà di Multiplex.

Sto simulando con PLC e HMI senza successo.

Cosa altro , mi consigliate di verificare?

😢

 

 

 

 

Link al commento
Condividi su altri siti

L'esempio che ti ha postato Simone.Salarsi mi sembra corretto, e deve funzionare.

Non devi in questo caso attivare la funzione di multiplex. 

Eventualmente posta uno screenshot di come sono state definite la variabile interna e quella riferita alla struttura dati che visualizza i valori archiviati nel DB del PLC. 

 

La mia domanda di ieri relativa al modello di KTP700 che stai usando, deriva dal fatto che con una HMI Comfort, avresti avuto a disposizione gli script per gestire in modo più semplice un piccolo problema che si verifica nella realizzazione di quello che avevi richiesto ieri.

 

Personalmente eviterei di creare un menu a tendina associando 365 o 366 valori al giorno 1,2,3,4,5 etc. etc.

Il menu a tendina lo sostituirei con una variabile HMI interna, avente i limiti di introduzione da 1 a 365 e che sarà commentata per esempio con un testo a fianco del campo di introduzione numerica del tipo "Giorno".

Poi come ti spiegava ieri Simone S. questa variabile sarà usata per definire l'indice relativo agli elementi da visualizzare nella struttura dati del DB che è usato per archiviare i dati di processo.

 

Non mi dilungo più del dovuto, ti allego un semplice esempio di un progetto TiaPortal V17 update 4 che scarichi da WeTransfert a questo link:

https://we.tl/t-i9lJy2yZJ9

 

Il progetto contiene nella sezione PLC il DB di archivio e nella sezione HMI un KTP700 Comfort che gestisce una visualizzazione come quella da Te richiesta. Lancia la simulazione PLC ed HMI, fai le tue prove e trai le dovute considerazioni. 

 

Fai attenzione però che nel mio esempio ho fatto ricorso ad un semplicissimo script per risolvere il problema di offset dell'array nel DB di archivio che si presenta tra il DB del PLC e la variabile creata nella HMI. Nel DB archivio del PLC è stato creato un array da [1...366] elementi, mentre per convenzione nella HMI i dati di un array partono sempre dallo 0.

La cosa si può risolvere semplicemente dichiarando un array nel PLC da [0..366] elementi anche se per te il giorno 0 non esiste.

Nel mio file di esempio ho aggirato il problema facendo uso di un semplice script che ricalcola l'indice da usare per visualizzare i dati corretti riferiti a quel giorno.

 

Se in un caso o nell'altro comunque non fai questo, quando inserisci il giorno che rappresenta poi l'indice da cui "pescare" i dati, se inserisci il giorno 1, ti vengono visualizzati i dati del giorno 2 e così via (praticamente quello che richiedi come dati da visualizzare, ti visualizza invece i dati del giorno successivo).

 

La soluzione proposta da Simone S., risolve il problema ma devi inserire comunque nella lista testi i 365 giorni associati ad una costante numerica nel menu a tendina.

Vedi tu poi quale delle soluzioni adottare.  

 

Buon lavoro

  

Modificato: da cagliostro
Link al commento
Condividi su altri siti

  • 3 months 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...