Jump to content
PLC Forum

stefano_

Utilizzo giorno ed ora

Recommended Posts

stefano_

Salve a tutti,

premetto che sono a digiuno di programmazione,

dovrei realizzare un programmino semplice semplice in somachine 3.1 per un scu655 

il problema è che dovrei attivare un uscita il lunedì e martedì dalle 9:00 alle 11:00

ho provato a leggere qualcosa nel manuale ma non ho capito un granché !!!

Anzi diciamo che non ho capito nulla !!?

Grazie

 

Link to post
Share on other sites

stefano_

salve a tutti,

allora ho provato a studiare ancora un pò ma purtroppo non riesco ancora a venirne a capo.

In Pratica tramite la funzione "systimertcget" acquisisco l'utc in secondi dal 01/01/1970 poi tramite la funzione "SYSTIMERTCCONVERTUTCTODATE" converto questo valore

in una struttura di tipo "SYSTIMEDATE" e quindi a questo punto mi ritrovo data.wHour data.wsecond ecc.... ecc.. tutto bene se non che la data corrisponde 04/06/2004 e l'ora è un ora avanti a quella attuale.

Ora per l'ora probabilmente si tratta di settare l'ora legale ( come ) ma per la data  ? credo che dovrei "aggiustare" la data in base alla mia posizione utilizzando la funzione

SYSTIMERTCSETTIMEZONE ma non riesco a capire come !

 

Grazie a tutti.

 

Link to post
Share on other sites
Water

non facile risponderti in due/dieci righe ...

però anche in SoMachine 3.1 c'è un esempio quasi pronto che fa al caso tuo

ciao

Link to post
Share on other sites
stefano_

si lo so .... sono 3 giorni che leggo e rileggo quelle due pagine !!!! nell'esempio read plc time c'è solo il blocco funzione systimertcget e poi systimertcconvertutctodate e con quest'ultima funzione viene popolata la struttura ma non riesco a capire perche come data mi da 2004 !!

Grazie

Link to post
Share on other sites
stefano_

piccolo aggiornamento/ richiesta,

guardando l'esempio ho visto che devo settare l'ora quindi attraverso i blocchi move ho "caricato" i dati in una struttura di tipo SYSTIMEDATE.

il problema è che nell'esempio che ho il blocco systimertcset ha come ingresso il valore di secondi da impostare ed ha anche un ingresso enable,

nel mio blocco systimertcset invece NON ho l'ingresso enable !

Mi sapete dire dove sbaglio ?
Grazie.

Link to post
Share on other sites
Water

la data/ora la prende direttamente dal PLC che è collegato per cui devi aggiornarla,

nell'esempio cè anche questo, guardalo bene e vedrai che c'è tutto,

per l'enable: tasto destro sul blocco per abilitarlo (vedi manuale)

ciao

Link to post
Share on other sites
stefano_

ciao water e grazie.... ma tasto destro ho "rimuovi parametri non utilizzati " e "aggiornare i parametri" ma anche aggiornando non cambia nulla, l'enable NON esce fuori , anche andando nell'. in linea nell'esempio che trovo l'enable NON c'è,

l'enable lo trovo solo nel pdf di esempio !!!.

l'esempio che sto guardando io  è  questo in pratica:

nel rung 1 leggo la data del plc ( la data che leggo dove la prende ?  )

nel rung 2 converto / inserisco la data in una struttura di tipo systimedate

nel rung 3 sposo ogni singolo valore della struttura nella relativa varibile di tipo UINT ( ma a quale scopo  ? )

nel rung 4 c'è scritto "cambio ora plc ed è qui dove vado a mettere una variabile gia popolata in una nuova struttura

nel rung 5 converto questa nuova struttura in una variabile di tipo dword

nel rung 6 mi assicuro che la conversione sia andata a buon fine ed in caso positivo alzo un bit

