Timergenauigkeit



  • Hey ho,

    ich bin mir nich so ganz sicher ob das hier die richtige Abteilung ist, könnte auh gut woanders hinpassen.
    Mein Problem:
    Ich benötige einen Timer der bis 10ms genau arbeitet. Nun ist die Frage: Ist das mit einem normalen Windows System möglich oder benötigt man für solche Operationen Realtimesysteme?
    Ich habe schon die Win32Timer und Multimediatimer getestet, allerdings mit mäßigem Erfolg. Sobald der Timer unter 500 ms arbeiten soll wirds ungenau.
    Wenn jemand Funktionen in Visual C++ kennt die das bewerkstelligen wäre ich für eine kurze Antwort sehr dankbar.

    PS: Ist es möglich solche Zeiten mit einer eigenen Timer Klasse zu erreichen?

    Grüße schwabi



  • Du bringst hier was durcheinander....
    Windows (NT/XP) ist *nie* ein Realtime OS (weder gewesen noch in Zukunft).
    D.h. wenn Du *harte* Ecxhtzeit brauchst (egal mit welcher Auflösung), dann kannst Du Windows *nicht* nehmen.

    Wenn Du damit leben kannst, dass es zu 90% immer passt, dann reicht Windows vermutlich aus. Du musst nur "timeBeginPeriod(1)" aufrufen und schon läuft Dein OS mit einer höheren "Scheduler-Last" und einer kleineren Zeitscheibe so dass man Auflösungen bis zu 2 ms hinbekommt.
    Aber eben nicht immer!



  • eine eingen timer über einen Thread proggen.. vll. geht der genau.. muss ich selber auch mal probierne:)



  • Wenn das OS die Beschränkung ist, dann geht es logischerweise nicht genauer...
    Es sei denn Dein Timer ist "unter" dem OS (was z.B. diverse Echtzeiterweiterung für Windows machen).

    PS: Es geht nicht um Genauigkeit! sondern um "Determinismus"!



  • erklär mal dsa mit dem "determinismus" wie ist es den möglich ne rel. genaue echtzeitfähige anwendung in windows zu realiseiren oder geht das vom kernel her schon nich?



  • BorisDieKlinge schrieb:

    erklär mal dsa mit dem "determinismus" wie ist es den möglich ne rel. genaue echtzeitfähige anwendung in windows zu realiseiren oder geht das vom kernel her schon nich?

    es geht vom kernel her nicht.
    man kann nicht vorher wissen, wann ein thread wieder dran ist.
    das kann in 50µS oder in 3 tagen sein 😉
    deswegen gibt's realtime extensions, die priorität vor dem win-kernel haben. damit wird das laufzeitverhalten eines codes vorhersehbar.
    wenn die rtx dran ist, muss windoze warten...



  • kann man das denn erzwingen bspw. wenn man mit thread arbeitet das die in-realtime verarbeitet werden?



  • Also nochmals: Windows ist kein Echtzeitbetriebssyytem!

    Somit kannst Du in Windows (NT/XP) keine Echtzeit erzwingen... Und "Echtzeit" hat nix mit "Zeit" zu tun, sondern nur mit "Determinismus" (also dass es zu 100% garantiert ist, dass ein Thread nach einer definierten Zeit wieder an die Reihe kommt).

    Anders sieht es in Windows CE aus, da kann man harte Echtzeit erzielen (oder auch bei diversen Echtezeiterweiterungen für Windows für RTX (welches z.B. von Siemens als Soft-SPS verwendet wird).



  • da gibts doch so ne windows version von Siemens (SPS) welche eine modifizierten kernel für echtzeit hat... kan das sein?

    Sorry steht ja schon oben;)



  • ICh hab so ein ähnliches Problem, nur steh ich noch was weiter am Anfang.

    Ich Brauche einen Timer, der genauer als der WM_TIMER ist, da ich einen Schrittmotor ansteuern will.

    Ich will/wollte einen Multimediatimer nehmen, aber hänge etwas bei der initialisierung und dem allgemeinen Gebrauch fest (also wo ich was einbetten muss, damit er läuft). Kann mir da einer Weiterhelfen?

    Ich brauch keine Echtzeit sondern einen eine aufösung <20ms.



  • Was ist bei "timeSetEvent" unklar?



  • unklar ist mir, WO ich das einstzen muss. Als extra Funktion oder als Event beim z.b. Buttenklick oder als teil der normalen Timerfunktion. Das ist mein Problem.

    hab zu dem Thema leider keine Bsp. gefunden. Sons würde ich ja nicht fragen...



  • Kann man auf RTX windows stinknormale Anwendung welche in MFC programmiert wurden laufen lassen? oder sind da andere Biblotheken erforderlich? grüße



  • @BorisDieKlinge: RTX Windows sit ein "Aufsatz" (besser Untersatz) für Windows. Dein Windows bleibt ganz normal erhalten. Auch laufen da alle Anwenungen ganz normal. Nur unter dem Windows läuft das RTX und wenn Du die RTX-API verwendest, kannst Du da auch Echtzeit-Tasks laufen lassen. Aber natürlich nur unter verwendung der RTX-API; hat nix mit WinAPI zu tun!

    @Uruk-h4j: Wenn Du den Timer bruachst, dann startest Du ihn mit der Funktion und wenn nicht mehr dann löscht Du ihn wieder mit timeKillEvent



  • schon mal mit der RTX api gecodet... d.h. normal anwendunge welche nicht unter der RTX API gecodet wurden können nich in echtzeit ausgeführt werden?



  • BorisDieKlinge schrieb:

    schon mal mit der RTX api gecodet

    Nicht produktiv....

    BorisDieKlinge schrieb:

    normale anwendungen welche nicht unter der RTX API gecodet wurden können nich in echtzeit ausgeführt werden?

    Nein, natürlich nicht. WIe sollten sie denn auch? *Windows* wird ja durch den RTX-Kern *nicht* Echtzeitfähig! sondern nur RTX ist echtzeitfähig!



  • es ist ja sogar eher nachteilig für normale windows-programme, denn eine RTX task bekommt die rechenzeit auf jeden fall, windows zieht dabei immer den kürzeren...



  • hmm ok... ich denke mal das RTX nicht unbedingt groß verwendet wird bzw. verbreitet ist. wird die API nicht unbedingt umpfangreich sein oder (verglichen mit der MFC)



  • BorisDieKlinge schrieb:

    hmm ok... ich denke mal das RTX nicht unbedingt groß verwendet wird bzw. verbreitet ist.

    richtig. ist auch irgendwie doof, sowas mit 'nem pc zu machen, auf dem schon windows rumeiert. lieber eine externe schaltung mit einem microcontroller o.ä. dranstöpseln und schon haste echtzeit. das ist so ganz nebenbei auch noch viel kostengünstiger als eine RTX lizenz...



  • naja um komplexe echtzeitsteurugne zu coden.. ist C/c++ sicherlich angenehmer als SPS...


Anmelden zum Antworten