INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Positionen (Werte) in Matrix speichern



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!

07.01.2018, 19:12 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2018 21:01 von tahity94.)
Beitrag #11

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Ich habe das jetzt nochmal geändert und frage die unterschiedlichen Y-Richtungen jetzt darüber ab, ob die Schleifeniteration gerade oder ungerade ist.
Auch bei dem Speichern der Daten bin ich etwas weitergekommen. Und zwar wird in der inneren Schleife jeweils die Position mittels WriteSpreadsheetFile (Danke nochmals für den Tipp) in eine Tabelle geschrieben. Ich stelle mir das so vor, dass jetzt pro Iteration eine Zeile mit X,Y,Z und ein Messwert( Anzahl von Flureszenzphotonen - das ist bis dato allerdings noch nicht berücksichtigt im Code, da ich die Bibliothek des Detektors noch nicht zur Verfügung habe) in die Datei geschrieben wird und diese jeweils durch Komma voneinander getrennt. Jetzt bleibt die Frage der Darstellung. Ich denke, dass eine Darstellung als 3D-Histogram am übersichtlichsten ist. Wie kann ich die Daten dann aus dem CSV-File darstellen? Also die Anzahl der Photonen gegen X und Y.


Und ein anderes Problem bereitet gerade etwas Kummer: Und zwar geht es dabei um das Timing. Der Motor soll ja bei jedem Schritt erst in seiner Ziel-Position ankommen, bevor es weitergeht. Wie kann ich das gewährleisten? Eine Überlegung ist, dass ich innerhalb der For-Schleifen eine flache Sequenzstruktur einfüge, in der im ersten Rahmen die aktuelle Position plus Schrittweite berechnet wird. Das ist dann die neue Ziel-Position. Im zweiten Rahmen soll der Motor dann eine Relativbewegung ausführen. Und im dritten Rahmen soll die Ist-Position dann mit der Ziel-Position verglichen werden. Und zwar mit einem kleinen Wertebereich, um eventuelle Ungenauigkeiten des Motors abzufangen. Und wenn dieser Vergleich wahr ist, soll es weitergehen. So weit die Idee. Aber wie setze ich das am besten um? Im vierten Rahmen dann eine While-Schleife, die leer ist und beendet wird, sobald der Vergleich wahr ist?
Oder gibt es da bessere Ansätze/Lösungen?

Das mit dem Fehlerdraht werde ich berücksichtigen. Und wie kann ich das mit "Stop Scanning" ändern?

Danke :-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2018, 09:14
Beitrag #12

GerdW Offline
______________
LVF-Team

Beiträge: 17.419
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Positionen (Werte) in Matrix speichern
Hallo tahity,

Zitat:Auch bei dem Speichern der Daten bin ich etwas weitergekommen. Und zwar wird in der inneren Schleife jeweils die Position mittels WriteSpreadsheetFile (Danke nochmals für den Tipp) in eine Tabelle geschrieben.
Wie geht das? Du speicherst hoffentlich dein Array in einem Schieberegister zwischen?

Zitat:Ich stelle mir das so vor, dass jetzt pro Iteration eine Zeile mit X,Y,Z und ein Messwert( Anzahl von Flureszenzphotonen - das ist bis dato allerdings noch nicht berücksichtigt im Code, da ich die Bibliothek des Detektors noch nicht zur Verfügung habe) in die Datei geschrieben wird und diese jeweils durch Komma voneinander getrennt.
- Das ist so Standard bei CSV-Dateien ("comma separated values")! Big Grin
- Wo kommt dein Z-Wert her, wenn du nur XY-Positionen abfährst?

Zitat:Jetzt bleibt die Frage der Darstellung. Ich denke, dass eine Darstellung als 3D-Histogram am übersichtlichsten ist. Wie kann ich die Daten dann aus dem CSV-File darstellen? Also die Anzahl der Photonen gegen X und Y.
Wenn es sich um eine Ebene handelt, kann man sie mittels des Intensitygraph darstellen - oder in einem 3D-Plot.

