LabVIEWForum.de - Robuste USB-Verbindung

LabVIEWForum.de

Normale Version: Robuste USB-Verbindung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo wertes Forum,

ich stehe gerade vor folgender Herausforderung:

Per NI-USB-6212 lese ich mit ca. 100kHz kontinuierlich Samples ein. Gleichzeitig gebe ich über 8 DOs mit ca. 10kHz Impulse aus. Die USB-Verbindung zur Karte steht demnach unter "Dauerfeuer". Während Langzeittests (über mehrere Tage), kommt es ganz vereinzelt dazu, dass mir sämtliche A/D-gewandelten Werte in den Anzeige-elementen des "Front-panels" einfrieren. Andere Programmteile des selben Main-VIs laufen dann aber noch (Das Betätigen von Buttons & Switches, Blinken von LEDs, Wechseln von Registerkarten, etc. funktioniert dann noch).

Meine Vermutung ist, dass es durch den Bediener zu einem minimalem Ruckeln am USB Kabel kommt, die Kommunikation über die USB-Verbindung so für einen kurzen Augenblick gestört wird und dann die Werte "einfrieren".

Nun zu meinen Fragen:

Hat jmd. von Euch schon einmal eine ähnliche Erfahrung/Beobachtung gemacht?
Hat jmd. eine Idee, wie ich meine Theorie verifizieren könnte? (Außer den USB-Stecker zu ziehen natürlich. Dies habe ich bereits mehrfach getan und dann genau dieses Verhalten beobachten können.)
Und zu guter letzt: Gibt es eine Möglichkeit die Kommunikation zwischen Rechner und Karte derart robust auszulegen, dass im Falle einer Unterbrechung die Daten "einfach" verworfen werden und er von Neuem anfängt die Daten einzulesen.

Für jegliche Antworten & Ideen, vorab schon mal vielen Dank!

Philipp
(23.01.2019 15:56 )Philipp841 schrieb: [ -> ]Per NI-USB-6212 lese ich mit ca. 100kHz kontinuierlich Samples ein. Gleichzeitig gebe ich über 8 DOs mit ca. 10kHz Impulse aus. Die USB-Verbindung zur Karte steht demnach unter "Dauerfeuer".
10 kHz DO Update-Rate bei einer Karte, die bei DIO nur Software-Timing kann? Und das auch noch über USB? Das wird NIE funktionieren.

Zwecks Einfrieren, ohne Kenntnis VI kann man das nicht sagen, aber wenn du ein Problem bei der USB-Verbindung vermutest, wieso probierst du das nicht aus?
Was sagt denn z.B. der Speicherverbrauch? Stabil?
Reagierst du auf Fehlermeldungen beim DAQmx?
Um was für Anzeigen der DAQ geht es? Graphen? Numerische Anzeigen?

