IOWKitReadImmediate stürzt ab!

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
Spektakulum
Posts: 7
Joined: Sat Jul 30, 2005 7:33 pm

IOWKitReadImmediate stürzt ab!

Post by Spektakulum »

Hallo Forum,
leider habe ich arge Probleme mit dem ReadImmediate-Befehl - nach wenigen Sekunden lesen in einer Timerschleife (aktuell alle 256ms) reagiert das Programm nicht mehr und zeigt nur die Eieruhr.
Programm ist in Visual Basic 6, SDK-Version 1.5

Jemand eine Idee? Ich brauche das nur für eine Tasterabfrage, die ich wegen kritischer Kabellänge nicht über die Switchmatrix machen kann. Vorgehend schreibe ich $FF auf die letzten beiden Ports, der Systemhänger ist weg, sobald ich statt immediate readnonblocking nehme. Aufgrund des Puffers hängt dann aber mein Wert ca. eine halbe Sekunde hinterher, und ich finde es nicht so elegant, wenn ich jetzt schleifenmässig den Puffer immer leer lesen müsste!

Code: Select all

DIM Tastenmatrix as long
'USBPorts=5 da IOW40

    Res = IowKitReadImmediate(iowHandles(0), Tastenmatrix)
    If Res = USBPorts Then
         lblFehlersuche = "Immediate:" & Str$(Tastenmatrix)
    Else
        lblFehlersuche = "Ungültig:" & Hex$(Res) & Hex$(Tastenmatrix)
    End If
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

Re: IOWKitReadImmediate stürzt ab!

Post by rolf55 »

Also ich hab 4 iow40 also 256 Taster in Betrieb, und ohne Probleme.
Für eine Matrix:
Dim data0(8) As Byte
Dim data1(8) As Byte



Public Sub schalter_einlesen()
Dim res As Long

Dim i, c,
n = 1

i = 1
res = IowKitReadNonBlocking(iowHandles(0), IOW_PIPE_SPECIAL_MODE, data0(0), 8)
If data0(0) = &H1A Then
For c = 1 To 8
Taste(i) = Ist_Bit_Gesetzt(data0(1), c)
i = i + 1
Next c
For c = 1 To 8
Taste(i) = Ist_Bit_Gesetzt(data0(2), c)
i = i + 1
Next c
For c = 1 To 8
Taste(i) = Ist_Bit_Gesetzt(data0(3), c)
i = i + 1
Next c
For c = 1 To 8
Taste(i) = Ist_Bit_Gesetzt(data0(4), c)
i = i + 1
Next c
'-------------------------------------------
res = IowKitReadNonBlocking(iowHandles(0), IOW_PIPE_SPECIAL_MODE, data1(0), 8)
For c = 1 To 8
Taste(i) = Ist_Bit_Gesetzt(data1(1), c)
i = i + 1
Next c
For c = 1 To 8
Taste(i) = Ist_Bit_Gesetzt(data1(2), c)
i = i + 1
Next c
For c = 1 To 8
Taste(i) = Ist_Bit_Gesetzt(data1(3), c)
i = i + 1
Next c
For c = 1 To 8
Taste(i) = Ist_Bit_Gesetzt(data1(4), c)
i = i + 1
Next c
end if
i = 65
usw...
Nach der Abfrage aller Taste habe ich noch eine 0,5sec Warteschleife eingebaut um die Taster toggeln zu können. (natürlich mit DoEvents in der Schleife)
Hab die Schleife mal offengelassen damit es besser zu sehen ist.
Rolf
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

Re: IOWKitReadImmediate stürzt ab!

Post by rolf55 »

achso
das ganze läuft zusammen mit den Diodenmatrixen in eine Timer (wert 10)
Spektakulum
Posts: 7
Joined: Sat Jul 30, 2005 7:33 pm

Re: IOWKitReadImmediate stürzt ab!

Post by Spektakulum »

Danke, aber eine Tastenmatrix hatte ich vorher - jetzt sind die Taster einzeln an den Ports, um Probleme mit zu langen Leitungen zu vermeiden. Damals ist meine Tastenmatrix auch nach einigen Stunden gerne mal abgestürzt, der Rest der Portbeschaltung lief einwandfrei weiter!