Zitat:Und ein anderes Problem bereitet gerade etwas Kummer: Und zwar geht es dabei um das Timing. Der Motor soll ja bei jedem Schritt erst in seiner Ziel-Position ankommen, bevor es weitergeht. Wie kann ich das gewährleisten?
Mit einer herkömmöichen Statemachine wäre das kein Problem: Einfach einen State aufrufen, der abwartet, bis der Motor die gewünschte Zielposition erreicht hat.

Zitat:Eine Überlegung ist, dass ich innerhalb der For-Schleifen eine flache Sequenzstruktur einfüge, in der im ersten Rahmen die aktuelle Position plus Schrittweite berechnet wird. Das ist dann die neue Ziel-Position. Im zweiten Rahmen soll der Motor dann eine Relativbewegung ausführen. Und im dritten Rahmen soll die Ist-Position dann mit der Ziel-Position verglichen werden. Und zwar mit einem kleinen Wertebereich, um eventuelle Ungenauigkeiten des Motors abzufangen. Und wenn dieser Vergleich wahr ist, soll es weitergehen. So weit die Idee. Aber wie setze ich das am besten um? Im vierten Rahmen dann eine While-Schleife, die leer ist und beendet wird, sobald der Vergleich wahr ist?
Oder gibt es da bessere Ansätze/Lösungen?
Wann immer du selbst schon klare "Schritte"/States/Frames definierst, solltest du auch "Statemachine" denken!

Zitat:Das mit dem Fehlerdraht werde ich berücksichtigen. Und wie kann ich das mit "Stop Scanning" ändern?
Einfach keine Race-Condition programmieren!
Du hast mittlerweile die Links in meiner Signatur beachtet?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.01.2018, 22:55
Beitrag #13

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Guten Abend GerdW,

erstmal noch kurz was generelles zum Programm:
In der Zwischenzeit habe ich mich dazu entschieden, dass bei Bedarf auch die z-Achse abgescannt werden kann. Das läuft jetzt in drei For-Schleifen so, dass für jeden Z-Step die XY-Ebene gescannt wird, dann fährt der Motor zu X=0 und Y=0 und die z-Schleife beginnt von vorn. Das Scannen der z-Achse muss ich nicht zwingend implementieren, allerdings ist das als Bonus gern gesehen :-) Und als ich die Struktur des Scan-Vorgangs geändert habe, war die z-Achse dann nur noch eine For-Loop mehr. Man kann sich jedoch mittels eines Boolschen Bedienelements auf dem Frontpanel aussuchen, ob man auch Z scannen möchte.

Zitat:
Zitat:Auch bei dem Speichern der Daten bin ich etwas weitergekommen. Und zwar wird in der inneren Schleife jeweils die Position mittels WriteSpreadsheetFile (Danke nochmals für den Tipp) in eine Tabelle geschrieben.
Wie geht das? Du speicherst hoffentlich dein Array in einem Schieberegister zwischen?

Nein, ich speicher den Array nicht in einem Schieberegister zwischen, sondern lese in der inneren For-Schleife jeweils die Positionen der einzelnen Achsen aus, erstelle damit ein Array und diesen habe ich dann mit "Tabelle schreiben" an den 1D-Eingang angeschlossen. Im Anhang ist ein Bild dazu. Ist das so falsch?


Zitat:
Zitat:Jetzt bleibt die Frage der Darstellung. Ich denke, dass eine Darstellung als 3D-Histogram am übersichtlichsten ist. Wie kann ich die Daten dann aus dem CSV-File darstellen? Also die Anzahl der Photonen gegen X und Y.
Wenn es sich um eine Ebene handelt, kann man sie mittels des Intensitygraph darstellen - oder in einem 3D-Plot.

