Bonsoir,
Voici un exemple réalisé sur mon Raspberry Pi avec CODESYS V3 pour gérer un thermostat d'ambiance de chaudière.
1°) Ajouter bibliothèque : SysTimeRtc (Catégorie System - Syslibs)
2°)
Déclaration des variables -----------------------------------------
VAR
Bidon:UDINT;
DateHeure:SYSTIMEDATE;
Jour_Semaine:STRING(10);(*Jour de la semaine*)
// Heure française
Heure_Fr: UINT; (*Heure internationnale + 1*)
Heures: UINT; (* coordinated universal time : Heure internationnale*)
Minutes: UINT;
Secondes: UINT;
Angle:WORD;
Ch_Heures:STRING(2); (*Heures pour affichage sur écran*)
Ch_Minutes:STRING(2); (*Minutes pour affichage sur écran*)
Ch_Secondes:STRING(2); (*Secondes pour affichage sur écran*)
Ch_Annee: STRING(4);
Ch_Mois:STRING(9);
Ch_Jour:STRING(2);
Ch_Date:STRING(26);
Ch_Heure:STRING(12);
END_VAR
------------------------------------------------------------------------------
3°)
Programme --------------------------------------
(*Ajouter bibliothèque : SysTimeRtc (Catégorie System - Syslibs)*)
(*Lecture Date et heure*)
Temps:=SysTimeRtcGet(pResult:=Bidon);
SysTimeRtcConvertUtcToDate(dwTimestampUtc:=Temps , pDate:=DateHeure );
(*Affichage jour de la semaine*)
CASE DateHeure.wDayOfWeek OF
1:Jour_Semaine:='Lundi';Jour_Semaine_Aff:='Lun ';
2:Jour_Semaine:='Mardi';Jour_Semaine_Aff:='Mar ';
3:Jour_Semaine:='Mercredi';Jour_Semaine_Aff:='Mer ';
4:Jour_Semaine:='Jeudi';Jour_Semaine_Aff:='Jeu ';
5:Jour_Semaine:='Vendredi';Jour_Semaine_Aff:='Ven ';
6:Jour_Semaine:='Samedi';Jour_Semaine_Aff:='Sam ';
7:Jour_Semaine:='Dimanche';Jour_Semaine_Aff:='Dim ';
END_CASE
(*Heure française*)
Heure_Fr:=DateHeure.wHour+1;
Heures:=DateHeure.wHour;
Minutes:=DateHeure.wMinute;
Secondes:=DateHeure.wSecond;
(*Affichage formaté des heures*)
IF Heure_Fr<10 THEN
CASE Heure_Fr OF
0:Ch_Heures:='00';
1:Ch_Heures:='01';
2:Ch_Heures:='02';
3:Ch_Heures:='03';
4:Ch_Heures:='04';
5:Ch_Heures:='05';
6:Ch_Heures:='06';
7:Ch_Heures:='07';
8:Ch_Heures:='08';
9:Ch_Heures:='09';
END_CASE;
ELSE
Ch_Heures:=UINT_TO_STRING(Heure_Fr);
END_IF;
(*Affichage formaté des Minutes*)
IF Minutes<10 THEN
CASE Minutes OF
0:Ch_Minutes:='00';
1:Ch_Minutes:='01';
2:Ch_Minutes:='02';
3:Ch_Minutes:='03';
4:Ch_Minutes:='04';
5:Ch_Minutes:='05';
6:Ch_Minutes:='06';
7:Ch_Minutes:='07';
8:Ch_Minutes:='08';
9:Ch_Minutes:='09';
END_CASE;
ELSE
Ch_Minutes:=UINT_TO_STRING(Minutes);
END_IF;
(*Affichage formaté des Secondes*)
IF Secondes<10 THEN
CASE Secondes OF
0:Ch_Secondes:='00';
1:Ch_Secondes:='01';
2:Ch_Secondes:='02';
3:Ch_Secondes:='03';
4:Ch_Secondes:='04';
5:Ch_Secondes:='05';
6:Ch_Secondes:='06';
7:Ch_Secondes:='07';
8:Ch_Secondes:='08';
9:Ch_Secondes:='09';
END_CASE;
ELSE
Ch_Secondes:=UINT_TO_STRING(Secondes);
END_IF;
(*Affichage de la date*)
Ch_Annee:=UINT_TO_STRING(DateHeure.wYear);
(*Affichage des mois en lettres*)
CASE DateHeure.wMonth OF
1:Ch_Mois:='Janvier';
2:Ch_Mois:='Février';
3:Ch_Mois:='Mars';
4:Ch_Mois:='Avril';
5:Ch_Mois:='Mai';
6:Ch_Mois:='Juin';
7:Ch_Mois:='Juillet';
8:Ch_Mois:='Août';
9:Ch_Mois:='Septembre';
10:Ch_Mois:='Octobre';
11:Ch_Mois:='Novembre';
12:Ch_Mois:='Décembre';
END_CASE
(*Affichage foraté du jour*)
IF (DateHeure.wDay)<10 THEN
CASE (DateHeure.wDay) OF
0:Ch_Jour:='00';
1:Ch_Jour:='01';
2:Ch_Jour:='02';
3:Ch_Jour:='03';
4:Ch_Jour:='04';
5:Ch_Jour:='05';
6:Ch_Jour:='06';
7:Ch_Jour:='07';
8:Ch_Jour:='08';
9:Ch_Jour:='09';
END_CASE;
ELSE
Ch_Jour:=UINT_TO_STRING(DateHeure.wDay);
END_IF;
Ch_Heure:=CONCAT(Ch_Heures,' : ');
Ch_Heure:=CONCAT(Ch_Heure,Ch_Minutes);
Ch_Heure:=CONCAT(Ch_Heure,' : ');
Ch_Heure:=CONCAT(Ch_Heure,Ch_Secondes);
Ch_Date:=CONCAT(CH_Jour,' ');
Ch_Date:=CONCAT(Ch_Date,Ch_Mois);
Ch_Date:=CONCAT(Ch_Date,' ');
Ch_Date:=CONCAT(Ch_Date,Ch_Annee);
Ch_Date:=CONCAT(' ',Ch_Date);
Ch_Date:=CONCAT(Jour_Semaine,Ch_Date);
----------------------------------------------------------------------------------
Seules les 2 premières lignes du programme sont utiles pour récupérer la date et l'heure dans une structure de type "SYSTIMEDATE" (voir bibliothèque).
Les reste me sert à afficher les différents éléments sur un écran.
Par contre, de base, l'heure et la date ne sont pas mise à jour quand le raspberry est non alimenté. Il faudrait ajouter une carte Horloge avec une pile.
En espérant que ceci vous aide.
![Sourire :)](./images/smilies/icon_e_smile.gif)