# Fullmo MovingCap CODE - micropython example. # original file name: time.pyi """time/utime Modul-Stub/Schnittstelle für fullmo MovingCap Servoantriebe / CODE / Micropython Das `utime` Modul (alternativ: `time`) bietet eine Teilmenge des MicroPython oder CPython `time` Moduls. Dies ist eine eingeschränkte Implementierung für die MovingCap-Plattform, die Zeit- und Verzögerungsfunktionen bereitstellt. Die vollständige Datum/Zeit-Funktionalität (localtime, mktime, time) wird auf MovingCap nicht unterstützt. Für die vollständige Dokumentation des Standard-MicroPython time-Moduls siehe: https://docs.micropython.org/en/v1.9.4/pyboard/library/utime.html Verfügbare Funktionen: - sleep(seconds) - Schlafen für die angegebene Anzahl von Sekunden - sleep_ms(ms) - Schlafen für die angegebene Anzahl von Millisekunden - sleep_us(us) - Schlafen für die angegebene Anzahl von Mikrosekunden - ticks_ms() - Millisekunden-Zählerwert abrufen - ticks_us() - Mikrosekunden-Zählerwert abrufen - ticks_add(ticks, delta) - Delta zu einem Ticks-Wert addieren - ticks_diff(ticks1, ticks2) - Differenz zwischen Ticks-Werten berechnen Auf MovingCap nicht verfügbar: - localtime() - Nicht unterstützt (keine RTC) - mktime() - Nicht unterstützt (keine RTC) - time() - Nicht unterstützt (keine RTC) - ticks_cpu() - Nicht unterstützt Ticks-Funktionen - Wichtige Hinweise: Die Funktionen ticks_ms() und ticks_us() geben Werte in einem implementierungsabhängigen Bereich zurück. Auf der aktuellen MovingCap CODE-Plattform erfolgt der Überlauf innerhalb eines positiven Bereichs, der kleiner als der volle 32-Bit-Integer-Bereich ist. Machen Sie KEINE Annahmen über den spezifischen Wertebereich und führen Sie keine direkten arithmetischen Operationen mit Ticks-Werten durch. Der Bereich kann sich in zukünftigen Implementierungen ändern. Verwenden Sie IMMER diese Hilfsfunktionen für Ticks-Arithmetik: - ticks_diff(ticks1, ticks2) - Differenz zwischen zwei Ticks-Werten berechnen - ticks_add(ticks, delta) - Offset zu einem Ticks-Wert addieren/subtrahieren Diese Funktionen behandeln den Überlauf korrekt, unabhängig vom zugrundeliegenden Wertebereich. Hinweise zur Verwendung: - Dieses Modul für Verzögerungen, Zeitmessungen und Timeout-Implementierungen verwenden - Für präzises Timing ticks_us() gegenüber ticks_ms() vorziehen Verwendungsbeispiele: import time # oder: import utime # Einfache Verzögerungen time.sleep(1) # 1 Sekunde schlafen time.sleep_ms(100) # 100 Millisekunden schlafen time.sleep_us(50) # 50 Mikrosekunden schlafen # Zeitmessung start = time.ticks_ms() # ... etwas tun ... elapsed = time.ticks_diff(time.ticks_ms(), start) print("Verstrichene Zeit:", elapsed, "ms") # Timeout-Implementierung timeout = 5000 # 5 Sekunden Timeout start = time.ticks_ms() condition = True while condition: if time.ticks_diff(time.ticks_ms(), start) > timeout: print("Timeout!") break # ... Arbeit erledigen ... """ __author__ = "Oliver Heggelbacher" __email__ = "oliver.heggelbacher@fullmo.de" __version__ = "50.00.10.xx" __date__ = "2026-01-19" def sleep(seconds: int): """Für die angegebene Anzahl von Sekunden schlafen. Unterbricht die Ausführung für mindestens die angegebene Anzahl von Sekunden. Die tatsächliche Schlafzeit kann aufgrund der Systemplanung länger sein. HINWEIS: MovingCap MicroPython unterstützt derzeit keine Gleitkommazahlen. "seconds" kann keine Bruchteilige Zahl sein. :param seconds: Anzahl der Sekunden zum Schlafen. :type seconds: int Beispiel: time.sleep(2) # 2 Sekunden schlafen time.sleep(1) # 1 Sekunde schlafen """ pass def sleep_ms(ms: int): """Für die angegebene Anzahl von Millisekunden schlafen. Unterbricht die Ausführung für mindestens die angegebene Anzahl von Millisekunden. Präziser als sleep() für kurze Verzögerungen. :param ms: Anzahl der Millisekunden zum Schlafen. :type ms: int Beispiel: time.sleep_ms(500) # 500 Millisekunden schlafen time.sleep_ms(10) # 10 Millisekunden schlafen """ pass def sleep_us(us: int): """Für die angegebene Anzahl von Mikrosekunden schlafen. Unterbricht die Ausführung für mindestens die angegebene Anzahl von Mikrosekunden. Präziseste verfügbare Verzögerungsfunktion. Bei sehr kurzen Verzögerungen mit Vorsicht verwenden, da der System-Overhead die Genauigkeit beeinflussen kann. :param us: Anzahl der Mikrosekunden zum Schlafen. :type us: int Beispiel: time.sleep_us(1000) # 1000 Mikrosekunden schlafen (1 ms) time.sleep_us(50) # 50 Mikrosekunden schlafen """ pass def ticks_ms() -> int: """Aktuellen Millisekunden-Zählerwert abrufen. Gibt einen monoton steigenden Millisekunden-Zähler mit willkürlichem Referenzpunkt zurück. Der Zähler läuft über, nachdem er einen implementierungsabhängigen Maximalwert erreicht hat. Der spezifische Wertebereich ist implementierungsabhängig und kann sich in zukünftigen Versionen ändern. Verlassen Sie sich NIE auf einen bestimmten Bereich und führen Sie keine direkte Arithmetik mit Ticks-Werten durch. Verwenden Sie IMMER ticks_diff() zur Berechnung von Zeitdifferenzen und ticks_add() zum Verschieben von Ticks-Werten - diese Funktionen behandeln den Überlauf korrekt. :return: Aktueller Millisekunden-Tick-Wert (implementierungsabhängiger Bereich). :rtype: int Beispiel: start = time.ticks_ms() # ... etwas tun ... duration = time.ticks_diff(time.ticks_ms(), start) # RICHTIG # duration = time.ticks_ms() - start # FALSCH - nicht verwenden! """ pass def ticks_us() -> int: """Aktuellen Mikrosekunden-Zählerwert abrufen. Gibt einen monoton steigenden Mikrosekunden-Zähler mit willkürlichem Referenzpunkt zurück. Der Zähler läuft über, nachdem er einen implementierungsabhängigen Maximalwert erreicht hat. Bietet höhere Auflösung als ticks_ms() für präzises Timing. Der spezifische Wertebereich ist implementierungsabhängig und kann sich in zukünftigen Versionen ändern. Verlassen Sie sich NIE auf einen bestimmten Bereich und führen Sie keine direkte Arithmetik mit Ticks-Werten durch. Verwenden Sie IMMER ticks_diff() zur Berechnung von Zeitdifferenzen und ticks_add() zum Verschieben von Ticks-Werten - diese Funktionen behandeln den Überlauf korrekt. :return: Aktueller Mikrosekunden-Tick-Wert (implementierungsabhängiger Bereich). :rtype: int Beispiel: start = time.ticks_us() # ... präzise Operation ... duration_us = time.ticks_diff(time.ticks_us(), start) # RICHTIG """ pass def ticks_add(ticks: int, delta: int) -> int: """Ein Delta zu einem Ticks-Wert mit korrekter Überlaufbehandlung addieren. Dies ist die korrekte Methode, um zu einem Ticks-Wert zu addieren oder davon zu subtrahieren. Führt Addition durch und behandelt dabei den Zähler-Überlauf korrekt. :param ticks: Basis-Ticks-Wert (von ticks_ms() oder ticks_us()). :type ticks: int :param delta: Zu addierender (positiv) oder subtrahierender (negativ) Wert. :type delta: int :return: Neuer Ticks-Wert mit korrekter Überlaufbehandlung. :rtype: int Beispiel: # Eine Frist 5 Sekunden in der Zukunft berechnen deadline = time.ticks_add(time.ticks_ms(), 5000) # Prüfen ob Frist abgelaufen ist while time.ticks_diff(deadline, time.ticks_ms()) > 0: # Noch vor der Frist pass """ pass def ticks_diff(ticks1: int, ticks2: int) -> int: """Vorzeichenbehaftete Differenz zwischen zwei Ticks-Werten berechnen. Dies ist die korrekte Methode, um Ticks-Werte zu vergleichen oder deren Differenz zu ermitteln. Berechnet (ticks1 - ticks2) mit korrekter Behandlung des Zähler-Überlaufs. Das Ergebnis ist eine vorzeichenbehaftete Ganzzahl: - Positiv wenn ticks1 "nach" ticks2 liegt - Negativ wenn ticks1 "vor" ticks2 liegt - Null wenn sie gleich sind Das Ergebnis ist gültig, solange die tatsächliche Zeitdifferenz nicht die Hälfte der Ticks-Periode überschreitet (ca. 149 Stunden für ticks_ms bei aktueller Implementierung). :param ticks1: Erster Ticks-Wert, typischerweise der "spätere" oder "End"-Zeitpunkt. :type ticks1: int :param ticks2: Zweiter Ticks-Wert, typischerweise der "frühere" oder "Start"-Zeitpunkt. :type ticks2: int :return: Vorzeichenbehaftete Differenz (ticks1 - ticks2). :rtype: int Beispiel: # Verstrichene Zeit messen start = time.ticks_ms() # ... Operation ... elapsed = time.ticks_diff(time.ticks_ms(), start) # Fristbasierter Timeout deadline = time.ticks_add(time.ticks_ms(), 1000) while time.ticks_diff(deadline, time.ticks_ms()) > 0: pass # Warten bis zur Frist # Prüfen ob Timeout überschritten if time.ticks_diff(time.ticks_ms(), start) > 1000: print("Mehr als 1 Sekunde verstrichen") """ pass