Entwickler-Ecke

Windows API - µs Timer


mister_x - Mo 08.10.07 15:50
Titel: µs Timer
sers leute
ich brauch einen timer taktung<<1ms
also im µs oder ns bereich....
mit den standard timern kommt man ja nur auf 1ms runter

im net hab ich was über den Mutlimedia Timer von windows gelesen der soll um einiges schneller sein....
nur hab ich bis jetzt noch kein tut gefunden...
also meine frage kennt sich jemand damit aus oder kann mir jemand was anderes vorschlagen

Gruß Mister_X


Kroko - Mo 08.10.07 15:52

(a) brauchen kannst Du
(b) bekommen wirst du nicht
(c) nicht mal Windows kommt auf 1ms
(d) suche mal hier, die Frage gab es schon öfters


elundril - Mo 08.10.07 15:56

wenn mir die frage erlaubt ist: wozu brauchst du überhaupt nen timer mit unter 1 ms??

lg elundril


mister_x - Mo 08.10.07 15:59

user profile iconelundril hat folgendes geschrieben:
wenn mir die frage erlaubt ist: wozu brauchst du überhaupt nen timer mit unter 1 ms??

lg elundril

zur datenübertragung an einem IO-Port


covel - Mo 08.10.07 16:29

Hi,

ich brauchte sowas ähnliches für eine oszilloskop-funktion, habe eine "Endloss-Schleife" benutzt. Vielleicht hilft dir das ja weiter...


Sidorion - Mo 08.10.07 17:22

Versuchs mal mit QueryPerformanceFrequency im FormCreate und im Application.OnIdle mit QueryPerformanceCounter. Mit ersterem kriegst Du Ticks/sekunde, mit letzterem aktuelle Tickzahl. Jetzt kannst Du nach einer bestimmten Tickzahl ein Signal senden. Aber Vorsicht: im OnIdle musst Dudann Done auf false setzten und deine CPU-Last springt auf 100% (andere Prozesse kommen trotzdem dran).
p.s. Bei Mehrprozessor(Kern) Systemen musst Du Deine Anwendung auf einen Prozessor festnageln, da die einen unterschiedlichen tickcount haben.


elundril - Mo 08.10.07 17:30

Wegen eines Hinweises meines Infp-Professors:

http://www.torry.net/quicksearchd.php?String=hires&Title=Yes

ein timer mit unter 1 ms! viel spass damit!

lg elundril


Reinhard Kern - Mo 08.10.07 19:13
Titel: Re: µs Timer
user profile iconmister_x hat folgendes geschrieben:
sers leute
ich brauch einen timer taktung<<1ms
also im µs oder ns bereich....
mit den standard timern kommt man ja nur auf 1ms runter

im net hab ich was über den Mutlimedia Timer von windows gelesen der soll um einiges schneller sein....
nur hab ich bis jetzt noch kein tut gefunden...
also meine frage kennt sich jemand damit aus oder kann mir jemand was anderes vorschlagen

Gruß Mister_X


Dazu braucht man professionelle Hardware, z.B. einen Universalzähler. Für ein Softwaresystem nicht realisierbar, und mit Windows noch weniger als garnicht, da können schon die Sekunden unzuverlässig sein (ist bei Linux nicht anders).

Gruss Reinhard


elundril - Mo 08.10.07 22:50

HAALLLLLOOO! Guckts ihr vielleicht mal auf den link. da steht doch eindeutig was anderes oder??

lg elundril


Kroko - Di 09.10.07 04:20

user profile iconelundril hat folgendes geschrieben:
HAALLLLLOOO! Guckts ihr vielleicht mal auf den link. da steht doch eindeutig was anderes oder??

lg elundril

Gucken schon, nur fehlt mir der Glaube daran!


OlafSt - Di 09.10.07 13:07

Dieser "HRTimer" ist noch immer dem Scheduler von Windows unterworfen. Findet also eine Nanosekunde vor Ablauf der Wartezeit ein Taskwechsel statt, dann gibts eben keinen Event, bis der Scheduler wieder dem Prozess ein neues Stück von der Zeitscheibe zuweist - wann immer das sein mag. Der Timer ist also ebenso ungenau wie jeder andere auch.

