LabVIEWForum.de
Polling über USB RAW - Timeout funktioniert nicht - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Polling über USB RAW - Timeout funktioniert nicht (/Thread-Polling-ueber-USB-RAW-Timeout-funktioniert-nicht)



Polling über USB RAW - Timeout funktioniert nicht - MirkoB - 29.08.2017 08:58

Hallo!

Ich habe das Problem, dass ich mit einem USB-Gerät kommunizieren muss, welches seine Messwerte per Polling zur Verfügung stellt. Die Kommunikation selbst funktioniert. Ich kann Kommandos via Bulk-In auf EP 0x02h senden und auf 0x83h empfangen.

02h Bulk Out (Befehle)
83h Bulk In (Status)
84h Bulk In (Messdaten)

Sobald ich aber in den "Messmodus" gehe, funktioniert es nicht mehr:
Dazu muss ich auf EP 02h den Startbefehl senden und bekomme auf 84h die ersten 96 Byte der Messwerte zurück.
Danach muss ich auf 83h ein Status abfragen, ehe auf 84h die nächsten Messwerte lesbar sind.

Das Problem ist, das es kein starres Raster ist, sondern mal 3...4 Messwerte auf 84h kommen können und auch mehrfach auf 83h Statusmeldungen.

Ich muss also irgendwie rausfinden, auf welcher USB Bulk-In Pipe Daten anliegen und dann diese auslesen.

Der Versuch dies über einen knackig-kurzen Timeout zu machen schlägt leider fehl, da der Timeout scheinbar ignoriert wird...
(Immer >2 Sekunden)

Benutzt wird Labview 2016 und der NI-VISA-Driver Wizzard.

Vielleicht hatte ja schon mal jemand eben das selbe Problem und konnte es lösen?


Mirko


RE: Polling über USB RAW - Timeout funktioniert nicht - Freddy - 06.09.2017 11:11

Hallo Mirko,
unter Visa kann man die Timeout Zeit einstellen. Du bekommst als Vorgabe die Konstante mit 2 Sekunden, die kann man aber einfach überschreiben.

Wenn Du mal Dein Programm anhängst, versteht man das Problem besser.
Du weisst doch Bilder sagen mehr als Worte Big Grin

Gruß Freddy


RE: Polling über USB RAW - Timeout funktioniert nicht - Lucki - 06.09.2017 12:36

Das Übliche ist eigentlich, dass die Daten im ASCII-Code übertragen werden, mit Zeilenende-Zeichen für jeden Datensatz. Dann gib es keine Probleme mit unterschiedlichen Datenlängen. Vielleicht ist das bei Dir der Fall und Du hast es nur nicht bemerkt. Auf jeden Fall wäre es wichtig, das Du das "USB-Gerät" hier benennst und das Schnittstellenprotokoll postest.
Und was beinhalten denn die Statusmeldungen und wie reagierst Du darauf?


RE: Polling über USB RAW - Timeout funktioniert nicht - MirkoB - 06.09.2017 15:18

Hallo!

...und es wurde doch gelesen! Big Grin

Das Gerät selbst ist ein selbstentwickeltes Messgerät aus unserer Firma. Normalerweise reden die verbauten µC nur untereinander via USB. Ich muss jetzt aber für einen Prüfstand den Master auf dem PC nachbilden.

Das Protokoll ist relativ simpel:
Bulk-in Pipe ist 85h, Bulk-Out Pipe is 06h
Ich kann mit dem Gerät reden...alles gut...!

Wenn ich auf die Bulk-Out Pipe ein 0x0000 0114 (hex) rausschiebe, werden Messdaten vom Messgerät auf der Bulk-In Pipe 84 ausgegeben.
Anschließend können(!) auf der 83h Statusdaten anliegen....oder auch nicht.

Das Problem ist, dass ich die die vorhandenen Daten auf der 83h abholen muss, bevor neue an der 84h anliegen. (und umgekehrt)

Ohne das Gerät selber kann man es schlecht nachstellen.

Leider funktioniert der Timeout nicht, wenn der EP gültig ist aber keine Daten vorhanden sind. (oder ich habe den richtigen noch nicht gefunden)

Ich muss also rausfinden, ob auf EP 83h oder 84h Daten anliegen und wenn ja, darauf reagieren. (Was sicherlich mit Interrupts zu lösen sein müsste, ich weiß nur nicht wie)

Ein rudimentäres Python-Skript auf dem PC funktioniert via "CallBack"-Funktionen des darunterliegenden WinUSB-Treibers. (Der selbe, den auch der NI-VISA Wizard bereitstellt)

Ich kann leider nicht so viele "interna" freigeben, hoffentlich reicht das Blockdiagramm um mein Problem zu verstehen.

Mirko

Edit: Die Kommando Bulk-Out ist 06h (im Anhang steht noch 02h)