Page 1 sur 1

Modifier la date et l'heure

Posté : 10 août 2022, 11:42
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.

Re: Modifier la date et l'heure

Posté : 10 août 2022, 14:15
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

Re: Modifier la date et l'heure

Posté : 10 août 2022, 14:27
par philou77
Salut !

il y a pas EXPLODE sous codesys ?

Re: Modifier la date et l'heure

Posté : 10 août 2022, 15:50
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:

Re: Modifier la date et l'heure

Posté : 10 août 2022, 15:53
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


Re: Modifier la date et l'heure

Posté : 18 août 2022, 00:14
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