Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Calcolo Della Data Di Pasqua - in ST su Telemecanique


Messaggi consigliati

Inserito:

Il calcolo della data di Pasqua e' un po' particolare.

Nell'esempio che riporto e' stato sviluppato su Premium Telemecanique, la formula e' comunque esportabile ed utilizzabile in tutti i PLC.

!

(*Calcolo Pasqua*)
(*by Claudio Monti*)

IF App_cambio_anno<>Secolo_anno THEN SET Abil_calc_pasqua;END_IF;    (*Al cambio anno*)
App_cambio_anno:=Secolo_anno;
App_anno_decimale:=((App_cambio_anno/16#00FF)/16*1000)+(App_cambio_anno AND 16#00FF);    (*Passaggio anno in ESA->DEC*)
IF Abil_calc_pasqua THEN
    A_easter:=App_anno_decimale/100;
    B_easter:=App_anno_decimale REM 100;
    C_easter:=(3*(A_easter+25))/4;
    D_easter:=(3*(A_easter+25))REM 4;
    E_easter:=(8*(A_easter+11))/25;
    F_easter:=(5*A_easter+B_easter)REM 19;
    G_easter:=(19*F_easter+C_easter-E_easter)REM 30;
    H_easter:=(F_easter+11*G_easter)/319;
    J_easter:=(60*(5-D_easter)+B_easter)/4;
    K_easter:=(60*(5-D_easter)+B_easter)REM 4;
    M_easter:=(2*J_easter-K_easter-G_easter+H_easter)REM 7;
    N_easter:=(G_easter-H_easter+M_easter+114)/31;
    P_easter:=(G_easter-H_easter+M_easter+114)REM 31;
    Day_easter:=P_easter+1;
                Month_easter:=N_easter;
    RESET Abil_calc_pasqua;
END_IF;

App_mesegiorno:=(N_easter*256)+(Day_easter/10*16)+(Day_easter REM 10);    (*Riassegnazione MeseGiorno in ESA*)

Spiegazione del codice:

La variabile Secolo_anno e' una variabile di sistema interna al PLC (%SW53) espressa in BCD.

Il valore dell'anno da passare alla formula deve essere convertito in decimale.

Il calcolo viene eseguito solo 1 volta all'anno, nel momento di cambio data.

In fondo c'e' la riassegnazione dei dati trovati in esadecimale, potete comunque utilizzare Day_easter e Month_easter cosi' come sono in decimale.

Spero sia tutto chiaro ;)

  • 10 months later...

Inserita:

ciao, analizzavo il codice ed non conoscendo nulla di Telemecanique e trovando poco o nulla su internet chiedevo cosa significa la dicitura REM 100 , REM 30 ...

TIPO "B_easter:=App_anno_decimale REM 100;"

GRAZIE

Michele

Inserita:

REM = remainder

è il resto di una divisione

è l'equivalente dell'istruzione MOD (modulo) su Unity ed altri software

Inserita:

Ciao

ma per svilupparlo in ladder (omron CJ1), come potrei procedere?

  • 9 months later...
Inserita:

Si ne sarei interessato anche io, si può svilupparlo in ladder? O il Ladder ha dei limiti...

Inserita:

Non so come funzioni l'Omron, ma per il ControlLogix5000 basta rifare le stesse operazioni descritte da Claudio Monti in Ladder. Non ho ancora testato il tutto su una PLC, quindi ci potrebbe essere quanlche inesattezza.... :blink: In allegato il PDF del ladder.

CalcoloPasqua.PDF

Inserita:

.... ovviamente tutte la variabili sono dichiarate come INTeger, così che una divisione (DIV) dia come risultato solo la parte intera......

Inserita:

Scusa ma ovviamente non sono alivelli molto avanzati, ma mi sembra di capire che col Logo di Siemens questo Ladder quà non lo posso realizzare.... :unsure:

Inserita:
Scusa ma ovviamente non sono alivelli molto avanzati, ma mi sembra di capire che col Logo di Siemens questo Ladder quà non lo posso realizzare....

Non conosco bene il LOGO, ma guardando il manuale non mi sembra di aver visto funzioni matematiche "pure", solo quelle legate all'analogico.

  • 2 weeks later...
Inserita:

Scusa mi faccio vivo adesso perchè internet purtroppo mi va e mi viene non ho l' adsl ma quella Wifire per cui spesso ho problemi, mi dispiace non poter essere intervenuto prima, comunque se cei sempre in ascolto ti chiedo: ma che programmazione sarebbe quella con funzioni matematiche pure, cioè io conosco nomi tipo List, AWL ecc.... ma il linguaggio sopra mi ricorda tanto quando programmavo in Basic, potresti dirmi di che programmazione si tratta ciao e grazie.

Inserita:

si tratta del linguaggio ST = Structured Text (in questo esempio è per PLC Schneider Electric)

se sei più avvezzo a PLC Siemens corrisponde al linguaggio S7-SCL (Structured Control Language)

Sono linguaggi che credo derivino dal Pascal

  • 2 weeks later...

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