' schrieb:Das schreit doch nach einer State Machine. Wartestatus, der die digitalen Eingänge abfragt und regelmäßig mit niedriger Rate sampled, beim Ändern der entsprechenden Eingänge wird der Case aufgerufen, der mit hoher Rate 30 Sekunden lang aufzeichnet... Danach Datei speichern oder Userabfrage, ob er das will etc.
Hi genau die Idee hatte ich auch schon. Vielleicht sollte ich dazu nochmal etwas genauer auf das Problem eingehen. Ich habe meine Angabe für die "rate" ja außerhalb der Schleife, damit ich mich beim Messen nicht mit den Initialisieren der Hardware aufhalten muss. Sprich ich nehme immer mit 10 KHz auf. Das Format ist dann ein Array aus Waveforms. Wenn ich jetzt für eine "number of sample per channel" von 1000 nur 10 Werte speichern will kann ich ja nicht einach das Array der Waveform reduzieren, da ich damit ja meine Kanäle reduzueren würde. Ich müsste also erst mein Array aufspalten aud die Arrays der Y-Werte der einzelnen Kanäle und diese dann reduzieren. Ich habe so etwas ähnliches schon für die Kalibrierung gemacht. Aber wirklich shcön ist das nicht. Genauer gefragt : Wie macht man sowas in proffesionell und schnell... Ich habe zur Verdeutlichung mal ein bild meiner Kalibrieirung angehängt.
Gruß Lex
' schrieb:Hi genau die Idee hatte ich auch schon. Vielleicht sollte ich dazu nochmal etwas genauer auf das Problem eingehen. Ich habe meine Angabe für die "rate" ja außerhalb der Schleife, damit ich mich beim Messen nicht mit den Initialisieren der Hardware aufhalten muss. Sprich ich nehme immer mit 10 KHz auf. Das Format ist dann ein Array aus Waveforms. Wenn ich jetzt für eine "number of sample per channel" von 1000 nur 10 Werte speichern will kann ich ja nicht einach das Array der Waveform reduzieren, da ich damit ja meine Kanäle reduzueren würde. Ich müsste also erst mein Array aufspalten aud die Arrays der Y-Werte der einzelnen Kanäle und diese dann reduzieren. Ich habe so etwas ähnliches schon für die Kalibrierung gemacht. Aber wirklich shcön ist das nicht. Genauer gefragt : Wie macht man sowas in proffesionell und schnell... Ich habe zur Verdeutlichung mal ein bild meiner Kalibrieirung angehängt.
Gruß Lex
Das Diagram sieht ja schrecklich aus. Wenn Du denn schon sowas machen musst dann doch bitte einfach in einer Case Struktur innerhalb einer For Schleife. Den Case Selector an den Index der For Loop anschliessen und dann kannst Du auch einigermassen vernünftig die entsprechende Skalierung in die richtigen Cases machen, ohne eine Spagetthiorgie zu veranstalten. Das ist ja sonst nicht zum unterhalten wenn da mal ein Kanal hinzukommt, verschiebt oder wegfällt.
Rolf Kalbermatter
Gute Idee!
Du meintest sowas... ?
Gruß Lex
' schrieb:Gute Idee!
Du meintest sowas... ?
Gruß Lex
Das sieht deutlich lesbarer aus.
Die "28" kannst du dir schenken...
' schrieb:Gute Idee!
Du meintest sowas... ?
Gruß Lex
Das sieht schon viel besser aus. Wie Achim geschrieben hat die Konstanate 28 ist unnötig oder eventuel gar störend. LabVIEW macht bei Arrays an Loop Bounderies Autoindexing und bei For Loops bestimmt ein Autoindexing Array als Eingang auch die maximale Anzahl der Iterationen der Loop. Bei mehrerenen Arrays und/oder einem verbundenen N Terminal nimmt LabVIEW den kleinsten aller Werte davon als effektive Anzahl Iterationen.
Selber würde ich auch den Increment by 1 des Indexes weglassen und natürlich hast Du einen Default Case wo alle Kanäle durchgehen, die nicht skaliert werden müssen?
Rolf Kalbermatter
Hi,
danke erstmal für Eure Antworten. Ich konnte dadurch viel verbessern und lernen.
Jetzt bin ich auf ein weiteres Problem gestoßen. Um Speicherplatz in weniger brisanten Messphasen zu sparen habe ich folgendes SubVi erstellt. Funktioniert auch so ganz gut. Das was mich stört, ist dass, wenn ich die Datei später in eine Text umschreibe füllt er die gelöschten Zeilen mit Leerzeilen auf. Zum Verständniss auch nochmal das Umschrieben der Datei.
Vielen Dank schonmal.
Gruß Axel
PS: Keine Angst das ExpressVI habe ich nur eingebaut um das Ergebniss der Forschleifen zu kontrollieren.
Hallo,
ich bin auf eine weitere Frage gestoßen bei der ich gerne Eure Meinung einholen würde.
Ich habe mal alle nötigen VIs angehängt. Bisher kann ich alle analogen und digitalen Kanäle auslesen, als binary speichern und nach beenden der Messung umschreiben. Folgendes muss ich jetzt noch einbauen, aber ich weiß nicht wie ich das am besten mache.
Das VI soll kontinuierlich laufen und Messdaten aufzeichnen. Dann Drücke ich irgendwann den Trigger. Wenn der Trigger gedrückt worden ist, sollen nach einer vorgegebenen Sequenz mehrere Dinge passieren. Dazu habe ich das Bild mal angehängt welches dieses beschreibt.
- Der Ausgangswert des AO soll für eine gegebene Zeit verändert werden.
- Nach einer gegebenen zeit sollen zwei Kameras getriggert werden. Ledes Bild soll einzeln gestarten werden da unsere Kameras mit unterscheidlicher Rate laufen würden wenn wir nur einen Starttrigger verwenen wurden.
- Ein Laser soll für eine gewisse Zeit eingeschaltet werden.
Ich habe überlegt einen Case zu verwenden. Aber wenn ich den Case in meine "Hauptschleife" einbaue und dann eine Sequenz oder ähnliches verwende, würde die "Hauptschleife" ja so lange warten. Aber ich möchte, dass die "Hauptschleife" davon umberührt bleibt, welche Ausgabewerte ich für wie lange ausgebe.
Vielleicht kann man ja zwei parallele Schleifen nehmen. Aber was dafür die beste Lösung ist, weiß ich nicht. Über Ratschläge würde ich mich freuen...
Viele Gruß
Axel