Falls Z dann mitgescannt wird, dachte ich, dass man pro z-Step einen 3D-Plot darstellt, in dem die Anzahl der Photonen dann gegen X und Y aufgetragen wird.
Angenommen die Arrays werden richtig in das CSV-File geschrieben, wie kann ich dann passend auf die Werte zugreifen, um die Plots zu erzeugen?
Wobei es erstmal schon super wäre, wenn das CSV-File korrekt wäre.

Zitat:
Zitat:Und ein anderes Problem bereitet gerade etwas Kummer: Und zwar geht es dabei um das Timing. Der Motor soll ja bei jedem Schritt erst in seiner Ziel-Position ankommen, bevor es weitergeht. Wie kann ich das gewährleisten?
Mit einer herkömmöichen Statemachine wäre das kein Problem: Einfach einen State aufrufen, der abwartet, bis der Motor die gewünschte Zielposition erreicht hat.

Ich habe mich mal an einer Statemachine versucht, die auch im Anhang zu sehen ist. Im ersten State soll sich der Motor bewegen und im zweiten State soll die While-Schleife beendet werden, wenn der Vergleich true ist. Ist das richtig soweit?

Zitat:
Zitat:Das mit dem Fehlerdraht werde ich berücksichtigen. Und wie kann ich das mit "Stop Scanning" ändern?
Einfach keine Race-Condition programmieren!
Du hast mittlerweile die Links in meiner Signatur beachtet?

Ja, die Links habe ich beachtet. Allerdings leuchtet mir das mit den Race Conditions noch nicht so ein. Was wäre denn die Alternative zu den Variablen?

Morgen werde ich voraussichtlich das Programm wieder testen können. Ich bin gespannt, was passiert und wie viel mir um die Ohren fliegtConstruction
Vielen Dank nochmal.


Angehängte Datei(en) Thumbnail(s)
           
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.01.2018, 07:43
Beitrag #14

GerdW Offline
______________
LVF-Team

Beiträge: 17.419
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Positionen (Werte) in Matrix speichern
Hallo tahity,

Zitat:Ich habe mich mal an einer Statemachine versucht, die auch im Anhang zu sehen ist. Im ersten State soll sich der Motor bewegen und im zweiten State soll die While-Schleife beendet werden, wenn der Vergleich true ist. Ist das richtig soweit?
Fast.
In einer Statemachien sollte IMMER klar definiert sein, welches der nächste State ist.
Bei dir dagegen hast du das im WAIT-State nicht gemacht - mit dem Ergebnis, dass nach WAIT sofort wieder START aufgerufen wird…

Zitat:erstelle damit ein Array und diesen habe ich dann mit "Tabelle schreiben" an den 1D-Eingang angeschlossen. Im Anhang ist ein Bild dazu. Ist das so falsch?
Nein, das sieht ok aus.
Ich frage mich nur, was es bringen soll, nur die Ist-Positionen in der Tabelle zu speichern…

Tipp:
Es ist meist hiflreich, auch die Sollwerte zu speichern. Diese sind meistens "genauer" (Beispiel "Soll-Pos=1.00" statt "Ist-Pos=1.023") und damit später leichter zu sortieren und zu suchen…

Zitat:Wobei es erstmal schon super wäre, wenn das CSV-File korrekt wäre.
Um diese Frage zu beurteilen, müssten wir wissen, was für dich "korrekt" bedeutet…

Zitat:In der Zwischenzeit habe ich mich dazu entschieden
Dann solltest du so etwas auch erläutern - unsere Glas1 funktioniert nicht immer richtig…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.01.2018, 22:29
Beitrag #15

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Hallo GerdW,

ich habe heute das Programm testen können. Es läuft zwar noch nicht alles, so wie ich mir das vorstelle, aber ich/wir sind auf einem guten Weg :-)

Zitat:Fast.
In einer Statemachien sollte IMMER klar definiert sein, welches der nächste State ist.
Bei dir dagegen hast du das im WAIT-State nicht gemacht - mit dem Ergebnis, dass nach WAIT sofort wieder START aufgerufen wird…

