# Fullmo MovingCap CODE - micropython example. # original file name: sys.pyi """sys Modul-Stub/Schnittstelle für fullmo MovingCap Servoantriebe / CODE / Micropython Das `sys` Modul bietet systemspezifische Parameter und Funktionen für MovingCap MicroPython. Dieses Modul umfasst: - Standard-MicroPython/CPython sys-Modulfunktionen (Teilmenge von v1.9.4) - MovingCap-spezifische Erweiterungen für Echtzeit-Steuerungsanwendungen - Kompatibilitätsfunktionen für ältere MovingCap CANopen-Antriebe mit pymite/Python-On-A-Chip Standardfunktionen: - version - Python-Versionszeichenfolge - version_info - Python-Versions-Tupel (major, minor, patch) - implementation - Implementierungsdetails (name, version, platform, platver) - platform - Plattform-Identifikationszeichenfolge - byteorder - Native Byte-Reihenfolge ('little' oder 'big') - exit([retval]) - Programm beenden - print_exception(exc, [file]) - Exception-Traceback ausgeben - exc_info() - Aktuelle Exception-Informationen als Tupel abrufen MovingCap-Erweiterungen: - cycle_time_ms(period) - Hilfsfunktion für Schleifen mit fester Zykluszeit - time() - Kompatibilität: Millisekunden-Timer abrufen (verwenden Sie time.ticks_ms() in neuem Code) - wait(ms) - Kompatibilität: Verzögerung in Millisekunden (verwenden Sie time.sleep_ms() in neuem Code) Für die vollständige MicroPython sys-Moduldokumentation siehe: https://docs.micropython.org/en/v1.9.4/pyboard/library/sys.html Verwendungsbeispiel: import sys import time def do_control_task(): dummy = 2000 for runs in range((time.ticks_ms() % 100) + 10): dummy = dummy - 20 dummy2 = dummy + 10 # Python-Version prüfen print("sys.version (python) = %s" % sys.version) # Implementierungsdetails prüfen print("sys.implementation = %s" % repr(sys.implementation)) # Steuerungsschleife mit fester Zykluszeit sys.cycle_time_ms(0) # Zyklustimer zurücksetzen for cycle in range(20): # Steuerungsoperationen durchführen do_control_task() remaining = sys.cycle_time_ms(10) # 10ms Zykluszeit sicherstellen print ("10 msec Zyklus, Runde = %d, verbleibende Zeit = %d" % (cycle, remaining)) # Exception-Behandlung try: risky_operation() except Exception as e: sys.print_exception(e) sys.exit(1) """ __author__ = "Oliver Heggelbacher" __email__ = "oliver.heggelbacher@fullmo.de" __version__ = "50.00.10.xx" __date__ = "2026-01-19" # Modulattribute version: str """Python-Sprachversionszeichenfolge (z.B. "3.4.0").""" version_info: tuple """Python-Sprachversion als Tupel (major, minor, patch).""" class _Implementation: """Implementierungsinformationsobjekt.""" name: str """Implementierungsname ("micropython").""" version: tuple """MicroPython-Versions-Tupel (major, minor, micro).""" platform: str """Plattformname ("movingcap").""" platver: tuple """MovingCap-Versions-Tupel (dev_type, major, minor, revision).""" implementation: _Implementation """Implementierungsdetails einschließlich MicroPython- und MovingCap-Versionen.""" platform: str """Plattform-Identifikationszeichenfolge.""" byteorder: str """Native Byte-Reihenfolge: 'little' oder 'big'.""" stdin: object """Standard-Eingabestrom.""" stdout: object """Standard-Ausgabestrom.""" stderr: object """Standard-Fehlerstrom.""" def exit(retval: int = 0): """Programm durch Auslösen einer SystemExit-Exception beenden. :param retval: Exit-Code (0 für Erfolg, ungleich Null für Fehler). Standard ist 0. :type retval: int :raises SystemExit: Wird immer ausgelöst, um das Programm zu beenden. Beispiel: if error_condition: sys.exit(1) # Beenden mit Fehlercode 1 """ pass def print_exception(exc, file=None): """Exception-Traceback in eine Datei oder stdout ausgeben. Gibt den Exception-Typ, die Nachricht und den Traceback in einem lesbaren Format aus. Wenn keine Datei angegeben ist, erfolgt die Ausgabe nach stdout. :param exc: Auszugebendes Exception-Objekt. :type exc: Exception :param file: Optionaler Dateistrom für die Ausgabe. Wenn None, wird stdout verwendet. :type file: dateiähnliches Objekt oder None Beispiel: try: risky_operation() except Exception as e: sys.print_exception(e) # oder in Datei schreiben: # with open('error.log', 'w') as f: # sys.print_exception(e, f) """ pass def exc_info() -> tuple: """Informationen über die aktuelle Exception abrufen. Gibt ein Tupel zurück, das (type, value, traceback) der aktuellen Exception enthält. Wenn keine Exception behandelt wird, wird (None, None, None) zurückgegeben. :return: Tupel aus (exception_type, exception_value, traceback). :rtype: tuple Beispiel: try: 1 / 0 except: exc_type, exc_value, exc_tb = sys.exc_info() print(exc_type) # """ pass def cycle_time_ms(period: int) -> int: """Hilfsfunktion für Schleifen mit fester Zykluszeit für Echtzeit-Steuerungsanwendungen. Diese Funktion stellt sicher, dass eine Steuerungsschleife mit einer präzisen, festen Zykluszeit läuft, indem sie unterschiedliche Ausführungszeiten des Schleifenkörpers kompensiert. Sie hält das Timing ein, indem sie bei Bedarf verzögert, um die Zielperiode zu erreichen. Verwendungsmuster: 1. Mit negativem Wert (z.B. -1) aufrufen, um den Zyklustimer zurückzusetzen/zu initialisieren 2. Mit gewünschter Periode (ms) am Ende jeder Schleifeniteration aufrufen Die Funktion berechnet die verbleibende Zeit bis zum Start des nächsten Zyklus und verzögert entsprechend. Wenn der Schleifenkörper länger als die Periode dauert, kehrt die Funktion sofort zurück (keine Verzögerung) und der Rückgabewert ist negativ oder null. :param period: Ziel-Zykluszeit in Millisekunden. Negativen Wert verwenden, um Timer zurückzusetzen. :type period: int :return: Verbleibende Zeit in Millisekunden bis zum Abschluss des Zyklus. Negativ bei Überlauf. :rtype: int Beispiel: import sys # Zyklustimer initialisieren sys.cycle_time_ms(-1) while True: # Steuerungsaufgaben durchführen (variable Ausführungszeit) read_sensors() calculate_control() update_outputs() # Feste 10ms Zykluszeit sicherstellen remaining = sys.cycle_time_ms(10) if remaining < 0: print("Warnung: Zyklusüberlauf um", -remaining, "ms") Hinweis: Für hochpräzise Echtzeit-Steuerungsschleifen, bei denen konsistentes Timing kritisch ist. Die tatsächliche Zykluszeit kann aufgrund der System-Planung kleine Abweichungen aufweisen. """ pass def time() -> int: """Aktuelle Systemzeit in Millisekunden abrufen. Gibt den Millisekundenzählerwert zurück. Dies ist eine Kompatibilitätsfunktion für ältere MovingCap CANopen-Antriebe mit pymite/Python-On-A-Chip. **Veraltet:** Verwenden Sie `time.ticks_ms()` aus dem `time` Modul für neue Anwendungen. :return: Aktuelle Zeit in Millisekunden seit Systemstart. (Micropython small int, signierte 30-Bit Ganzzahl in der aktuellen Implementierung). :rtype: int Beispiel: start = sys.time() # ... etwas tun ... elapsed = sys.time() - start print(f"Operation dauerte {elapsed} ms") Siehe auch: time.ticks_ms() - Bevorzugte Funktion für neuen Code """ pass def wait(ms: int): """Für die angegebenen Millisekunden warten. Verzögert die Ausführung für die angegebene Anzahl von Millisekunden. Dies ist eine Kompatibilitätsfunktion für ältere MovingCap CANopen-Antriebe mit pymite/Python-On-A-Chip. **Veraltet:** Verwenden Sie `time.sleep_ms()` aus dem `time` Modul für neue Anwendungen. :param ms: Anzahl der Millisekunden zum Warten. :type ms: int Beispiel: sys.wait(100) # 100 Millisekunden warten Siehe auch: time.sleep_ms() - Bevorzugte Funktion für neuen Code """ pass