Probleme mit IOW40 I/O und gleichzeitig ein Display!!!

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
10Base
Posts: 8
Joined: Mon Dec 19, 2005 1:24 am

Probleme mit IOW40 I/O und gleichzeitig ein Display!!!

Post by 10Base »

Hallo,

ich habe ein kleinens Problem. Ich verwende den IOW40, damit will ich ein Ladegerät realisieren mit Displayanzeige. Ich verwende auch alle restlichen Ports die noch zur verfügung stehen.

Nur leider läuft die I/O Routine nich mit de Display zusammen, sondern nur getrennt. Es gibt folgenden Code:

function FindIOWarrior (HidDev: TJvHidDevice): Boolean; stdcall;
begin
Result :=
(HidDev.Attributes.VendorID = cCodeMercenariesVID) and
((HidDev.Attributes.ProductID = cIOWarrior40PID) and
(HidDev.Caps.OutputReportByteLength = 8));
end;

Habe ich in der letzten Zeile eine "5" funktioniert nur die I/O Routine, schreibe ich aber wie oben die "8" rein funktioniert zwar das Display aber da ich ja ständig einlesen will/muss ob sich meine Ausgänge verändern meldet er immer einen Lesefehler.

Was muss ich ändern um mit beiden arbeiten zu können?

Danke im vorraus
10Base
Posts: 8
Joined: Mon Dec 19, 2005 1:24 am

Ups....

Post by 10Base »

Da ich meinen Code reinkopiert habe hat er jetzt aus der Stelle an der meine Zahlen stehen ein Smile erstellt!
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Habe die Smilies mal abgeschaltet, hätte ich schon längst tun sollen...

Also ich weiss weder unter welchem Betriebssystem noch genau in welcher Sprache das jetzt ist, aber die 5 und 8 Byte langen Reports gehen über unterschiedliche Interfaces. Wenn man die direkte Abfrage des Pin-Zustandes machen will muss man über das zweite Interface und dann natürlich 8 Bytes (7 Byte Daten plus 1 Byte ReportID) benutzen.
10Base
Posts: 8
Joined: Mon Dec 19, 2005 1:24 am

Post by 10Base »

Ich arbeite mit Delphi7 unter WinXP.

Wie meinst Du 2. interface. Ich habe doch nur einen IOW-Baustein drauf!?!

Wie kann ich ein zweites erstellen? Ich bin ja schon stolz auf mich, das es so läuft. Ich habe angefangen in dem ich die Samples umgestalltet habe. Das meiste habe ich verstanden, nur bei manchen sachen blicke ich noch nicht so durch. Wie jetzt das mit den interface oder den Report ID's. Es läuft einfach und wenn ich mit den Reports ruspiele geht es meistens schief!
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Schon mal das Datenblatt gelesen?
10Base
Posts: 8
Joined: Mon Dec 19, 2005 1:24 am

Post by 10Base »

Immer die selben Fragen. Ja habe ich, bin nicht der Crack in Englisch manches verstehe ich halt nicht so, Sorry!
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Interfaces beim USB sind logische Geräte, der IO-Warrior hat zwei davon.
10Base
Posts: 8
Joined: Mon Dec 19, 2005 1:24 am

Post by 10Base »

Das habe ich auch dem Datenblatt entnommen, aber weis nicht wie ich es anwenden soll!

gibt es vielleicht die möglichkeit, das mir jemand mal nenQuellcode gibt in dem die Port abfrage und das schreiben mit einer Display ausgabe verbunden ist?
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Das sind zwei Sachen die sich in keiner Weise behindern.

Zugriffe auf die Portpins gehen halt über das erste Interface (Pipe = 0) und Zugriffe auf das Display auf das zweite Interface (Pipe = 1).
10Base
Posts: 8
Joined: Mon Dec 19, 2005 1:24 am

Post by 10Base »

Ich will jetzt nicht nerven aber damit kann ich nichts anfangen. Leider kennt sich nicht jeder gleich gut aus.

Ich glaube er macht bei mir in ersterlinie beim lesen ärger. Mein Prog. liest sobad sich ein Pin ändert und gibt es aus. Vielleicht macht er deshalb schon garkeine weitere Sachen mehr!

Noch mal mit der 5 und 8.

Muss ich dann zwei von diesen Funktionen schreiben? Einmal mit 5 und einmal mit 8, macht aber auch ärger.

function FindIOWarrior (HidDev: TJvHidDevice): Boolean; stdcall;
begin
Result :=
(HidDev.Attributes.VendorID = cCodeMercenariesVID) and
((HidDev.Attributes.ProductID = cIOWarrior40PID) and
(HidDev.Caps.OutputReportByteLength = 5));
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Also unser Delphi-Spezialist ist momentan im Urlaub und ich kenne mich damit nicht besonders gut aus. So wie ich es verstehe benutzt die Delphi Implementierung die Reportlänge um die Interfaces zu identifizieren.

Also muss für die einfache I/O das Interface benutzt werden, das eine Reportlänge von 5 Bytes hat und für die Special Mode Functions (LCD etc.) das Interface mit 8 Byte Länge.

Es sind also zwei Varianten der FindIOWarrior Funktion notwendig und die Results werden verwendet um das eine oder das andere Interface anzusprechen.

Eventuell ist es einfacher verständlich wenn man die DLL verwendet, die bildet direkter auf den IO-Warrior ab, so dass die Zusammenhänge zum Datenblatt leichter verständlich sein sollten.
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Ich lese trotzdem mit :-)

In diesem Fall sollte man wirklich nicht die HID-Komponente benutzen.
Die Delphi-Beispiele fuer die iowkit.dll sind einfacher.

Der IO-Warrior wird von Windows auf zwei komplett getrennte Geraete abgebildet. Die iowkit.dll fuegt die Geraete intern wieder zusammen so das nur ein Geraet mit zwei Pipes praesentiert wird.
Die HID-Komponente hingegen verwaltet die Geraete getrennt. Man muss also zwei Geraete oeffnen wenn man sowohl mit den IO-Pins als auch mit den Special Modes reden will.
Post Reply