«

»

nov 23

Utilisation de Date et Heure dans Codesys [CodeSys]

Suite a plusieurs demande, je vais vous faire quelques petits Tuto sur la gestion de la date et de l’heure dans votre programme codesys
D’ailleurs n’hésiter pas a m’indiquer les sujets qui vous intéressent

 

Date & Heure

Afin de récupérer les infos, l’automate se synchronise à un serveur NTP

Vous aurez effectué cette configuration en vous rendant sur les pages de paramétrage de votre automate

Pour info si vous avez une FreeBox V6 sur votre réseau, celle-ci assure la fonction de serveur NTP, sinon grâce a google vous trouverez plusieurs adresses

 

Dans les bibliothèques, il faudra ajouter la SYSTIME.LIB qui ajoute les fonctions qui permettent d’extraire le temps de l’automate

Cette Bibliothèque inclus deux fonctions et deux structures

 

 

Fonctions :

CurTime – Va vous permettre d’extraire les données de temps système, le résultat sera écrit sur la structure  » SysTime64  » composé des données  » ulLow  » et  » ulHigh  »

Cette fonction ne nous sera pas utile car les données retourné sont difficilement exploitable

 

CurTimeEx – Dans celle-ci on retrouve le résultat de CurTime avec en plus des données beaucoup plus commode pour nous, c’est a dire l’heure la date et le jour de la semaine

chaque donnée sera retourné sur un intégral on aura 10 données, année, mois, jour, heure…

C’est celle-ci que l’on va utiliser

 

Dans ce pdf retrouver les infos de cette bibliothèque : syslibtime.pdf

 

 

Le programme est relativement simple

Données a déclarer en global

 

VAR_GLOBAL

(* Déclaration des données pour le temps *)

CurDate : DINT;                   (*Déclaration de la double int pour la date *)
CurTime : DINT;                (* Déclaration de la double int pour le temps *)
DTNow: SystemTimeDate;
STNow: SysTime64;

END_VAR

 

Puis le programme

Déclaration

 

PROGRAM PRG_ST_ExtracHour

VAR

GetExtractCurrentTime:CurTimeEx;   (* Declaration de la fonction d’extraction du temps *)

END_VAR

 

Le programme en lui même

 

(* Gestion de la date et de l’heure dans les différents module*)

DTNow.Year := 0;                 (* Recupere l’année *)
DTNow.Month := 0;            (* Recupere le mois *)
DTNow.Day := 0;                (* Recupere le jour *)
DTNow.Hour := 0;                (* Recupere l’heure *)
DTNow.Minute := 0;            (* Recupere les minutes *)
DTNow.Second := 0;            (* Recupere les secondes *)
DTNow.DayOfWeek := 0;        (* Recupere la valeur pour le jour de la semaine 1=Lundi, 2=Mardi….. *)
STNow.ulHigh := 0;            (* Temps systeme *)
STNow.ulLow := 0;            (* Temps systeme *)

GetExtractCurrentTime(SystemTime:=STNow , TimeDate:=DTNow );     (* Extraction du temps courant pour charger les variables précédente *)

CurTime:=DTNow.Hour*10000+DTNow.Minute*100+DTnow.Second;        (* On concatene les données du temps pour n’en faire q’une seule variable qui sera utilisable plus facilement *)
CurDate:=DTNow.Day*1000000+DTNow.Month*10000+DTNow.Year;        (* Pareil pour la date *)

 

Comme vous avez pu le voir je concatène la date et l’heure pour ne former que une seule variable (CurTime & CurDate), cela aura l’avantage de vous faciliter les opérations de comparaison avec un événement a gérer

Par exemple si vous voulez que la ventilation fonctionne entre 8H du matin et 17H le programme sera du style suivant

 

IF CurTime>80000 and CurTime<170000 then

b_Ventilation:=TRUE;

ELSE

b_Ventilation:=FALSE;

END_IF

 

 

Dans l’archive suivante vous retrouverez les quelques morceaux de programme, ainsi que les bibliothèques utilisé

Heure.zip