Sytemzeit ändern

Itus

Level-2
Beiträge
97
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen

Ich hab einen CX1020 mit Windows CE 6.0 am laufen.
TargetVisu als Benutzeroberfläche, Windows Taskleiste ist ausgeblendet.

Nun möchte ich, dass der Anwender die Uhrzeit und das Datum selber verändern kann.
Über die Visu kann ich über Programme konfigurieren mit dem Befehl \windows\control.exe das ganze Control Panel aufrufen. Nun kann der Anwender die Uhrzeit über Date/Time verändern - er hat aber auch auf alles andere Zugriff wie die CX Configuration etc und das gefällt mir nicht.

Gibt es eine Möglichkeit direkt das Fensterchen für Datum und Uhrzeit aufzurufen? Kann ich den \windows\control.exe Befehl erweitern damit sich sofort das Date/Timer Fenster öffnet?

Oder gibt es etwas ähnliches wie bei XP die 'RunDLL32 shell32.dll, Control_RunDLL.......' ?

Danke und Gruss
Itus
 
Hallo !
Es gibt in der TCUtilities.lib die Funktionen

NT_SetLocalTime und NT_SetTimeToRTCTime, damit kannst du über einen Zeitstring die Uhrzeit am CX setzen, den du in der VIsu eingibst.

Steht im Inofsystem näher beschrieben
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo cybertracepda,

Hier im Info-System steht noch viel mehr: :rolleyes:

FUNCTION_BLOCK NT_SetTimeToRTCTime
Diese Funktionalität ist in dem SPS-Laufzeitsystem unter Windows CE nicht verfügbar!

Leider hab ich für Windows CE auch keine Lösung. :sad:

Gruß
Chräshe
 
Hallo

Auslesen der Zeit aus dem Betriebssystem: NT_GetTime
Schreiben deer Zeit in das Betriebssystem: NT_SetLocalTime
Hab ich selbst in einem kleinen CP mit WinCE5 laufen, sieht etwa so aus:
PROGRAM P_Uhrzeit
VAR
CLK_PRG1: CLK_PRG;
NT_GetTime1: NT_GetTime;
F_TRIG1: F_TRIG;
RTC1: RTC;
NT_SetLocalTime1: NT_SetLocalTime;
R_TRIGedit: R_TRIG;
bZeitEdit: BOOL; (*öffnet/ schliesst das Fenster zum editieren der Uhrzeit in der Visu*)
SYSTEMTIMEpuffer: TIMESTRUCT; (*Buffer zum editieren der Uhrzeit in der Visu*)
bZeitSave: BOOL; (*Befehl zum Speichern der Uhrzeit*)
F_TRIGedit: F_TRIG;
sAktuelleUhrzeit: STRING(10);
todAktuelleUhrzeit: TOD;
END_VAR

#################################################
(*Takt für Aktualisierung der Zeit*)
CLK_PRG1(PT:= t#30s, Q=> );

(*Auslesen und Umrechnen der aktuellen Systemzeit*)
NT_GetTime1(
NETID:= '',
START:= CLK_PRG1.Q OR F_TRIGedit.Q,
TMOUT:= DEFAULT_ADS_TIMEOUT,
BUSY=> ,
ERR=> ,
ERRID=> ,
TIMESTR=> );
F_TRIG1(CLK:= NT_GetTime1.BUSY AND NOT NT_GetTime1.ERR, Q=> );
RTC1(EN:= F_TRIG1.Q, PDT:= SYSTEMTIME_TO_DT(NT_GetTime1.TIMESTR), Q=> , CDT=> );
todAktuelleUhrzeit:= DT_TO_TOD(RTC1.CDT);
sAktuelleUhrzeit:= DT_TO_STRF(RTC1.CDT, 0, '#M:#Q:#S', 2);

(*Schreiben der Uhrzeit ins Betriebssystem*)
R_TRIGedit(CLK:= bZeitEdit, Q=> );
IF R_TRIGedit.Q THEN
SYSTEMTIMEpuffer:= NT_GetTime1.TIMESTR;
END_IF

NT_SetLocalTime1(START:= FALSE);
IF bZeitSave THEN
NT_SetLocalTime1(
NETID:= '',
TIMESTR:= SYSTEMTIMEpuffer,
START:= TRUE,
TMOUT:= DEFAULT_ADS_TIMEOUT,
BUSY=> bZeitSave,
ERR=> ,
ERRID=> );
END_IF
F_TRIGedit(CLK:= bZeitSave, Q=> );
IF F_TRIGedit.Q THEN
bZeitEdit:= FALSE;
END_IF

Soweit ich mich erinnern kann, sind auch Befehle der Oscart.lib verwendet.
In der Visualisierung wird mittels bZeitEdit:= TRUE ein Popup Fenster geöffnet in dem die
SYSTEMTIMEpuffer editiert werden kann, Speichern mit bZeitSave:= TRUE; Abbrechen mit bZeitEdit:= FALSE;

Funktioniert wunderbar.
Christian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen

Besten Dank für die Vorschläge.

Fx64, deine Idee hab ich implementiert. Cmd wird schön aufgerufen, nun müsste ich noch wissen, wie ich ein Keypad einblende. Ich hab reine Touchoberfläche - gehe ich mit Cerhost auf den Rechner kann ich die Zeit über meinen Laptop verändern.

Danke und Gruss
Itus
 
Hallo allerseits,

das mit den vielen Zeiten finde ich doch etwas verwirrend.
Ich hab 5 unterschiedliche Zeiten zur Auswahl!?! :s21: -> TwinCAT Zeitquellen

Mit dem FB NT_GetTime kann ich die „Windows/NT Zeit“ mit 1ms Auflösung auslesen. Das ist für meine Anwendungen praktisch immer ausreichend. :D

Wenn ich jetzt mit dem FB NT_SetLocalTime die „Windows/NT Zeit“ neu einstelle, läuft die „Windows/NT Zeit“ nach einem Neustart dann mit der neu eingestellten Zeit weiter, oder wird diese von der RTC frisch initialisiert? :confused:
Leider hab ich gerade keine Steuerung zum testen parat.

Weiß jemand, ob es bei Win CE, mit Ausnahme von „NT_SetTimeToRTCTime“, weitere Einschränkungen gibt?
Ich konnte aktuell nichts finden, aber das heißt ja nichts... :rolleyes:

Gruß
Chräshe
 
Wenn du NT_SetLocalTime verwendest, verstellst du die Zeit im Betriebssystem (egal ob du das Recht dazu hast oder nicht :wink: ) die Uhrzeit bleibt also auch beim Neustart erhalten, war zumindest bei meinem CP so.

Christian
 
Zurück
Oben