(16.08.2013 07:43 )GerdW schrieb: [ -> ]- Du hast deine DAQmxTasks mit Samplerate definiert. Das bedeutet: du legst beim DAQmxRead fest, wieviele Samples du pro Aufruf auslesen willst statt mit -1 alle vorhandenen anzufordern. Über die Anzahl der Sample und die Samplerate stellt sich automatisch ein Looptiming ein und du kannst deine eigene Wartezeit (50ms Metronom) aus der Schleife löschen!
Meinst du mit über die Anzahl der Samples die, die im aktuellen Durchlauf verfügbar sind?
Innerhalb der Schleife lese ich ja mit -1 alle verfügbaren - oder was meinst du?
Ich habe jedenfalls das Gefühl, dass die Anzeige ohne die Wartezeit ruckliger wird.
(16.08.2013 07:43 )GerdW schrieb: [ -> ]- Du weißt nicht, wie lange das Speichern der Daten benötigt. Hier kann es zu unerwarteten Latenzen kommen. Kennst du das Producer-Consumer-Schema schon?
Noch nicht,
aber was ich dazu gefunden habe sieht sinnvoll aus. Ich werde mich heute mittag mal an die Implementation machen.
(16.08.2013 07:43 )GerdW schrieb: [ -> ]- Du hast kein durchgängiges Errorhandling.
Bin schon dabei das zu ändern. Aber sieht noch nicht sehr schön aus, da hast du recht..
(16.08.2013 07:43 )GerdW schrieb: [ -> ]Kommt die Lücke im Chart während einer Messung oder wenn du schnell hintereinander Messungen startest?
Die Lücke kommt bei einer durchgängigen Messung.
Hallo Daxel,
Zitat:Meinst du mit über die Anzahl der Samples die, die im aktuellen Durchlauf verfügbar sind?
Innerhalb der Schleife lese ich ja mit -1 alle verfügbaren - oder was meinst du?
Genau das meine ich. Man liet typischerweise eben nicht die "verfügbaren Samples" aus, sondern gibt eine feste Anzahl zu lesender Samples vor. Dadurch ergibt sich automatisch eine Wartezeit in der Schleife, da DAQmxRead nun warten muss, bis diese Anzahl Samples gemessen wurde. Schau dir mal das Beispiel "Cont Acq&Graph Voltage-Int Clk-AnalogStart" an (den Teil mit dem AnalogStart darin kannst du ignorieren)...
Das Beispiel habe ich nicht gefunden (wegen der deutschen Version?), habe mal so etwas probiert. Sieht jetzt aus wie im angehängten Bild, möchte so allerdings ganz und gar nicht funktionieren. Während ein digitales Signal, das ich in ein analoges umwandele, ohne Lücken angezeigt wird und ruckelfrei durch das Diagramm läuft, ergibt sich folgendes Bild beim Lesen der Analogeingänge:
[
attachment=45916]
Die einzelnen Abschnitte erscheinen immer nach einer kurzen Wartezeit.. So sieht das ganze natürlich nicht sehr toll aus. Allerdings sehe ich den Unterschied zwischen dem analogen und dem digitalen Task nicht? Wahrscheinlich habe ich dich hier falsch verstanden, oder?
Hallo Daxel,
noch etwas, was mir gerade auffällt:
Warum stellst du den SampleMode auf "endliche Anzahl", obwohl du eigentlich "Kontinuierlich" messen willst?
Daran scheint es gelegen zu haben, dankeschön! Habe die Hilfe so verstanden, dass ich den SampleMode auf "endliche Anzahl" setzen muss, damit ich eine Sample-Anzahl einstellen kann. Jetzt läuft das ganze wunderschön und ruckelfrei ab, nur ab und zu leert sich das ganze Diagramm vollständig; irgendwie will es also immer noch nicht
Hallo Daxel,
Zitat:nur ab und zu leert sich das ganze Diagramm vollständig; irgendwie will es also immer noch nicht
Wenn sich ein Diagramm "leert", bedeutet das, dass keine Werte bzw. leere Arrays/Waveforms hineingeschrieben werden. (THINK DATAFLOW!)
Das wiederum bedeutet: Wenn anscheinend leere Waveforms ankommen, gibt es ein Problem mit dem DAQmxRead. Und da kommt wieder der Punkt Fehlerbehandlung: einfach die Fehler zu löschen, unterdrückt zwar Fehlermeldungen - ist aber von echter Fehlerbehandlung noch weit entfernt...
Das soll auch noch nicht die endgültige Fehlerbehandlung sein - das werde ich aber dann wohl schnell mal ändern müssen.
Ich war mir nur nicht sicher, ob es nicht am Diagramm liegt: Selbst wenn leere Waveforms hineingeschrieben werden, müssten die alten doch weiter nach links laufen, oder? Das tuen sie nämlich nicht, sondern alles wird schwarz - und in die Historiendaten schreibe ich (an dieser Stelle) nicht (das wüsste ich hoffentlich
).
Das scheint aber hier nicht an einem Fehler im Task zu liegen: Habe überall das Fehler löschen Symbol gelöscht, und der einzige Fehler der kommt ist, dass der Task nicht zurück gesetzt werden kann - habe nämlich, um nur das analoge Signal anzuzeigen, keinen digitalen Task gewählt -> was nicht vorhanden ist, kann nicht gelöscht werden.
EDIT: Mit digitalem ausgewählten Task wird keine Fehlermeldung mehr angezeigt.