LabVIEWForum.de
Positionen (Werte) in Matrix speichern - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Positionen (Werte) in Matrix speichern (/Thread-Positionen-Werte-in-Matrix-speichern)

Seiten: 1 2 3 4


RE: Positionen (Werte) in Matrix speichern - tahity94 - 11.02.2018 13:53

Hallo,

aufgrund der fortgeschrittenen Zeit würde ich von einer kompletten Umstrukturierung lieber absehen. Den Fehler mit dem CSV-File konnte ich beheben, indem ich den Datenfluss an der richtigen Stelle aufhalte. Und somit stimmen die Werte in der Tabelle, die ich inzwischen mit Python geplottet habe:

[attachment=58782]

[attachment=58783]

Da sieht man auch gut die Abweichungen für kleinere Schritte, weshalb eine Statemachine zum Warten bis der Motor an der richtigen Position angekommen ist, zu Problemen führen könnte.

Nichtsdestotro würde ich gerne auch die z-Matrix fehlerfrei darstellen, um eine "richtige" Intensitätsmatrix zu bekommen und nicht nur das CSV-File. Ich frage mich vorallem, wie diese Sprünge darein kommen und woher die 0 kommen, die in der Tabelle gar nicht zu sehen sind. Kann das auch ein Timimg-Problem sein? Da es sich da ja um eine Zählrate handelt, kann das durchaus die unterschiedlichen Werte erklären, oder?
Vielleicht kann man diesen Wert ja zeitlich irgendwie mitteln über zum Beispiel 1000ms und dann diesen gemittelten Wert weitergeben? Sodass in das z-Array und in die Tabelle jeweils der gleiche, gemitteltete Wert geschrieben wird.


[attachment=58784]


Hier ist noch eine Notiz aus der Library für den Detektor:
Zitat:Note: Observe that most of the PH_xxxx library calls must be made sequentially in exactly the right order. They cannot be called
in parallel as is the default in LabVIEW. Typically this is achieved by sequence structures or data flow dependency

Was ich jetzt noch geändert habe, ist eine flache Sequenzstruktur in der inneren For-Loop. Im ersten Rahmen wird der Motor bewegt und etwas gewartet, dann werden im zweiten Rahmen die Positionen der Achsen und der Messwert (Zählrate) abgefragt, die dann in den dritten Rahmen übergehen, wo die Daten (Positionen und Messwert) dann einmal in die Tabelle geschrieben werden und die Messwerte an die richtige Stelle des Arrays geschrieben werden. So ist es zwar nicht zeitlich gemittelt. Aber so erhoffe ich mir, dass zumindest der gleiche Wert in Z-Array und ins CSV-File geschrieben werden, weil die Rahmen ja erst durchgeführt werden, wenn alle notwendigen Daten anliegen. Mache ich mir da zurecht Hoffnung?
Allerdings sprechen diese Regelmäßigkeiten, die im Vergleich von Tabelle und z-Matrix auffallen, ja eher für eine falsche Implementierung..


RE: Positionen (Werte) in Matrix speichern - GerdW - 12.02.2018 08:31

Hallo Maik,

bin zurück vom Wochenende…

Zitat:Nichtsdestotro würde ich gerne auch die z-Matrix fehlerfrei darstellen, um eine "richtige" Intensitätsmatrix zu bekommen und nicht nur das CSV-File. Ich frage mich vorallem, wie diese Sprünge darein kommen und woher die 0 kommen, die in der Tabelle gar nicht zu sehen sind. Kann das auch ein Timimg-Problem sein? Da es sich da ja um eine Zählrate handelt, kann das durchaus die unterschiedlichen Werte erklären, oder?
Leider hast du mal wieder kein aktuelles VI angehangen…

Könnte das ganze auch mit dem ständigen Umkehren der Y-Achse bei dir zu tun haben?
Die ersten Z-Werte im CSV lauten ja 10, 80, 120, 70,40, 60 - bei aufsteigenden Y-Werten. In deinem 2D-Array für den Intensitätsgraph landen die Werte aber verkehrt herum in der ersten Spalte - und der erste Wert "10" fehlt, wahrscheinlich wegen falsch verwendeter Arrayindizes…


RE: Positionen (Werte) in Matrix speichern - tahity94 - 12.02.2018 11:17

Hallo Gerd,

