Vai al contenuto
PLC Forum


Cambio Ora Legale Solare Con S7300 - Come si cambia in automatico l'ora


franxi

Messaggi consigliati

:P Mi serve una famosa FC che automaticamente cambia l'ora legale con quella solare nei PLC siemes S7-300.

Per cortesia inviatela a franxi_at_tiscali.fr

Grazie

Modificato: da franxi
Link al commento
Condividi su altri siti

  • 6 months later...

  • Risposte 51
  • Created
  • Ultima risposta

Top Posters In This Topic

  • gramma

    8

  • Slims83

    7

  • kamikaze

    6

  • jack69

    6

Guardando di qua e di là, ho visto che la SFC100 possiede un flag per ora legale/solare, ma l'. è abbastanza enigmatico (almeno x me)...se qualcuno che ha già qualche esperienza di utilizzo si facesse avanti glie ne sarei grato, altrimenti aspetterò il prossimo equinozio per vedere se funziona o meno.... :P

Grazie e Ciao a tutti

Link al commento
Condividi su altri siti

Tempo fa ho scritto una routine che assolve a questa funzione, proprio per siemens S7! B)

Non sapevo che esistesse un blocco standard della siemens. Comunque la mia funziona, provata ed applicata gia più volte. Bisogna solo fare attenzione ai parametri (è una FB) e lanciare i comandi di controllo da OB100 e da OB10.

Questa funzione tra l'altro integra anche la visualizzazione e la regolazione dell'orologio di sistema (utilizzando le SFC della CPU).

Se qualcuno ne ha bisogno, saro felice di inviarla. ;)

Link al commento
Condividi su altri siti

Se qualcuno ne ha bisogno, saro felice di inviarla. 

Beh, se la mettessi nell'area download sarei felice di scaricarmela.... :D

fa sempre piacere vedere soluzioni diverse allo stesso problema, anche perché chissà come funge l'SFC100...

comunque sui piccoli EASY800 della Moeller il cambio automatico dell'ora si imposta direttamente dalla configurazione hardware...perché il potente s7-300 non lo fa anche lui in maniera così immediata???? <_<

Link al commento
Condividi su altri siti

  • 2 weeks later...

X GRAMMA

Stavo provando il tuo programma..

Il cambio tra ora solare e ora legale è OK

Il cambio tra ora legale e ora solare invece mi da uno strano problemino..

In OB10 ho impostato la frequenza giornaliera alle 03:01, per provarlo faccio cosi::

l’ora attuale è 28/09/04 10:00:00

imposto 21/11/04 03:00:30 e la funzione aggiorna l’ora..

dopo 30 secondi interviene l’OB10 che alza il Bit Legale_Chk e l’ora anziché diventare:

21/11/04 02:01:00 diventa 20/11/04 00:01:00…

Ti è mai capitato??

Link al commento
Condividi su altri siti

Ciao a tutti.

Grazie per averla usata e grazie per avermi riportato degli errori. SCUSATE!!!

Una correzione dell'utlimo momento (sul genere -così è più elegante-) senza averla testata, ha provocato un errore, me ne sono accorto oggi che l'ho installata su una macchina. Comunque, di seguito le correzioni:

SEG. 1

CALL "READ_CLK"

RET_VAL:=#Ret_Value

CDT :=#Data

L LD 0

T DID 6

L LW 4 -- Correzione

T DIW 10 ----------------

L LB 7 ----------------

L B#16#F ----------------

UW ----------------

T #G_Settimana -- Correzione

L #G_Settimana

L B#16#F

UW

L 1

==I

= #Sunday

L #Ora

BTI

L 60

*I

L #Minuti

BTI

+I

T #MinMidNight

per SLIMS83:

Ho controlato la funzione al livello in cui l'orario torna a solare (lo puoi controllare anche tu, sta nel segmento 6), e non mi sembra ci sia nulla che può provocare l'errore che mi hai descritto. Probabilmente dipende dal segmento 1 (qui sopra riportato). Fammi sapere please.

Ciao

Link al commento
Condividi su altri siti

Ciao

L LD x significa: carica (in ACCU 1) il dato locale dall'indirizzo x (quelli dell'erea TEMP) in formato Double (32bit)

