Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Page 3 of 4 FirstFirst 1234 LastLast
Results 21 to 30 of 33

Thread: Systemzeit auslesen

  1. #21
    Join Date
    11.06.2007
    Posts
    162
    Danke
    3
    Erhielt 16 Danke für 16 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    alle 2min dann kann es keinen Zusammenhang damit haben. Da die Zeit alle 1.2s gelesen wird..

    Früher ist es ja gegangen. Hast etwas geupdate? Hast du es schon auf einem anderen Rechner/SPS Probiert?

  2. #22
    Join Date
    14.08.2004
    Posts
    934
    Danke
    48
    Erhielt 73 Danke für 66 Beiträge

    Default

    Ich tippe mal darauf, dass die Zykluszeiten nicht eingehalten werden. Überprüfe das doch einmal im Systemmanager.

  3. #23
    Steff3de is offline Neuer Benutzer
    Themenstarter
    Join Date
    18.02.2008
    Posts
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    Hallo drfunfrock

    Wie kann kann ich im Systemmanager prüfen ob es dabei zu Problemen kommt? (Ich habe die Funktion Auto-Start nicht aktiviert)

    Gruß
    Stefan

  4. #24
    Join Date
    14.08.2004
    Posts
    934
    Danke
    48
    Erhielt 73 Danke für 66 Beiträge

    Default

    Du musst einfach dein System in den Runmodus bringen und dann im Systemmanager bei geladener Konfiguration auf das SPS-Projekt gehen und dort auf die Task. Unter Online sind die Zeiten zu finden.

  5. #25
    Join Date
    03.02.2010
    Posts
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    Ich bin vor kurzem bei TwinCAT auf das selbe Problem gestoßen, dass die Zeit manchmal nicht mehr aktualisiert wird. Im Normalfall sind es 3-5ms (Zykluszeit 1ms), aber manchmal hat es über 2 Sekunden gedauert.
    Das ganze war kein Problem mit der Auslastung, sondern es scheint so, als würde ein laufender Timer das NT_Gettime blockieren. Immer wenn ich einen Timer in einem Funktionsblock gestartet habe (z.B. als Timeout), dann ist das busy bei NT_Gettime nicht mehr abgefallen.
    Ich habe das jetzt so gelöst, dass ich die Zykluszeit als Konstante definiert habe und jeden Zyklus das Datum/Uhrzeit um eins hochzähle, damit meine Log Dateien wieder eine richtige aufsteigende Zeit haben (inkl. Millisekunden!!!). Das Gettime wird dann einmal in der Minute aufgerufen und die Zeit wird wieder synchronisiert z.B. wenn jemand gerade einen Breakpoint gesetzt hat oder es eine Zykluszeitüberschreitung gegeben hat.
    Die Lösung reicht in meinem Fall aus, da es bei den Log Dateien egal ist, wenn die Uhrzeit auch einmal ein paar ms rückwärts zählt. Bei anderen Projekten kann das jedoch zu einem Problem werden.

  6. #26
    Join Date
    24.04.2008
    Location
    Lübeck
    Posts
    338
    Danke
    11
    Erhielt 68 Danke für 65 Beiträge

    Default

    Ich bevorzuge folgende Variante:

    Mit FB_GetTimeZoneInformation die UTC-Zeitverschiebung auslesen.

    Mit GETSYSTEMTIME und FILETIME_TO_SYSTEMTIME hole ich mir die aktuelle Zeit und addiere die UTC-Verschiebung drauf.

  7. #27
    Join Date
    22.08.2009
    Posts
    126
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Default

    Ich verwende folgendes auf dem CX9001:

    Code:
    VAR
        fbSystemTime     : GETSYSTEMTIME;
        timeAsFileTime    : T_FILETIME;
        _dt_Rtc             : DT;
    END_VAR
    
    fbSystemTime( timeLoDW =>timeAsFileTime.dwLowDateTime , timeHiDW =>timeAsFileTime.dwHighDateTime );
    _dt_Rtc := FILETIME_TO_DT( timeAsFileTime );
    Nur leider nimmt das die CPU ziemlich her... mir würde auch genügen alle paar Stunden mal abzugleichen, aber wenn ich GETSYSTEMTIME nicht konstant pro zyklus mache, habe ich nur die Uhrzeit/Datum der letzten abfrage...
    Kann mir jemand sagen wie ich das hier lösen kann? Bzw. mit welchen Bausteinen?
    Danke,
    Klaus

  8. #28
    Join Date
    24.04.2008
    Location
    Lübeck
    Posts
    338
    Danke
    11
    Erhielt 68 Danke für 65 Beiträge

    Default

    Also ich nutze diese Bausteine. Prüfe dann über den CycleCount, ob ein neuer Zyklus vorhanden ist und aktualisiere ggf. den Wert. Damit habe ich einmal pro Zyklus den Aufruf der Zeit.

  9. #29
    Join Date
    22.08.2009
    Posts
    126
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Default

    ich dachte das würde ohnehin mit meinem code nur 1x pro zyklus aufgerufen werden. Wozu prüfung zyklen? Verursacht bei mir +10% mehr cpu

  10. #30
    Join Date
    24.04.2008
    Location
    Lübeck
    Posts
    338
    Danke
    11
    Erhielt 68 Danke für 65 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    +10% durch eine einfache IF-Anweisung??

    Da ich eine allgemeine Funktion geschrieben habe, welche mir die aktuelle Zeit als SystemTime liefert. Diese Funktion wird im Programm an vielen hunderten Stellen verwendet. Damit nicht jedes mal wieder der GetSystemTime aufgerufen wird, prüfe ich ob diesen Zyklus bereits die Zeit abgerufen wurde und gebe dann einen zwischengespeicherten Wert zurück. Das Auslesen vom CycleCount geschieht über die Struktur SYSTEMTASKINFOTYPE aus der TcSystem.lib.

Similar Threads

  1. Systemzeit auslesen
    By fctla in forum CODESYS und IEC61131
    Replies: 1
    Last Post: 15.07.2014, 10:57
  2. Systemzeit in opcon auslesen
    By veritaz89 in forum CODESYS und IEC61131
    Replies: 0
    Last Post: 23.05.2012, 13:09
  3. B&R Systemzeit auslesen
    By adi5 in forum Sonstige Steuerungen
    Replies: 2
    Last Post: 15.03.2012, 17:39
  4. Systemzeit auslesen
    By Reto in forum Simatic
    Replies: 21
    Last Post: 05.09.2011, 11:01
  5. Systemzeit auslesen
    By timod79 in forum CODESYS und IEC61131
    Replies: 4
    Last Post: 07.05.2009, 12:14

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •