Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
RE: Abbruchbedingung while-Schleife führt zu Fehler
Auwezwick... Da magst du wohl recht haben Aber die Kontexthilfe hab ich tatsächlich immer offen!
Ich dank dir jetzt erst mal ganz ganz besonders für die Engelsgeduld die du mit mir hast, ohne dich wär ich heut ganz schön verzweifelt Danke für die Hilfe und bis morgen hoffentlich, jetzt hast du erst mal Ruhe vor mir!
Liebe Grüße,
Franzie
Anzeige
05.02.2015, 08:39 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2015 08:44 von toxicomanie.)
RE: Abbruchbedingung while-Schleife führt zu Fehler
So, guten Morgen!
Heute möchte ich es hinbekommen, dass der Mittelwert richtig gebildet wird und alle dafür erforderlichen Bedienelemente auf dem Frontpanel vorhanden sind.
Die Forderung lautet ja, dass ich alle 60 Sekunden einen einzigen Mittelwert bilde aus den in dieser Zeit gemessenen Werten. Es soll alle 10ms abgetastet werden - das ist das Sample-Intervall, oder? Diese Sample-Rate soll einstellbar sein.
Meine Frage ist jetzt, wie stelle ich das im DAQ-Assi richtig ein? Es gibt die "zu lesenden Werte", die "Rate" und einen Timeout. Gerade habe ich nochmal den Thread durchgelesen und die Tipps von Gerd gelesen. Samplerate=1/Sample-Intervall, das bedeutet meine Samplerate ist 1/10ms=100Hz. Das habe ich bei "Rate" eingestellt. Da das Verhältnis am besten 1:10 sein soll, habe ich bei den zu lesenden Werten 1000 eingestellt und meine Prüfzeit läuft jetzt erst einmal 60 Sekunden. Ich bekomme jetzt 7 Mittelwerte in meine Datei geschrieben, eigentlich sollte es ja nur ein einziger sein. Wo denke ich falsch?
Ach ja, ich habe den Timeout auf 15 gesetzt.
05.02.2015, 08:53 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2015 08:59 von GerdW.)
RE: Abbruchbedingung while-Schleife führt zu Fehler
Hallo toxico,
Zitat:Es soll alle 10ms abgetastet werden - das ist das Sample-Intervall, oder? Diese Sample-Rate soll einstellbar sein.
Richtig, das ist das Intervall…
Zitat:Samplerate=1/Sample-Intervall, das bedeutet meine Samplerate ist 1/10ms=100Hz. Das habe ich bei "Rate" eingestellt. Da das Verhältnis am besten 1:10 sein soll, habe ich bei den zu lesenden Werten 1000 eingestellt
Ich habe mich dort nicht präzise genug ausgedrückt. 1:10 bedeutet: Blockgröße = Samplerate/10. Also 10 Samples bei 100Hz…
Zitat: und meine Prüfzeit läuft jetzt erst einmal 60 Sekunden. Ich bekomme jetzt 7 Mittelwerte in meine Datei geschrieben, eigentlich sollte es ja nur ein einziger sein. Blink Wo denke ich falsch?
Du liest 1000 Samples bei 100Hz Samplerate ein. Wie lange wird das wohl dauern? (Kopfrechnen… )
Wenn deine Prüfzeit 60s dauert, wie oft wird dann wohl ein Block mit Samples geliefert? (Kopfrechnen… )
- Ich lese mit einer Rate von 100Hz je 10 Samples ein. Dies macht man, um eine einigermaßen flüssige Darstellung der Daten zu erhalten - in deinem VI bekommst du wesentlich seltener neue Daten angezeigt.
- Die Daten des 9. Kanals werden gesammelt - THINK DATAFLOW mit einem Schieberegister.
- Wenn Daten über eine Minute gesammelt wurde (Kopfrechnen: Anzahl der Samples pro Minute!) dann werden diese Samples aus dem Array genommen und gemittelt…
Nochmaliger Hinweis:
Schau dir die DAQmx-BeispielVIs an. Dort wird gezeigt, wie man ohne DAQAssi auskommt - der ist zwar nett für den Anfang, wird dich aber eher früher als später mächtig stören! ("Nett" ist die kleine Schwester von Schei… )
RE: Abbruchbedingung while-Schleife führt zu Fehler
Wenn du von Blockgröße sprichst, meinst du den (momentan) einzelnen Messwert den ich haben will, ja? Nur damit wir nicht aneinander vorbeireden
Wenn ich 1000 Samples bei 100 Hz (SPS - Samples per Second) habe, dann wird es wohl 10 Sekunden dauern bis ich einen Wert habe. Bei 60 Sekunden Prüfzeit werden dann 6 Blöcke geliefert... Wenn wir hier fertig sind, bin ich erleuchtet
Hast du das kurz mal gebastelt das Bild? Nicht schlecht. Ich denke mich mal rein, danke!
05.02.2015, 09:14 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2015 09:17 von GerdW.)
RE: Abbruchbedingung while-Schleife führt zu Fehler
Hallo toxico,
mit Blockgröße meine ich die Anzahl der Samples, die ich pro DAQmxRead-Aufruf (oder bei dir der DAQAssi-Aufruf) lesen möchte - also der "Anzahl"-Parameter…
Zitat:Bei 60 Sekunden Prüfzeit werden dann 6 Blöcke geliefert...
Mit leichten Ungenauigkeiten bei der Zeitmessung und DATAFLOW-Problemen sind es dann ruckzuck 7 Sample-Blöcke und eben 7 Mittelwerte davon in deiner CSV-Datei…
Merke:
Deine Messhardware kann die Zeit wesentlich genauer messen als dein Windows-PC. Die Einstellung der Samplerate ist quasi "heilig" und wird (im Rahmen der Hardwaremöglichkeiten) exakt eingehalten. Wenn du eine Samplerate von 100Hz einstellst, dann wirst du in einer Minuten eben 6000 Samples bekommen. Diese Methode, eine Zeit zu bestimmen, ist jedenfalls genauer, als Windows immer mal wieder nach der Zeit zu fragen und dabei zu hoffen, dass weder der Virenscanner noch irgendein Netzwerkzugriff dein Programm in der Ausführung behindert…
RE: Abbruchbedingung while-Schleife führt zu Fehler
Okay, das ist interessant und gut zu wissen. Werden denn diese Timer auch mit Windows-Zeit versorgt oder kann ich die bedenkenlos verwenden?
Zu dem Bild, das du geschickt hast - hier müsste ich ja selber abbrechen. Außerdem schreibt es mir keinen einzigen Wert in die Datei? Ich habe mal versucht, das nachzubauen, vllt habe ich ja irgendwo einen falschen Baustein drin, war etwas schwierig zu erraten
05.02.2015, 10:25 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2015 10:27 von GerdW.)
RE: Abbruchbedingung while-Schleife führt zu Fehler
Hallo Franzie,
Zitat:Werden denn diese Timer auch mit Windows-Zeit versorgt oder kann ich die bedenkenlos verwenden?
Diese Timer werden direkt auf der DAQ-Hardware in einem IC erzeugt/benutzt und sind vollkommen unabhängig vom verwendeten Betriebssystem…
Zitat:Ich habe mal versucht, das nachzubauen, vllt habe ich ja irgendwo einen falschen Baustein drin, war etwas schwierig zu erraten
- Ich verwende für das zu mittelnde Signal alle Samples, du dagegen nutzt nur ein einziges Samples deines Signals. Warum ist mein Draht dicker als deiner? (Altherrenwitz: Nicht die Länge, sondern die Dicke… )
- Wieso vergleichst du die Arraygröße mit einem Float-Wert?
- Was passiert im FALSE-Case der Case Struktur? Was sollte dort passieren? Frage: Wenn noch nicht genügend Samples gesammelt wurden, was soll dann mit den vorhandenen Samples passieren? Wieso sieht der Ausgangstunnel der Case-Struktur bei dir anders aus als bei mir?
RE: Abbruchbedingung while-Schleife führt zu Fehler
Das mit der Dicke des Drahts ist aber ein Problem, ich will ja explizit nur einen Mittelwert von einem der 11 gemessenen Signale^^ Ich messe ja 10x die Spannung über den Widerständen bei den Hall-Sensoren und einmal die Messspannung. Für jeden Kanal soll einzeln ein Mittelwert gebildet werden am Schluss, ich wollte jetzt mal mit der Messspannung anfangen. So wie du es gemacht hast, wird ja von allen Spannungen gleichzeitg der Mittelwert gebildet oder? o.O
Hmmm im FALSE-case.. Also wenn die Anzahl der Samples nicht erreicht wurde, dann soll weitergesammelt werden^^
Die vorhandenen Samples sollten am besten irgendwo zwischengespeichert werden, bei einer Messung von so langer Dauer wäre ein Datenverlust richtig schlecht - dazu auch gleich eine Frage eingehakt, die Mittelwerte werden dann immer in die Datei gespeichert, die wird geschlossen und es wird weitergesammelt?
Der Ausgangstunnel, ja.... :/ Das muss man richtig einstellen, wenn der weiß ist werden keine Daten durch den Tunnel gegeben; bei dir ist er vollständig ausgefüllt, bei mir ist ein weißer Punkt drin - ich bin gerade noch dabei, rauszufinden was das soll
Im Anhang habe ich mal noch die Schaltskizze, damit man sich das vllt etwas besser vorstellen kann mit den Sensoren.
Aaaah der ist weiß weil ich nichts weiß! xD Nein, das bedeutet ich soll also für den FALSE-case auch etwas an den Ausgang legen.
RE: Abbruchbedingung while-Schleife führt zu Fehler
Hallo Franzie,
Zitat:So wie du es gemacht hast, wird ja von allen Spannungen gleichzeitg der Mittelwert gebildet oder? o.O
Nein.
Ich hole mir die Daten eines Kanals, nachdem ich den DDT-Draht in ein 2D-Array (mehrere Kanäle, mehrere Samples) umgewandelt hatte.
Du dagegen splittest den DDT erst in Einzelsignale und wandelst dann das Einzelsignal in ein 1D-Array (ein Kanal, mehrere Samples).
Genau hinschauen!
Zitat:Die vorhandenen Samples sollten am besten irgendwo zwischengespeichert werden, bei einer Messung von so langer Dauer wäre ein Datenverlust richtig schlecht
Gut erkannt. Wo werden die Daten gespeichert? Richtig, im Schieberegister!
Lösung also: Daten auch im FALSE-Case in das Schieberegister schieben…
Zitat:die Mittelwerte werden dann immer in die Datei gespeichert, die wird geschlossen und es wird weitergesammelt?
Es wird immer der eine Mittelwert für die letzten 6000 Samples gespeichert. (Die Datei selbst wird für das Speichern immer geöffnet und gleich wieder geschlossen, das ist hier aber unerheblich.)
Dann gibt es noch die Funktion Split1DArray: die spaltet eben die ältesten 6000 Samples zur Auswertung ab und der neue Rest geht wieder ins Schieberegister - wie man anhand des Drahtes sieht…
Zitat:wenn der weiß ist werden keine Daten durch den Tunnel gegeben
Eben. Du willst aber auch im FALSE-Case weiterreichen, wie du selbst schon bemerkt hast…
RE: Abbruchbedingung while-Schleife führt zu Fehler
Ich habs jetzt begriffen glaube ich. Du verwendest Array indizieren und schreibst alle Daten in den Array. Mit dem Index kann ich auswählen, welchen Kanal ich will (du hast zwar den 9. ausgewählt mit der 8, ich korrigiere das jetzt aber auf die Zahl 10 weil ich den 11. Kanal wählen will). Daraus erstellst du dann ein extra Array, von dem du überprüfst, ob es schon die geforderten 6000 Samples enthält (das ist die Bedingung am Selektoranschluss mit der der Case ausgewählt wird). Ist das TRUE, dann wird der Mittelwert in die Datei verfrachtet. Wieso benutzt du hier davor noch den 1D-Array teilen? Das verstehe ich nicht^^ Ist der Case allerdings falsch, muss ich jetzt noch etwas finden was den Ausgang belegt. Kann ich einfach von "Array erstellen" auf den Ausgang?
Da haben wir wohl beide gleichzeitig getextet