IOW24 vb software hängt sich beim lesen auf

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
jinx
Posts: 3
Joined: Sun Aug 16, 2009 3:36 pm

IOW24 vb software hängt sich beim lesen auf

Post by jinx »

Hallo alle zusammen !
ich wollte eigentlich nur einen port des iow24 mit dem iowsample abfragen.
leider stürzt das programm sofort ab wenn ich auf "read" drücke...
hat einer von euch eine idee was da falsch sein könnte ?

ich habe das starterkit mit dem iow24.

vielen dank im voraus !!

mfg
jinx
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW24 vb software hängt sich beim lesen auf

Post by Guido Körber »

Nein, die Software hängt sich nicht auf, sondern wartet auf Daten vom IO-Warrior und die kommen nur wenn sich an den Eingängen etwas ändert.
jinx
Posts: 3
Joined: Sun Aug 16, 2009 3:36 pm

Re: IOW24 vb software hängt sich beim lesen auf

Post by jinx »

oh....peinlich...

welcher port wird denn da abgefragt ?
p0.x oder p1.x ?

wie kann ich denn verhindern das er immer wartet ?
also ich hätte es am liebsten wenn die software alle paar ms die eingänge abfragt und schaut was gerade anliegt.

gruß
jinx
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW24 vb software hängt sich beim lesen auf

Post by Guido Körber »

Dazu bitte mal die einschlägigen Threads im Forum durchlesen und auch mal einen Blick ins Datenblatt werfen.
jinx
Posts: 3
Joined: Sun Aug 16, 2009 3:36 pm

Re: IOW24 vb software hängt sich beim lesen auf

Post by jinx »

hab ich mir auch gedacht und hab jetzt auch das meiste selbst gelöst...
eine sache ist da noch:
undzwar lese ich alle 1ms die ports aus...und ich hab auch gelesen in nem thread das ich dann immer nur einen buffer anfrage...
kann ich denn nicht direkt (ohne den umweg über den buffer) den status der ports abfragen um zu vermeiden das ich zeitweise nur "alte" daten erhalte ?

edit:
und eine sache hab ich noch vergessen:
gibt es einen "read" command mit dem ich die ports abfragen kann ohne das er auf eine änderung wartet ?

edit2:
also ich denke mal "readnonblocking" ist dafür das er nicht auf veränderungen wartet.

danke
jinx
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: IOW24 vb software hängt sich beim lesen auf

Post by friend-of-rq »

Hallo jinx,

versuche es mal mit getting current pin status Report-ID = 255 (FF)

Dazu musst du an das Interface(1) mit der ReportID-255 schreiben.

Danach musst Du mit Read oder ReadNoBlocking das Interface(1) (Buffer) lesen.
Dabei solltest Du immer prüfen ob der Report den Du gerade einliest die richtige ID hat,
das ist insbesondere wichtig wenn Du verschiedene Funktionen aktiviert hast.

IowKitRead gibt Dir den Inhalt des Buffers Interface(0/1) zurück, ist der Buffer leer wartet diese Funktion bis was reinkommt oder der eingestellte TimeOut Wert erreicht wurde.

IowKitReadNonBlocking wartet nicht wie IowKitRead, sondern gibt Dir den Inhalt des Buffers oder NICHTS zurück.

Grundsätzlich ist beim einlesen über das Interface(1) die Reoprt-ID zu beachten z.B.:
00 = Nichts Buffer ist leer
02 = IIC (Status)
03 = IIC (Data)
06 = LCD
09 = SPI
0C = RC5
19 = Switch-Matrix
1A = Switch-Matrix
FF = PIN Status

Wenn Du mit IowKitReadNonBlocking gleich nach dem Schreiben(Befehl ausgeben) liest, kann es sein das der Buffer noch leer ist, denn der Befehl muss erst verarbeitet werden.

Das Interface(1) liefert Dir nur Daten wenn Du zuvor eine Funktion aktiviert hast, die automatisch Daten liefert bei einem Änderung oder ein Kommando an das Interface(1) gesendet wurde das Daten anfordert.

Interface(0) liefert nur Daten wenn sich was an den IO-Ports geändert hat. Die Report-ID ist dabei immer auf 0.
Mit IowKitReadNonBlocking ist es deswegen nicht möglich, wenn alle Pins auf Null sind, diesen Datensatz von einem leere zu unterscheiden.
Wenn Du mit IowKitReadNonBlocking das Interface(0) abfragen möchtest solltest Du immer einen Pin des IOW auf High haben, denn dann kannst ungültige(leere) Reports daran erkennen das alle Daten-Bytes auf Null sind.

Gruss Ralf
Post Reply