INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

FTDI



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

21.09.2007, 12:16
Beitrag #1

Otti Offline
LVF-Grünschnabel
*


Beiträge: 36
Registriert seit: Apr 2006

2012
2004
DE

04275
Deutschland
FTDI
Hallo Freunde des Forums.

Ich beschäftige mich schon eine ganze Weile mit dem gleichzeitigen auslesen von 3 Virtuellen Com ports, die über usb mit dem rechner verbunden sind.
Diese VCP laufen mit Treibern von FTDI.

Ich habe nun nach langem Probieren herausgefunden, dass immer wenn ich mehr als 3 Com´s gleichzeitig auslese die Menge an "Current Bytes on Port" bei zwei von den 3 Com´s kontinuierlich steigt. Das ganze geht dann solange, bis der max Wert von 4096 überschritten wurde und dann beginnt das Programm sich permanent zu verrechnen.
Ich lasse nun nach ca. 12000 Schleifendurchläufen den Puffer bei allen Ports löschen, aber das ist leider nicht die wirklich elegante Lösung. Denn hierbei ist dann in meiner kontinuierlich laufenden Aufzeichnung der gelesenen Werte im Moment des Löschens ein Einbruch (kleine Wertänderung Richtung 0 ) zu sehen.

Kann mir jemand helfen dieses Problem in den Griff zu bekommen?

Vielen Dank schon im Voraus
mit besten Grüßen
Otti
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
21.09.2007, 14:30
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
FTDI
' schrieb:Ich habe nun nach langem Probieren herausgefunden, dass immer wenn ich mehr als 3 Com´s gleichzeitig auslese die Menge an "Current Bytes on Port" bei zwei von den 3 Com´s kontinuierlich steigt.
Das kann genau in dem Fall auftreten, wenn die Verarbeitungeschwindigkeit der empfangenen Daten langsamer ist als das Ankommen der Daten. Also: Wie hoch ist denn die Baudrate der Schnittstellen? Wie sieht denn der Verarbeitungsalgorithmus aus?

Möglichkeiten gibt es bestimmt mehrere: Zwischenpuffern, Programm optimieren.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.09.2007, 16:35 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2007 18:23 von jg.)
Beitrag #3

Otti Offline
LVF-Grünschnabel
*


Beiträge: 36
Registriert seit: Apr 2006

2012
2004
DE

04275
Deutschland
FTDI
Also die Baudrate der Schnittstellen ist 38400

Verarbeitet wird das ganze in einer kontinuierlich laufenden Schleife.
Dabei werden die gewonnenen Daten der Schnittstellen an ein Cluster übergeben und in einer weiteren Schleife via lokaler Variable wieder aufgerufen.

Um das vielleicht besser zu veranschaulichen, habe ich das ganze mal als Datei angehangen...
ich hoffe das ist OKHelp

Gruß otti


(VIs LV 8.0)


Angehängte Datei(en)
Sonstige .zip  Problem.zip (Größe: 358,68 KB / Downloads: 210)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.09.2007, 17:31
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
FTDI
' schrieb:ich hoffe das ist OKHelp
Das ist ok.

Was nicht OK ist, ist die Formatierung deines Codes. Ich sag nur Styleguide. Was du da geschrieben hast, lässt sich nur schlecht lesen.

Im Prinzip kann ich nichts negatives - außer dem Styleguide - finden. Du kannst ja mal nachrechnen: 38400 bei drei Schnittstellen und 11 Zeichen pro Durchlauf macht eine Millisekunde pro Durchlauf. (38400 => 4 Zeichen pro Millisekunde; 3 Schnittstellen => 4*3=12 pro Millisekunde; Pro Schnittstelle 11 Zeichen => 1 ms pro Durchlauf.) Vorausgesetzt der Datenfluss ist ohne Pause dann ist das alles an der Grenze des Machbaren mit einem PC. Schließlich passiert hier ja mehr als VISA auslesen.

In deinem Falle fällt mir so auf die Schnelle nichts ein, was du mal probieren könntest.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.09.2007, 17:56
Beitrag #5

Otti Offline
LVF-Grünschnabel
*


Beiträge: 36
Registriert seit: Apr 2006

2012
2004
DE

04275
Deutschland
FTDI
Danke dir für die schnelle Antwort! Freut mich wirklich sehr, dass sich jemand meinem Problem so schnell angenommen hat.

Wie du ja siehst lasse ich meine "lese-Schleife" für die Daten der Schnittstellen auf max Geschwindigkeit laufen. Allerdings reicht das eben auf Dauer nicht und nach einer weile läuft der "Puffer" (denke ich jedenfalls)über und es kommt zu solchen Aussetzern in der Aufzeichnung. (siehe Bild)
Wenn ich die Puffer -im Progam derzeit nach 12000 Schleifen durchläufen- lösche dann gibt es eben immer mal kleine Werteinbrüche(so wie oben beschrieben).
Die Frage ist nun, brauche ich da jetzt einen noch schnelleren Rechner (momentan 3200+AMD Athlon und 1GB RAM)?
Oder kann man da gar nichts wirklch machen...Blink