nel rung 7 con questo bit abilito il "settaggio" della nuova data nel plc ( cosa che non riesco a fare perche non ho l'enable ) !!!!

ed infine nel rung 8 resetto il bit

 

Mi rendo conto che mi sto affogando in un bicchiere d'acqua  ma non riesco proprio a capire !!!

 

Grazie a tutti.

Link to post
Share on other sites
Water

ti rispondo al volo

prima di tutto .. sei collegato al PLC On-line? ... sei in modalità simulazione?

l'ora che vedi è presa direttamente dal PLC se sei collegato oppure è un dato di default ma non vedo il problema!

l'esempio serve appunto per regolare l'ora su quella che vuoi tu alla stregua di un normale orologio ..

 

capisco ora che stai usando il Ladder (io non lo uso mai) da qui l'incompresione sull'enable,

non sono un esperto di Ladder perchè non mi piace ma per inserire l'enable:

Strumenti  > Generale > Inserisci modulo con EN/ENO (EN sta ovviamente per Enable)

in CFC invece è più semplice perchè è come ti dicevo,

 

l'esempio è funzionante e non capisco perchè non lo usi così com'è senza riscriverlo,

purtroppo ho la versione di SoMachine 4.2 per cui sicuramente è cambiato qualcosa ...

ciao

Link to post
Share on other sites
stefano_

Ciao e grazie infinite.

io uso sm 3.1 il problema non è che non voglio usare l'esempio ma non mi funzia.

Quindi il procedimento sarebbe:

- acquisire la data con get

- converti questo calore in una struttura di tipo systemdate utilizzando convertutctodate 

- modificare l'ora muovendo delle variabili all'interno di un'altra struttura sempre di tipo t

- convertire questa seconda struttura utilizzando convertdatetoutc 

- infine dettare la nuova data plc con systimrtcset . 

è tutto corretto ?? Perché a me non va domani se riesco faccio altre prove !!!!

comunque di sono in online e sto simulando ed ho visto che se inserisco il blocco set non vedo più il valore UTC incrementare !

sara colpa di quel maledetto Enable ?

geazie grazie grazie ? 

 

Link to post
Share on other sites
Water

strano perchè quando avevo la versione 3.1 l'esempio funzionava benissimo,

comunque ho sempre usato la versione in CFC .. con il ladder non so .. prova a caricare la versione CFC,

la procedura è esattamente quella dell'esempio

 

non ho capito una cosa:

sei on-line con il PLC nel senso che gli hai scaricato il programma e sei quindi andato on-line?

oppure sei in modalità simulazione nel senso che il PLC non c'è è stai appunto simulando?

 

nel secondo caso non puoi scrivere sul PLC perchè non c'è,

si appoggia al datatime del PC ma non può funzionare

ciao

 

Link to post
Share on other sites
stefano_

No no ,

ho fisicamente il plc collegato !!

ma non va !!

quindi devo caricare la data modificarla con quella attuale  è serre nel plc la data nuova giusto ?

graZie

Link to post
Share on other sites
Water

ci provo anche se come dicevo non è semplice senza avere il tuo file e quindi non so cosa stai facendo,

le procedure sono due e distinte tra loro una si occupa di leggere l'ora del PLC l'altra di scriverla/sovrascriverla,

sono ben distinte e con blocchi funzione dedicati, non sono complementari e puoi usarne anche solo una a seconda di quello che ti serve,

per leggere si usa il blocco funzione SysTimeRtcGet che poi andrà trasformato,

per scrivere invece si usa il blocco SysTimeRtcSet, e questomi sembra che sia chiaro,

 

per scrivere però non devi "caricare" la data e poi modificarla ma ricostruirla a parte,

ti crei delle variabili per ogni valore (MyNewYear, MyNewMonth, MyNewHour ...) le trasformi con SYSTIMEDATE,

e poi con il blocco funzione SysTimeRtcSet vai a sovrfascrivere il valore nel PLC, Stop!

ho semplificato, ovviamente dovrai seguire le indicazioni dell'esempio per i pezzi mancanti,

 

nota:

nella mia versione che è la 4.2, ho avuto un problema di funzionamento,

scoprendo per caso (non documentato) che SYTIMEDATE è stato sostituito con RTS_SYSTIMEDATE,

ma non so se con la tua versione è la stessa cosa ...

ciao

Link to post
Share on other sites
stefano_

Ciao e grazie,

si a grandi linee è quello che faccio.

nel PDF che ho linkato l'esempio sta a pag 41

accidebti non riesco a capire dove sbaglio ,

domani posto un immagine del mio programma cosa vedi se noti qualcosa di "strano"

grazie ancora

Link to post
Share on other sites
stefano_

ecco,

se riesci a dirmi cosa combino te ne sarei veramente molto grato....

in pratica già il primo blocco (SYSTIMERTCCONVERTDATETOUTC) se il bit "resetora" è alto ( e lo è ) mi dovrebbe restituire il valore utc corretto della data 04/02/2018 ore 10:22 invece mi restiuisce (4294967295) che convertito in data è 07/02/2016 ore 07:28:15 !!!

quindi già la prima istruzione ha qualcosa che non va.

 

Grazie infinite.

imm0.jpg

imm1.jpg

imm_2.jpg

Link to post
Share on other sites
Water

..non uso il Ladder perchè non sopporto la confusione che crea .. ma è un mio limite,

 

vedo che non ci sono tutti i passaggi soprattutto la costruzione della data da sovrascrivere,

per esempio la tua variabile "x_Anno" diventa "Nuova_Data.wYday" che a naso sembra più il giorno dell'anno che l'anno stesso, fai una verifica,

poi la scrittura del nuovo valore deve avvenire con un impulso resettato subito dopo e non in continuo come fai tu (vedi SYSTIMERTCSET),

insomma devi inserire tutto il programma con la dichiarazione delle variabili altrimenti diventa difficile interpretarlo

ciao

Link to post
Share on other sites
stefano_
49 minuti fa, Water scrisse:

nsomma devi inserire tutto il programma con la dichiarazione delle variabili altrimenti diventa difficile interpretarlo

nella prima foto puoi vedere la dichiarazione delle variabili.

 

Il programma per ora è tutto quì,x_Anno è inizializzato a 2018 e con il bit resetOra muovo questo valore  nell'elemento della struttura nuova_data.

In pratica con i move vado a popolare l'intera struttura nuova_data con giorno- mese - anno - ora - minuti - secondi.

 

Sbaglio ?

 

Grazie.

 

Link to post
Share on other sites
stefano_
52 minuti fa, Water scrisse:

poi la scrittura del nuovo valore deve avvenire con un impulso resettato subito dopo e non in continuo come fai tu (

si ci avevo pensato anche io ma non riesco ad inserire quel maledetto enable nel blocco SYSTIMERTCSET  !!!!

 

Grazie.

Link to post
Share on other sites
zanellatofabio

In Ladder : Inserisci un MOVE , click su MOVE e scrivi al suo posto SYSTIMERTCSET
Io anni fa, la gestione dell'orologio l'avevo fatta su un blocco in cfc, non cambia molto, avevo sempre usato l'EN.
In ladder a volte, per inserire delle cose, bisognava fare qualche acrobazia.
Ciao e buon lavoro.

 

sys1.jpg

Link to post
Share on other sites
stefano_

Diavolo, adesso quasi funzione !!!!

ma che cavolo possibile devo inserire un move per inserire l'enable su sistimertcset ?????????? :blink:

Grazie infinite, comunque ho detto che quasi funziona perche con il get leggo 1517906128 che corrisponde alle 9:35 di oggi invece convertendo questo valore con convertutctodate mi restituisce le 8:36 praticamente un ora indietro credo che sia dovuto al settaggio ora legale/solare giusto ? ( almeno spero )

Come posso cambiarla  ?

grazie.

Link to post
Share on other sites
Water

..bene!! :thumb_yello:

non non è l'ora legale ma il riferimento a UTC Time in pratica l'ora di Greenwich

un'ora in meno appunto

ciao

Link to post
Share on other sites
stefano_

Ecco allora sto punto a capo !!!

Domandine:

-Come faccio ad impostare la MIA ora attuale ? Con rtcdrift? Come ?

 

- Quindi posso inserire questo codice solo per esempio se il ciclo è " il primo ciclo" in modo tale che setto l'ora corretta che utilizzato nella mia applicazione.

giusto ?

 grazie infinite !!! 

 

 

Link to post
Share on other sites
Water

non ti seguo ...

per farla breve e se quanto hai fatto funziona aggiungi un'ora a quella che leggi

Link to post
Share on other sites
stefano_

non me ne vogliate !! non riesco ancora a capire se funziona e perché !!

per esempio ora nel primo rung ho  tre move, ho cambiato data . poi ho inserito l'enable anche al quarto rung ( blocco convert date to utc )

alzando un bit con il suo fronte effettuo il move ma poi sotto alzando un altro bito con il suo fronte mi si dovrebbero aggiornare i secondi ( INTENDO QUELLI DEL QUARTO RUNG ) invece ciò non accade, mi ritrovo sempre 4294967295 invece se cambio data effettuo il move quel numero dovrebbe cambiare

quindi anche all'ingresso del blocco set ho 4294967295 che corrisponde al 07/02/2016  ore 07:28  ( ma io ho settato con i move la data a 06-02-2018 19:02

invece nel blocco get mi ritrovo magicamente 1517940868 che è il valore corretto ( ho provato a fare la conversione con questo sito )

infine se tramite il blocco convertutctodate converto questo valore 1517940868  ( che ripeto risulta essere giusto ) mi ritrovo data corretta ma un ora indietro !!!

 

Non so più quello che fare !! se riesco provo a fare un video per farvi vedere !!

 

Grazie.

Link to post
Share on other sites
zanellatofabio

Sinceramente anche io non riesco a seguirti, inoltre somachine 3 sono anni che non lo uso più e al momento ho la testa in tutta altra cosa.

Qui MyController.Plc Logic.Application.OROLOGIO il blocco esportato che avevo fatto io per leggere e scrivere l'orologio del plc.
Lo puoi importare e poi vedere se ti può essere utile per schiarirti le idee.

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...