Sowas habe ich mir schon gedacht und das habe ich heute nach Lesen deiner Antwort versucht umzusetzen, indem ich im WAIT-State nochmal die WAIT-Konstante an das Schieberegister anschließe. War das der richtige Gedanke? Jedenfalls ist da auch noch ein Problem. Denn der Scan-Vorgang lief mit den SubVIs, die warten sollen, bis der Motor an der richtigen Position ist, nicht. Es wurde ein Y-Step gemacht und danach ist nichts weiter passiert. Es macht also den Anschein, als ob man danach in dem WAIT-State gefangen wäre. Alternativ habe ich die SubVIs wieder gegen die normale Relativbewegung des Motors ausgetauscht und mit einem Timer gearbeitet. Dann lief der Scan-Vorgang soweit durch. Aber das ist ja nicht die feine englische Art Huh
Und das mit dem "Stop Scanning" klappt noch nicht so. Am schönsten wäre es, dass der Scan-Vorgang dann direkt abbricht. Also wenn dieser Button betätigt wird, sollen alle 3 For-Schleifen abbrechen. Liegt das an der Race Condition?

Zitat:
Zitat:erstelle damit ein Array und diesen habe ich dann mit "Tabelle schreiben" an den 1D-Eingang angeschlossen. Im Anhang ist ein Bild dazu. Ist das so falsch?
Nein, das sieht ok aus.
Ich frage mich nur, was es bringen soll, nur die Ist-Positionen in der Tabelle zu speichern…

Tipp:
Es ist meist hiflreich, auch die Sollwerte zu speichern. Diese sind meistens "genauer" (Beispiel "Soll-Pos=1.00" statt "Ist-Pos=1.023") und damit später leichter zu sortieren und zu suchen…

Das war ein guter Tipp :-) Das Speichern der Werte klappt soweit ganz gut. Die Soll-Positionen werden passend gespeichert, indem ich die Schrittweite einfach mit dem Iterationszähler multipliziere. Und so kann man eventuelle Abweichungen vom Motor auch gut erkennen, wenn man die Soll- und Istwerte miteinander vergleicht. Bei den Ist-Werten wird der erste Wert allerdings zweimal gespeichert und am Ende fehlt ein Wert. Da werde ich morgen nochmal genauer schauen müssen.
Noch eine Sache zur Formatierung: Die Werte werden ja durch Komma getrennt, die Floatzahlen aber auch. Gibt es eine Möglichkeit, die Werte mittels Semikolon zu trennen, um bessere Übersicht zu haben?


Zitat:Dann solltest du so etwas auch erläutern - unsere Glas1 funktioniert nicht immer richtig…
Sorry, mein FehlerBlush
Die Reise soll jetzt noch dahin gehen, dass der Photonen-Detektor bei jeder Position den Wert angibt. Ich stelle mir das so vor, dass ich diesen Messvorgang auch einfach in die innerste Schleife packe, in der auch die Positionen gespeichert werden. Dann erweitere ich das Array und schließe den Wert daran an. Und dann wird XYZ und Anzahl der Photonen in die Tabelle geschrieben. Das gilt es dann nur noch zu visualisieren. Wenn nur XY gescannt werden, ist das ja nur ein Plot. Wenn allerdings auch Z gescannt wird, dann brauche ich ja für jeden z-Step einen neuen Plot und somit auch für jede Ebene eine eigene Tabelle oder irre ich mich da? Wie kann man das am elegantesten lösen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.01.2018, 07:50 (Dieser Beitrag wurde zuletzt bearbeitet: 10.01.2018 07:52 von GerdW.)
Beitrag #16

GerdW Offline
______________
LVF-Team

Beiträge: 17.419
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Positionen (Werte) in Matrix speichern
Hallo tahity,

