Roberto_M Inserito: 12 agosto 2022 Segnala Share Inserito: 12 agosto 2022 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 More sharing options...
drn5 Inserita: 12 agosto 2022 Segnala Share Inserita: 12 agosto 2022 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 More sharing options...
Simone.Salarsi Inserita: 14 agosto 2022 Segnala Share Inserita: 14 agosto 2022 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. Link al commento Condividi su altri siti More sharing options...
Roberto_M Inserita: 15 agosto 2022 Autore Segnala Share Inserita: 15 agosto 2022 Grazie infinite per le risposte, provo ad adottare le vostre soluzioni e vi aggiorno sull'esito. Link al commento Condividi su altri siti More sharing options...
cagliostro Inserita: 16 agosto 2022 Segnala Share Inserita: 16 agosto 2022 (modificato) 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. 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 Modificato: 16 agosto 2022 da cagliostro Link al commento Condividi su altri siti More sharing options...
Roberto_M Inserita: 17 agosto 2022 Autore Segnala Share Inserita: 17 agosto 2022 (modificato) Rimanendo in tema, Sfruttando l'indice #DayIndex e il DB Report che ho creato nel PLC. 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. Vorrei evitare di creare 366 volte , le quattro celle in questione. Mi scuso per le domande banali. Grazie mille Modificato: 17 agosto 2022 da Roberto_M Link al commento Condividi su altri siti More sharing options...
Simone.Salarsi Inserita: 17 agosto 2022 Segnala Share Inserita: 17 agosto 2022 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 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 nella tua schermata crei i tuoi campi I/O e li associ alle tag sopra Link al commento Condividi su altri siti More sharing options...
cagliostro Inserita: 17 agosto 2022 Segnala Share Inserita: 17 agosto 2022 Il KTP 700 che hai è un Basic o Comfort? Link al commento Condividi su altri siti More sharing options...
Roberto_M Inserita: 18 agosto 2022 Autore Segnala Share Inserita: 18 agosto 2022 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 More sharing options...
cagliostro Inserita: 18 agosto 2022 Segnala Share Inserita: 18 agosto 2022 (modificato) 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: 18 agosto 2022 da cagliostro Link al commento Condividi su altri siti More sharing options...
Roberto_M Inserita: 20 agosto 2022 Autore Segnala Share Inserita: 20 agosto 2022 Grazie mille per l'aiuto e per aver condiviso un esempio. Tutto funziona avevo sbagliato ad associare il db😀 Link al commento Condividi su altri siti More sharing options...
cagliostro Inserita: 20 agosto 2022 Segnala Share Inserita: 20 agosto 2022 👌 Link al commento Condividi su altri siti More sharing options...
texano Inserita: 15 dicembre 2022 Segnala Share Inserita: 15 dicembre 2022 Ciao, è possibile avere il link del progetto di esempio postato da cagliostro? grazie Link al commento Condividi su altri siti More sharing options...
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