Vai al contenuto
PLC Forum


Lettura Orologio Sistema


PinokkioPLC

Messaggi consigliati

Buonasera, sto utilizzando per la prima volta, in un mio programmino, l'orologio di sistema, in particolare ho la necessità di rilevare se l'orario è compreso tra le 2 e le 2,25 ho implementato la soluzione che riporto di seguito, ma mi chiedo è questo l'unico modo o meglio il modo corretto di procedere?

Ovvero bisogna giocare con dei confronti, una volta sulle ore e poi sui minuti per far ricadere l'indicazione dell'orologio di sistema, nell'intervallo di tempo che a noi interessa?

9618ab107fe05ab550e887361b0bfa33.png

GRAZIE per l'eventuale aiuto, ciao.

Link al commento
Condividi su altri siti


Ciao

non conosco bene il ladder, hai la possibilita' di simulare il funzionamento ?

la riga cosi' compilata dovrebbe mantenere a ON tra le 2 e 2,25.

quale e' lo scopo? fare piu' interventi giornalieri?

nel casi ci metti dovresti fare piu' linee del genere e poi una bella OR in fondo per l'attuazione del rele'

Link al commento
Condividi su altri siti

quale e' lo scopo? fare piu' interventi giornalieri?

Ciao lo scopo è che in base a delle fasce orarie (4 diverse fasce orarie) un numero intero tra 1 e 4 mi dovrà essere caricato con la funzione MOVE nella variabile #SegnaleZonaIrrigazione, variabile che poi andrò ad utilizzare in altri blocchi, dunque questa è una prima FB che sto creando per un progetto più grande.

Però è la prima volta che utilizzo l'orologio di sistema e vorrei sapere se quello di incastrare con dei confronti ORE e MINUTI dell'orologio di sistema, in un intervallo, è il metodo giusto, oppure si utilizzano altri modi di procedere.

Link al commento
Condividi su altri siti

quello che dici funziona se inizio e fine sono nella stessa ora (confronto dei minuti nella stessa ora)

Si a me serve questa cosa, in quanto le fasce orarie devono essere di 25 minuti, va bene la mia soluzione?

E nel caso in cui le fasce orarie dovessero essere ad esempio di 90 minuti, potrei sempre andare a combinare confronti per arrivare alla soluzione, considerando degli OR, tipo se devo considerare dalle 2 alle 3,30, potrei fare "dalle 2 fino alle 3" OR "dalle 3 fino alle 3,30" giusto?

Link al commento
Condividi su altri siti

Potresti anche convertire la data-ora del sistama (in formato DTL) in ora del giorno (TOD) con l'istruzione T_CONV.

L'ora del giorno (TOD) in realtà non è altro che un doppio intero che contiene i millisecondi trascorsi dalla mezzanotte.

Essendo un doppio intero, puoi usare le normali istruzioni di comparazione per fare confronti (non devi fare conversioni di formato: le istruzioni di comparazione accettano direttamente il formato TOD).

Questo metodo ti risulta comodo perché le variabili dichiarate come TOD, anche se come appena detto in realtà sono delle DINT, vengono visualizzate (anche sul pannello operatore) nel formato hh:mm:ss.ms.

Quindi su un eventuale pannello operatore potresti impostare i vari orari di inizio e fine in modo molto comodo.

Una volta che hai, tutte in formato TOD, ora attuale, impostazione ora inizio e impostazione ora fine, per attivare l'attuatore ti basta fare due comparazioni: OraAttuale >= OraInizio AND OraAttuale < OraFine.

L'unica cosa che richiede un po' di attenzione, è se devi impostare eventi a cavallo della mezzanotte, dove l'ora di fine è antecedente l'ora di inizio.

Link al commento
Condividi su altri siti

Ok allora proverò anche questa soluzione ;)

PS: In linea di massima il procedimento che stavo implementando sarebbe stato giusto?

Link al commento
Condividi su altri siti

PS: In linea di massima il procedimento che stavo implementando sarebbe stato giusto?

In linea di massima, sì.

Diventa però di non facile gestione se devi gestire eventi con inizio e fine che non sono della stessa ora.

Per esempio, se desideri l'accensione alle ore 2:50 e lo spegnimento alle ore 3:20, devi aggiungere altre comparazioni.

Se usi l'ora del giorno in formato TOD non devi fare comparazioni separate per ore e minuti, e questo rende tutto molto più semplice.

Link al commento
Condividi su altri siti

Diventa però di non facile gestione se devi gestire eventi con inizio e fine che non sono della stessa ora.

Per esempio, se desideri l'accensione alle ore 2:50 e lo spegnimento alle ore 3:20, devi aggiungere altre comparazioni.