Aber ich bin dran an dem Problem, werde wohl den Readnonblocking entweder gezielt solange abfragen, bis der Puffer leer ist, oder auch probieren, alle 10ms den Timer aufzurufen - bei mir sind es aktuell nur 128ms!
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IOWKitReadImmediate stürzt ab!

Post by Christoph Jung »

Bei ReadNonBlocking muss man den Puffer nicht explezit leeren. Einfach in die Timerschleife einbauen und gut ist,
und alls 128ms reicht vollkommen aus. 10ms sind nur mit einem Multimedia-Timer zu realisieren. Der "normale" Timer von Windows macht maximal 15-18ms und auch nur bei geringer Systemlast. Wichtig ist das prellen des Tasters zu berücksichtigen, sonst kommt es zu unschönen Nebeneffekten.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

Re: IOWKitReadImmediate stürzt ab!

Post by rolf55 »

klar bei meiner Timerangabe hab ich ne 0 vergessen. Zum entprellen hab ich ne einfache For-next schleife die bis 10000 zählt (ausprobiren). Somit kann man auch mit dem gleichen Taster einen Wert ein und ausschalten.
Also es stimmt einfach nicht das die Iow mit Vb6 nicht laufen. Wie gesagt 4 IOW40 und 6 spin-Warrior24 verwalten 203 Schalter , Taster,sowie 800 Leds bzw 7 segmentanzeigen und und 30 Drehimpulsgeber. Das ganze ist ein Boeing 737-800 Homecockpit. Habe auch am Anfang mit den Tücken gekämpft , habe aber hier im Forum immer Hilfe erhalten.
Rolf
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: IOWKitReadImmediate stürzt ab!

Post by friend-of-rq »

Hallo Spektakulum,
um Probleme mit zu langen Leitungen zu vermeiden. Damals ist meine Tastenmatrix auch nach einigen Stunden gerne mal abgestürzt
lange Leitungen sind wie Antennen und können bei entsprechende Störungen EMV, auch einen IOW außer Tritt bringen.

Empfehlung: Leitungen vom IOW mit Optokoppler galvanisch trennen ... hatte ein ähnliches Problem mit meinem Hausbus(I2c)
nach der Entkopplung läuft der IOW ohne einen Aussetzer durch ...

Auch die Tastenmatrix ist mit Optokoppler zu verwenden.

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

Re: IOWKitReadImmediate stürzt ab!

Post by friend-of-rq »

Hallo Rolf,
Wie gesagt 4 IOW40 und 6 spin-Warrior24 verwalten 203 Schalter , Taster,sowie 800 Leds bzw 7 segmentanzeigen und und 30 Drehimpulsgeber
Respekt ... und alles selber gelötet ... irgendwann mag man dann keine Lötstellen mehr sehen ...

Spreche aus Erfahrung ... LED-Laufschrift 512 LEDs
Das ganze ist ein Boeing 737-800 Homecockpit
gibt es Bilder :-)

Gruss Ralf
Spektakulum
Posts: 7
Joined: Sat Jul 30, 2005 7:33 pm

Re: IOWKitReadImmediate stürzt ab!

Post by Spektakulum »

lange Leitungen sind wie Antennen und können bei entsprechende Störungen EMV, auch einen IOW außer Tritt bringen.
Das weiß ich ja auch - aber das die maximal empfohlene Länge bei der Switchmatrix nicht mehr als 30cm betragen soll, habe ich erst später gelesen. Da außerdem auch noch ein elektronisches Vorschaltgerät für Leuchtstoffröhren nah verbaut ist, ist das jetzt die sichere Methode. Fand die Matrix halt für sich eleganter, auch wenn es nur 11 Taster sind!
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: IOWKitReadImmediate stürzt ab!

Post by friend-of-rq »

Hallo Spektakulum,

es gibt bereits eine Schaltung hier im Forum, für eine galvanisch entkoppelte SwitchMatrix

http://www.codemercs.com/phpBB2/viewtop ... 7&start=15

Die SwitschMatrix hat den Vorteil dass Du dich um die Entprellung nicht kümmern musst und
die Daten bekommst Du frei Haus in einem eigenen Report und das Entlastet die Kommunikation zwischen Software und IOW gewaltig.

Ein Port Vorteil gibt es bei 11 Tasten (3x4) nicht gerade, den nach der Aktivierung sind zwei Ports für diese Funktion reserviert.

Gruss Ralf
Post Reply