Zitat:Sowas habe ich mir schon gedacht und das habe ich heute nach Lesen deiner Antwort versucht umzusetzen, indem ich im WAIT-State nochmal die WAIT-Konstante an das Schieberegister anschließe.
Hört sich gut an. Solange du so nicht festlegst, dass du immer im WAIT bleibst…

Zitat:Jedenfalls ist da auch noch ein Problem. Denn der Scan-Vorgang lief mit den SubVIs, die warten sollen, bis der Motor an der richtigen Position ist, nicht. Es wurde ein Y-Step gemacht und danach ist nichts weiter passiert. Es macht also den Anschein, als ob man danach in dem WAIT-State gefangen wäre.
Wenn man jetzt schauen könnte, was du da programmiert hast, dann könnte man das auch qualifiziert kommentieren…

Zitat:Liegt das an der Race Condition?
Glas1 Vielleicht. Vielleicht aber auch nicht. Glas1

Zitat:Noch eine Sache zur Formatierung: Die Werte werden ja durch Komma getrennt, die Floatzahlen aber auch. Gibt es eine Möglichkeit, die Werte mittels Semikolon zu trennen, um bessere Übersicht zu haben?
Zwei Dinge dazu:
- Ich verwende auf allen Rechnern, die mit Messdaten und Messgeräten zu tun haben, das englische Zahlenformat mit einem Punkt als Dezimaltrennzeichen. Denk mal darüber nach, warum ich das mache…
- Ein deutsches Excel erwartet auch ein Semikolon als Trennzeichen bei CSV-Dateien: sowas kannst du in LabVIEW natürlich auch benutzen. Manchmal ist es da wirklich hilfreich, einfach mal die LabVIEW-Hilfe zu den benutzten Funktionen zu lesen!

Allgemeiner Tipp: Wenn du dein VI beurteilen lassen willst, dann solltest du es auch hier anhängen!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
31.01.2018, 19:46
Beitrag #17

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Hallo,

nach einer längeren Pause konnte ich mich nun wieder mit diesem Programm auseinander setzen.
Ich habe mittlerweile die Messung der Photonen implementiert und das Speichern in ein CSV-File.
Im Anhang ist eine solche CSV-Datei, deren Werte allerdings nicht repräsentativ sind, da ich den Scan-Vorgang abgebrochen habe. Dennoch erkennt man die Struktur daran: X-Wert;Y-Wert;Z-Wert;detektierte Photonen. Bei diesem Beispiel ist nur die XY-Ebene gescannt worden. Das Z-Scannen ist erstmal außen vor.
   


Jetzt geht es um die Visualisierung dieser Daten. Da komme ich gerade nicht weiter. Ein Intensitätsgraph bzw. ein farbiges 2D-Histogramm wäre schön. In zwei Threads habe ich Inspirationen gefunden, die mir sehr gut gefallen:

https://forums.ni.com/t5/LabVIEW/How-can...836/page/3
https://forums.ni.com/t5/LabVIEW/add-ele...42#M504073

Die entsprechenden Bilder befinden sich auch im Anhang.

   

   

   


Und so oder so ähnlich würde ich das auch ganz gerne visualisieren. Also einmal gerne als "klassische Intensitätsverteilung 2D" und einmal diese 3D-Darstellung, bei der man die Intensität sowohl an der Farbe als auch an der Höhe erkennt. Allerdings sind dabei einige Fragen entstanden.

1. Wo genau muss ich das einfügen?
Das Scannen wird über eine Ereignisstruktur gestartet. Also wenn der Scan-Button betätigt wird, wird der True-Case in der Ereignisstruktur ausgeführt. Und darin befinden sich zwei geschachtelte For-Schleifen für X und Y. Meine Vermutung ist, dass das Visualisieren innerhalb dieses True-Case aber außerhalb der zwei Vorschleifen sein muss? Wenn der Scan-Vorgang beendet ist, sollen die Graphen angezeigt werden oder alternativ währen des Scannens schon. Allerdings stelle ich mir das dann mit der Skalierung schwierig vor, wenn noch nicht alle Positionen und Werte bekannt sind. Deswegen würde ich da zu ersterem tendieren.