otti


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.09.2007, 18:30
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
FTDI
' schrieb:Die Frage ist nun, brauche ich da jetzt einen noch schnelleren Rechner (momentan 3200+AMD Athlon und 1GB RAM)?
Das möchte ich bezweifeln.

Zitat:Oder kann man da gar nichts wirklch machen
Bestimmt.

Du könntest folgendes probieren: Mach aus der Schleife, die die VISA's ausliest (das ist also die obere), alles raus, was auf das Frontpanel zugreift. Das ist der Cluster, der die Daten anzeigt, und die Variable des Stopp-Buttons. Ersetze die Stopp-Variable durch einen Melder und den Cluster durch eine Queue. In der Hauptschleife setzt du den Melder zum Stoppen und ließt die Queue aus.

Möglicherweise ist die Queue und der Melder schneller als der Cluster und die Variable. Ob dem so ist, weis ich nicht. Das kann dir nur ein richtiger LV-Experte sagen. Schaden tut es aber nichts. Möglicherweise lernst du nämlich was über Queues und Melder.

Und bevor ich es vergesse - denk an den Styleguide.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.09.2007, 19:11
Beitrag #7

Otti Offline
LVF-Grünschnabel
*


Beiträge: 36
Registriert seit: Apr 2006

2012
2004
DE

04275
Deutschland
FTDI
Vielen Dank für die Tipps, ich werde das morgen mal ausprobieren und melde mich dann einfach noch mal.
Eine Frage noch zum Schluss: Wie meinst du das mit dem styleguide?
Was muss ich da beachten?
Einen schönen Freitagabend, ciao, otti
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.09.2007, 20:01
Beitrag #8

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
FTDI
' schrieb:Wie meinst du das mit dem styleguide?
So was wie das hier, oder das hier.

Zurückführende Wires, Wires unnötig lang, 95% leere Fläche erschweren die Lesbarkeit erheblich.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.09.2007, 15:22
Beitrag #9

Otti Offline
LVF-Grünschnabel
*


Beiträge: 36
Registriert seit: Apr 2006

2012
2004
DE

04275
Deutschland
FTDI
Hallo "IchSelbst",
habe die Sache gelöst!!! Bin total happy...Big Grin

Ich habe es erst mit der Queue-Sache probiert, aber dass hatte leider überhaupt keinen Effekt auf die Problematik.
Nun habe ich einfach jedes "read" in eine eigene Schleife gesteckt und schreibe die Daten nach wie vor in lokale Variablen, die ich dann in der "Haupt-Schleife" auslese. Ja, und was soll ich sagen -siehe da- es geht... *wahnsinn*

Danke nochmal für deine Unterstützung!!!

Grüße aus Leipzig und ein schönes Wochenende
otti


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.09.2007, 19:11 (Dieser Beitrag wurde zuletzt bearbeitet: 23.09.2007 19:13 von rolfk.)
Beitrag #10

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
FTDI
' schrieb:Hallo "IchSelbst",
habe die Sache gelöst!!! Bin total happy...Big Grin

Ich habe es erst mit der Queue-Sache probiert, aber dass hatte leider überhaupt keinen Effekt auf die Problematik.
Nun habe ich einfach jedes "read" in eine eigene Schleife gesteckt und schreibe die Daten nach wie vor in lokale Variablen, die ich dann in der "Haupt-Schleife" auslese. Ja, und was soll ich sagen -siehe da- es geht... *wahnsinn*

Danke nochmal für deine Unterstützung!!!

Grüße aus Leipzig und ein schönes Wochenende
otti

Das geht natürlich schon und wohl noch eine ganze Weile auch mit mehr Schnittstellen. Aber!!!!!
Lokale Variablen sind nicht synchornisiert, das will heissen die Read Loop pro Schnittstelle kann ganz einfach 200 mal durchlaufen werden bevor Deine Hauptschlaufe einmal im Stande ist diese lokale Variable zu lesen. Falls das kein Problem für Dich ist dann ist das OK, aber Du solltest das schon wissen.
Dein Instrument könnte ja ein ziemlicher dummer Schreier sein der einfach seine Daten wild hinausschreit ohne jeweils erst ein Kommando zu erwarten und für solche Instrumente ist die von Dir gemachte Entkopplung meist die Beste Sache.

Lokale Variablen können Schlaufen entkoppeln, was prinzipiel gut ist aber man muss darauf achten dass die Schreiboperation völlig asynchron zur Leseoperation läuft das heisst, Du kannst in der Hauptschlaufe entweder 100 mal denselben Wert lesen weil die Leseschlaufe eben viel langsamer ist oder im anderen Extremfall liest Du nur jeden x hundersten Wert der von der Leseschlaufe produziert wird. Falls Du Deine Schlaufen doch irgendwie synchronisieren willst wird es komplizierter.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Probleme mit VISA und FTDI-USB auf RS422 chip wernerIBN 8 7.385 18.06.2012 08:26
Letzter Beitrag: wernerIBN
  Problem mit FTDI USB Chip stevenhiker 14 17.334 10.03.2009 21:23
Letzter Beitrag: stevenhiker
  FTDI-Modul mit DLL dany22 2 5.937 16.07.2006 22:00
Letzter Beitrag: jg

Gehe zu: