While Loop



  • Hallo wie kann ich am besten eine while Schleife takten, damit sie genau alle 1ms ausgeführt wird. Da wenn ich sleep(1) schreibe der schleifendruchlauf ja dan 1ms + die benötigte zeit in der für die Berechnungen braucht.

    gruß tom



  • Was ist denn der Hintergrund? Vielleicht gibt es ja eine bessere Lösung.

    Ich würde auch nicht annehmen dass Sleep exakt 1ms warten kann. Ich glaube mich zu erinnern, dass das sleep gar nicht so präzise ist.



  • @Tom95 sowas macht man mit Interrupts

    Oder im Polling.
    Du schaust am Anfang der Schleife nach, ob die Zeit schon rum ist.

    Es gibt auch Routinen, die kürzer warten können. Exakt ist das aber alles nicht, zumal du aufpassen musst, welche Zeit (Echte Zeit oder CPU-Zeit oder ..) gewartet wird.


  • Mod

    Weiterhin sind typische Time-Slices in Muiltitaskingsystemen von der Größenordnung 10ms. Macht die Sache also auch nicht einfacher, denn man kann unter "normalen" Umständen gar nicht davon ausgehen, dass man ein Programm auf dieser Zeitskala noch sinnvoll timen kann.

    Daher ist It0101s Frage, wozu du das für nötig hältst, doppelt wichtig. Es gibt natürlich prinzipiell Lösungen für Anwendungen mit Spezialanforderungen (z.B. im Multimediabereich), aber Leute, die das wirklich brauchen, wissen dann meist auch schon wie das geht.



  • Es hängt jetzt auch ein wenig davon ab, ist die Zeitschranke für ein PC mit Windows oder Linux oder ein Microcontroller. Für's erste dürfte es extremst schwierig sein, diese Zeitschranke einzuhalten. Beim Zweiten ist es zumindest denkbar!

    Grüße



  • Ich möchte jede ms meine ganzen Ein- und Ausgänge von Twincat lesen und schreiben.



  • @Tom95 sagte in While Loop:

    Ich möchte jede ms meine ganzen Ein- und Ausgänge von Twincat lesen und schreiben.

    Das sollte als Real-Time-System entsprechende Funktionen mitbringen.



  • @Tom95 Ich würde mal in der TwinCAT Doku nachsehen wie das Ding gedacht ist verwendet zu werden. Da werden ja wohl hoffentlich Beispiele drinnen sein.

    Natürlich kannst du einen Thread mit hoher Priorität erzeugen und in diesem dann entweder die Zeit pollen oder schauen ob du es mit Sleep ausreichend genau hinbekommst. Würde mich aber wundern wenn das die "korrekte" Art und Weise wäre das Ding zu verwenden. Wenn du ein Stück Hardware hast das deinen Thread regelmässig aufwecken kann, ist das einhalten eines Taktes wesentlich einfacher als wenn du versuchst es ohne irgendwelche Zusatzhardware zu machen. Dabei hast du immer noch das Problem dass Windows kein Realtime-OS ist - aber zumindest sollte es besser gehen als ohne "aufweckende" Hardware.


Log in to reply