SysTimeRtc.SysTimeRtcConvertUtcToLocal

bernd
2022-02-27
2022-03-06
  • bernd - 2022-02-27

    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?

     
  • ludecus

    ludecus - 2022-03-02

    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
  • bernd - 2022-03-03

    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
  • bernd - 2022-03-06

    Ich habe jetzt auf die FUN UTC_TO_LTIME aus der OSCAT Lib umgestellt, hier geht die Umrechnung auf locale Zeit fehlerfrei.

     

Log in to post a comment.