Windows ist KEIN RT-Betriebssystem, derartige Timerauflösungen sind nur mit Tricks zu machen (Realtime-Prio's und so weiter), die den Rest des Systems schier unbenutzbar machen. Besser ist es, das Timern einem Stück Hardware zu überlassen (Einsteckkarte, µC oder ähnliches) und Windows nur die Anzeige zu überlassen.


Carla - Di 09.10.07 13:20

user profile iconOlafSt hat folgendes geschrieben:
Besser ist es, das Timern einem Stück Hardware zu überlassen (Einsteckkarte, µC oder ähnliches) und Windows nur die Anzeige zu überlassen.


Na ganz stimmt das so auch nicht.
Es gibt schon Software, welche einen hochgenauen Timer und Echtzeitbetrieb auch unter Windows zuläßt.
Nur ist das nicht ganz billig.
Ich habe in einer Anwendung unter anderen einen 1 ms Task laufen. Dieser arbeitet hochgenau. Läuft unter Windows (XP) in der SoftSPS von Beckhoff.
Für Bastelzwecke kann man sich die Demo der SoftSPS laden, die läuft 30 Tage.
Programmierbar in Strukturierten Text - das ist ein Pascaldialekt.
Ein weiteres Tool wird von Kitiara-Software oder so ähnlich angeboten.
Hier wird, ebenfalls unterhalb von Windows ein Timer getaktet, welcher in vorgegebenen Zyklen die eigene Software ruft.
Mit Windows-API sollte man in dieser Software dann aber tunlichst nicht arbeiten.

Gruß
Carla


Reinhard Kern - Di 09.10.07 18:15

user profile iconCarla hat folgendes geschrieben:

...
Ich habe in einer Anwendung unter anderen einen 1 ms Task laufen. Dieser arbeitet hochgenau. Läuft unter Windows (XP) in der SoftSPS von Beckhoff.
...
Gruß
Carla


Hallo Carla,

bist du wirklich sicher, dass das so ist wie du es beschreibst? Normalerweise ist es bei industriellen Lösungen umgekehrt: Windows läuft als Task unter einem Echtzeitsystem, und zwar mit niedriger Priorität - so kann Windows nicht die Interrupt-Routinen des Echtzeitsystems behindern.

Ein Echtzeitsystem kann schon Zeitauflösungen im Bereich µsec erreichen, für nsec braucht man aber doch Hardware.

Gruss Reinhard


Carla - Mi 10.10.07 08:58

user profile iconReinhard Kern hat folgendes geschrieben:


bist du wirklich sicher, dass das so ist wie du es beschreibst? Normalerweise ist es bei industriellen Lösungen umgekehrt: Windows läuft als Task unter einem Echtzeitsystem, und zwar mit niedriger Priorität - so kann Windows nicht die Interrupt-Routinen des Echtzeitsystems behindern.

Ein Echtzeitsystem kann schon Zeitauflösungen im Bereich µsec erreichen, für nsec braucht man aber doch Hardware.

Gruss Reinhard


Ja eine SoftSPS liegt unterhalb von Windows und wird von einem Hardwaretimer getriggert.
Die Jitterzeiten sind garantiert konstant.
Wie bei einer SPS üblich, können Task mit unterschiedlichen Zykluszeiten definiert werden.
Die kürzest mögliche Zeit liegt unter 10 µsec.
Interessant ist, das bei einer relativ ausgelasteten SPS (das Teil steuert einen Prüfstand) kaum Performance-Einbrüche in
Windows zu bemerken sind.
Heute verwende ich diese Technik jedoch nicht mehr. Zum gleichen Preis wie die SoftSPS - Software, erhält man heute bereits
eine Hardware Mini-SPS. Das vereinfacht die Entwicklung erheblich und macht die Anwendung sicherer.

Gruß
Carla