Vai al contenuto
PLC Forum


Reset Contatori Produzione Fine Anno


manuelflorio01

Messaggi consigliati

Buongiorno a tutti,

Devo implementare un reset, per dei contatori di produzione, ogni 31 dicembre alle 23.59. Ho provato ad utilizzare i seguenti blocchi:

  • SFC 1 "Read_CLK" per convertire la data del PLC in variabile di tipo DT;
  • FC 9 EQ_DT per confrontare la data letta dal PLC con una data impostata da me (DT#2023-12-31-23:59:59), quando le date sono equivalenti il blocco EQ_DT mi da il valore di ritorno RET_VAL ="1" che vado ad utilizzare per il reset.

Ora il problema è che la variabile DATE_AND_TIME non va bene, perché io ho bisogno solo del Mese-Giorno-Ora e non dell'Anno. 

Esiste un blocco che legge dal PLC solo il mese, il giorno e l'ora?

Avete dei consigli da darmi?

 

Grazie.

-Manuel

Link al commento
Condividi su altri siti


14 minuti fa, manuelflorio01 ha scritto:

perché io ho bisogno solo del Mese-Giorno-Ora e non dell'Anno. 

Esiste un blocco che legge dal PLC solo il mese, il giorno e l'ora?

 

S cusa ma ti è così difficile, una volta acquisita la data e l'ora scartare dal confronto l'anno?

Fai il confronto su mese, giorno, ora e minuti e non confronti l'anno.

Link al commento
Condividi su altri siti

Ciao Livio, chiedo scusa ma non ho capito.

 Io per il confronto ho usato questo blocco FC 9 EQ_DT e devo per forza impostare anche l'anno nella variabile DT. Sbaglio?

 

Link al commento
Condividi su altri siti

Se non ricordo male nel OB1 nei dati temp o static sono già presenti di suo i byte di data e ora. Basta fare un confronto su questi, senza usare FC o SFC..... Quello che potrebbe succedere però riguarda un disallineamento tra ora PLC e ora reale.... Se per qualsiasi motivo il PLC ha ora e o data sbagliata il tuo reset sarà temporalmente sbagliato.

Link al commento
Condividi su altri siti

2 ore fa, manuelflorio01 ha scritto:

Ora il problema è che la variabile DATE_AND_TIME non va bene, perché io ho bisogno solo del Mese-Giorno-Ora e non dell'Anno. 

Puoi anche  solo "estrarre" cosa vuoi tu , ovvero il giorno  o i secondi , o anno

 

Faccio un po di confusione,  a mente , fra tia per il 1200 e step per il 300 , ma ho utilizzato entrambi   , devo solo guardare un esempio , poi fai un confronto e dovresti risolvere .  Se non riesco pome,  domani sarò  da un cliente con il pg , apro il programma e ti giro uno screen

Link al commento
Condividi su altri siti

7 minuti fa, luigi69 ha scritto:

Puoi anche  solo "estrarre" cosa vuoi tu , ovvero il giorno  o i secondi , o anno

 

Esiste un blocco per estrarli?

Link al commento
Condividi su altri siti

1 ora fa, manuelflorio01 ha scritto:

chiedo scusa ma non ho capito.

Il formato Date_And_Time è così composto:

byte 0: Anno

byte 1: Mese

byte 2: Giorno del mese

byte 3: Ora

byte 4: minuti

byte 5: secondi

byte 6: centinaia e decine di ms

byte 7: millisecondi + giorno della settimana

 

Per scoprirlo, bastava andare sul tipo di variabile e premere F1.

I valori sono tutti in BCD.

Non ti servono funzioni particolari, hai già tutto quello che ti serve.

Link al commento
Condividi su altri siti

1 ora fa, drn5 ha scritto:

Se non ricordo male nel OB1 nei dati temp o static sono già presenti di suo i byte di data e ora.

Come li trovo?

Link al commento
Condividi su altri siti

2 minuti fa, batta ha scritto:

Il formato Date_And_Time è così composto:

byte 0: Anno

byte 1: Mese

byte 2: Giorno del mese

byte 3: Ora

byte 4: minuti

byte 5: secondi

byte 6: centinaia e decine di ms

byte 7: millisecondi + giorno della settimana

 

Per scoprirlo, bastava andare sul tipo di variabile e premere F1.

I valori sono tutti in BCD.

Non ti servono funzioni particolari, hai già tutto quello che ti serve.

E come faccio a compararli con una data impostata da me?

 

Scusate ma con step 7 sono nuovo e non sono molto pratico.

Link al commento
Condividi su altri siti

Parlavi di data e ora fissa a fine anno. Adesso parli di data immessa da te. Delle due l'una. Se la immetti tu dipende da come la immetti. Se immetti in campi numerici o stringa. Nel primo caso è un semplice CMP =I nel secondo caso dovrai estrarre i vari campi di giorno, mese, ora, minuti poi convertirli da stringa in numerici e compararli come sopra. Studiati un po' il manuale sennò così ci si mette una vita a spiegarlo...fosse anche solo per una crescita personale...😁

Per leggere la data e ora puoi usare anche SFC1 "READ_CLK"  richiamato in loop dentro OB1

 

Modificato: da drn5
Link al commento
Condividi su altri siti

33 minuti fa, manuelflorio01 ha scritto:

E come faccio a compararli con una data impostata da me?

Non li devi comparare con una data, ma confronti il mese con 12 (dicembre) e il giorno con 31 (ultimo giorno di dicembre).

Potresti anche confrontare solo il mese. Se è dicembre, setti una memoria ritentiva.

Se la memoria ritentiva è TRUE e non è più dicembre, significa che è gennaio (o qualsiasi altro mese dell'anno), ed azzeri sia la memoria, sia i contatori.
Se il PLC può rimanere spento per più di un mese, la memoria di cui sopra la puoi settare per i mesi da luglio a dicembre.

Oppure, ancora meglio, ti memorizzi l'anno dell'ultimo azzeramento (in variabile ritentiva). Se l'anno attuale è maggiore dell'anno dell'ultimo azzeramento, resetti le variabili e memorizzi il nuovo anno dell'ultimo azzeramento.

Se il PLC al passaggio dal 31/12 al 01/01 è acceso, l'operazione viene effettuata alla mezzanotte. Se in quel momento è spento, l'operazione verrà effettuata alla prima accensione dopo la mezzanotte del 31/12.

 

Se, come pare dal tuo ultimo post, l'azzeramento deve avvenire in una data impostata da te (e non al cambio dell'anno come descritto in precedenza), valgono tutti i ragionamenti già fatti, con l'unica differenza che dovrai memorizzare e comparare la data completa e non solo il mese o l'anno.

Modificato: da batta
Link al commento
Condividi su altri siti

9 minuti fa, batta ha scritto:

Non li devi comparare con una data, ma confronti il mese con 12 (dicembre) e il giorno con 31 (ultimo giorno di dicembre).

Potresti anche confrontare solo il mese. Se è dicembre, setti una memoria ritentiva.

Se la memoria ritentiva è TRUE e non è più dicembre, significa che è gennaio (o qualsiasi altro mese dell'anno), ed azzeri sia la memoria, sia i contatori.
Se il PLC può rimanere spento per più di un mese, la memoria di cui sopra la puoi settare per i mesi da luglio a dicembre.

Oppure, ancora meglio, ti memorizzi l'anno dell'ultimo azzeramento (in variabile ritentiva). Se l'anno attuale è maggiore dell'anno dell'ultimo azzeramento, resetti le variabili e memorizzi il nuovo anno dell'ultimo azzeramento.

Se il PLC al passaggio dal 31/12 al 01/01 è acceso, l'operazione viene effettuata alla mezzanotte. Se in quel momento è spento, l'operazione verrà effettuata alla prima accensione dopo la mezzanotte del 31/12.

 

Se, come pare dal tuo ultimo post, l'azzeramento deve avvenire in una data impostata da te (e non al cambio dell'anno come descritto in precedenza), valgono tutti i ragionamenti già fatti, con l'unica differenza che dovrai memorizzare e comparare la data completa e non solo il mese o l'anno.

Si io devo resettare i contatori a fine anno.

Link al commento
Condividi su altri siti

30 minuti fa, batta ha scritto:

Se il PLC al passaggio dal 31/12 al 01/01 è acceso, l'operazione viene effettuata alla mezzanotte. Se in quel momento è spento, l'operazione verrà effettuata alla prima accensione dopo la mezzanotte del 31/12.

Condivido tutto quello che dici batta ma mi sa che la problematica sarà quella avere il PLC acceso per effettuare il reset e tutto sta nel capire come effettuare il reset, forse meglio effettuare il reset appena il PLC carica per la prima volta il mese di Gennaio e la prima volta che carica il mese di Gennaio effettua il reset

Link al commento
Condividi su altri siti

10 ore fa, leleviola ha scritto:

forse meglio effettuare il reset appena il PLC carica per la prima volta il mese di Gennaio e la prima volta che carica il mese di Gennaio effettua il reset

Sì ma, se per tutto gennaio (per quanto improbabile) il PLC rimanesse spento, il reset verrebbe fatto al prossimo gennaio. Con il sistema che ho descritto, se la prima accensione del PLC avviene anche nei mesi successivi a gennaio, in quel momento verrebbe fatto il reset.

 

9 ore fa, manuelflorio01 ha scritto:

Grazie a tutti ho risolto.

Farebbe piacere sapere come.

Link al commento
Condividi su altri siti

23 ore fa, batta ha scritto:

Sì ma, se per tutto gennaio (per quanto improbabile) il PLC rimanesse spento, il reset verrebbe fatto al prossimo gennaio. Con il sistema che ho descritto, se la prima accensione del PLC avviene anche nei mesi successivi a gennaio, in quel momento verrebbe fatto il reset.

giusto @batta, non avevo letto bene cosa avevi scritto

Link al commento
Condividi su altri siti

1 ora fa, acquaman ha scritto:

Ma non basta guardare l'anno, quando cambia l'anno azzero i contatori. Fine.

Esatto, come avevo proposto.
La soluzione di @manuelflorio01 è inutilmente complicata e non è per niente sicura. Funziona solo se il PLC in quel determinato momento è in funzione. Se è spento, si aspetta un altro anno sperando che sia in funzione.

Link al commento
Condividi su altri siti

1 ora fa, batta ha scritto:

Esatto, come avevo proposto.
La soluzione di @manuelflorio01 è inutilmente complicata e non è per niente sicura. Funziona solo se il PLC in quel determinato momento è in funzione. Se è spento, si aspetta un altro anno sperando che sia in funzione.

Quello che dici è vero, cioè se in quell'istante manca la tensione al PLC non resetta il contatore, ma ti posso garantire che con le batterie che abbiamo in centrale ho un autonomia di 8 ore e con tutti i combinatori telefonici che abbiamo, la centrale la riavviamo velocemente. Quindi in questo caso non ho problemi ad impostare una data anziché dell'anno, ma ne terrò presente per le prossime centrali che andò a modificare.

Grazie per i vostri consigli. 😃

Link al commento
Condividi su altri siti

1 ora fa, manuelflorio01 ha scritto:

ne terrò presente per le prossime centrali che andò a modificare.

Semplifica tutto e rendilo anche più sicuro.
Crea una memoria ritentiva dove memorizzi solo l'anno.

Leggi l'anno dalle variabili tempo in OB1.

Se l'anno che leggi è diverso dall'anno memorizzato, salvi gli archivi, azzeri i valori da azzerare, e salvi l'anno nella variabile ritentiva.

In questo modo non solo diventa tutto più facile (una sola comparazione), ma anche più sicuro: anche se il PLC rimanesse spento per mesi, appena va in run trova l'anno diverso ed esegue le operazioni.
Se proprio vuoi ritardare di qualche secondo l'azzeramento rispetto all'archiviazione (ma ti serve solo se utilizzi funzioni che richiedono più di una scansione per essere completate), lo fai con un timer, o quando ti arriva il segnale che le precedenti operazioni sono state portate a termine.

Link al commento
Condividi su altri siti

10 minuti fa, batta ha scritto:

Semplifica tutto e rendilo anche più sicuro.
Crea una memoria ritentiva dove memorizzi solo l'anno.

Leggi l'anno dalle variabili tempo in OB1.

Se l'anno che leggi è diverso dall'anno memorizzato, salvi gli archivi, azzeri i valori da azzerare, e salvi l'anno nella variabile ritentiva.

In questo modo non solo diventa tutto più facile (una sola comparazione), ma anche più sicuro: anche se il PLC rimanesse spento per mesi, appena va in run trova l'anno diverso ed esegue le operazioni.
Se proprio vuoi ritardare di qualche secondo l'azzeramento rispetto all'archiviazione (ma ti serve solo se utilizzi funzioni che richiedono più di una scansione per essere completate), lo fai con un timer, o quando ti arriva il segnale che le precedenti operazioni sono state portate a termine.

Sisi tutto chiaro. Condivido la vostra idea.

Ancora Grazie per il vostro tempo.

Link al commento
Condividi su altri siti

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