Anzeige
Archiv - Navigation
656to660
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
656to660
656to660
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Alle 200ms einen Wert aufzeichnen

Alle 200ms einen Wert aufzeichnen
26.08.2005 11:45:44
michael
Hallo,
ich stehe vor dem Problem alle 200ms über einen DDE-Server Werte auszulesen und in Excel mit Zeit und Wert zu protokollieren.
In VB gibt es über die Funktion Timer die Möglichkeit alle 200ms (vielleicht auch noch kürzer) einen Wert aufzuzeichnen. Sowas hab ich zumindest mal in einem Bsp gesehen. Jedoch hab ich kein VB und schon gar nicht eine Ahnung davon...
Gibt es diese Möglichkeit mit VBA in Excel?
Ich habe 3 Lösungsansätze probiert.
1) mit Sleep, da wartet die Schleife 200ms und ließt anschließend die Werte aus. Leider wird die Loop nicht immer in gleichen Zeiten durchlaufen, sodaß ich einen bestimmten Wert (z.B. 10ms) abziehen könnte. Nach ca. 30 min summieren sich die Laufzeitunterschiede zu einer deutlichen Abweichung auf.
Private Declare &ltpre&gt
Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
.
.
.
sngStart = Timer
n = 0 'Schleifenzähler

Do
n = n + 1
Sleep 197 '200 'Zeit in msec
... Werte lesen und schreiben...
Loop While n &lt= 9000
1b) ich habe dann versucht, jeweils die Zeit für einen Schleifendurchlauf zu ermitteln, die dann mit Sleep 200 - Dauer abgezogen wird, um die jeweiligen Laufzeitunterschiede auszugleichen. Geht leider auch nur bedingt, da mittlerweile der eigentliche Abfrageprozess schneller abläuft als die drumrum gestrickten Abfragen zur
Laufzeitermittlung ...
2) dann versuchte ich vor dem AUfruf, der die Werte liest und schreibt, eine "Warteschleife" zu kreieren...
.
.
.
sngStart = Timer
n = 0 'Schleifenzähler

Do
n = n + 1

Do Until Timer &gt= sngStart + n * 0.2 'statt Sleep - puffert Laufzeitunterschiede der Loop
If Timer &gt= sngStart + n * 0.2 Then Exit Do
Loop
... Werte lesen und schreiben...
Loop While n &lt= 9000
nur bremst mir die Do Until Loop den Rechner so aus, dass er überhaupt nicht mehr mit dem DDE-Server (Werte auslesen) kommuniziert. Ich sehe zwar, dass mir schon alle 200ms ein Wert geschieben wird, der ist leider 0, da nichts mehr ausgelesen wird...
3) Application.OnTime - nur kann ich hier (lt. Bsp in der Hilfe) nur Intervalle &gt=1sec realisieren. Kann man durch zusätzliche Deklarationen ähnlichem dem Sleep oben, in den 200msec-Bereich vordringen?
&ltpre&gt
Sub CommandButton1_Click()
...
...
...
sngStart = Timer
n = 0 'Schleifenzähler
Call TimerStart
End Sub&lt/pre&gt
&ltpre&gt
Sub TimerStart()
n = n + 1
NextTime = sngStart + n * 0.2
Applikation.OnTime earliesttime:=NextTime, procedure:="LogStart", schedule:=True
End Sub&lt/pre&gt
&ltpre&gt
Sub LogStart()
... Werte einlesen...
If n &lt= 9000 Then Call TimerStart Else Exit Sub
p = n 'Übergabewert zw. Start- und Stopschleife
End Sub&lt/pre&gt
Ich bin für jeden Tip dankbar!
Viele Grüße und Dank im voraus
Michael

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle 200ms einen Wert aufzeichnen
26.08.2005 16:45:49
Leo
Hi,
versuchs mal mit Private Declare Function GetTickCount& Lib "kernel32" ()
mfg Leo
AW: Alle 200ms einen Wert aufzeichnen
26.08.2005 16:54:42
michael
Hallo Leo,
danke für deine Hilfe.
Verstehe ich dich richtig? Meinst du ich schreibe nur o.g. Zeile vor die eigentlichen Macrozeilen vom Macro das Application.OnTime enthält, den Rest dann wie gehabt?
Danke
Michael
AW: Alle 200ms einen Wert aufzeichnen
26.08.2005 17:04:10
Leo
Hi,
OnTime ist für Intervall 200mS nicht geeignet. Tickkcount liefert die Millisekunden seit Windowsstart und ist besser geeignet als Timer, das der erstens um Mitternacht auf 0 zugeht und langsamer aufrischt, was wahrscheinlich zu deinen Timingproblemen führt.
Am besten währe ein richtiger Timer z.B. hier: http://rtsoftwaredevelopment.de/
kostenlos downloaden.
mfg Leo
Anzeige
AW: Alle 200ms einen Wert aufzeichnen
26.08.2005 17:19:48
michael
Hallo Leo,
danke!
Das muss ich mir mal in Ruhe anschauen. Hoffentlich versteh ichs.
Aber wie krieg ich deinen Vorschlag mit Private Declare Function GetTickCount& Lib "kernel32" () in meinem Problem unter?
Viele Grüße
Michael

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige