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 

NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer



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!

10.09.2017, 23:04
Beitrag #1

Rick2017 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Sep 2017

2016
2015
EN


Schweiz
NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo

Ich habe drei Sensoren über den NI USB 6251 angeschlossen und mittels DAQmx ausgelesen.
Zwei der Sensoren wurden über den DAQmx kalibriert.
Die gewünschte Frequenz liegt bei 10Hz. Es sollen 10 Messpunkte pro Sekunde weiter gegeben werden.
Die Messwerte werden einem Array per Shift-Register übergeben, weiterverarbeitet und direkt durch einen Messgraphen dargestellt.
Mit dem Write Delimited Spreadsheet.vi sollen die Messwerte der: Zeit (Time Stamp), Volumen(Gewicht), Speed, Dichte und Temperatur abgespeichert werden.

Das Problem ist, dass ich keine konstante Frequenz von 10Hz realisieren kann. Anfänglich werden 10 Messpunkte pro Sekunde aufgezeichnet, allerdings nicht konstant. Nach 10 Minuten werden ca. 7 bis 8 Messpunkte pro Sekunde aufgezeichnet und gegen 20- 30 Minuten nach Mess-Start sind es bloss noch 6 Messpunkte, die pro Sekunde aufgezeichnet und nach Messende
abgespeichert werden.

Ich habe Versuche durchgeführt, die Sampels per Channel etc. herabzusetzen, ein Filter SUB.vi deaktiviert, jedoch ohne erfolg. Ich konnte keine konstante Abtastrate bzw. eine Frequenz von 10 Hz erreichen.

Ich wäre froh für einen Input, möglicherweise liegt das Problem in der Struktur.
Sollte ich eine Consumer-Producer Struktur wählen? Oder habe ich einen anderen Fehler eingebaut?

16.0 .vi  MessprogrammTrinkversuch.vi (Größe: 208,67 KB / Downloads: 231)

