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.