03.08.2010, 12:22
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2010 12:23 von WolfiB.)
Beitrag #1
|
WolfiB
LVF-Gelegenheitsschreiber
Beiträge: 88
Registriert seit: Jul 2007
8.5
2007
de
711xx
Deutschland
|
Speichern von definierter Anzahl von Messwerten?
Hallo,
über eine analoge Karte erfasse ich mehrere Signale kontinuierlich mit 1kHz. Diese Teile ich durch die Indizes auf, so dass ich
einzelne Signale habe.
In einer State-Machine läuft mein Ablauf ab. Wenn ich nun in einem bestimmten Case bin soll die Messung genau wie möglich gestartet
werden und dann eine definierte Anzahl an Messwerten (Bsp. 12000) aufnehmen. Bei der Abtastrate von 1kHz würde dies dann genau
12 Sekunden dauern. Die Messwerte sollen dann in einem Array-gespeichert werden.
Reicht es wenn ich hier eine ForSchleife mit Wartezeit 1ms einfüge? Das wird aber nicht genau genug sein, oder?
Wie kann ich dies noch anders, sicherer erstellen?
Vielen Dank.
|
|
|
03.08.2010, 12:36
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2010 12:37 von Y-P.)
Beitrag #2
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Speichern von definierter Anzahl von Messwerten?
Hi Wolle,
hast Du das Bsp. im "Example Finder" schon mal angeschaut (Finite Samples)?
Acq_Graph_Voltage_Int_Clk.vi (Größe: 28,96 KB / Downloads: 337)
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
03.08.2010, 12:54
Beitrag #4
|
WolfiB
LVF-Gelegenheitsschreiber
Beiträge: 88
Registriert seit: Jul 2007
8.5
2007
de
711xx
Deutschland
|
Speichern von definierter Anzahl von Messwerten?
Hallo,
wie das Beispiel von YP hatte ich es bisher gemacht.
Ich verwende auch DAQmx.
LV V8.5
Aufnahme_Analogeing_nge.vi (Größe: 161,02 KB / Downloads: 273)
Das ging aber nur mit einem Signal gut. Als ich dies auf 3 erweitert habe kam ab und zu eine Fehlermeldung.
Dann hatte ich gelernt, dass es nur einen Task pro Karte geben darf. Daraufhin hatte ich versucht das ganze in 1 Task zu packen.
AnalogeAufnahme1.vi (Größe: 44,85 KB / Downloads: 254)
Allerdings ist mit hier die Vorgangsweise zu:
- der Trennung der Signale
- sowie die Vorgehensweise zur Aufnahme in ein Array für den definierten Zeitpunkt mit bestimmter Anzahl an Messwerten nicht bekannt.
Die Werte können von mir aus ständig aufgenommen werden, aber nur ab dem Startzeitpunkt in ein Array geschrieben werden.
Wie muss allein die Whileschleife definieren??? Welche Wartezeit???
Steh da grad völlig auf dem Schlauch.
|
|
|
03.08.2010, 13:22
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2010 13:28 von dimitri84.)
Beitrag #5
|
dimitri84
Astronaut
Beiträge: 1.496
Registriert seit: Aug 2009
2020 Developer Suite
2009
DE_EN
53562
Deutschland
|
Speichern von definierter Anzahl von Messwerten?
Ein paar Stichpunkte:
-Deine 3 Kanäle in einen Task packen geht z.B. so:
... dann brauchst du auch nur eine Schleife.
-Du musst unbedingt die
1) Initialisierung des Tasks
2) Datenerfassung
3) Löschen des Task
in verschiedenen States deiner State-Machine durchführen. Also pro Messung nur einmal Initialisierung und Löschung des Tasks.
-Du musst, wie du schon geahnt hast, N Samples und N Chans bei DAQRead einstellen und z.B. 100 Samples pro Lesezyklus abholen.
-Du brauchst kein Wait.vi! Weg mit dem Metronom - das macht alles der DAQ-Treiber.
-Wieso benutzt du lokale Variablen und platzierst die Controls gefühlte 3 Meter neben dem eigentliche Blockdiagramm. Nimm direkt die Controls!
-Du musst einen Stop-Button erstellen der alles in deinem Programm zum Stillstand bringt. Wenn du mit deinem Auto anhalten willst, betätigst du ja auch ganz normal die Bremse anstatt mit 120 Sachen vorn Baum zu fahren
... als ersten Ansatz
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
|
|
|
03.08.2010, 14:59
Beitrag #7
|
WolfiB
LVF-Gelegenheitsschreiber
Beiträge: 88
Registriert seit: Jul 2007
8.5
2007
de
711xx
Deutschland
|
Speichern von definierter Anzahl von Messwerten?
Hallo,
kann ich dies so machen wie in diesem Beispiel mit dem 3 Signal (1+2 Signal muss natürlich auch entsprechende ändern)?
Ist dies für die AUfgabe korrekt oder bekomme ich so zeitliche Probleme???
V8.5
AnalogeAufnahme3.vi (Größe: 109,04 KB / Downloads: 297)
Danke
|
|
|
03.08.2010, 19:08
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2010 19:14 von Lucki.)
Beitrag #8
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Speichern von definierter Anzahl von Messwerten?
' schrieb:ich muss aber die jeweiligen Signalkanäle einzeln und zu verschiedenen Zeitpunkten starten können.
Denn die Aufnahme muss teilweise parallel ablaufen.
Zur weiteren Erklärung:
- Es handlet sich um eine Station mit 3 Prüfplätzen
- jeder Prüfplatz macht das gleiche, ist aber völlig autark voneinander
- Die Messung an einem jeweiligen Platz dauert z.B. 15s (Über Frontpanel vorgebbar)
- Daher kann es auch vorkommen, dass P1 startet, 7s später P3, 5s später P2.
Es gibt nur einen internen Timer für ai, dehalb können nicht mehrere ai-Tasks gleichzeitig laufen. Allerdings kann man mehrere ai-Tasks (mit jeweils verschiedenen Kanälen) gleichzeitig initialisieren, und man kann sie auch einzeln starten, ohne daß man immer die Tasks neu initialisieren muß. Sie dürfen nur nicht gleichzeitig laufen, d.h. gleichzeitig den Timer beanspruchen wollen.
Deine Aufgabe läßt sich also so nicht lösen. Eine Möglichkeit sehe ich aber: Die Tasks müßten sich gegenseitig verriegeln. D.h. wenn Task 1 läuft, dann wird der Start - falls innerhalb dieser Zeit ein weiterer Startknopf gedrückt wird - von Task 2 oder 3 so lange verzögert, bis Task 1 beendet ist.
AnalogeAufnahme3.vi (Größe: 28,41 KB / Downloads: 272)
|
|
|
04.08.2010, 06:44
Beitrag #9
|
WolfiB
LVF-Gelegenheitsschreiber
Beiträge: 88
Registriert seit: Jul 2007
8.5
2007
de
711xx
Deutschland
|
Speichern von definierter Anzahl von Messwerten?
Hallo,
@Lucki: Dies ist aber nur so, wenn ich verschiedene Tasks benutze, oder? Dann kann ich also nicht mehrere AI
parallel messen, denn so schnell schalten die ja nicht hin und her, dass ich ohne Wertverluste parallele Messungen erhalte.
Eine "Nacheinanderbearbeitung" ist für diese Anwendung bzw. Anlage nicht tragbar.
Wenn ich aber wie in den Berichten zuvor nur einen Task verwende der alle 3 AI-Signale ständig ausliest, und nur zu den
Messzeiten die Werte in ein Array schreibe, sollte es doch funktionieren, oder?
Wenn ja geht es mir vorallem um die sicherstellung, dass ich genau die Werte ab Start der Messung erhalte, und hier nicht mit
einer Zeitverzögerung und somit verschobenem Wertbild arbeite.
|
|
|
04.08.2010, 07:03
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Speichern von definierter Anzahl von Messwerten?
Was hast du denn für eine Startbedingung?
Wenn diese in einer Schleife überprüft wird, wirst du eher schlechte Karten haben. Das liegt daran, dass du bei der hohen Abtastrate mit DAQmx vermutlich nicht jeden einzelnen Wert übertragen kannst, sonder nur blockweise.
Ist das Triggersignal z.B. eine Überschreitung eines bestimmten Messwerts, ab dem du die Werte dann in dein Array schreibst, dann ist dein Vorhaben möglich.
Oder arbeitest du mit einem externen Trigger?
|
|
|
| |