Gruß, Jens
Es gibt robustere USB Konnektoren, einige NI USB Boxen habe soewas mit Verschraubung ... an der Box .. zum Rechner ist es dann wieder der Standard.
Kabelbinder und Heißkleber helfen etwas, ist aber Frickellösung.
Mainboards haben ja den USB auf dem MB als (?) 'Pinstecker' ..da stehen einem alle Möglichkeiten bis zum USB-B(?) der Box frei.
Für nicht Labtops könnte man suchen, ob es USB Slotbleche mit verriegelbarem USB gibt (oder man baut selber, Lemo hat sicher auch eine USB-Lösung, ... zu Lemo Preisen Smile

Die robuste Lösung heiß: Verzicht auf USB, und eine P[C|X]Ie Lösung.
Hallo & danke für eure Antworten.

Das VI habe ich nicht dazu gehängt, da mir schon mehrfach gesagt wurde, dass durch diese "Tapete" keiner durchblickt. Ich würde sie sehr gerne Aufräumen bzw. komplett neu strukturieren, leider fehlt mir aber der Ansatz, bzw. Anleitung wie ich dies am besten angehe (Ich habe das Programm selbst nicht erstellt. Der Programmierer ist nicht mehr verfügbar.)

@jg
Zitat: Zwecks Einfrieren, ohne Kenntnis VI kann man das nicht sagen, aber wenn du ein Problem bei der USB-Verbindung vermutest, wieso probierst du das nicht aus?
Ich habe bisher nur am USB-Stecker geruckelt und ihn mehrfach abgezogen.. hin und wieder passiert dann genau das Beschriebene. Nämlich dass sämtliche Werte aller Anzeigen (Graphen, num. Elemente, etc. die mit den analogwerten in Verbindung stehen einfrieren.
Könntest du einmal genauer beschreiben was du mit "wieso probierts du das nicht aus?" meinst.

Bzgl. des Traffics: Wie gesagt lese ich mit 100kHz; Ausgegeben werden über 2 DOs Impulse mit max. 4kHz (jeweils); die anderen 6 DOs werden wesentlich langsamer geschaltet (<50Hz). Die Anlage läuft so bereits seit Monaten!

Zitat:Reagierst du auf Fehlermeldungen beim DAQmx?
Vermutlich ist dies ein Knackpunkt. Ich habe von der Fehlerbehandlung ehrlich gesagt noch keinen blassen Schimmer. Irgendwie wird da zwar ein Fehlerdraht durchgezogen; ich glaube der dient aber eher Timing-Zwecken. Mein Wunsch wäre ja, genau an dieser Stelle anzusetzten. Zu erkennen, wenn in der USB-Kommunikatrion etwas schief gelaufen ist und dann "einfach" von Neuem zu beginnen.. für Ideen bin ich super offen.

Zitat:Um was für Anzeigen der DAQ geht es? Graphen? Numerische Anzeigen?
Ganz konkret handelt es sich um die num. Anzeigen auf der Registerkarte "Rawdata". Sämtliche Graphen und weiteren "num. Elemente" sind jedoch davon abhängig und demnach genau so betroffen.

@Hvo:

Wenn man nun bereits die USB-6216 Karte besitzt kommt demnach nur die Frickellösung in Frage?

Danke & Gruß,
Philipp

lv15_img SP1

[attachment=59722]
(24.01.2019 13:48 )Philipp841 schrieb: [ -> ]Das VI habe ich nicht dazu gehängt, da mir schon mehrfach gesagt wurde, dass durch diese "Tapete" keiner durchblickt. Ich würde sie sehr gerne Aufräumen bzw. komplett neu strukturieren, leider fehlt mir aber der Ansatz, bzw. Anleitung wie ich dies am besten angehe (Ich habe das Programm selbst nicht erstellt. Der Programmierer ist nicht mehr verfügbar.)
Das ist jetzt mehr als 1/2 Jahr her, dass wir über diese Tapete schimpfen - und sie ist nicht besser geworden. Flop
Fang doch mal an mit SubVIs erstellen, Funktionen zusammenfassen. Dann Umbau zu einer State-Machine, das spart dir locker ein Viertel deiner Tapete, da die ganzen Programm-Initialisierungen in extra Schritte der State-Machine kommen.

(24.01.2019 13:48 )Philipp841 schrieb: [ -> ]Könntest du einmal genauer beschreiben was du mit "wieso probierts du das nicht aus?" meinst.
Genau das, was du gemacht hast, aber das hast du nicht geschrieben.

(24.01.2019 13:48 )Philipp841 schrieb: [ -> ]Bzgl. des Traffics: Wie gesagt lese ich mit 100kHz; Ausgegeben werden über 2 DOs Impulse mit max. 4kHz (jeweils); die anderen 6 DOs werden wesentlich langsamer geschaltet (<50Hz). Die Anlage läuft so bereits seit Monaten!
Wenn die Standardwerte in deinem Frontpanel auch die sind, die du per Konfig einliest, dann liest du 8 Kanäle mit 10 kHz ein, und die DO-Pulse erzeugst du über die Counter der Karte, das ist also keine Belastung für den USB-Bus. Geändert werden die Counter-Einstellungen und die anderen DOs mit max. 10 Hz. Mit 50 Hz probierst du, die AI-Blöcke aus dem Buffer einzulesen. Bitte das nächste Mal korrekte Infos.

(24.01.2019 13:48 )Philipp841 schrieb: [ -> ]
Zitat:Reagierst du auf Fehlermeldungen beim DAQmx?
Vermutlich ist dies ein Knackpunkt. Ich habe von der Fehlerbehandlung ehrlich gesagt noch keinen blassen Schimmer. Irgendwie wird da zwar ein Fehlerdraht durchgezogen; ich glaube der dient aber eher Timing-Zwecken. Mein Wunsch wäre ja, genau an dieser Stelle anzusetzten. Zu erkennen, wenn in der USB-Kommunikatrion etwas schief gelaufen ist und dann "einfach" von Neuem zu beginnen.. für Ideen bin ich super offen.
Dann müsste also eine (oder alle) deiner DAQ-Fehlercluster zu diesem Zeitpunkt Fehler anzeigen!? Und genau da kannst du ansetzen.
Ich erstelle mir gerne für solche Dauerläufer einen "Action-Engine", hier grob skizziert das Grundkonzept:
[attachment=59723]
Das Enum gehört natürlich Typ-Definiert, und ob man das VI parallelzur Hauptschleife laufen lässt (dann natürlich nicht mir der Konstanten True an der Loop Condition) oder Inline benutzt, das bleibt dir überlassen.

Gruß, Jens
Hallo Jens,

zunächst einmal bzgl. des Aufräumens: Ich habe es wirklich mehrfach probiert. Ich bekommen es nicht hin sauber subVIs zu erstellen, sobald der zusammenzufassende Code mit lokalen Variablen arbeitet. Und dies ist ja quasi überall der Fall. Muss man dann auf globale Variablen wechseln? Wie auch immer; Da es ja sicher irgendwie machbar ist, werde ich es nochnmal versuchen. Undecided

Bzgl. deiner Action Engine: Verstehe ich es richtig, das man somit dann genau das umsetzen könnte was mir vorschwebt: Wenn ein Fehler in der Kommunikation über die USB Verbindung auftritt, wird dies erkannt, die Kommunikation gestoppt, entsprechende Parameter neu initialisiert und dann weiter gelesen? Das wäre ja klasse.

Ich werde mich in der kommenden Woche nochmal daran machen die Code-Struktur zu verbessern.

Wäre cool wenn Du supportest.

Gruß & schönes W.e.,
Philipp
Referenz-URLs