Hallo, ich bin ein totaler Noob, was Schnittstellenprogrammierung angeht. Ich muss jetzt aber für ein Uni-Projekt Daten aus einem Gerät mit serieller Schnittstelle auslesen (bulk-transfer)(unter Windows 7 x86). Lagebeschreibung: Gerät hat serielle Schnittstelle und ist über einen serial-usb-converter an den Pc angeschlossen. Mein Prof hat vorgegeben, dass wir WinUsb als API verwenden, Programmiersprache ist C/C++. Bis zu der Stelle, an der ich Daten auslesen möchte klappt das auch ganz gut. Die Informationen die ich vom Device-Descriptor etc bekomme, sieht man im angehängten Bild. Das Problem ist jetzt nur, dass ich nicht weiss, wie ich die Daten auslese. Genauer: ich bekomme den Fehlercode 121 beim Aufruf von WinUsb_ReadPipe. Nachdem ich gegoogelt habe, weiss ich, dass es ein Timeout ist...gelesen werden auch 0 Bytes. Hochsetzen des Timeouts auf 20sec hat leider auch nichts gebracht...ich vermute einfach mal, dass in der Pipe nichts steht. Zu Testzwecken haben wir ein ähnliches Gerät mit USB-Schnittstelle, welches direkt an den Pc angeschlossen werden kann. Ich habe daher ein 2. Programm geschrieben, welches komischerweise funktioniert. Nun zu meiner Frage: 1. muss ich irgendwo in meinem Programm auch sowas wie die Baud-Rate, etc setzen? und falls ja, wo? 2. wie bringe ich der winusb-api bei, dass hinter dem USB-Port eine serielle Schnittstelle sitzt? Es tut mir Leid, dass es alles etwas verworren klingt, aber ich bin mit der Seriellen Schnittstelle etwas überfordert. Vielen Dank schonmal, Sabine
Sabine M. schrieb: > 1. muss ich irgendwo in meinem Programm auch sowas wie die Baud-Rate, > etc setzen? und falls ja, wo? Jein. Aber zuerst musst du so ziemlich alles neu nachprogrammieren, was der entsprechende USB-Seriell-Treiber schon mitbringen würde. > 2. wie bringe ich der winusb-api bei, dass hinter dem USB-Port eine > serielle Schnittstelle sitzt? Garnicht. Den Teil musst DU programmieren. Dazu brauchst du genaue infos über den Wandler-Chip, der auf dem USB->Rs232-Wandler verbaut ist. oder anders ausgedrückt: Sabine M. schrieb: > Mein Prof hat vorgegeben, dass wir WinUsb als API verwenden. ist Blödsinn. Lass den zum serial-usb-converter gehörenden Treiber seine Arbeit machen, und verwende den von ihm zur Verfügung gestellten Comport.
ok...klingt ja noch schlimmer als ich befürchtet hatte. :( Ich habe vom Lehrstuhl nur das "Kabel" bekommen. Wäre es sinnvoll, mir ein neues Serial-Usb-Konverter-Kabel zu kaufen, so dass ich den genauen Typ weiss? Kannst du mir kurz die Vorgehensweise erläutern?
Sabine M. schrieb: > Ich habe vom Lehrstuhl nur das "Kabel" bekommen. Wäre es sinnvoll, mir > ein neues Serial-Usb-Konverter-Kabel zu kaufen, so dass ich den genauen > Typ weiss? nein, es reicht den Treiber zu installieren. win7 müssten ihn eigentlich im Internet finden. Sonst wird doch wohl noch ein Hesteller auf den Kabel stehen? Oder einfach mal unter linux anstecken, dann müsste man rausbekommen welchen Treiber man braucht.
Ok, super danke. Gesetzt den Fall der Treiber gibt mir dann den Com-Port 8, mit welcher API spreche ich ihn an? Kannst du mir da etwas empfehlen?
Peter II schrieb: > nein, es reicht den Treiber zu installieren. win7 müssten ihn eigentlich > im Internet finden. Eben nicht, wenn man sich wort-wörtlich an die Anforderungen des Profs hält. Wenn nämlich der Treiber installiert ist, greift sich der Treiber das Gerät, und du hast keine Chance mehr an dem Treiber vorbei direkt mittels WinUSB mit dem Gerät zu kommunizieren. Also eher: Treiber deinstallieren, falls einer installiert ist. Sinnvoll ist das natürlich nicht, außer der Vorlesungstitel ist "Usermode-Devicetreiber-Programmierung"
Der Typ ist egal solange das Kabel erkannt wird. 1. Stecke den Adapter in einen USB-Port und schaue im Gerätemanager nach welcher COM-Port für dein Kabel verwendet wird. 2. Nimm Putty und schalte es auf seriell um mit dem COM-Port deines Kabels aus Pkt.1 und wähle die Geschwindigkeit z.B.9600 Im Consolen-Fenster kannst du jetzt die Datesn sehen und mittels Tastatur eigene Daten senden. Gruß Martin
oh...ich habe mich etwas ungenau ausgedrückt. Das Gerät sendet Mess-Daten, welche ich graphisch darstellen muss. Das Frontend etc ist auch komplett fertig und funktioniert auch (allerdings gerade nur unter "normalem" USB). Ich brauche quasi eine API die ich in mein Programm einbetten kann. Zusätzliche Software wie Putty etc darf/kann ich da leider nicht verwenden.
Martin S. schrieb: > Der Typ ist egal solange das Kabel erkannt wird. Nicht, wenn man den Treiber selber programmieren soll.... Sabine M. schrieb: > Gesetzt den Fall der Treiber gibt mir dann den Com-Port 8, mit welcher > API spreche ich ihn an? Kannst du mir da etwas empfehlen? CreateFile/SetComState/ReadFile/WriteFile oder halt schöner verpackt: http://www.robbayer.com/files/serial-win.pdf http://www.codeproject.com/KB/system/serial.aspx (willkürliche Google-Hits ;) )
ok super danke. irgendwie bin ich inzwischen total verwirrt :( Aufgabenstellung ist: Gegeben Device A, serielle Schnittstelle, Serial-Usb-Converter Ziel: Lesen Sie die Messdaten innerhalb Ihres Programms aus dem Gerät aus und stellen Sie diese graphisch dar. Verwenden Sie keine weitere Software. Ich muss dieses Gerät eigentlich nur ansprechen können, irgendwie an meine Daten kommen und bin quasi zufrieden.
Ok, also keine WinUSB Anforderung. Gut. Vergiss alles dazu. Deine Software benutzt einfach die serielle Schnittstelle. Ob da ein USB-Wandler dazwischenhängt oder nicht, braucht dich nicht interressieren. Aus deiner Sicht ist es einfach ein Serieller Port.
aber echt vielen, vielen dank für die hilfe...ich setz mich dann mal mit http://www.robbayer.com/files/serial-win.pdf auseinander. ich werd mich wahrscheinlich in ein paar tagen wieder melden, wenn ich das nächste mal verzweifle. :)
WinUSB funktioniert vielleicht nicht mal, denn dann müsstest du erst mal vom Hersteller des Kabels Informationen bekommen, wie zum beispiel die Baudrate gesetzt wird, wie die Daten eventuell noch in den Pipes verpackt sind, wie Puffergrößen eingestellt werden usw. Aus der Aufgabenstellung geht nicht hervor, dass du den zum Kabel gehörigen Treiber nicht verwenden sollst. Du sollt offenbar lediglich die Daten auslesen und darstellen, also über den virtuellen COM Port. Wenn das mit dem COM Port zu unelegant ist, gibts auch zur Kommunikation mit dem USB-Serial Adapter APIs des Herstellers, jedenfalls bei FTDI und Silabs. Prolific sicher auch, und viel was anderes wird der Adapter nicht sein. Da kannst du das API dann in deine Anwendung einbetten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.