2.Welche Funktionen muss ich für dieses Ziel benutzen? Und wie ist das mit den Daten/Achsen/Skalen?
Die Beispiele bestehen denke ich aus einer Kombination von "3D-Oberfläche" und "Intensitätsgraph". Sehe ich das richtig?
Und die Daten werden ja passend in das CSV-File geschrieben. Im Endeffekt soll ja der vierte Wert aus dem File gegen den X- und Y-Wert aufgetragen werden. Skalieren die entsprechenden Funktionen die Achsen selbst? Und für die Intensität muss die Farbdarstellung ja auch normiert werden. Wie macht man das? Also das die Farbskala auf die maximale Anzahl der Photonen skaliert werden. Dabei finde ich auch blau für kleine Werte und rot für große Werte gut. Wie stellt man das ein?

3. Womit muss ich die Funktionen verbinden?
Bei jeder Iteration der Schleife wird mit den vier Werten ein Array erstellt, das in eine Tabelle geschrieben wird. Das Ergenis sieht man auf einem der Anhänge. Jetzt habe ich gedacht, dass ich die X-Werte, die bei jeder Iteration an erster Stelle des Arrays sind, an den X-Vektor Eingang von "3D-Oberfläche" ziehe. Y analog. Und für die Z-Matrix entsprechend den vierten Wert aus dem CSV-File.
(Im Anhang im Bild "visualisierung" sieht man meine Idee)
   
Aber anscheinend stimmt das so nicht. Was ist daran falsch und wie kann man das lösen?
Auch frage ich mich, warum der Intensitätsgraph nur einen Eingang hat. Woher kennt er da die X-und Y-Werte?

Und zu guter letzt:

4. Wie kann ich die Bilder anzeigen lassen und speichern?
Der Intensitätsgraph wird ja direkt auf dem Frontpanel angezeigt. Kann ich den 3D-Graph auch dort anzeigen lassen?
Und wie kann ich sowohl Intensitätsgraph als auch den 3D-Graph als Bilddatei speichern?

Es ist etwas länger geworden und es sind einige Fragen. Ich würde mich freuen, wenn wir da Licht ins Dunkel bringen :-)
Vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.01.2018, 21:01 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2018 21:03 von GerdW.)
Beitrag #18

GerdW Offline
______________
LVF-Team

Beiträge: 17.419
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Positionen (Werte) in Matrix speichern
Hallo Maik,

Zitat:1. Wo genau muss ich das einfügen?
Dort, wo du es haben willst.
Wenn es nach Abschluss der Messung ausreicht: nach den Messschleifen.
Wenn man schon während der Messung was sehen soll: in der Messschleife…

Zitat:2.Welche Funktionen muss ich für dieses Ziel benutzen?
Schau dir doch einfach die VIs in den verlinkten Threads an!

Zitat:Und wie ist das mit den Daten/Achsen/Skalen?
Die Daten kommen von dir, für Achsen/Skalen gibt es Propertynodes…

Zitat:Was ist daran falsch und wie kann man das lösen?
Das sagt doch die Fehlermeldung: falscher Datentyp! (Die Funktion erwartet ein 1D-Array, du bietest aber nur 2D-Arrays an…)

Zitat:Auch frage ich mich, warum der Intensitätsgraph nur einen Eingang hat. Woher kennt er da die X-und Y-Werte?
Der Graph zeigt ein 2D-Array an: jetzt überlege mal…
(Das siehst du doch in Christian Altenbachs Beispiel…)

Zitat:Der Intensitätsgraph wird ja direkt auf dem Frontpanel angezeigt. Kann ich den 3D-Graph auch dort anzeigen lassen?
Ja. Siehe Beispiel…

