Vai al contenuto
PLC Forum


Gestione Data Ora - Op <-->plc Cpu226 unita con altra discussio - Attivazione evento da Orol. Hardw. PLC e lettura/scritura ora e data


Gaker

Messaggi consigliati

Salve,

Avrei il problema di gestire delle funzioni che si attivano una volta al giorno in un ora precisa e leggere e far vedere la data attuale (se non è quella giusta allora modificarla da Pannello).

Ulteriore problema è quello che la memoria del PLC è al limite, quindi non posso aggiungere librerie già pronte per far questo, posso usare istruzioni semplici tipo Leggi/imposta data dal PLC , quindi le istruzioni già a disposizione da MicroWin, la cpu che uso è una 226 DC.

Il problema che trovo è che quando cerco di andare a leggere solo l'ora per poi fare un confronto con l'ora che voglio attivare l'evento.. non riesco a farlo.. non riesco a fare i confronti, forse per i tipi diversi di formato???

Grazie per le vostre risposte.

Cordiali Saluti.

Modificato: da Gaker
Link al commento
Condividi su altri siti


l'ora viene letta in formato BCD

quindi la dovrai per forza trasformare nel formato a te preferito

ci sono blocchi funzione già pronti per questa soluzione

ciao

Link al commento
Condividi su altri siti

ciao a tutti... volevo sapere se sapete come funziona e si usa l' orologio hardwer nella cpu s7 200...

dove si trova la tabella bcd di cui parla la guida in linea???????

come faccio a impostare e a leggere l'orario????

Grazie ciao.

Link al commento
Condividi su altri siti

Ciao,

Non ho nessun problema nella lettura e trasformazione della data/ora per farmi le mie operazioni.

Il problema che trovo è che nell IMPOSTARE la data dell'orologio HW con l'istruzione SET_RTC (facendo un "P") su un evento; io agisco così (e non sò se sia giusto, anche perchè faccio il contrario della lettura che funziona):

1) Leggo una VWX da pannello esempio VW640=>ANNO e lo trasformo usando l'istruzione I_BCD (anche perchè da Byte a BCD mi sembra non si possa direttamente) appoggiandola in una VW708 (la trasformazione quindi in BCD è in VW708, giusto?).

2) Trasformo usando I_B (trasfomazione da Intero a Byte) la VW708 contenente l'intero BCD, quindi alla fine mi aspetto un Byte in BCD da caricare nel posto giusto, in questo caso nel Byte iniziale da passare all'istruzione "SET_RTC" (che ne prende 8) e io imposto tutti tranne gli ultimi 2 che sono Riservato e giorno della settimana, e mi sembra di aver letto nel Forum che non è neccessario impostarli.. giusto??

3) Chiamo l'istruzione SET_RTC passandoli in pasto l'indirizzo iniziale degli 8 byte in BCD (5 dei quali impostati come detto sopra).

Questo però non funziona dandomi un messaggio del tipo "Errori di dati in TODW o TODR, non facendo niente di quello desiderato.

dove stò sbagliando?? come si potrebbe fare???

Grazie.

Link al commento
Condividi su altri siti

SOLUZIONE COMPLETA PER READ AN SET OROLOGIO HARDWARE CPU 226:

Per chi dovesse trovarsi nella mia situazione

1) LEGGERE : usare l'istruzione READ_RTC; mettendo in T l'indirizzo iniziale di 8 Byte liberi da usare, esempio: VB660.

2) A partire dall'indirizzo VB660 per 8 Byte si troveranno le seguenti informazioni:---> Zero (0) corrisponderà esempio a VB660, UNO (1) a VB661, ecc ecc

Byte T Descrizione Dati del byte

0 anno (0-99) anno attuale (valore BCD)

1 mese (1-12) mese attuale (valore BCD)

2 giorno (1-31) giorno attuale (valore BCD)

3 ora (0-23) ora attuale (valore BCD)

4 minuti (0-59) minuti attuali (valore BCD)

5 secondi (0-59) secondi attuali (valore BCD)

6 00 riservato – impostato sempre a 00

7 giorno della settimana (1-7) giorno della settimana attuale, 1=domenica (valore BCD)

Per poter usarli come si vuole in formato decimale bisogna trasformarli.. io usato questa soluzione e funziona:

a) Prendo la VB660 (corrispondente all'anno) e faccio una trasformazione del tipo B_I mettendola in VW650.

B) Prendo VW650 e faccio una trasformazione del tipo BCD_I per trasformare da BCD in Intero (per poi poter usarlo come al solito)... NB: in VW650 hai già il valore intero alla fine.

c) Faccio le stesse cose se mi serve per il mese, giorno, ora, min., sec.... mettendole in variabili simili.

ED E' TUTTO PER LA LETTURA

Per quanto riguarda l'impostazione del Orologio Hardware... si usa l'istruzione SET_RTC con un fronte di salita a evento.. resettandolo dopo se necessario l'evento.

Nel mio caso io prendevo dei valori da un Pannello operatore che non è il TD200, e mettevo dentro delle variabili tipo VWord il valore corrispondente per poi trasformarlo en darlo in pasto al SET_RTC.

1) Prendevo la variabile corrispondente esempio all'anno --> VW632 e la trasformavo facendo un I_BCD (non posso usare un byte perchè trasformare a BCD si può solo a partire da un'Intero) mettendola in VW708 (per esempio).

2) Prendo la VW708 e faccio una trasformazione del tipo I_B per trasformarla in Byte(BCD) e la metto nel primo Byte degli 8 che deve prendersi l'istruzione SET_RTC.

3) faccio questo per tutto il resto.. e NB: in giro si dice che non è neccessario impostare il giorno della settimana.. questo è falso (se non lo facevo mi dava l'errore di sopra).. io ho messo costantemente a uno il Byte 7 (per l'impostazione ).

4) Chiamo l'istruzione SET_RTC con un fronte di salita a evento... ed è tutto.

Si potrebbe far così come ho fatto io.. quando uno trova una soluzione funzionante ad un problema.. di scrivere per bene la soluzione sotto.. cos' ci evitiamo inutili tempi di ricerche..

Saluti a tutti Voi.

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