Vai al contenuto
PLC Forum


Calcolo Della Data Di Pasqua - in ST su Telemecanique


Claudio Monti

Messaggi consigliati

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 ;)

Link al commento
Condividi su altri siti

  • 10 months later...

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

Link al commento
Condividi su altri siti

  • 9 months later...

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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

  • 2 weeks later...

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.

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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