0.0 .zip  FluessigkeitsMessung.zip (Größe: 457,98 KB / Downloads: 196)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.09.2017, 07:48 (Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2017 07:54 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo Rick,

herzlich willkommen im Forum!

Zitat:Die gewünschte Frequenz liegt bei 10Hz. Es sollen 10 Messpunkte pro Sekunde weiter gegeben werden.
Leider stellst du diese 10Hz nirgends (beim DAQmx) ein.
Du hast da ein Metronom, welches deine Schleife mit 100Hz takten soll - aber wer garantiert dir das?
Wenn du exakt 10S/s haben willst, solltest du DAQmx entsprechend konfigurieren. (Schau mal in die Links in meiner Signatur…)

Zitat:Anfänglich werden 10 Messpunkte pro Sekunde aufgezeichnet, allerdings nicht konstant. Nach 10 Minuten werden ca. 7 bis 8 Messpunkte pro Sekunde aufgezeichnet und gegen 20- 30 Minuten nach Mess-Start sind es bloss noch 6 Messpunkte, die pro Sekunde aufgezeichnet und nach Messende abgespeichert werden.
Das spricht dafür, dass du irgendwo ein Array aufbaust, welches immer größer wird. Das verlangsamt dann dein VI…

Zitat:Mit dem Write Delimited Spreadsheet.vi…
Leider hast du deine subVIs nicht bereitgestellt…
Edit: hast du ja in dem ZIP gemacht.
Und da haben wir auch den Übeltäter: "Drink_measurement_subVI" fügt ständig neue Werte in dein 2D-Array ein! (Warum eigentlich InsertIntoArray statt BuildArray?)

Dein ganzes VI ist sehr unübersichtlich:
- nirgends gerade Drähte
- viele lokale Variablen
- für meinen Geschmack zu viele Verschachtelungen und Sequenzen
- bei der Statemachine gibt es CoercionDots und undefinierte Zustände…
- dein "rounding significants" ist größtenteils Blödsinn…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.09.2017, 11:47
Beitrag #3

Rick2017 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Sep 2017

2016
2015
EN


Schweiz
RE: NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo GerdW

Danke für die schnelle Antwort.

Ich werde sofort das Drink_measurement_(SubVI).vi abändern und BuildArray statt InsertIntoArray wählen.
In dem Drink_measurement_(SubVI).vi, wollte ich das Index-Array mit den aktuellen Werten Weight, Density, Temperature, Volumen
ergänzen. Ohne das InsertIntoArray sehe ich noch nicht wie ich z.B. die Position 0 (Time Cst.) aus dem Index Array mit dem Graph Multiplier und dem Build Array verbinde.


In dem rounding_Significants(SubVI) muss ich noch mal über die Bücher.

Anschliessend nehme ich mir die Einstellung der Frequenz vor und melde mich mit den Resultaten zurück.



16.0 .vi  MessprogrammTrinkversuch.vi (Größe: 208,27 KB / Downloads: 185)

16.0 .vi  Drink_measurement_(SubVI).vi (Größe: 42,53 KB / Downloads: 175)

16.0 .vi  Write Delimited Spreadsheet_modifier (DBL).vi (Größe: 15,52 KB / Downloads: 192)

16.0 .vi  FilterV1_Cell(SubVI).vi (Größe: 112,27 KB / Downloads: 192)

16.0 .vi  rounding_Significants (SubVI).vi (Größe: 41,19 KB / Downloads: 198)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.09.2017, 14:11
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo Rick,

Zitat:Ich werde sofort das Drink_measurement_(SubVI).vi abändern und BuildArray statt InsertIntoArray wählen.
Das wird das Problem nicht lösen.
Grundproblem bleibt das ständig wachsende Array - das geht in einem langlaufenden Programm überhaupt nicht!

- Du musst dieses Array in seiner Länge begrenzen.
- Du musst Daten schon in der Schleife wegspeichern.
- Du kannst Dinge per Producer-Consumer-Schema entkoppeln.Damit läuft dann deine DAQmx-Schleife ungebremst, die Queue übernimmt die Datenpufferung, wenn der Consumer nicht schnell genug ist (solange das RAM ausreicht)…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.09.2017, 23:19
Beitrag #5

Rick2017 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Sep 2017

2016
2015
EN


Schweiz
RE: NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo GerdW

Merci für den Tipp. Mit der Producer Consumer Struktur funktioniert es, 10 Messwerte por Sekunde
bei Laufzeiten von über 30 Minuten zu generieren. In dem Drink_measurement_(SubVI).vi habe ich die InsertIntoArray durch BuildArray ersetzt.

Das main: TrinkvolumenKopie.vi ist provisorisch.

Meine Resultate sind in den beiden txt files ersichtlich.

16.0 .vi  TrinkvolumenKopie.vi (Größe: 200,37 KB / Downloads: 197)

16.0 .vi  TrinkvolumenKopie.vi (Größe: 200,37 KB / Downloads: 197)

Bis auf die erste Messung der Sekunde 0 ( der Timerstart ist noch nicht fix), erhalte ich die 10 Messpunkte und die Startwerte pro folgender Sekunde bewegen sich in einem Range von 0.032 bis 0.037. In dem ersten txt file
gab es auch etwas grössere Unterschiede.

Die Frage ist ob ich noch etwas zusätzlich an dem DAQ einstellen muss?
Die Kalibrierung über den DAQ Assistant habe ich mit 1000 Sampels per Channel und einer rate von 1000 gemacht.

Die Einstellungen der Timing Settings, in der Configuration des DAQ Assistant, habe ich mit
Acquisition Mode: Continuous Samples
Samples to Read: 100
Rate (Hz): 1000
vorgenommen. Die Advanced Timing settigns habe ich per default auf sample Clock Type: Internal und
Timeout 10 (s) belassen.

Dementsprechend habe ich: Zeit (s) = "Samples to Read: 100" * 1 / Rate [1kHz]
Wenn ich jetzt wie in dem DAQmx rate auf 10'000 setze und die samples to read auf 1000
bin ich ja bei 10 Hz. Die number of samples per channel in dem DAQmx Read.vi ist mit 1000 festgelegt.

Du hast mir den Tipp gegeben die 10S/s einzustellen, hast du damit etwas anderes gemeint?


16.0 .vi  TrinkvolumenKopie.vi (Größe: 200,37 KB / Downloads: 197)

16.0 .vi  SensorsLog (SubVI).vi (Größe: 42,59 KB / Downloads: 165)

0.0 .txt  TestMessungConsumerProducer.txt (Größe: 669,09 KB / Downloads: 180)

0.0 .txt  TestMessungConsumerProducer2.txt (Größe: 66,33 KB / Downloads: 192)

16.0 .vi  Drink_measurement_(SubVI).vi (Größe: 33,09 KB / Downloads: 193)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.09.2017, 07:22
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo Rick,

Zitat:Wenn ich jetzt wie in dem DAQmx rate auf 10'000 setze und die samples to read auf 1000 bin ich ja bei 10 Hz. Die number of samples per channel in dem DAQmx Read.vi ist mit 1000 festgelegt.
Das ist korrekt so, (fast) alles ok.
Beim DAQmxTiming brauchst du keine "samples per channel" vorgeben, das macht der Treiber intern meist besser.

Zitat:Du hast mir den Tipp gegeben die 10S/s einzustellen, hast du damit etwas anderes gemeint?
Nein, ich meinte genau das, was du jetzt eingestellt hast!

Zum VI:
- die Queue wird mit einer Array-Konstante definiert, deren Index auf 1Mio steht - obwohl es sich um ein leeres Array handelt. Das ist sehr verwirrend und trägt nicht zur Code-Dokumentation bei! Warumnimmst du nicht einfach InitArray, um ein leeres 2D-Array zu definieren?
- dein "Drink_measurement"-subVI versucht immer noch, ein 2D-Array aufzubauen - obwohl es am Input immer das vorher definierte leere 2D-Array bekommt und du die Daten (richtigerweise) nicht mehr im Array sammelst! Du baust also ein Output-Array aus einem leeren Input und 5 neu berechneten Werten: warum nicht einfach ein 1D-Array aus den 5 neuen Werten erzeugen? (Das würde den Rest des Vis auch vereinfachen…)
- In der Producer-Loop setzt du in jeder Iteration eine Property deines Graphen - im 10Hz-Takt. Sowas ist i.A. unsinnig…
- das RoundingSignificants ist immer noch unsinnig: ein Float auf 1 Nachkommastelle runden zu wollen erzeugt neue Ungenauigkeiten, da Floats Zehnerbrüche nicht exakt darstellen können. Formatiere einfach die entsprechende Anzeige wie gewünscht - oder rechne mit Integerwerten…
- Generell solltest du dein Vi auch mal aufräumen, AutoCleanup kann dabei helfen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.09.2017, 11:23
Beitrag #7

Rick2017 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Sep 2017

2016
2015
EN


Schweiz
RE: NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo GerdW

Danke für die Unterstützung. Big Grin
Die Frequenz und das Speichern der Messwerte funktioniert super.


Das 2D Array in dem Drink_measurement_2(SubVI) war uhrsprünglich
unteranderem für die Darstellung des Graphen gedacht.

Jetzt möchte ich den Graphen der Messwerte wieder darstellen können. Die Frage ist, ob ich die
Werte aus der Queue auslesen kann in einer weiteren Schleife
denn jetzt habe ich das Buffer-Problem nicht mehr, aber auch keine kontinuierlichen Werte die
ich in einem Graphen darstellen kann.


Falls du mir einen Tipp geben könntest währe ich froh.

Gruss Rick


16.0 .vi  Drink_measurement_2(SubVI).vi (Größe: 33,11 KB / Downloads: 181)

16.0 .vi  TrinkvolumenKopieFreqTop - Copy.vi (Größe: 198,42 KB / Downloads: 195)

16.0 .vi  SensorsLog (SubVI).vi (Größe: 41,88 KB / Downloads: 173)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.09.2017, 11:40
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo Rick,

du könntest einen Chart statt des Graphen verwenden.
Oder im Consumer ein Array mit den Plotdaten in einem Schieberegister speichern - diesmal dann aber die Länge des Arrays auf vernünftige Werte begrenzen!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.09.2017, 14:47
Beitrag #9

Rick2017 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Sep 2017

2016
2015
EN


Schweiz
RE: NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo GerdW

Danke für den Hint.

Ich kann die Daten wie gewünscht speichern.

Jetzt muss ich aber nochmals im nachhinein die Volumenwerte ändern.

Gibt es eine elegantere Lösung für den Zwischenpeicher meiner Tabelle,
statt einen Link zu meinem abgespeicherten File zu erstellen, um es zu öffnen und die
Werte aus entsprechender Spalte mit einer Formel zu verändern?

Das Programm schliesst ja erst definitiv das Write file wenn ich Stop drücke.

Gruss Rick

PS: Das rounding muss ich immer noch löschen.
16.0 .vi  Trinkvolumen_Do01.vi (Größe: 173,37 KB / Downloads: 188)

16.0 .vi  DrinkCalc (SubVI).vi (Größe: 16,02 KB / Downloads: 179)

16.0 .vi  FilterV1_Cell(SubVI).vi (Größe: 137,04 KB / Downloads: 216)

16.0 .vi  SensorsLog (SubVI).vi (Größe: 41,85 KB / Downloads: 173)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.09.2017, 19:31
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: NI USB 6251, DAQ, Frequenz bleibt nicht konstant über die Messdauer
Hallo Rick,

Zitat:Jetzt muss ich aber nochmals im nachhinein die Volumenwerte ändern.
Wenn es im "Nachhinein" geschieht, kannst du die Datei ja einlesen und bearbeiten…

Zitat:Gibt es eine elegantere Lösung für den Zwischenpeicher meiner Tabelle, statt einen Link zu meinem abgespeicherten File zu erstellen, um es zu öffnen und die Werte aus entsprechender Spalte mit einer Formel zu verändern?
Welche Tabelle? Ich sehe keine im VI…
Wie erstellst du einen Link? Wozu einen Link?

Kannst du dein Problem nochmal genauer beschreiben?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Signal-Speicherung mit definierter Messdauer gifo 27 12.586 25.11.2015 14:03
Letzter Beitrag: gifo
  TTL Signal mit NI 6251 einlesen stefan1312 4 4.247 08.05.2015 09:26
Letzter Beitrag: GerdW
  Digital Waveform ausgeben mit 6251 gottfried 7 4.512 23.09.2014 09:51
Letzter Beitrag: gottfried
  PXI misst nicht konstant (Zeitdrift) Gerald85 14 9.873 15.08.2013 16:48
Letzter Beitrag: Gerald85
  DAQ NI PCI-6251 mit BNC2120 Topia 5 5.024 17.08.2012 12:51
Letzter Beitrag: GerdW
  Frequenz bei analoger Ausgabe stimmt nicht Aya 7 4.957 30.07.2012 15:51
Letzter Beitrag: Aya

Gehe zu: