Hallo zig,
1. Fehler abfangen und z.B. den TimeOut zur Erkennung von Durchfluss=0 benutzen.
Zitat:um ein Signalverlaufsdiagramm ergänzt, läuft der Graph
Was denn nun: Chart oder Graph? Die Linie in beiden nennt sich übrigens Plot. (Bitte immer die richtigen LabVIEW-Bezeichnungen verwenden, um Fehlinterpretationen zu vermeiden!)
2. Einen Zwischenbuffer benutzen, der immer den letzten aktuellen Wert speichert. Dies kann eine FGV oder auch ein Melder sein. Die Datenerfassung schreibt diesen Buffer, alle anderen lesen mit ihrem eigenen Takt aus dem Buffer. Fertig.
zu 2. Bitte die aktuelle VI-Version anhängen…
Zitat:nach Beenden des VI's erscheint der Fehler
Ganz allgemein: wenn ein Fehler irgendwann "erscheint", wurde er im Programm selbst nicht ordentlich behandelt. Also: besser programmieren!
(18.08.2014 13:42 )GerdW schrieb: [ -> ]1. Fehler abfangen und z.B. den TimeOut zur Erkennung von Durchfluss=0 benutzen.
Thx, werde ich versuchen.
Zitat:um ein Signalverlaufsdiagramm ergänzt, läuft der Graph
Was denn nun: Chart oder Graph? Die Linie in beiden nennt sich übrigens Plot. (Bitte immer die richtigen LabVIEW-Bezeichnungen verwenden, um Fehlinterpretationen zu vermeiden!)
Danke für den Hinweis!
Zitat:2. Einen Zwischenbuffer benutzen, der immer den letzten aktuellen Wert speichert. Dies kann eine FGV oder auch ein Melder sein. Die Datenerfassung schreibt diesen Buffer, alle anderen lesen mit ihrem eigenen Takt aus dem Buffer. Fertig.
FGV?
Zitat:zu 2. Bitte die aktuelle VI-Version anhängen…
Moment, kommt gleich!
^^ thx
Wie genau funktioniert das denn mit dem Abfangen der Fehler? Und sag jetzt bitte nicht google^^
Hier Das Vi... hat sich aber nix großartig verändert
Hallo zig,
du verwendest DAQmxTiming mit dem Modus "kontinuierlich". Bitte die Hilfe zur Funktion und zum Eingang "Sample pro Kanal" durchlesen…
Fehlerauswertung fängt damit an, dass man den Errorcluster-Draht irgendwo anschließt. Man kann ihn z.B. an das Stopp-Terminal einer Schleife anschließen. Oder an einen Fehlerbehandler. Oder an eine Case-Struktur. Oder man erstellt wenigstens eine Fehleranzeige innerhalb der Loop, damit ein Fehler nicht erst "nach Beendigung" angezeigt wird…
Hast du dir schon mal die diversen DAQmx-Beispiele im Beispielfinder angeschaut?
(18.08.2014 14:14 )GerdW schrieb: [ -> ]du verwendest DAQmxTiming mit dem Modus "kontinuierlich". Bitte die Hilfe zur Funktion und zum Eingang "Sample pro Kanal" durchlesen…
Und nun? Worauf möchtest du mich denn Aufmerksam machen?
Zitat:Fehlerauswertung fängt damit an, dass man den Errorcluster-Draht irgendwo anschließt. Man kann ihn z.B. an das Stopp-Terminal einer Schleife anschließen. Oder an einen Fehlerbehandler. Oder an eine Case-Struktur. Oder man erstellt wenigstens eine Fehleranzeige innerhalb der Loop, damit ein Fehler nicht erst "nach Beendigung" angezeigt wird…
Ich meinte eigentlich Konkret wie man den Timeout als Durchfluss=0 benutzen kann?
Zitat:Hast du dir schon mal die diversen DAQmx-Beispiele im Beispielfinder angeschaut?
Ja, die meisten mehrfach... warum?
Hallo zig,
Zitat:Worauf möchtest du mich denn Aufmerksam machen?
Ich zitiere:
Zitat:Samples pro Kanal … Wenn der Sample-Modus auf kontinuierlich eingestellt ist, verwendet NI-DAQmx diesen Wert zur Bestimmung der Puffergröße.
Du musst die Puffergröße wirklich nur in sehr seltenen Fällen vorgeben/beeinflussen. Dieser Fall ist bei dir nicht gegeben…
Zitat:Ich meinte eigentlich Konkret wie man den Timeout als Durchfluss=0 benutzen kann?
So:
Code:
IF error THEN
IF error=TimeOut THEN
Durchfluss := 0
ENDIF
ENDIF
Zitat:warum?
Weil dort meist ein rudimentäres Error-Handling gezeigt wird…
danke!
Was ich nun allerdings nach einer kleinen Suche immer noch nicht kapiere:
Zitat:Einen Zwischenbuffer benutzen, der immer den letzten aktuellen Wert speichert. Dies kann eine FGV oder auch ein Melder sein. Die Datenerfassung schreibt diesen Buffer, alle anderen lesen mit ihrem eigenen Takt aus dem Buffer. Fertig.
Melder haben doch gar keinen Buffer?!? Bzw. wird der ständig überschrieben... Es kann doch nicht so kompliziert sein ein implizites Timing mit einem expliziten zu synchronisieren?!
Hallo zig,
Zitat:Melder haben doch gar keinen Buffer
Doch - für genau ein Datenelement.
Du hattest gefragt, wie du Daten mit variabler Samplerate mit dann aber fester Samplerate gespeichert/angezeigt bekommst: über einen Buffer geht das sehr einfach. Deine DAQ-Loop schreibt die Daten in den Buffer (aka Melder) mit ihrem eigenen, unregelmäßigen Timing. Die Anzeige-/Speicher-Loop(s) lesen mit ihrem festen Takt aus dem Buffer (aka Melder) und bekommen so den jeweils gerade aktuellsten Messwert geliefert - unabhängig von irgendwelche Wartezeiten der DAQ-Loop…
Ich nutze dieses Prinzip bei seriellen Schnittstellen. Erstens sind die meist langsamer als der restliche Programmablauf und zweitens arbeiten die auch meist mit nicht konstanter Samplerate. Durch den Zwischenbuffer kann ich aber mein Programm mit festen Taktraten für Anzeige und Speicherung arbeiten lassen…
Ah ok ich verstehe. Mit dem Melder gehen also die übrigen Werte verloren und es wird nur das geschrieben, was nach dem Timing der Schreib-Schleife gerade vom Melder geliefert wird.
Danke, ich glaube langsam habe ich alle nötigen Infos zusammen, um die komplette MWE zu erstellen. Dazu dann, falls notwendig, in einem separaten Thread mehr.