Vai al contenuto
PLC Forum


CONTA ORE S7-1200


Messaggi consigliati

Inserito:

Buongiorno sto creando un conta ore! in pratica devo solo contare le ore di funzionamento di due resistenze e due valvole! sto usando il merker di sistema 1hz per contare secondo per secondo e poi in modo da avere minuti e ore.. ho un problema dopo aver configurato la cpu e attivato i merker di sistema sui merker 4.1 ecc.. il merker non esegue nessun lampeggio e il mio contatore non può contare! volevo chiedervi qualcuno ha mai usato il contaore già presente sul tia? cosa mi consigliate ? GRAZIE A TUTTI


Simone.Salarsi
Inserita:

dopo aver attivato i clock di sistema hai scaricato la configurazione hardware nel PLC ?

 

hai verificato che tu non stia sovrapponendo quei merker ad altre variabili ? magari stai già usando quelle aree con byte, word o dword per altre cose.

 

Per quanto riguarda il contaore presente sul tia cosa intendi ?

 

 

Inserita:

esiste un blocco fb già creato da siemens chiamato conta ore di esercizio .. lo avete mai usato?

Simone.Salarsi
Inserita:

non conosco quel blocco, potresti linkarlo ?

Inserita: (modificato)
48 minuti fa, MARCO9777 ha scritto:

conta ore di esercizio

Sul TIA non lo trovo, è un blocco di qualche libreria?

Modificato: da acquaman
Inserita:

Ma scusa per fare un contaore c'è bisogno di n fc dalla libreria?

 

Inserita:

rinnovo l'osservazione di Simone

7 ore fa, Simone.Salarsi ha scritto:

dopo aver attivato i clock di sistema hai scaricato la configurazione hardware nel PLC ?

capita, uno è convinto , e si dimentica , sai quante volte....

 

se Marco puoi rispondere a questa domanda

 

conti con il fronte di salita e appoggi in una dint

poi dividi per 3600 e ti escono le ore

Inserita:
1 ora fa, STEU ha scritto:

Ma scusa per fare un contaore c'è bisogno di n fc dalla libreria?

Sono d'accordo.

 

Per fare un contaore sfruttando il clock di un secondo ci sono, in linea di massima, due modi:
1) incrementare i secondi; arrivati a 60 secondi, si azzerano i secondi e si incrementano i minuti; arrivati a sessanta minuti, si azzerano i minuti e si incrementano le ore.

2) incrementare un contasecondi assoluto e poi, con semplici calcoli, suddividere il totale in ore:minuti:secondi.

 

Personalmente preferisco il secondo sistema, sia perché richiede meno operazioni, sia perché il contatore assoluto dei secondi è di facile utilizzo se si devono fare comparazioni dei tempi di lavoro.
Mettendo il contasecondi su una variabile UDInt, si arriva fino ad oltre 136 anni. Se non bastasse 🤪, usando una ULInt, si arriva ad oltre 584 miliardi di anni. Considerando che l'età dell'universo è di circa 14 miliardi di anni, anche contando il tempo a partire dal big bang, ci rimarrebbero ancora circa 570 miliardi di anni prima di arrivare all'overflow della variabile.

 

Esempio di come potrebbe essere, con contasecondi totali e suddivisione in giorni, ore, minuti, secondi:

IF #RisingEdgeClock_1s THEN
    #actCntSec += 1;
END_IF;

// Calcolo giorni (1 giorno = 86400 secondi)
#giorni := UDINT_TO_UINT(#actCntSec / 86400);
// Calcolo secondi di resto
#tmpResto := #actCntSec MOD 86400;
// Calcolo ore (divido i secondi di resto per 3600)
#ore := UDINT_TO_USINT(#tmpResto / 3600);
// Calcolo secondi di resto
#tmpResto := #tmpResto MOD 3600;
// Calcolo minuti (divido i secondi di resto per 60)
#minuti := UDINT_TO_USINT(#tmpResto / 60);
// Calcolo secondi
#secondi := UDINT_TO_USINT(#tmpResto MOD 60);

 

La variabile "actCntSec" deve essere dichiarata come IN/OUT, e deve essere una variabile statica e ritentiva.
 

Inserita:

A me piace di più leggere l'ora e fare la differenza con un'ora memorizzata quando deve partire il conteggio.

Inserita:
10 minuti fa, acquaman ha scritto:

A me piace di più leggere l'ora e fare la differenza con un'ora memorizzata quando deve partire il conteggio.

Dipende da cosa devi fare. Se è per avere le ore di funzionamento di un dispositivo, dovresti continuamente lavorare suoi fronti per memorizzare l'istante di avvio e di arresto, e tenere in memoria l'ultimo valore raggiunto al quale sommare la differenza tra l'ora attuale e l'ora dell'ultimo avviamento.
Inoltre, se cambi l'ora del PLC (es. passaggio da ora solare a ora legale), ti falsa il risultato.
 

Nel caso di incremento di un contatore, ti basta condizionare l'incremento allo stato di funzionamento del dispositivo.

Inserita:

L'esempio di @batta usando i moduli mi sembra molto chiaro, lo utilizzavo nei programmi per PC quella modalità.

A me è capito qualche volta che non funzionavano i MB di sistema dopo aver cambiato l'indirizzo nonostante il caricamento, per risolverlo dovevo resettare a condizione iniziale e poi caricare la configurazione.

 

Inserita:

In un OB ad interrup di un minuto metti un segmento come questo

 

Dryer.jpg

Inserita:

GRAZIE A TUTTI! HO RISOLTO IL TUTTO CON MERKER DI CLOCK! EFFETTIVAMENTE STAVO COMMETTENDO UN ERRORE SENZA ACCORGERMENE!

IL BLOCCO DI CUI VI PARLAVO SI CHIAMA CONTA ORE DI ESERCIZIO, è un fb chiamato "RTM".

Inserita:

Istruzione che reputo inutile e più complicata da utilizzare dei contaore proposti negli esempi.

Inserita:
Il 7/4/2022 alle 18:46 , batta ha scritto:

Se è per avere le ore di funzionamento di un dispositivo, dovresti continuamente lavorare suoi fronti per memorizzare l'istante di avvio e di arresto

Non è cosi complesso, poi integrato dentro il blocco dei motori, fatto una volta fatto per tutti.

Il 8/4/2022 alle 11:51 , MARCO9777 ha scritto:

è un fb chiamato "RTM"

Per curiosità vado a vederlo.

Inserita:

Lascia stare RTM, prima di tutto ne hai uno solo e poi per utilizzarlo per i tuoi scopi ti complichi la vita più che a fartelo.

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