Vai al contenuto
PLC Forum


Alzare Un Bit Esattamente Ad Ogni Ora


virgolanera

Messaggi consigliati

So che per voi sarà una banalità.. ma sto avendo dei problemi ad ottenere semplicemente questa cosa: alzare un bit a 1 (diciamo un M0.0 che poi mi servirà per fare delle cose) esattamente allo scoccare di ogni ora.

Ho provato ad usare un contatore che si incrementa ad ogni ciclo di 1 sec (nell'OB35, che mi cicla a 1s). Arrivato al valore corrispondente ad un'ora, faccio alzare l'M0.0, ma in questo modo non riesco a fare una cosa precisa, perche anticipo ogni ora di un numero consistente di secondi.

Sarebbe allora meglio usare l'orologio del plc (che pure comunque non è preciso)? Leggere l'ora e quando scatta la nuova ora alzare l'M0.0 In tal caso quale sarebbe la procedura? Dovrei utilizzare l'SFC1 (read clock). Come faccio però a considerare l'esatto momento in cui scatta l'ora?

Grazie

Link al commento
Condividi su altri siti


Non uso il 300 ma credo che se riesci a leggere l'orologio di sistema ogni volta che i minuti saranno a 0 e i secondi saranno a 0 il tuo M0.0 =1 quindi verifichi in serie minuti e secondi poi lo resetti

Link al commento
Condividi su altri siti

Nel 300, se non ricordo male, puoi impostare un byte (ad esempio MB0) che fa oscillare i suoi bit per tempi predeterminati (se non sbaglio un bit anche con cadenza un secondo. Adesso utilizzi quel bit per incrementare un contatore che arriva a 3600 o che deconta da 3600 a zero e al raggiungimento del set alzi il bit resettando poi tutto, pronto per il conteggio successivo.

Link al commento
Condividi su altri siti

Se fossi in Te userei una base tempi più precisa, quindi farei ciclare l'OB35 a 100 ms (oppure a 10 / 20 ms se ti serve ulteriore precisione) e incrementerei il contatore ogni 36000 conteggi (360000 / 180000 nel caso più preciso ancora).

Utilizzare il merker di clock dedicato della Cpu in fondo è la stessa cosa, se non utilizzi una base tempi molto bassa, ti porta ad errori consistenti.

Link al commento
Condividi su altri siti

Mi aggiungo all'elenco dei suggerimenti.

Io utilizzerei l'allarme dall'orologio (trovi il tab nelle proprietà della cpu). In pratica l'OB10 viene richiamato con una cadenza che puoi scegliere tu (ogni minuto, ogni ora, ecc.) e in più, impostando opportunamente l'ora di partenza, puoi avere il richiamo esattamente quando scocca l'ora o in qualsiasi altro minuto a tua scelta.

Ciao.

Massimo

Link al commento
Condividi su altri siti

grazie per le risposte. E' piu o meno quello che facevo io. Utilizzavo l'OB35 che però mi ciclava a un secondo. Provo ad abbassare il tempo di ciclo e invece di contare fino a 3600 conterò fino al valore corrispettivo... per cercare di avere una maggiore precisione..

Link al commento
Condividi su altri siti

Ho provato ad usare il byte di clock (per me il m150.0) ma non rispetta assolutamente i tempi indicati dal manuale. Provo ad usare il bit che si alza ogni mezzo secondo o ogni due decimi, ma sballa completamente... :(

Direi che ora provo ad utlizzare l'allarme dell'orologio.. con l'OB10. L'ho impostato in maniera che deve intervenire una volta all'ora.. Come faccio ora ad utilizzare questo allarme?? Viene alzato qualche bit specifico??

Link al commento
Condividi su altri siti

Gianmario Pedrani

No viene!! Viene eseguito il codice che risiede nell ob10...

e come l'ob35.. il numero del ob ha una funzione ben precisa.

Link al commento
Condividi su altri siti

giusto..

Mi si ponte un problema di altro tipo.. a me arriva correttamente l'impulso ogni ora che mi alza un bit (per un tempo di ciclo?). (anche se poi c'è da discutere sulla correttezza dell'orologio della cpu).

Se con quel bit devo abilitare un'operazione aritmetica che sta ina certa FCx (addizione, sottrazione fra due valori), come si fa a dire alla logica di fare quell'operazione una sola volta e non per tutta la durata del tempo in cui quel bit è alzato a 1 ?

(Scusate se per qualcuno sono banalità!)

Link al commento
Condividi su altri siti

fare quell'operazione una sola volta e non per tutta la durata del tempo in cui quel bit è alzato a 1 ?

con la transizione positiva, cioe al rilevamento del fronte positivo cioe che passa da 0 a 1

Link al commento
Condividi su altri siti

No, in questo caso specifico la transizione positiva non funziona perchè OB10 viene richiamato una volta sola.

La cosa migliore è settare un bit in OB10 (supponiamo M0.0), poi quando sei nel tuo FC fai una cosa di questo tipo:

U M0.0

R M0.0

SPBN M1

....

operazioni assortite

.....

M1: resto del programma

Ciao.

Massimo

Modificato: da bleny
Link al commento
Condividi su altri siti

in questo caso specifico la transizione positiva non funziona perchè OB10 viene richiamato una volta sola

Si giusto, ho detto una cosa sbagliata!

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