Ich habe ein seltsammes Problem mit der Zeitumrechung UTC in Localzeit mit der Funktion SysTimeRtc.SysTimeRtcConvertUtcToLocal.
Ab und zu ist die Zeit für einen Zyklus genau 1h zu klein. z.b. um 22Uhr wird die Zeit 21 Uhr zurückgegeben. (Siehe Anhang)
Hellblau - dwUtcTime, UTC Zeit aus RTC ausgelesen -> OK
Dunkelblaub - dwUtcTimeLocal, Aus UTC Zeit umgerechnete Lokalzeit -> Fehlerhaft
grün - Lokalzeit in Sekunden -> OK
rot - h aus Lokalzeit -> Fehlerhaft
Gleicher Effekt, immer im gleichen Zyklus, mit SysTimeRtc.SysTimeRtcConvertHighResToLocal.
Das ganze passiert nur, wenn ich in einer Webvisu ein Trace darstelle. Laut Taskinformation ist die Zykluszeit des Visutask in diesem Fall sehr groß.
Ich vermute das es ein Problem mit der Umrechung der Sommer/Winterzeit zusammenhängt wenn die CPU Auslastung extrem groß ist.
dwUtcTime:= SysTimeRtcGet(udiResult); ( Echtzeituhr lesen )
udiResult := SysTimeRtc.SysTimeRtcConvertUtcToLocal(dwUtcTime, dwUtcTimeLocal);
Taskintervall 20ms, prio 0.
Visutask 200ms, prio 31
System Raspberry PI Single Core.
Das müsste schon anderen aufgefallen sein, die Lib ist schon älter.
Hat jemand eine Idee?
ich benutze auch die SysTimeRtc Lib v3.4.1.20, aber ein Problem ist mir noch nicht aufgefallen.
Allerdings fallen mir 2 Wege ein, um das zu analysieren:
1. Schau mal, ob das RTS_IEC_Result für beide Methoden zum Zeitpunkts des Lags überhaupt Ok ist.
2. Prüf mal, ob der Lag in der SysTimeRtcGet oder in der Convert Function liegt.
_dtSysTime := TO_DT(SysTimeRtcGet(_Result));
Vielleicht hilft dir auch die GetLocalDateTime vom TimerSwitch aus der Util lib weiter. Diese Bibliothek wird zumindest noch gepflegt.
Beste Grüße
Ludecus
Last edit: ludecus 2022-03-02
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo Ludecus,
danke für die Antwort.
Ich habe die SysTimeRtc auch schon viele Jahr in diesem Projekt, die Fehlfunktion ist mir auch erst aufgefallen nachdem ich jetzt neu mit der Zeit etwas verrechne und die Daten daraus speichere UND eine Webvisu mit 2 Trace aufgerufen wird. Die fehlerhafte Uhrzeit kommt dann in jeder Minute mehrmals vor. Aber auch bei nur einem Trace konnte ich den Fehler nachstellen wenn auch teilweise nur jede h einmal.
Das Result ist immer 0 = kein Fehler.
Es liegt in der Convert Funktion, das ist am begefügten Trace gut zu sehen.
Hellblau = UTC -> OK
Es ist auch IMMER ganz genau 1h falsch.
GetLocalDateTime muss ich mir anschauen, kenn ich nicht, danke für den Tip.
Gruß
Bernd
Last edit: bernd 2022-03-03
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ich habe ein seltsammes Problem mit der Zeitumrechung UTC in Localzeit mit der Funktion SysTimeRtc.SysTimeRtcConvertUtcToLocal.
Ab und zu ist die Zeit für einen Zyklus genau 1h zu klein. z.b. um 22Uhr wird die Zeit 21 Uhr zurückgegeben. (Siehe Anhang)
Hellblau - dwUtcTime, UTC Zeit aus RTC ausgelesen -> OK
Dunkelblaub - dwUtcTimeLocal, Aus UTC Zeit umgerechnete Lokalzeit -> Fehlerhaft
grün - Lokalzeit in Sekunden -> OK
rot - h aus Lokalzeit -> Fehlerhaft
Gleicher Effekt, immer im gleichen Zyklus, mit SysTimeRtc.SysTimeRtcConvertHighResToLocal.
Das ganze passiert nur, wenn ich in einer Webvisu ein Trace darstelle. Laut Taskinformation ist die Zykluszeit des Visutask in diesem Fall sehr groß.
Ich vermute das es ein Problem mit der Umrechung der Sommer/Winterzeit zusammenhängt wenn die CPU Auslastung extrem groß ist.
dwUtcTime:= SysTimeRtcGet(udiResult); ( Echtzeituhr lesen )
udiResult := SysTimeRtc.SysTimeRtcConvertUtcToLocal(dwUtcTime, dwUtcTimeLocal);
Taskintervall 20ms, prio 0.
Visutask 200ms, prio 31
System Raspberry PI Single Core.
Das müsste schon anderen aufgefallen sein, die Lib ist schon älter.
Hat jemand eine Idee?
Hallo Bernd,
ich benutze auch die SysTimeRtc Lib v3.4.1.20, aber ein Problem ist mir noch nicht aufgefallen.
Allerdings fallen mir 2 Wege ein, um das zu analysieren:
1. Schau mal, ob das RTS_IEC_Result für beide Methoden zum Zeitpunkts des Lags überhaupt Ok ist.
2. Prüf mal, ob der Lag in der SysTimeRtcGet oder in der Convert Function liegt.
_dtSysTime := TO_DT(SysTimeRtcGet(_Result));
Vielleicht hilft dir auch die GetLocalDateTime vom TimerSwitch aus der Util lib weiter. Diese Bibliothek wird zumindest noch gepflegt.
Beste Grüße
Ludecus
Last edit: ludecus 2022-03-02
Hallo Ludecus,
danke für die Antwort.
Ich habe die SysTimeRtc auch schon viele Jahr in diesem Projekt, die Fehlfunktion ist mir auch erst aufgefallen nachdem ich jetzt neu mit der Zeit etwas verrechne und die Daten daraus speichere UND eine Webvisu mit 2 Trace aufgerufen wird. Die fehlerhafte Uhrzeit kommt dann in jeder Minute mehrmals vor. Aber auch bei nur einem Trace konnte ich den Fehler nachstellen wenn auch teilweise nur jede h einmal.
Das Result ist immer 0 = kein Fehler.
Es liegt in der Convert Funktion, das ist am begefügten Trace gut zu sehen.
Hellblau = UTC -> OK
Es ist auch IMMER ganz genau 1h falsch.
GetLocalDateTime muss ich mir anschauen, kenn ich nicht, danke für den Tip.
Gruß
Bernd
Last edit: bernd 2022-03-03
Ich habe jetzt auf die FUN UTC_TO_LTIME aus der OSCAT Lib umgestellt, hier geht die Umrechnung auf locale Zeit fehlerfrei.