Horloge système Passage en heure ETE/HIVER
Posté : 14 févr. 2016, 15:27
Slts,
Met l’horloge du système à l’heure d’été le dernier Dimanche du mois de Mars
Met l’horloge du système à l’heure d’hiver le dernier Dimanche du mois de Octobre
Ci dessous les éléments pour faire un type FB dérivé sur Unity
cliquer dessus pour agrandir la photo (* FB THIVER Section Master *)
(* Heure d'été le dernier dimanche du mois de mars à 2h >> +1h *)
(* Heure d'hiver le dernier dimanche du mois de Octobre à 3h >> -1h *)
IF NOT Valid THEN
RETURN;
END_IF;
(* Passage à l'heure d'été de l'horloge automate *)
W0:=%SW50;
W1:=%SW51;
W2:=%SW52;
W3:=%SW53;
(* formule *)
W4:=31;
W6:=3;
W7:=BCD_TO_INT(W3);
W8:=(14-W6)/12;
W9:=W7-W8;
W10:=W6+12*W8-2;
(* Cherche le jour du dernier dimanche du mois de Mars *)
WHILE MOD(W4+W9+W9/4-W9/100+W9/400+31*W10/12,7)>0 DO
W4:=W4-1;
END_WHILE;
(* Le W4 Mars à 2h *)
W11:=16#0200;
W12:=16#0300+INT_TO_BCD(W4);
(* TOP passage à l'heure d'été *)
M1:=(W1=W11) AND (W2=W12) AND W4>0 AND NOT M1m;
(* MISE API A L'HEURE D'ETE +1h *)
IF M1 THEN
W1:=W1+16#0100;
DateAndTime[0]:=W0;
DateAndTime[1]:=W1;
DateAndTime[2]:=W2;
DateAndTime[3]:=W3;
DATE_TIME:=ARINT_TO_DT(DateAndTime);
WRTC_DT(DATE_TIME);
END_IF;
(* Passage à l'heure d'hiver de l'horloge automate *)
W0:=%SW50;
W1:=%SW51;
W2:=%SW52;
W3:=%SW53;
(* formule *)
W5:=31;
W6:=10;
W7:=BCD_TO_INT(W3);
W8:=(14-W6)/12;
W9:=W7-W8;
W10:=W6+12*W8-2;
(* Cherche le jour du dernier dimanche du mois de Octobre *)
WHILE MOD(W5+W9+W9/4-W9/100+W9/400+31*W10/12,7)>0 DO
W5:=W5-1;
END_WHILE;
(* Le W5 Octobre à 3h *)
W11:=16#0300;
W12:=16#1000+INT_TO_BCD(W5);
(* TOP passage à l'heure d'été *)
M2:=(W1=W11) AND (W2=W12) AND W5>0 AND NOT M2m;
(* MISE API A L'HEURE D'ETE +1h *)
IF M2 THEN
W1:=W1-16#0100;
DateAndTime[0]:=W0;
DateAndTime[1]:=W1;
DateAndTime[2]:=W2;
DateAndTime[3]:=W3;
DATE_TIME:=ARINT_TO_DT(DateAndTime);
WRTC_DT(DATE_TIME);
END_IF;
M1m:=M1;
M2m:=M2;
Met l’horloge du système à l’heure d’été le dernier Dimanche du mois de Mars
Met l’horloge du système à l’heure d’hiver le dernier Dimanche du mois de Octobre
Ci dessous les éléments pour faire un type FB dérivé sur Unity
cliquer dessus pour agrandir la photo (* FB THIVER Section Master *)
(* Heure d'été le dernier dimanche du mois de mars à 2h >> +1h *)
(* Heure d'hiver le dernier dimanche du mois de Octobre à 3h >> -1h *)
IF NOT Valid THEN
RETURN;
END_IF;
(* Passage à l'heure d'été de l'horloge automate *)
W0:=%SW50;
W1:=%SW51;
W2:=%SW52;
W3:=%SW53;
(* formule *)
W4:=31;
W6:=3;
W7:=BCD_TO_INT(W3);
W8:=(14-W6)/12;
W9:=W7-W8;
W10:=W6+12*W8-2;
(* Cherche le jour du dernier dimanche du mois de Mars *)
WHILE MOD(W4+W9+W9/4-W9/100+W9/400+31*W10/12,7)>0 DO
W4:=W4-1;
END_WHILE;
(* Le W4 Mars à 2h *)
W11:=16#0200;
W12:=16#0300+INT_TO_BCD(W4);
(* TOP passage à l'heure d'été *)
M1:=(W1=W11) AND (W2=W12) AND W4>0 AND NOT M1m;
(* MISE API A L'HEURE D'ETE +1h *)
IF M1 THEN
W1:=W1+16#0100;
DateAndTime[0]:=W0;
DateAndTime[1]:=W1;
DateAndTime[2]:=W2;
DateAndTime[3]:=W3;
DATE_TIME:=ARINT_TO_DT(DateAndTime);
WRTC_DT(DATE_TIME);
END_IF;
(* Passage à l'heure d'hiver de l'horloge automate *)
W0:=%SW50;
W1:=%SW51;
W2:=%SW52;
W3:=%SW53;
(* formule *)
W5:=31;
W6:=10;
W7:=BCD_TO_INT(W3);
W8:=(14-W6)/12;
W9:=W7-W8;
W10:=W6+12*W8-2;
(* Cherche le jour du dernier dimanche du mois de Octobre *)
WHILE MOD(W5+W9+W9/4-W9/100+W9/400+31*W10/12,7)>0 DO
W5:=W5-1;
END_WHILE;
(* Le W5 Octobre à 3h *)
W11:=16#0300;
W12:=16#1000+INT_TO_BCD(W5);
(* TOP passage à l'heure d'été *)
M2:=(W1=W11) AND (W2=W12) AND W5>0 AND NOT M2m;
(* MISE API A L'HEURE D'ETE +1h *)
IF M2 THEN
W1:=W1-16#0100;
DateAndTime[0]:=W0;
DateAndTime[1]:=W1;
DateAndTime[2]:=W2;
DateAndTime[3]:=W3;
DATE_TIME:=ARINT_TO_DT(DateAndTime);
WRTC_DT(DATE_TIME);
END_IF;
M1m:=M1;
M2m:=M2;