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ß!
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.
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.
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!
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.