LabVIEWForum.de
Min/Max-Wert eines Signals speichern - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Min/Max-Wert eines Signals speichern (/Thread-Min-Max-Wert-eines-Signals-speichern)

Seiten: 1 2 3


Min/Max-Wert eines Signals speichern - SeBa - 10.11.2009 14:50

Jens... aka:

Sherlock Holmes des LV
Guru1Guru1Guru1

Gruß SeBa


Min/Max-Wert eines Signals speichern - dimitri84 - 17.11.2009 15:32

Eine Kurze Frage noch zum Initialisieren. Nach dem Datenflussprinzip geht es an einem Knoten ja erst weiter wenn alle angeschlossenen Eingänge einen Wert liefern können:

[attachment=22567]

Ich will jetzt die beiden Register mit sovielen Elementen initialiseren wie ich auch Kanäle habe. Wie viele Kanäle ich habe, weiß ich aber erst nach dem Initialisieren des DAQmx Tasks oder spätestens wenn ich den Datenstrom habe. Ich dachte jetzt nach dem Datenflussprinzip hat die lokale Variable (rot markiert) erst einen Wert, wenn das dazugehörige FP Element (auch rot markiert) den Wert das erste Mal erhält. Pustekuchen. Die Initialisierung erfolgt direkt am Anfang des VI-Starts, obwohl diese lokale Variable den Wert doch noch eigentlich garnicht wissen kann.

Was steht denn da in dieser Lokalen Variable für ein Wert, wenn das dazugehörige FP Element noch garnicht bedient worden ist?

Wie kann ich diese Initialisierung erst dann erfolgen lassen, wenn die Anzahl der Kanäle wirklich bekannt ist?


Min/Max-Wert eines Signals speichern - Achim - 17.11.2009 16:01

Ja aber was soll denn drin stehen? Wie du schon sagst...es geht von links nach rechts! Du kannst doch nicht heute einen Wert wissen den du dir erst morgen erzeugst...

Es steht also in der Variable der Default-Wert des Anzeigeelementes drin! Lokale Variable "boykottieren" das Datenflussprinzip, deswegen kriegst du auch immer Warnungen zu hören, diese nicht unbedacht einzusetzen, weil du damit sogenannte "race conditions" ("wer darf zuerst?!) provozierst!

Kriegst du die Anzahl nicht irgendwie beim Initialisieren des Tasks mit? Sorry...ich hab den Thread nicht durchgelesen...


Min/Max-Wert eines Signals speichern - jg - 17.11.2009 16:20

' schrieb:Kriegst du die Anzahl nicht irgendwie beim Initialisieren des Tasks mit?
100% ACK. Bei DAQmx musst du irgendwann mal angegeben haben, wieviele Kanäle du liest! Diesen Wert anschließen.

Für bessere Vorschläge, bitte VI hochladen, zwecks der vielen Case-Strukturen.

Und dann noch ein Wort zu lokalen Variablen: i2dx hat das mal schön ausgedrückt: Lokale Variable kann man sich eher als Funktionsaufruf vorstellen ("gib mir mal den Momentanwert"). Und der Momentanwert bei Programmstart eines numerischen Control ist halt Null.

Gruß, Jens


Min/Max-Wert eines Signals speichern - Achim - 17.11.2009 16:40

' schrieb:Und der Momentanwert bei Programmstart eines numerischen Control ist halt Null.

Ergänzung:
Meistens...es sei denn, du hast ihn vorher defaultmäßig anders festgelegt!


Min/Max-Wert eines Signals speichern - dimitri84 - 17.11.2009 17:06

Habe jetzt das VI nicht da. Werd's morgen früh hochladen.

Also ich habe an dem Defaultwert nichts verändert (müsste also Null sein), und trotzdem wird das array mit der richtigen Anzahl an Elemente initialisiert, nämlich 5.

Wo ich nicht drauf komme ist, wie initialisiere ich ein Schieberegister von einer Schleife, wenn ich die dazu nötige Information (Anzahl der Elemente) erst in der selbigen Schleife erhalte.


Min/Max-Wert eines Signals speichern - Achim - 17.11.2009 17:25

' schrieb:Also ich habe an dem Defaultwert nichts verändert (müsste also Null sein), und trotzdem wird das array mit der richtigen Anzahl an Elemente initialisiert, nämlich 5.
LV merkt sich den letzten Wert, solange du LV nicht komplett schließt. Wenn du LV komplett beendest, steht da wieder "0" bzw. der Default-Wert drin.

Zitat:Wo ich nicht drauf komme ist, wie initialisiere ich ein Schieberegister von einer Schleife, wenn ich die dazu nötige Information (Anzahl der Elemente) erst in der selbigen Schleife erhalte.
Geht nicht! Aber wie schon gesagt, du musst doch beim Task-Init festlegen, wieviele Kanäle du lesen willst...und dann hast du doch die Anzahl! Ich nehme mal an, dein Task-Init steckt in False-Fall...dann musst du den Init eben da raus nehmen und vor die Schleife packen!


Min/Max-Wert eines Signals speichern - dimitri84 - 17.11.2009 17:34

' schrieb:Aber wie schon gesagt, du musst doch beim Task-Init festlegen, wieviele Kanäle du lesen willst...und dann hast du doch die Anzahl! Ich nehme mal an, dein Task-Init steckt in False-Fall

Ja, die Init ist in einem der Cases.

' schrieb:...dann musst du den Init eben da raus nehmen und vor die Schleife packen!

Das würde mir nicht so gut passen, weil die spätere Exe auch auf Rechner ohne DAQmx laufen soll, da das Programm nicht nur zum Erfassen des Signals dient. Ich möchte da keine unnötigen Fehlermeldungen provozieren.


Min/Max-Wert eines Signals speichern - jg - 17.11.2009 20:31

' schrieb:Ja, die Init ist in einem der Cases.
Das würde mir nicht so gut passen, weil die spätere Exe auch auf Rechner ohne DAQmx laufen soll, da das Programm nicht nur zum Erfassen des Signals dient. Ich möchte da keine unnötigen Fehlermeldungen provozieren.
Dann pack in den Init-Case auch das Initialisieren des Shift-Register! Wenn der Ablauf deiner "State-Machine" (wobei man das nicht unbedingt mit True-False-Cases machen sollte) so ist, dass immer erst der Init-Case kommt, ist das kein Problem.

Hierzu ein Muster (ohne weitere Funktion), aber ich hoffe, das Prinzip wird klar:
[attachment=22576]
[attachment=22577]
Case 0 wird auf jeden Fall als erstes durchgeführt, somit ist ab diesem Zeitpunkt das Shift-Register korrekt initialisiert.

Gruß, Jens


Min/Max-Wert eines Signals speichern - dimitri84 - 17.11.2009 20:38

Na Klar! Wie so oft: Hätte man drauf kommen können. So werd' ich's machen.

Sei bedankt.