Modifier la date et l'heure

Forum traitant des automates industriels de marque Wago et du logiciel codesys
papaya
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 111
Inscription : 03 nov. 2015, 11:10

Modifier la date et l'heure

Message par papaya »

Bonjour,
Je souhaite modifier l'heure de la plc depuis l'ihm

Ce que j'ai fait pour l'instant :

Code : Tout sélectionner


//-------------------------Date and time---------------------------------------------

(* changement heure *)
IF Set_time THEN
     WagoAppTime.FuSetClockFromLocalDateAndTime(dtDateTime:= DateTime_mod );
END_IF
// affiche de l'heure ds l'ihm
DateTime := FuGetLocalDateAndTime ();

//--------------------



Set_time est un bouton dans l'ihm pour valider la nouvelle heure

DateTime_mod est la variable dans laquelle je souhaite écrire la nouvelle heure que je souhaite.

Le problème est que je n'arrive pas à modifier cette variable depuis l'ihm. Cela fonctionne si j'écris dans cette variable avec ecockpit.

L'idéal serait d'avoir une case pour l'heure, une pour les minutes, une pour les secondes, une pour le jour, etc...

Merci d'avance pour votre aide.
Dernière modification par papaya le 10 août 2022, 14:23, modifié 1 fois.
papaya
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 111
Inscription : 03 nov. 2015, 11:10

Re: Modifier la date et l'heure

Message par papaya »

j'ai réussi a faire quelque chose a base de concat, mais je trouve cela plutôt sale:

Code : Tout sélectionner

(* changement heure *)
IF Set_time THEN
	
	DT_string := CONCAT(STR1:= WSTRING_TO_STRING("DT#"), STR2:= UINT_TO_STRING (N_Annee) );
	DT_string := CONCAT(STR1:= DT_string, STR2:= WSTRING_TO_STRING("-" ));
	DT_string := CONCAT(STR1:= DT_string, STR2:= UINT_TO_STRING (N_Mois) );
	DT_string := CONCAT(STR1:= DT_string, STR2:= WSTRING_TO_STRING("-" ));
	DT_string := CONCAT(STR1:= DT_string, STR2:= UINT_TO_STRING (N_Jour) );

	DT_string := CONCAT(STR1:= DT_string, STR2:= WSTRING_TO_STRING("-" ));
	DT_string := CONCAT(STR1:= DT_string, STR2:= UINT_TO_STRING (N_Heure) );
	DT_string := CONCAT(STR1:= DT_string, STR2:= WSTRING_TO_STRING(":" ));
	DT_string := CONCAT(STR1:= DT_string, STR2:= UINT_TO_STRING (N_Minute) );
	DT_string := CONCAT(STR1:= DT_string, STR2:= WSTRING_TO_STRING(":" ));
	DT_string := CONCAT(STR1:= DT_string, STR2:= UINT_TO_STRING (N_seconde) );

	DateTime_mod := STRING_TO_DT (DT_string);

	WagoAppTime.FuSetClockFromLocalDateAndTime(dtDateTime:= DateTime_mod );
