Hallo zusammen,
bin leider Anfänger und habe demendsprechend keine Ahnung, wo ich anfangen sollte den Fehler zu suchen.
Ich will auslesen, wie lange seit dem letzten auslösen eines Kontaktes vergangen ist, und mache das über VB.net mit einem Timer.
Private Sub Timer1_Tick...
den habe ich auf 10 Millisekunden laufen und lasse eine laufzeitvariable frame +=1 weiterlaufen
Im Timer1_Tick lese ich den Warrior aus
Res = IowKitReadNonBlocking(iowHandles(0), 0, data(0), N)
und überprüfe ob data(1)=255 == nicht ausgelöst ist oder nicht
dann speichere ich den Wert von frame halt als an oder aus ab und kann über die letzten Werte die Differenz in 10tel Millisekunden zählen.
Eigentlich wollte ich jetzt damit einen Flashfilm steuern, aber schon jetzt beim testen hängt sich der Warrior immer wieder auf.
Also es geht drei vier auch mal sechs Schaltungen ich bekomme die frame Variable auch soweit als an oder aus richtig angezeigt, aber dann hängt sich der Warrior auf.
Ich muss den dann komplett vom USB abziehen und wieder dranstöplseln, bis der wieder geht.
Die Diode, die ich auf dem Warrior habe, zeigt zwar an, das der Warrior die Schaltung noch liest, aber die Verbindung zum Rechner USB - VB.net ist tot.
Je langsamer ich den Warrior stelle Timer = 50 oder 100 Millisekunden läuft er gefühlt etwas stabiler.
Aber eigentlich wollte ich so genau wie möglich messen....
Wie schnell kann man den so mit dem Warror messen?
Ist das mit dem Timer die einzigen Möglichkeit ?
Ist mein Warror vielleicht kaputt ?
Hilfe Danke Geisi
IO Warrior hängt sich auf
Moderator: Guido Körber
- Christoph Jung
- Posts: 673
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: IO Warrior hängt sich auf
Hallo,
Ein Auslesen alle 10 ms wird mit einem normalem Timer wird nicht funktionieren, da Windows nicht so schnell ist. Windows hat in der Regel ohne dass andere Programme laufen ca. 16ms. Sobald aber ein Programm etwas intensiver Rechenleistung verlang steigt diese zwit bis auf 50ms. Um das zu umgehen muss man mit einem Multimedia-Timer arbeiten. Der schafft 1-2 ms.
Die Frage ist aber eher: Hängt sich der IO-Warrior auf oder das Programm. Meist liegt es am Programm, weil man dort was vergessen hat oder unnötige Umwege geht (variablen schaufeln, wo es nichts zu schaufeln gibt).
Ein wenig Quellcode wäre ganz gut. Am besten die Timerfunktion.
Ein Auslesen alle 10 ms wird mit einem normalem Timer wird nicht funktionieren, da Windows nicht so schnell ist. Windows hat in der Regel ohne dass andere Programme laufen ca. 16ms. Sobald aber ein Programm etwas intensiver Rechenleistung verlang steigt diese zwit bis auf 50ms. Um das zu umgehen muss man mit einem Multimedia-Timer arbeiten. Der schafft 1-2 ms.
Die Frage ist aber eher: Hängt sich der IO-Warrior auf oder das Programm. Meist liegt es am Programm, weil man dort was vergessen hat oder unnötige Umwege geht (variablen schaufeln, wo es nichts zu schaufeln gibt).
Ein wenig Quellcode wäre ganz gut. Am besten die Timerfunktion.
Software developer
Re: IO Warrior hängt sich auf
Huhu, hier der Timer.
da ist echt nicht mehr variablen geschaufel drinne.
Den Flashcall lass ich eigentlich raus und dennoch hakt es.
Was ist denn ein Multimedia Timer ?
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim Res As Integer
Dim N As Integer
Dim Pid As Integer
' Perform a read
Pid = IowKitGetProductId(iowHandles(0))
If Pid = IOWKIT_PID_IOW24 Then
N = 3
Else
If Pid = IOWKIT_PID_IOW40 Then
N = 5
Else
If Pid = IOWKIT_PID_IOW56 Then
N = 8
End If
End If
End If
' Read from IO-Warrior
Res = IowKitReadNonBlocking(iowHandles(0), 0, data(0), N)
If (data(1) = 127) Then
If (frame - an_frame) > 1 Then
Label1.Text = "differenz:" & (frame - an_frame)
'Call AxShockwaveFlash1.SetVariable("vb_watt_li", (frame - an_frame))
End If
an_frame = frame
End If
frame = frame + 1
End Sub
da ist echt nicht mehr variablen geschaufel drinne.
Den Flashcall lass ich eigentlich raus und dennoch hakt es.
Was ist denn ein Multimedia Timer ?
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim Res As Integer
Dim N As Integer
Dim Pid As Integer
' Perform a read
Pid = IowKitGetProductId(iowHandles(0))
If Pid = IOWKIT_PID_IOW24 Then
N = 3
Else
If Pid = IOWKIT_PID_IOW40 Then
N = 5
Else
If Pid = IOWKIT_PID_IOW56 Then
N = 8
End If
End If
End If
' Read from IO-Warrior
Res = IowKitReadNonBlocking(iowHandles(0), 0, data(0), N)
If (data(1) = 127) Then
If (frame - an_frame) > 1 Then
Label1.Text = "differenz:" & (frame - an_frame)
'Call AxShockwaveFlash1.SetVariable("vb_watt_li", (frame - an_frame))
End If
an_frame = frame
End If
frame = frame + 1
End Sub
- Christoph Jung
- Posts: 673
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: IO Warrior hängt sich auf
Ich seh jetzt auch keine Ungereimtheiten auf den ersten Blick. Leider ist Basic nicht ganz meine stärke und auch schon etwas altbacken.
Wie lang ist denn jetzt der Timerintervall eingestellt?
Was heißt "trotzdem hackt es"?
Ein Multimediatimer ist wie der Name schon sagt für Multimedia gedacht. Ohne diesen würde man keine MUsik hören können, weil das System ja nur ca.20ms als Maximum Timer zu lässt. Das würde bescheiden klingen...
Einfach mal nach Googlen.
Wie lang ist denn jetzt der Timerintervall eingestellt?
Was heißt "trotzdem hackt es"?
Ein Multimediatimer ist wie der Name schon sagt für Multimedia gedacht. Ohne diesen würde man keine MUsik hören können, weil das System ja nur ca.20ms als Maximum Timer zu lässt. Das würde bescheiden klingen...
Einfach mal nach Googlen.
Software developer
-
- Posts: 389
- Joined: Sun Feb 13, 2005 1:22 pm
- Location: Gerblingerode / Duderstadt
- Contact:
Re: IO Warrior hängt sich auf
Hallo Herr Jung,
Leider gibt es immer noch das Vorurteil das Basic langsam ist aber neue Programmiersprachen müssen nicht immer besser sein !
@geisi
Läuft denn deinen Schaltung mit All-In-One, dort frage ich die Ports alle 50 mS ab,
-verwendest Du ein Kit oder was selbst gelötetes
-wie lang ist dein USB-Kabel
-schon mal an einem andere PC versucht
Gruss Ralf
... albacken ... HotBasic ist z.B. derzeit das schnellste was es gibt und RQ ist auch immer noch schneller als C !Leider ist Basic nicht ganz meine stärke und auch schon etwas altbacken.
Leider gibt es immer noch das Vorurteil das Basic langsam ist aber neue Programmiersprachen müssen nicht immer besser sein !
in RQ komme ich z.B. bis ca 2-3 ms runter.Ein Auslesen alle 10 ms wird mit einem normalem Timer wird nicht funktionieren, da Windows nicht so schnell ist. Windows hat in der Regel ohne dass andere Programme laufen ca. 16ms. Sobald aber ein Programm etwas intensiver Rechenleistung verlang steigt diese zwit bis auf 50ms. Um das zu umgehen muss man mit einem Multimedia-Timer arbeiten. Der schafft 1-2 ms.
@geisi
Läuft denn deinen Schaltung mit All-In-One, dort frage ich die Ports alle 50 mS ab,
-verwendest Du ein Kit oder was selbst gelötetes
-wie lang ist dein USB-Kabel
-schon mal an einem andere PC versucht
Gruss Ralf