Forum: PC-Programmierung Messdaten per USB zu langsam


von Alex P. (reflex1337)


Lesenswert?

Hallo zusammen, ich bin neu hier und auch neu in diesem Bereich. Daher 
entschuldigt bitte mein Unwissen :)
Ich habe schon die Suche bemüht, jedoch leider ohne Erfolg.
Folgendes Problem:
Ich habe einen Kraftsensor über einen Messverstärker am USB Port 
angeschlossen. Den Sensor mit Verstärker, habe ich von einer Firma, 
welche zur Kommunikation eine DLL bereit stellt. Diese habe ich in VB 
Net eingebunden und kann per DLL- Funktionsaufruf den aktuellen Messwert 
abfragen.
Leider habe ich (noch) nicht all zu viel Ahnung von der ganzen Materie. 
Daher versuche ich alle Angaben zu nennen, die ich kenne.
Also der Messverstärker ist (so weit ich weiß) nur ein AD Wandler der 
die USB Schnittstelle mit einem 16Bit Signal versorgt.(also keine 
PCI-Karte oder ähnliches)
Im pdf zum Protokoll steht, dass wenn man mit dem Firmeneigenen 
Protokoll(also dieser DLL) arbeitet, man eine Messrate von 400Werten/sek 
bekommen kann.
Bei unserer Messaufgabe würden 300Werte/sek genügen.

Also was ich getan habe ist ein Programm geschrieben (in vb) welches den 
Port initialisiert und eine Verbindung zum Gerät herstellt.
Rufe ich die DLL Funktion "GetMesswert" auf, so gibt die DLL mir den 
aktuellen Wert.
In usererm Versuch soll die Kraft über die Zeit gemessen werden.

Was ich bisher versucht habe:
1)per Do-While Schleife habe ich immer wieder die Funktion aufgerufen 
und den aktuellen Wert einer Variablen(Array) zugewiesen.

2) per Timerfunktion von VB habe ich ein kurzes Intervall gewählt und 
hier die Funktion aufgerufen und den Wert zugewiesen.

Beides ist viel zu langsam.
Ich bekomme so nicht annährend so viele Werte in mein Array wie ich in 
den 6 sekunden bräuchte.
Ich bekomme ca. 30 Werte/sek. jedoch, wie gesagt, brrauche ich 250 bis 
300...

Ich mache gerade meine Bachelor arbeit in einem Unternehmen. Das 
Programmieren ist nur eine Nebenaufgabe.. im Studium hatte ich nix mit 
Programmieren am Hut.
Ich höffe Ihr könntet mir einen Tipp geben, mit welcher Mehtode man auf 
die Rate kommt. Ich bin für jeden Hinweis sehr dankbar!!!
Also schon mal vielen Dankim Voraus!!

Gruß!

von VB-Hasser (Gast)


Lesenswert?

Erste Vermutung:

Du hast das Initialisieren/Verbinden usw. auch in deiner Schleife 
drinnen?

Wenn nicht:

Versuch mal die Zeit zu messen, die in der DLL ("GetMesswert") verbracht 
wird (Debugger/profiler oder selber ausmessen)
Wenn die schon zu lange braucht, ist dein VB-Programm unschuldig => an 
Hersteller-Support wenden.

von Wolfgang R. (portside)


Lesenswert?

Erst mal wäre wichtig zu wissen mit welcher Geschwindigkeit sich das USB 
Gerät überhaupt anmeldet, USBVIEW.exe heisst der Freund.

Dann hat USB eine gewaltigen Protokoll Overhead so dass wenn nur ein 
oder zwei Byte per Aufruf übertragen werden eine angemessenen 
Transferrate nie erreicht wird. Es kommt jetzt darauf an ob die DLL auch 
mehrere Messwerte in einem Aufruf übertragen kann. USB gibt dies alles 
her aber viele Entwickler haben nicht das nötige Wissen um dies alles 
richtig zu gestalten. War eben nie gedacht ein RS232 Schnittstelle mit 
einzelnen Byte zu ersetzen. Das geht nur ordentlich wenn die DLL 
asynchrone USB Transfers unterstützt.

von Alex P. (reflex1337)


Lesenswert?

Hallo und vielen Dank für die schnellen Antworten.
Das mit dem Zeit messen werde ich morgen früh mal machen.
Die Baudrate mit der Verbunden wird ist 115200.
Ich habe eben mit dem vom technischen Support gesprochen. Er meinte, 
dass die DLL den Messverstärker in einen Speed Optimized Polling Mode 
versetzt, wobei deutlich höhere Messraten zu stande kämen(als 400/s). 
Jedoch sagte er auch, dass 300 Werte/sek mit einer Windowsoberfläsche 
nicht zu erreichen sind.
Er meinte es werden 3 Bytes bei jedem Signal gesendet.
Als Lösung, müsste ich per Com Kommunikation(also senden direkter Bytes, 
pdf des Protokolls habe ich), also ohne DLL dem Verstärker sagen, spamm 
mich mit Daten zu. Sprich, nicht ich sage, her Verstärker, sag mir mal 
bitte was du gerade misst, sondern der Verstärker sendet ohne Pause was 
er gerade misst. Schwierig für mich ist es dann nur, die Daten 
abzufangen, so das es keine Überladung gibt.
Kann das sein? hab ich das richtig verstanden? :)
Hach herje, ich glaub ich muss mir mal vernünftige Literatur besorgen um 
ein bisschen mehr Durchblick zu bekommen :)
Danke!

von besucher (Gast)


Lesenswert?

Alex Pano schrieb:
> Die Baudrate mit der Verbunden wird ist 115200.
> Er meinte es werden 3 Bytes bei jedem Signal gesendet.

OK, also es gibt ein RS232-Protokoll, das ist schon mal gut. 115k2 
bedeutet, es können maximal ca. 11000 Bytes pro Sekunde gesendet werden. 
Bei 3 Bytes pro Messwert sind das also mehr als 3.600 Messwerte pro 
Sekunde, die durch den Transportkanal passen.

Alex Pano schrieb:
> Schwierig für mich ist es dann nur, die Daten
> abzufangen, so das es keine Überladung gibt.

Du bräuchtest (bzw. wir bräuchten) jetzt mal die Beschreibung dieser 3 
Bytes. Wie sind die aufgebaut?

von Peter (Gast)


Lesenswert?

Alex Pano schrieb:
> Jedoch sagte er auch, dass 300 Werte/sek mit einer Windowsoberfläsche
> nicht zu erreichen sind.

was soll denn das für eine aussage sein? Klar wenn man jeden wert sofort 
in ein Diagramm einträgt wird es eng. Aber normalere weise lässt man die 
Datenabfrage in einem extra Thread laufen und damit spielt die 
Windowsoberfläche überhaupt keine rolle.

von besucher (Gast)


Lesenswert?

Peter schrieb:
> was soll denn das für eine aussage sein? Klar wenn man jeden wert sofort
> in ein Diagramm einträgt wird es eng. Aber normalere weise lässt man die
> Datenabfrage in einem extra Thread laufen ...

Ja, normalerweise. Aber wissen wir, wie Hard- und Software konzipiert 
sind? Ich glaube, es bringt wenig, jedes Wort auf die Goldwaage zu 
legen. Ich schlage vor, abzuwarten, mit was für Infos Alex morgen 
rüberkommt.

@Alex: Was ist das für ein USB-Messverstärker? Gibts nen Weblink?

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
Noch kein Account? Hier anmelden.