END_IF
// affiche de l'heure ds l'ihm
DateTime := FuGetLocalDateAndTime ();
comment récupérer l'heure ou les minute ou autre d'un date and time ?
( je voudxrais inscrire l'heure ds mes variable N_heure ...etc au moment ou on ouvre la page ..)
merci
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2076
Inscription : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Modifier la date et l'heure

Message par philou77 »

Salut !

il y a pas EXPLODE sous codesys ?
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
papaya
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 111
Inscription : 03 nov. 2015, 11:10

Re: Modifier la date et l'heure

Message par papaya »

Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part !
il n'y a pas d'erreur :lol:
papaya
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 111
Inscription : 03 nov. 2015, 11:10

Re: Modifier la date et l'heure

Message par papaya »

j'ai trouver une une solution qui fonctionne , même si je ne comprend pas vraiment comment elle fonctionne :lol:

Code : Tout sélectionner

PROGRAM PLC_Time
VAR
	R_TRIG_vue_divers : R_TRIG ;

	B_Valid_chgt_heure : BOOL ;
	N_Heure : UINT ;
	N_Minute : UINT ;
	N_Annee : UINT ;
	N_Mois : UINT ;
	N_Jour : UINT ;
	N_Seconde : UINT ;
	
	v_dwControllerTtcAUtc: DWORD;
	q_SysTimeRTC_Convert: UDINT;
	q_RTCSet: UDINT;



	(* Read PLC Time *)
    (* Result: Controller RTC as a UTC Timestamp value      *)
		v_PLCDate  : SYSTIMEDATE  ;
    (* (number of seconds since January 1st, 1970 00:00:00) *)
    v_dwControllerRtcAsUtc      : DWORD := 0;
    (* Result: Date & Time in a SYSTEMDATE structure *)							  
    (* Result: Date & Time elements of the SYSTEMDATE structure *)
    q_uiYear                    : UINT  := 0;
    q_uiMonth                   : UINT  := 0;
    q_uiDay                     : UINT  := 0;
    q_uiHour                    : UINT  := 0;
    q_uiMinute                  : UINT  := 0;
    q_uiSecond                  : UINT  := 0;
    (* Function operation diagnostic of the "SysTimeRtcGet" function: OK if 0 *)
    q_udiSysTimeRtcGetDiag      : UDINT := 0;
    (* Function operation diagnostic of the "SysTimeRtcConvertUtcToDate" function: OK if 0 *)
    q_udiConvertUtcToDateDiag   : UDINT := 0;


END_VAR

Code : Tout sélectionner


DateTime := FuGetDateAndTime ();

v_dwControllerRtcAsUtc:=SysTimeRtc.SysTimeRtcGet(pResult:= q_udiSysTimeRtcGetDiag ) ;
SysTimeRtc.SysTimeRtcConvertUtcToDate(dwTimestampUtc:= v_dwControllerRtcAsUtc, pDate:= v_PLCDate) ;

q_uiYear:= v_PLCDate.wYear;
q_uiMonth:= v_PLCDate.wMonth;
q_uiDay := v_PLCDate.wDay;

q_uiHour := v_PLCDate.wHour;
q_uiMinute := v_PLCDate.wMinute;
q_uiSecond := v_PLCDate.wSecond ;



R_TRIG_vue_divers(CLK:= (iScreen_SousIndex1 =3 ));

IF R_TRIG_vue_divers.Q THEN
	N_Heure := q_uiHour ;
	N_Minute := q_uiMinute ;
	N_Annee := q_uiYear ;
	N_Mois := q_uiMonth;
	N_Jour := q_uiDay;
END_IF


IF Set_time THEN
	v_PLCDate.wHour := N_Heure  ;
	v_PLCDate.wMinute := N_Minute ;
	v_PLCDate.wYear := N_Annee ;
	v_PLCDate.wMonth := N_Mois ;
	v_PLCDate.wDay := N_Jour ;
	q_SysTimeRTC_Convert :=	SysTimeRtcConvertDateToUtc(v_PLCDate,v_dwControllerTtcAUtc) ;
	q_RTCSet := SysTimeRtcSet(v_dwControllerTtcAUtc);

END_IF

sheppard66
Apprend le binaire
Apprend le binaire
Messages : 3
Inscription : 31 janv. 2022, 19:41

Re: Modifier la date et l'heure

Message par sheppard66 »

Code : Tout sélectionner

PROGRAM DateTime
VAR
	xButton: BOOL;
	sSetYear: STRING;
	sSetMonth: STRING;
	sSetDay: STRING;
	sSetHour: STRING;
	sSetMinute: STRING;
	sSetSecond: STRING;
	
	dtSetTime: DATE_AND_TIME;
	MainString1: STRING;
	MainString2: STRING;
END_VAR


MainString1 := (Concat8('DT#',sSetYear,'-',sSetMonth,'-',sSetDay,'-',sSetHour));
MainString2 := (Concat5(MainString1,':',sSetMinute,':',sSetSecond));
dtSetTime := STRING_TO_DT(MainString2);
	
IF xButton THEN
	FuSetClockFromLocalDateAndTime(dtDateTime:=dtSetTime);
	xButton R=TRUE.
END_IF;

Tu as juste a créer des champs de textes pour régler sSetYear, sSetMonth, etc...
L'appui de xButton mettra a jour la date et l'heure du PLC
Répondre