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

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
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