Vai al contenuto

Come attivare un trigger su ultimo giorno del mese

Home Forum Terminali operatore (Weintek) Come attivare un trigger su ultimo giorno del mese

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #36089
    Luca
    Partecipante

    Avrei la necessità su un terminale Weintek di storicizzare un dato (Il valore di un contatore di kWh) alle 23:59 dell’ultimo giorno di ogni mese. Non ho avuto nessuna difficoltà finora nell’effettuare tale operazione tramite macro utilizzando il giorno 1 di ogni mese, ma come procedere nel caso si voglia effettuare tale operazione l’ultimo giorno di ogni mese, dato che i vari mesi possono avere un numero di giorni diverso l’uno dall’altro ? Ho tentato con una sorta di comparazione sempre tramite macro tramite operazioni logiche del tipo:

    “domani=oggi+1”

    “se domani < di oggi allora” oggi è l’ultimo giorno del mese

    Ma il terminale non tiene conto della data successiva effettiva (cioè non effettua una reale comparazione tra la data odierna e quella successiva) ed incrementa di 1 il valore “domani” indistintamente se “oggi” è il 30 oppure il 31, sicchè il valore diventa rispettivamente 31 e 32 il che ovviamente è sbagliato. Probabilmente qualcosa mi sfugge, come poter ovviare al problema ?

    #39801
    Sergio Bertana
    Amministratore del forum

    Puoi creare nella macro un array di 12 short con l’indicazione dei giorni di ogni mese:

    esempio short mese[12] mese[0]=31 mese[1]=28. . .

    Poi esegui un getdata della LW del mese e la usi per trovare nell’array i giorni del mese. Naturalmente ti rimane il problema dell’anno bisestile ma ci sono in rete algoritmi per determinare se l’anno è bisestile oppure no.

    Il calendario gregoriano prevede che ogni anno perfettamente divisibile per 100, ad esempio 1900, sia un anno bisestile solo se perfettamente divisibile anche per 400. Ecco un esempio di calcolo su di un nostro sistema SlimLine (Stampa programma).

    LeapYear:=((MOD(Year, 4) = 0) AND (MOD(Year, 100) <> 0) OR (MOD(Year, 400) = 0));

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.