Zitat:Könnte das ganze auch mit dem ständigen Umkehren der Y-Achse bei dir zu tun haben?
Die ersten Z-Werte im CSV lauten ja 10, 80, 120, 70,40, 60 - bei aufsteigenden Y-Werten. In deinem 2D-Array für den Intensitätsgraph landen die Werte aber verkehrt herum in der ersten Spalte - und der erste Wert "10" fehlt, wahrscheinlich wegen falsch verwendeter Arrayindizes…

Genau, die Werte landen verkehrt herum in der ersten Spalte, weil da der Startpunkt ist. Leider ist mit der Sequenzstruktur das Problem nach wie vor vorhanden. Bzgl. des ständigen Umkehrens der Y-Achse wüsste ich keinen Punkt, der für dieses "falsche" Array in Frage kommen würde. Was genau meinst du denn da?

Die Arrayindizes habe ich mit den Iterationszählern verbunden: Die äußere Schleife eintspricht ja den Spalten, weil die sich ja in x bewegt und die innere Schleife entspricht den Zeilen, weil sich der Motor da in y bewegt.
Prinzipiell stimmt auch die Reihenfolge, nur diese "Sprünge" und die Nullen verstehe ich noch nicht.


RE: Positionen (Werte) in Matrix speichern - GerdW - 12.02.2018 11:41

Hallo Maik,

Zitat:nur diese "Sprünge" und die Nullen verstehe ich noch nicht.
Die Nullen könnten der Standardwert sein, den du beim Initialisieren des Arrays festgelegt hast.
Wenn dann dieses Element nicht mit einem "echten Messwert" überschrieben wird, dann bleibt halt die Null darin stehen.

Zitat:Was genau meinst du denn da?
Kannst du mal wieder einen aktuellen Stand deines VIs bereitstellen?


RE: Positionen (Werte) in Matrix speichern - GerdW - 12.02.2018 12:41

Hallo Maik,

du hast vor dem ArraySubset noch eine Case-Struktur, die auf die auf-/absteigenden Y-Werte reagiert.
Dort ist eine Subtract-Funktion drin, die "N-i" berechnet. Dummerweise gibt es bei Array der Größe "N" kein Element mit dem Index "N": die Elemente werden ab Null beginnend gezählt, das letzte Element ist dann "N-1"!


RE: Positionen (Werte) in Matrix speichern - tahity94 - 12.02.2018 16:32

Hallo Gerd,

Zitat:du hast vor dem ArraySubset noch eine Case-Struktur, die auf die auf-/absteigenden Y-Werte reagiert.
Dort ist eine Subtract-Funktion drin, die "N-i" berechnet. Dummerweise gibt es bei Array der Größe "N" kein Element mit dem Index "N": die Elemente werden ab Null beginnend gezählt, das letzte Element ist dann "N-1"!
Perfekt! Daran hat es gelegen :-)
Vielen Dank.

Jetzt gibt es noch eine Kleinigkeit beim Intensitätsgraphen:

[attachment=58788]

Wenn man sich das anschaut, fällt auf, dass da etwas verkehrt ist. Und zwar sind bei dem Bild im Anhang in der ersten Spalte des z-Arrays "unten" die Werte 60, beim Intensitätsgraphen werden sie aber in der ersten Spalte "oben" dargestellt. Woran liegt das und wie kann man das beheben?


RE: Positionen (Werte) in Matrix speichern - GerdW - 12.02.2018 17:04

Hallo Maik,

Zitat:Wenn man sich das anschaut, fällt auf, dass da etwas verkehrt ist. Und zwar sind bei dem Bild im Anhang in der ersten Spalte des z-Arrays "unten" die Werte 60, beim Intensitätsgraphen werden sie aber in der ersten Spalte "oben" dargestellt. Woran liegt das und wie kann man das beheben?
Bei einem 2D-Array zählt der Y-Index von oben nach unten, "oben" ist Zeile 0, darunter kommt Zeile 1 usw.
Beim Intensitätsgraphen liegt der Koordinatenursprung dagegen in der linken unteren Ecke, wie man in deinem Bild sehr schön sieht…

Lösung:
- einfach die Y-Achse invertieren (im Einstellungsdialog oder per Propertynode)
- Daten im 2D-Array entsprechend umsortieren…


RE: Positionen (Werte) in Matrix speichern - tahity94 - 12.02.2018 18:10

Hallo Gerd,

ich dachte, dass es dafür eine andere Möglichkeit gäbe, aber die Achse invertieren ist in Ordnung.
Super, dann steht das Programm soweit. Vielen Dank für deine Hilfe! :-)