Moinmoin,
Ich hab folgendes Problem. Mein Programm nimmt von zwei analogen Eingängen Daten auf über DAQ. Das soll es alle 500ms machen. hab auch schon 1000 probiert, aber das bringt auch nichts. Nach etwa 5-6 Minuten werden aus den 500 dann 1s, dann 2s usw.
Ich glaube, nachdem ich hier schon mal geschaut hab, dass es daran liegt, dass ich in der Schleife die Datenerfassung immer neu starte und wieder schließe. Aber wenn ich für beide Eingänge die Initialisierung nach draußen lege, bekomme ich ne Fehlermeldung. Soweit ich weiß, kann man ja immer nur einen Kanal/Task zur Zeit ansteuern. Im Grunde müsste ich also noch eine Abfrage machen, wann der erste Kanal fertig gemessen hat und der zweite starten kann. Dann würde ja aber wieder alles in einer Schleife sein.
Versteht jemand mein Problem und weiß ne Lösung? Oder liegt der Fehler woanders?
Anbei mal das Programm, wie es momentan ist:
...oder auch nicht. Klappt hier nicht mit dem hochladen, probiers zuhause dann mal
Schon mal vorab (bevor du dein VI hochlädst):
1. Sammelst du Daten per Build-Array Funktion & Shift-Register? Das führt bei längerer Ausführung zur Fragmentierung des Speichers, da LV dauerd neuen Speicher allocieren muss für das immer größer werdende Array.
2. Wieso fasst du nicht die Erfassung der beiden Kanäle in ein Task zusammen? Dann brauchst du nicht dauernd die Tasks zu starten und zu stoppen.
MfG, Jens
Äh...nein, eigentlich wandel ich die Daten in Strings um und schreib sie dann in ein Spreadsheet(?). Und zusammenfassen wollte ich sie nicht, da ich damit mal Probleme hatte.
Anbei mal das Blockschaltbild
[
attachment=11142]
Ah ja, du hast im Prinzip doch ein sich dynamisch vergrösserndes Array, nämlich das String-Array, das du am Ausgang der While-Loop per AutoIndex sammelst. Da LabVIEW bei der While-Loop natürlich nicht im voraus weiss, wie gross das Array, hast du wohl ebenfalls (ähnlich wie bei Build-Array) das Problem mit der Defragmentierung des Speichers.
Dann die Frage: Du willst also jede halbe Sekunde einen Messwert von Kanal ai4 und Kanal ai5 erfassen. Wieso dies nicht per Hardware-Timing? Und immer beide Kanäle. Dann übernimmt der DAQmx-Treiber sowie die DAQ-Karte (Zwischenfrage: welche?) für dich das korrekte Timing. Und du musst nicht die Tasks neu starten und stoppen.
Beispiele dazu im NI-Examplefinder sind die Continous-Acquisations-VI's mit Internal Clock.
MfG, Jens
Ok, danke sehr, da werd ich morgen mal schauen.
Karte ist ein PCI-6220
Hallo, hier mal ein Bsp zur Erfassung der 2 Kanäle mit 2 Hz:
[attachment=38242:Read2AI.vi]
EDIT: Anhang gelöscht, da Datei offenbar korrupt.
Die Wandlung in Strings würde ich erst nach Abschluss der Messung machen (was erwartest du denn so als Maximaldauer?).
Ich habe das mal mit "simulierter DAQKarte" laufen lassen, hatte nach halber Stunde noch keine Probleme. Nachteil des Bsp: Auch hier wird dynamisch die Waveform immer weiter vergrößert, was auf Dauer nicht gerade das ideale für den Speicher des Computers ist.
MfG, Jens
Hallo Jens,
danke für das VI, aber mein LabVIEW mag das nicht aufmachen. Es gibt ne Fehlermeldung: "The File is not a resource File. ...not valid" (sinngemäß).
Ich hab mal mit den Beispielen rumgespielt und da kam auch was bei rum. Werds nachher mal hochladen, weil das hier auf der Arbeit nicht funktioniert.
Ich kann die Fehlermeldung bestätigen. Lad' das VI doch bitte nochmal hoch, Jens.
Gruß Markus
' schrieb:Hallo Jens,
danke für das VI, aber mein LabVIEW mag das nicht aufmachen. Es gibt ne Fehlermeldung: "The File is not a resource File. ...not valid" (sinngemäß).
Ich hab mal mit den Beispielen rumgespielt und da kam auch was bei rum. Werds nachher mal hochladen, weil das hier auf der Arbeit nicht funktioniert.
Tja, was ist den da schiefgegangen?! OK, neuer Versuch:
[
attachment=11189]
MfG, Jens
Hier mal das Programm, was bei mir aus dem NI-Beispiel entstanden ist.
Kann ich die Waveform eigentlich auch als Zahlenwert darstellen, also mit einer numerischen Anzeige?
Version ist 8.2
[
attachment=11198]