In effetti per gestire orari tra diverse ore sarebbe stata più incasinata la cosa, perchè ci sarebbero voluti anche dei rami OR come dicevo nel messaggio #5.

Se usi l'ora del giorno in formato TOD non devi fare comparazioni separate per ore e minuti, e questo rende tutto molto più semplice.

Da domani riprendo il progetto e provo questa soluzione ;)

Link al commento
Condividi su altri siti

Potresti anche convertire la data-ora del sistama (in formato DTL) in ora del giorno (TOD) con l'istruzione T_CONV.

L'ora del giorno (TOD) in realtà non è altro che un doppio intero che contiene i millisecondi trascorsi dalla mezzanotte.

Essendo un doppio intero, puoi usare le normali istruzioni di comparazione per fare confronti (non devi fare conversioni di formato: le istruzioni di comparazione accettano direttamente il formato TOD).

Questo metodo ti risulta comodo perché le variabili dichiarate come TOD, anche se come appena detto in realtà sono delle DINT, vengono visualizzate (anche sul pannello operatore) nel formato hh:mm:ss.ms.

Quindi su un eventuale pannello operatore potresti impostare i vari orari di inizio e fine in modo molto comodo.

Una volta che hai, tutte in formato TOD, ora attuale, impostazione ora inizio e impostazione ora fine, per attivare l'attuatore ti basta fare due comparazioni: OraAttuale >= OraInizio AND OraAttuale < OraFine.

L'unica cosa che richiede un po' di attenzione, è se devi impostare eventi a cavallo della mezzanotte, dove l'ora di fine è antecedente l'ora di inizio.

Sto cercando di implementare questa soluzione, modificando nel seguente modo la mia FB:

3cd1f734328d915d7b3477c3440352cb.png

Però adesso non mi è ben chiara una cosa..... ovvero quale dovrà essere il parametro del confronto, perchè a me serve una fascia oraria compresa tra le 2 e le 2,25, però batta parla di millesecondi trascorsi dalla mezzanotte, dunque se dovessi calcolare le 2 di notte, ovvero 2 ore dalla mezzanotte in millisecondi, mi viene un mostro di numero da inserire nelle istruzioni di confronto come costante, dunque come dovrei procedere?

PS: Ho pensato ad una possibile strategia, però questa mi allunga di molto la funzione.... allora sempre con delle T_CONV mi converto delle variabili Time (che mi rappresentano gli orari di inizio e fine fascia orario) in delle variabili Time_Of_Day, in modo da utilizzare queste nelle successione operazioni di confronto.

Però siccome a me servono 4 fasce orarie:

2->2,25

2,30->2,55

3->3,25

3,30->3,55

Dovrei andare prima ad effettuare 8 conversioni con delle T_CONV cosa ne pensate?

Modificato: da PinokkioPLC
Link al commento
Condividi su altri siti

... però batta parla di millesecondi trascorsi dalla mezzanotte ...

Hai saltato un pezzo della spiegazione di Batta:

le variabili dichiarate come TOD, anche se come appena detto in realtà sono delle DINT, vengono visualizzate (anche sul pannello operatore) nel formato hh:mm:ss.ms.

Inoltre dal manuale:

Il tipo di dati TOD (TIME_OF_DAY) occupa una doppia parola e salva, come numero intero senza segno, il numero dei millisecondi a partire dalla mezzanotte (ore: 0:00).

Campo di valori: TOD#00:00:00.000 ... TOD#23:59:59.999

Esempio: TOD#10:20:30.400, TIME_OF_DAY#10:20:30.40

Le indicazioni relative a ora, minuti e secondi sono obbligatorie. L'indicazione dei millisecondi è opzionale.

Quindi non devi far altro che lavorare con variabili TOD oppure con costanti anteponendo TOD#

Link al commento
Condividi su altri siti

Capito :thumb_yello: in tal modo mi si snellisce un bel pò la mia FB.... dopo 1 ora di lavoro procedendo come avevo pensato mi era uscito un mostro di FB :( , adesso ho aggiustato un pò tutto e mi sn risparmiato 8 segmenti utilizzati per le conversioni di inizio e fine fascia orario.

PS: Drugo non potevi rispondermi verso le 8, mi risparmiavi ore di "rompicapi mentali"........ scherzo :lol: GRAZIE come sempre per l'aiuto

Link al commento
Condividi su altri siti

Michele invece tu non ceni vero? A furia di guardar l'orologio di sistema hai perso la cognizione del tempo quello vero :roflmao: :roflmao:

:roflmao::roflmao:

Ciao Matteo, purtroppo tra studio e lavoro, mi ci posso dedicare solo la sera :( il PLC è la mia PlayStation, la mia Tv serale.... ;)

PS: Però alla cena non rinuncerei mai........ :roflmao::roflmao:

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