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 fliegt
Vielen Dank nochmal.