T DID x significa: Trasferisci (ciò che è in ACCU1) nel dato della DB di istanza (quella associata a questo FB al momento dell'esecuzione) all'indirizzo x in formato Double (32bit)

L LW x come sopra ma in formato Word (16bit)

Ecc. ecc.

Non ti fidare troppo della correzione, prova la routine e fammi sapere se tutto è ok.

Ciao!!!

Link al commento
Condividi su altri siti

Per GRAMMA

Forse ho trovato il mio problema ( anche se cosi fosse, non andrebbe a nessuno! ..qiundi probabilmente sbaglio..)

tu usi le funzioni INC e DEC, prima di queste trasformi #Ora_In da BCD ad INT col la funzione BTI

Il manuale però dice che INC e DEC servolo per la matematica a 8 bit e non a 32 o 16 ( nel nostro caso 16 perche è stato convertito in INT )

quindi si dovrebbe usare la funzione +I e -I...

provo e ti faccio sapere..

Link al commento
Condividi su altri siti

Praticamente succede questo..

con la funzione DEC mi da un risultato assurdo ( tipo 554.. )

il segmento successivo ( Seg 7 ) controllando l'ora la vede maggiore di 24 e quindi mi imposta l'ora a 0 e il giorno al giorno attuale+1..

comunque ho risolto sostituendo:

DEC 1

con:

L #Ora_In

BTI

L 1

-I

Ricarico il valore #Ora_In e lo riconverto perchè altrimenti la sottrazione la farebbe con lo 0.. ( usato per il confrono Ora_In <> 0.. )

comunque cosi a me funziona..

se a voi funziona anche senza queste modifiche tanto meglio!!!

Buon lavoro a tutti

Link al commento
Condividi su altri siti

GRANDE Slims83!!!

Hai individuato un difetto che non avevo mai notato! :o

La tua spiegazione però non mi convince: l'istruzione DEC lavora si solo su 8 bit, ma qui tutti i valori sono in byte, quindi non ci dovrebbe essere il problema (il controllo <>0 lo faccio prima di decrementare per evitare l'underflow). Non quadra invece l'istruzione successiva: B#16#24 significa 24H non 24BCD! quindi il confronto successivo genera un risultato sbagliato, provocando così l'incremento del giorno e l'azzeramento dell'ora).

Non ho ancora trovato una soluzione valida per questo segmento, ma domani certo farò la correzione.

Grazie. Ciao!

Link al commento
Condividi su altri siti

l'istruzione DEC lavora si solo su 8 bit, ma qui tutti i valori sono in byte

non mi risulta.. tu carichi l'ora ( formato BCD ) e poi esegui l'operazione BTI ossia da BCD trasforma in INT ( quindi 16 bit.. )

Link al commento
Condividi su altri siti

X Slims86

non mi risulta.. tu carichi l'ora ( formato BCD ) e poi esegui l'operazione BTI ossia da BCD trasforma in INT ( quindi 16 bit.. )

Nelle CPU Siemens (e credo anche nelle altre per PLC), i dati vengono caricati nell'accumulatore sempre utilizzando tutto lo spazio disponibile (cioè 32 bit), altrimenti avremmo dei PLC che eseguono programmi vettorizzati (cosa che fa p.e. il CRAY2, ma quello è un main-frame...).

Avere un dato in un byte, significa che il valore che la variabile può assumere, non eccede mai dal valore massimo che può essere scritto in un byte, non che questa variabile viene caricata dalla CPU in 8bit e gli altri restano al valore precedente.

Quindi, anche se i comandi BTI e TBI agiscono su 16bit, il nostro dato di origine occupava solo (al max.) 8bit (valore compreso fra 0 e 23),il risultato sarà ancora compreso in 8 bit (o meglio, gli 8bit più significativi saranno a 0), visto che 23 (val.max.) si scrive su 2 digit di BCD, quindi 8bit. Infatti, il risultato della conversione, e le successive elaborazioni, sono sempre memorizzate in una variabile byte!

L'erroe è sicuramente nel confronto successivo! Siemens eseque i confronti solo in sormato binario, non si può paragonare un BCD con un Hex (binario), sarebbe come chiedere se va più forte il treno o è più alto il campanile :) !

Adesso cerco una soluzione a quel segmento.

Ciao.

Link al commento
Condividi su altri siti

Ciao

Ok, trovato.

Nel segmento 7:

H000: L #Ora_In

L B#16#24

<I

....

modificare in:

H000: L #Ora_In

L 24

ITB

<I

....

Potete provare per favore?

Grazie

Ciao

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