Zitat:Und wie kann ich sowohl Intensitätsgraph als auch den 3D-Graph als Bilddatei speichern?
Per Propertynode/Methode das Bild lesen und als Bilddatei speichern…

Zu deiner Frage bzgl. Zeitmessung: Zeitpunkt vor dem Codeabschnitt bestimmen, Code ausführen, erneut Zeitpunkt bestimmen. Dann die Differenz beider Zeitpunkte:
   

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.02.2018, 14:21
Beitrag #19

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Hallo Gerd,


Zitat:
Zitat:Was ist daran falsch und wie kann man das lösen?
Das sagt doch die Fehlermeldung: falscher Datentyp! (Die Funktion erwartet ein 1D-Array, du bietest aber nur 2D-Arrays an…)
Ich habe nicht verstanden, warum das ein 2D-Array sein sollte, den ich da anbiete. Denn schließlich ist es einfach nur die Position als Double. Jedenfalls habe ich diesen Double jetzt einfach mit "Array erstellen" in ein passendes Array umgewandelt und es funktioniert bzw. wird kein Fehler angezeigt.


Zitat:
Zitat:Auch frage ich mich, warum der Intensitätsgraph nur einen Eingang hat. Woher kennt er da die X-und Y-Werte?
Der Graph zeigt ein 2D-Array an: jetzt überlege mal…
(Das siehst du doch in Christian Altenbachs Beispiel…)
Ja, ein 2D-Array wird angezeigt und dann die normierte Intensität. Allerdings sehe ich das bei mir noch nicht, weil ich eigentlich gar kein 2D-Array damit verbinde. Deswegen habe ich mich gefragt, wie die Zuordnung da vonstatten gehen soll. Das ist einfach die Zählrate, die als Int32 an vierter Stelle des Arrays, das in den CSV-File geschrieben wird, steht. Also bei jeder Iteration wird ja ein Array erstellt, das dann einfach untereinander in das File geschrieben wird.
Und jetzt soll das Visualisieren genau mit diesen Daten stattfinden. Also mit den Doubles für die X- und Y-Position und der Int32 für die Zählrate, die ich bei jeder Iteration bekomme und die bei jeder Iteration in das File geschrieben werden.
Für den 3D-Graph habe ich jetzt sowohl X-Wert als auch Y-Wert mittels Array erstellen an X-Vektor und Y-Vektor verbunden. Allerdings sind da ja pro Iteration nur ein Wert für X und Y. Also im Endeffekt ein Skalar und kein Vektor. Das heißt ja, dass ich dann am Ende nur einen Punkt im 3D-Graph sehen würde? Oder werden die entsprechenden Werte für X und Y quasi "gespeichert"? Und für die z-Matrix der Funktion "3D-Graph" besteht das gleiche Problem wie beim Intensitätsgraphen. Im Endeffekt handelt es sich nicht um eine Matrix, sondern einfach um einen Skalar. Allerdings würde das beim 3D-Graphen ja Sinn machen: Für jede Iteration erhalt ich einen X-,Y- und Z-Wert. Mehr brauche ich für die Zuordnung ja nicht, wenn das denn alles "gespeichert" bleibt.
Aus diesem Grund kam mir auch komisch vor, dass der Intensitätsgraph "nur" einen 2D-Array als Eingang hat. Und angenommen man gibt dem Intensitätsgraphen einen passenden 2D-Array, wie kann man dann die Position erkennen? Die Zuordnung findet dann ja nur über die ij.-Komponente der Matrix statt? Da bräuchte ich für die entsprechende ij.-Komponente ja weitere Brechnungen, um die "wirkliche" Position zu sehen.

Also die Zuordnungen habe ich noch nicht ganz geblicktHuh
Vermutlich muss ich dann diese entsprechenden Werte bei jeder Iteration in einen X-Vektor, einen Y-Vektor und in eine Matrix speichern und diese dann am Ende mit den Graphen verbinden? Aber wie kann ich die Werte dann in richtiger Weise speichern?

