Reduzierung des Zeitbedarfs zur Datenerfassung - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ) +---- Thema: Reduzierung des Zeitbedarfs zur Datenerfassung (/Thread-Reduzierung-des-Zeitbedarfs-zur-Datenerfassung) Seiten: 1 2 |
Reduzierung des Zeitbedarfs zur Datenerfassung - Philipp841 - 09.05.2018 18:07 Hello @all, das beigefügte VI, Aquire Data.vi benötigt auf einem Enwicklungsrechner für einen Durchlauf ca. 1-2ms (Schnittstellkarte NI-USB-6216 nicht angeschlossen). Auf dem Zielrechner benötigt das VI ca. 85 ms (mit angeschlossener NI-USB-6216). Nun habe ich zwei Fragen: 1) Macht es in Bezug auf die benötigte Laufzeit einen Unterschied, ob entsprechende Hardware angeschlossen ist, oder nicht? 2) Könnten schlicht die PC-Performance Unterschiede zwischen Ziel- und Entwicklungsrechner für die Laufzeitdifferenz verantwortlich sein? 3) Falls es "ganz normal" ist, dass dieses VI in Verbindung mit der angeschlossenen Hardware "so lange" braucht um sämtliche Werte zu erfassen, welche Möglichkeiten habe ich um die Laufzeit zu verringern? (und somit dann die Taktzeit der gesamten Whileschleife zu verkürzen) Für sämtliches Gedankengut jetzt schon mal vielen Dank!! (Ich bin ab Montag wieder am Rechner) Gruß, Philipp RE: Reduzierung des Zeitbedarfs zur Datenerfassung - GerdW - 09.05.2018 20:16 Hallo Philipp, Zitat:1) Macht es in Bezug auf die benötigte Laufzeit einen Unterschied, ob entsprechende Hardware angeschlossen ist, oder nicht?Wenn du ohne Hardware das Signal simulierst, ist die Schleife natürlich schneller, weil du das SimulateSignal auf "so schnell wie möglich" eingestellt hast… Zitat:2) Könnten schlicht die PC-Performance Unterschiede zwischen Ziel- und Entwicklungsrechner für die Laufzeitdifferenz verantwortlich sein?Nein. Es sei denn, die Rechner unterscheiden sich um den Faktor 50 bei der Rechenleistung… Zitat:3) Falls es "ganz normal" ist, dass dieses VI in Verbindung mit der angeschlossenen Hardware "so lange" braucht um sämtliche Werte zu erfassen, welche Möglichkeiten habe ich um die Laufzeit zu verringern? (und somit dann die Taktzeit der gesamten Whileschleife zu verkürzen)Mit den von dir voreigestellten Werten (Samplerate=1000, Anzahl Werte=1000) würde ich eine Iterationszeit von sogar 1s erwarten… Anscheinend benutzt du selbst andere Werte, wenn du nur 85ms pro Iteration bekommst, verschweigst uns diese aber. Außerdem hast du uns das subVI vorenthalten, welches den eigentlichen DAQ-Code enthält! Die Schleife iteriert schneller, wenn du entweder die Samplerate erhöhst oder die Anzahl der zu lesenden Werte verringerst: t ~ Anzahl / Samplerate. (Mit der Einschränkung, dass der Overhead bei sehr kleinen Werten für Anzahl natürlich überproportional ansteigt.) RE: Reduzierung des Zeitbedarfs zur Datenerfassung - Philipp841 - 14.05.2018 13:57 Hallo Gerd, Danke für deine Erklärungen! GerdW schrieb:Mit den von dir voreigestellten Werten (Samplerate=1000, Anzahl Werte=1000) würde ich eine Iterationszeit von sogar 1s erwarten… Dem ist tatsächlich so. Im Frontpanel des Main-VI können diese Werte angepasst werden. Habe ich soweit verstanden. GerdW schrieb:Außerdem hast du uns das subVI vorenthalten, welches den eigentlichen DAQ-Code enthält! Dies war natürlich keine Absicht. Mir ist ehrlich gesagt auch gar nicht klar, welches Sub-VI, bzw. welche Stelle du meinst. Zur Sicherheit lade ich nochmal "Die Tapete" hoch, in der das VI enthalten ist. GerdW schrieb:Die Schleife iteriert schneller, wenn du entweder die Samplerate erhöhst oder die Anzahl der zu lesenden Werte verringerst: t ~ Anzahl / Samplerate. Auch dies erscheint mir zunächst logisch. Jedoch scheinen sich an irgendeiner Stelle ca. 60ms dazu zu mogeln. Vielleicht hast du eine Ahnung wie dies zu Stande kommt? Ich habe mit der rate & Anz. der Samples mal etwas rumgespielt und folgende Zeitbedarfe festgehalten: rate: 1000 (konstant belassen) number of samples: / benötigte Zeit in ms: 1 - - - - - 40 2 - - - - - 63 5 - - - - - 68 10 - - - - 73 100 - - - 164 500 - - - 564 1000 - - 1064 Demnach addiert sich zu der Zeit die für die Samples benötigt wird, an irgendeiner Stelle ca. 60ms und mir ist nicht klar warum bzw. wodurch. Besten Gruß & vielen Dank, Philipp ** Die zusätzlichen 60ms fallen übrigens nur an, wenn ich das VI am Zielrechner (mit der angeschlossenen Hardware laufen lasse). Wenn ich das Signal simuliere (z.B. mit 1000Hz & 100 Samples komme ich erwartungsgemäß auf 10,xx ms.** [attachment=59114] RE: Reduzierung des Zeitbedarfs zur Datenerfassung - GerdW - 14.05.2018 14:16 Hallo Philipp, Zitat:Mir ist ehrlich gesagt auch gar nicht klar, welches Sub-VI, bzw. welche Stelle du meinst.Ich meine den ehemaligen DAQAssistent2, jetzt "DAQ AI mit Devices"… Zitat:Jedoch scheinen sich an irgendeiner Stelle ca. 60ms dazu zu mogeln.Da wird nirgends gemogelt! Es ist alles so, wie du es programmiert hast! Im ehemaligen DAQAssi wird der DAQmxTask als "Finite Samples" angelegt, du willst aber kontinuierlich messen. Dann wäre es doch sinnvoll, den Task als "Continuous Samples" anzulegen, oder? Anmerkung: Ich finde es wesentlich übersichtlicher, wenn man im Projekt im "Hauptast" nur das MainVI sieht und die ganzen subVIs in (auch virtuellen) Verzeichnissen "verschwinden"… RE: Reduzierung des Zeitbedarfs zur Datenerfassung - Philipp841 - 14.05.2018 15:22 OK... Kannst du mir denn sagen, warum ich bei bspw. 1000 Hz und 1000 Samples nicht 1000ms benötige sondern 1063, bzw. wie ich die zusätzlichen 63 ms eliminieren kann? Ich dachte bislang, da mit einer Queue gearbeitet wurde, kommt eine kontinuierliche Messung nicht in Frage!? Danke. RE: Reduzierung des Zeitbedarfs zur Datenerfassung - jg - 14.05.2018 16:09 Aktuell legst du dauernd einen AI-Task an, startest diesen, liest die Daten zurück, und stoppst den Task. Das Anlegen, Starten und Stoppen sowie die Übertragung der Daten per Bus kosten bei realer Hardware natürlich Zeit. Deshalb wie von Gerd vorgeschlagen: Wenn man kontinuierlich messen will, dann den Task auch so anlegen, und nach Start der Datenerfassung schön brav kontinuierlich die Daten abholen. Dann hast du den Overhead für Konfiguration, Start und Stopp des Tasks nur 1x und nicht jede Sekunde, so wie jetzt. Gruß, Jens RE: Reduzierung des Zeitbedarfs zur Datenerfassung - Philipp841 - 15.05.2018 15:26 Danke für eure Beiträge. Zwei Fragen dazu: Kann es wirklich sein, dass LV für die Konfiguration, Start und Stopp des Tasks tatsächlich über 60ms benötigt?? Und nochmal: Momentan werden die Werte als dynamische Daten, getaktet in Form eines Arrays, in einer Queue geparkt. Funktioniert dies genau so, wenn ich die Erfassung kontinuierlich gestalte? Was gilt es zu beachten? Über ausführliche, beginnertaugliche Antworten bin ich sehr dankbar! Phil RE: Reduzierung des Zeitbedarfs zur Datenerfassung - GerdW - 15.05.2018 15:32 Hallo Phil, Zitat:Kann es wirklich sein, dass LV für die Konfiguration, Start und Stopp des Tasks tatsächlich über 60ms benötigt??Ja. Da muss der Treiber die Hardware einrichten und scharf schalten. Es muss Speicher angefordert und eingerichtet werden, etc.… Zitat:Momentan werden die Werte als dynamische Daten, getaktet in Form eines Arrays, in einer Queue geparkt. Funktioniert dies genau so, wenn ich die Erfassung kontinuierlich gestalte? Was gilt es zu beachten?Beginnerfreundlich: schau dir doch einfach mal die BeispielVIs im Beispielfinder an! Da wird sowas alles gezeigt… Beginnerfreundlich (auch wenn es hier nicht sofort den Anschein hat): verabschiede dich von DDT-Drähten und ExpressVIs. Du wirst mir nochmal dankbar sein… RE: Reduzierung des Zeitbedarfs zur Datenerfassung - Philipp841 - 16.05.2018 15:02 Hallo zusamm, leider bin ich bei dem Versuch Gerds Ratschläge umzusetzen bisher kläglich gescheitert. Ich habe das Beispiel "Spannung - Kontinuierliche Erfassung" genauer unter die Lupe genommen und den Versuch gestartet, das SubVI AquireData.vi mit den Bausteinen aus dem Beispiel VI zu ersetzen. Wie gesagt, leider ohne Erfolg. Folgendes Problem ist aufgekommen: Das DAQ-Express VI wird in meiner Anwendung bislang über Arrays (unterschiedlicher Datentypen) konfiguriert. z.B. "sage" ich dem Express VI über das Array "AI Channels" welche physikalischen Kanäle von der Karte genutzt werden sollen. Genau so verhält es sich mit der Schaltungsart oder auch den min. & max. Spannungen. All diese Daten werden in Form verschiedener Arrays an das Express VI übergeben und somit mehrere Kanäle gleichzeitig konfiguriert. In dem Beispiel VI wird für die Definition des physikalischen Kanals der Datentyp "Physikalischer Kanal" verwendet und somit immer lediglich nur ein Kanal konfiguriert. Nun zu meiner Frage: Ist es möglich, die manuelle Datenerfassung (ohne Express VI) mit den selben Datentypen (Arrays) zu konfigurieren, wie ich sie für das DAQ-Express Vi genutzt habe? Wenn ja, wäre ich für eine leicht verständliche Erklärung bzgl. der Umsetzung sehr dankbar. Falls nicht, müsste ich von der Umgestaltung der Datenerfassung vermutlich absehen, da die Konfig-Daten über lokale Variablen noch an einigen weiteren Stellen genutzt werden, die alle streiken, wenn ich den Datentyp ändere. Oder wäre es auch auch mit dem bestehendem Express VI möglich die Datenerfassung auf kontinuierlich umzustellen und somit die 60ms zum Starten, Öffnen, Lesen und Stoppen des Tasks zu sparen? (siehe oben) Auch hier wären Tipps seitens der Umsetzung hilfreich. P.S: Da ich mich seit ca. einer Woche mit nichts Anderem beschäftige und dennoch gefühlt kaum Fortschritte mache, bin ich über hilfreiche Tipps echt dankbar! Gruß, Philipp RE: Reduzierung des Zeitbedarfs zur Datenerfassung - GerdW - 16.05.2018 15:34 Hallo Philipp, Zitat:All diese Daten werden in Form verschiedener Arrays an das Express VI übergeben und somit mehrere Kanäle gleichzeitig konfiguriert.Nein, da wird nichts "gleichzeitig" gemacht! Diese Arrays werden in einer autoindizierenden Schleife ein Element nach dem anderen abgearbeitet… Also das, was eben ein Tipp aus den LabVIEW-Grundlagen ist: wenn man eine Funktion mehrfach ausführen will (z.B. für alle Elemente eines Arrays), dann sollte man mit einer Schleife arbeiten! Wenn du einfach mal in diesen "DAQ AI mit Devices" hineingeguckt hättest, dann hättest du das auch sehen müssen! |