[Résolu] Problème : affichage heure dans Codesys avec RTC + Raspberry

Forum traitant des automates industriels de marque Wago et du logiciel codesys
Répondre
ospium
Apprend le binaire
Apprend le binaire
Messages : 2
Enregistré le : 18 avr. 2017, 19:44

[Résolu] Problème : affichage heure dans Codesys avec RTC + Raspberry

Message par ospium »

Bonjour,

C'est mon premier Raspberry, ainsi que ma première tentative de programmation avec CodeSys et en st (habitué à siemens TiaPortal en ladder)

Mon matériel:
Raspberry Pi3
UPS PIco - Uninterruptible Power Supply & I2C Control HAT - USV
Codesys V3.5 SP10
(prochainement ; Wago 750-375 (coupleur profinet IO 3rd gen))

Problème :
Je n'arrive pas à obtenir l'heure et la date de mon raspberry dans mon programme CodeSys
La seule date / time que j'obtiens dans codesys est : DT#1970-1-1-0:0:0
Mon UPS pico est configurer correctement il me semble "sudo hwclock -r" et m'affiche l'heure actuel correctement (Fri 14 Apr 2017 19:48:26 CEST -0.834737 seconds)

Faut-il initialiser quelque chose dans CodeSys ? une commande à envoyer depuis le raspberry ? une librairie dans CodeSys ?

Une petite aide me serait bienvenue, car sans la date et l'heure je ne puis continuer mon projet ;S

merci
Modifié en dernier par ospium le 23 avr. 2017, 16:09, modifié 2 fois.
Avatar du membre
JAPIB
Aguerri de l'automation
Aguerri de l'automation
Messages : 84
Enregistré le : 20 oct. 2015, 23:32
Localisation : Lyon

Re: Problème : affichage heure dans Codesys avec RTC + Raspberry

Message par JAPIB »

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. :)
ospium
Apprend le binaire
Apprend le binaire
Messages : 2
Enregistré le : 18 avr. 2017, 19:44

Re: Problème : affichage heure dans Codesys avec RTC + Raspberry

Message par ospium »

merci bien ;)

je n'utilisais pas la bonne librairie je pense ... j'en avais testé plusieurs sans succès ^^

Il me reste à comprendre comment ça fonctionne exactement mtn hehe
Répondre