Hier sieht man den aktuellen Stand der Dinge. Vielleicht ist es so verständlicher, was ich meine.
   

Zitat:
Zitat:Und wie kann ich sowohl Intensitätsgraph als auch den 3D-Graph als Bilddatei speichern?
Per Propertynode/Methode das Bild lesen und als Bilddatei speichern…
Perfekt. Das scheint zu funktionieren. Allerdings habe ich noch eine Frage. Oben im Bild sieht man ja bei "3D-Surface - Bild in Datei", dass der "Ziel-Eingang" noch nicht verbunden ist. Leider finde ich da nichts zu, aber es muss verbunden werden, weil es sonst als Fehlermeldung angezeigt wird. Aber womit?

Zitat:Zu deiner Frage bzgl. Zeitmessung: Zeitpunkt vor dem Codeabschnitt bestimmen, Code ausführen, erneut Zeitpunkt bestimmen. Dann die Differenz beider Zeitpunkte

Daran kümmer ich mich, nachdem das Visualisieren funktioniert :-)

Vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.02.2018, 15:21
Beitrag #20

GerdW Offline
______________
LVF-Team

Beiträge: 17.419
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Positionen (Werte) in Matrix speichern
Hallo Maik,

Zitat:Aus diesem Grund kam mir auch komisch vor, dass der Intensitätsgraph "nur" einen 2D-Array als Eingang hat. Und angenommen man gibt dem Intensitätsgraphen einen passenden 2D-Array, wie kann man dann die Position erkennen? Die Zuordnung findet dann ja nur über die ij.-Komponente der Matrix statt? Da bräuchte ich für die entsprechende ij.-Komponente ja weitere Brechnungen, um die "wirkliche" Position zu sehen.
Das ist ein Array mit Indizes - keine Matrix (Wortwahl!)…
Und ja: der Index eines Arrayelements gibt die Position vor. Und ja, von Index zu "Position" kann man eine Umrechnung vornehmen…

Zitat:Ich habe nicht verstanden, warum das ein 2D-Array sein sollte, den ich da anbiete.
LabVIEW-Grundlagen durchlesen: Autoindizierung an Schleifen…

Zitat:Oben im Bild sieht man ja bei "3D-Surface - Bild in Datei", dass der "Ziel-Eingang" noch nicht verbunden ist. Leider finde ich da nichts zu, aber es muss verbunden werden, weil es sonst als Fehlermeldung angezeigt wird. Aber womit?
LabVIEW-Grundlagen: Wenn man einen Eingang mit einem Input versehen will, macht man einen Rechtsklick drauf und wählt Erstellen->Konstante.
Wenn du das gemacht hättest, dann hättest du eine Konstante erhalten, bei der du zwischen "Datei" und "Clipboard" auswählen kannst…
(Ich empfehle statt BMP besser PNG!)

Das mit den LabVIEW-Grundlagen solltest du inzwischen eigentlich schon mal gemacht haben…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Maximalwerte in Matrix erkennen und mit zugehörigem neuen Wert überspeichern MartinNewBee 16 9.471 08.02.2018 16:31
Letzter Beitrag: MartinNewBee
  Werte speichern mit Zeitangabe und Title patriote00 2 4.797 15.01.2016 13:52
Letzter Beitrag: patriote00
  Werte aus Signalverlaufsdiagramm in Datei speichern und laden montanaro 5 7.647 15.07.2015 06:56
Letzter Beitrag: montanaro
  1D Array in 6er xD matrix formatieren Da_Rudi 9 6.726 27.11.2013 15:22
Letzter Beitrag: Da_Rudi
  Werte in einer .txt-datei speichern tom102 38 29.715 28.07.2010 12:06
Letzter Beitrag: GerdW
  Werte aus Datei in Arrays speichern Fysi 4 5.208 07.09.2009 09:04
Letzter Beitrag: Lucki

Gehe zu: