17.11.2009, 15:32
(Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2009 17:49 von dimitri84.)
|
dimitri84
Astronaut
Beiträge: 1.496
Registriert seit: Aug 2009
2020 Developer Suite
2009
DE_EN
53562
Deutschland
|
Min/Max-Wert eines Signals speichern
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:
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?
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
|
|
|
17.11.2009, 16:01
(Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2009 16:01 von Achim.)
|
|
|
17.11.2009, 16:20
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Min/Max-Wert eines Signals speichern
' 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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
17.11.2009, 16:40
(Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2009 16:40 von Achim.)
|
|
|
17.11.2009, 17:25
(Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2009 17:27 von Achim.)
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Min/Max-Wert eines Signals speichern
' 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!
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
17.11.2009, 20:31
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Min/Max-Wert eines Signals speichern
' 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:
Case 0 wird auf jeden Fall als erstes durchgeführt, somit ist ab diesem Zeitpunkt das Shift-Register korrekt initialisiert.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
| |