dovrei far partire un impianto di allarme autocostruito dalle ore 22.00 alle 06.00 tutti i giorni con un S7200 cpu221.
Scusami paghy , ma non ti sembra eccessivo usare una CPU S7-200 , come orologio giornaliero e basta?
Spero che serva ad altro.
In linea di massima , l'orologio della CPU funziona sempre , anche in assenza di tensione , fin tanto che il condensatore tampone regge , poi si ferma pure l'orologio
L'orologio , assume un valore , sino a quando qualcuno non lo reimposta con l'istruzione SET_RTC.
Questo comando , molto ben spiegato nel manuale in linea , lo si esegue una sola volta , e gli viene passato un parametro in formato byte che è l'indirizzo iniziale di memoria da cui leggere gli otto bytes dei valori di impostazione.
Facciamo l'esempio in cui tu fornisci all'istruzione SET_RTC il parametro di ingresso l'indirizzo di memoria MB100
Il formato del buffer di 8 byte (T) a partire da MB100 ed includendo anche MB100 diventa:
Byte T Descrizione Dati del byte
0 anno (0-99) anno attuale (valore BCD) MB100
1 mese (1-12) mese attuale (valore BCD) MB101
2 giorno (1-31) giorno attuale (valore BCD) MB102
3 ora (0-23) ora attuale (valore BCD) MB103
4 minuti (0-59) minuti attuali (valore BCD) MB104
5 secondi (0-59) secondi attuali (valore BCD) MB105
6 00 riservato – (impostato sempre a 00) MB106
7 giorno della settimana (1-7) giorno della settimana attuale, 1=domenica (valore BCD) MB107.
I valori in annotazione BCD che sono contenuti nel buffer specificato vengono sovrascritti nell'area di memoria dell'orologio.
Ovviamente qui valori li devi metter tu prima di avviare il comando SET_RTC.
Altrettanto ovvio che questa operazione deve essere eseguita in "one-shot" della durata di un solo ciclo di scansione.
Per leggere invece l'orologio si usa il comando READ_RTC.
Fondamentalmente questa funzione , usa la stessa procedura della precedente , si assegna l'indirizzo di memoria per il buffer di 8 byte , ed a fine esecuzione , in quel buffer vengono sovrascritti i valori istantanei dell'orologio.
Stessa mappa precedente e stessa annotazione.
I due buffer devono avere un indirizzo inziale diverso e non sovrapporsi.
A differenza della precedente , la lettura può eseguire ogni volta che serve o anche ciclicamente usando il richiamo in nel blocco MAIN o in una routine di interrupt a tempo o dove ti pare.
E' sufficiente solo che tu utilizzi questo comando una sola volta nell'intero programma.
Una volta letta l'ora , con dei confronti a byte ; minore di , maggiore di , minore o uguale , maggiore o uguale , e con una opportuna stesura del codice , attivi le funzioni che ti interessano con della semplice logica combinatoria.
Se ti serve un esempio , fammi un fischio che lo scrivo.
Dimmi però come intendi modificare le impostazioni orologio , è previsto l'intefacciamento ad un pannello? Quale?
Imposterai l'ora una volta sola e poi basta?
Come cambi i valori di confronto per accendere e spegnere l'allarme?
E' un gioco , un esercizio, o una applicazione reale?