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!

05.01.2018, 13:29
Beitrag #1

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



Positionen (Werte) in Matrix speichern
Guten Tag und ein frohes neues Jahr :-)

im Rahmen meiner Bachelor-Arbeit automatisiere ich mittels LabVIEW eine Stage für ein Mikroskop. Bei der Stage handelt es sich um eine ASI PZ-2000FT Series Automated Stage with Piezo Z-Axis Top Plate, die mittels des ASI MS-2000 Controllers angesteuert wird. Seitens des Herstellers gibt es einige LabVIEW Treiber, auf die ich zurückgreife. Das Scannen ist auf der x- und y- Achse beschränkt, jedoch soll die z-Koordinate mitgezogen werden.

Eine Probe soll eingespannt werden und mittels Joystick wird die Startposition eingestellt und diese Position wird dann als Null-Position gesetzt. Dann wird die Probe wie in der Skizze zu sehen abgescannt. Das läuft soweit auch alles.
Meine Frage ist jetzt, wie ich die Positionen (x,y,z) jedes einzelnen Steps in einer Datei (z.B. einer Matrix oder 2D Array) speichern kann. Es gibt ein VI des Herstellers, der die aktuelle Position in einen File schreibt (Anhang).
Also an der Stelle des Startpunktes soll in der Matrix z.B. (0,0,0) stehen. Und beim ersten Step soll an passender Stelle in der Matrix (0,1,0) stehen. Ich hoffe, dass es einigermaßen verständlich ist.
Die Größe der Matrix ist so nicht vorgegeben. Die Iterationen werden aus den einzugebenden X und Y- Größen des Samples und der gewünschten Auflösung berechnet.

Hat jemand eine Idee und kann mir weiterhelfen?

Vielen Dank im Voraus.

PS: Ich benutze LV 2017.


Angehängte Datei(en) Thumbnail(s)
   

11.0 .vi  Save Current Position to File.vi (Größe: 19,21 KB / Downloads: 248)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2018, 13:41
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

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

Zitat:Die Größe der Matrix ist so nicht vorgegeben. Die Iterationen werden aus den einzugebenden X und Y- Größen des Samples und der gewünschten Auflösung berechnet.
Also weißt du doch, wie groß dein Array werden muss: eben hast du ja die Anzahl der Iterationen etc. berechnet!

Dann musst du doch einfach nur ein entsprechend großes Array initialisieren und jeweils per ReplaceArraySubset den Messwert an die richtige Stelle eintragen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2018, 14:11
Beitrag #3

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Vielen Dank erstmal für die Antwort.
Da ich noch recht unerfahren im Umgang mit LabVIEW bin, ist mir das so noch nicht klar.
Also logisch, dass man dann ein entsprechend großes Array initalisieren muss.
Die Struktur ist ungefähr so, dass in zwei For-Schleifen (einmal y-aufwärts, einmal y-abwärts) und dazwischen jeweils ein Schritt in positive x-Richtung der Motor verfahren wird. Wie kann man jetzt dafür sorgen, dass die Werte automatisch an die richtige Stelle eingetragen werden?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2018, 15:04 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2018 15:06 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

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

Zitat:Wie kann man jetzt dafür sorgen, dass die Werte automatisch an die richtige Stelle eingetragen werden?
Wenn deine Schleifen so nach und nach ablaufen, solltest du doch wissen, wo dein Scanner gerade steht.
Und wenn du das weißt, dann sollte es auch kein Problem sein, das richtige Arrayelement zu beschreiben…

So, wie du oben auf deinem Blatt Papier die Positionen mitgezählt hast, kannst du das doch auch in deiner Software machen!

Zitat:Da ich noch recht unerfahren im Umgang mit LabVIEW bin, ist mir das so noch nicht klar.
Diese Fragen haben bisher noch nichts mit LabVIEW zu tun: du hättest in jeder Programmiersprache das exakt gleiche Problem zu lösen.
Allgemeiner Tipp: erstmal auf einem Blatt Papier deinen Algorithmus entwerfen/skizzieren, bevor du mit programmieren anfängst!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2018, 16:05
Beitrag #5

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Genau, die Positionen kann man ja mittels der Schleifeniterationen bestimmen.
Allerdings habe ich diesbezüglich noch zwei Fragen.
Also der Scanvorgang läuft so ab, dass in einer While-Schlife mit einer For-Schleife y aufwärts gescannt wird, dann geht es einen Schitt in positive x-Richtung, dann wieder mittels For-Schleife in negative y-Richtung und dann wieder einen Schritt in positive x-Richtung. Und diese While-Schleife läuft so lange, bis das Sample auf gesamter X-Größe untersucht worden ist.
Das heißt, dass ich pro Iteration der While-Schleife zwei Spalten im 2D-Array erstelle, aber laut Iteration wäre es nur ein Durchgang (= eine Spalte). Und wenn in einer For-Schleife y aufwärts abgefahren wird, dann wäre die erste Iteration ja unten. Wenn ich allerdings den Zeilen-Index mit der Iteration verbinde, würde er bei eins, also oben, beginnen.

Und noch zu etwas anderem:
Das Array soll nicht auf dem Frontpanel angezeigt werden, sondern in einer Datei gespeichert werden. Wie macht man das? Super wäre eine Tabelle, in der pro Zelle die entsprechenden Positionen stehen.

Vielen Dank nochmal :-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2018, 20:21
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

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

Zitat:in einer While-Schlife mit einer For-Schleife y aufwärts gescannt wird, dann geht es einen Schitt in positive x-Richtung, dann wieder mittels For-Schleife in negative y-Richtung und dann wieder einen Schritt in positive x-Richtung. Und diese While-Schleife läuft so lange, bis das Sample auf gesamter X-Größe untersucht worden ist.
Wozu die While-Loop?
- Eine FOR-Loop für alle X-Schritte.
- Darin eine FOR-Loop für die Y-Schritte.
- Dazu ein boolscher Wert, der die Y-Richtung angibt. Dieser wird nach der inneren FOR-Loop jeweils negiert.

Zitat:Das heißt, dass ich pro Iteration der While-Schleife zwei Spalten im 2D-Array erstelle, aber laut Iteration wäre es nur ein Durchgang (= eine Spalte). Und wenn in einer For-Schleife y aufwärts abgefahren wird, dann wäre die erste Iteration ja unten. Wenn ich allerdings den Zeilen-Index mit der Iteration verbinde, würde er bei eins, also oben, beginnen.
Das dürfte mit den 3 Gedankenstrichen erledigt sein…

Zitat:Das Array soll nicht auf dem Frontpanel angezeigt werden, sondern in einer Datei gespeichert werden. Wie macht man das? Super wäre eine Tabelle, in der pro Zelle die entsprechenden Positionen stehen.
Warum zeigst du das Array nicht einfach während der Messung an, dann freut sich der User an ständig aktualisierten Messwerten!
Und nach der Messung wird dann das komplette Array in eine Datei gespeichert…

LabVIEW bringt jede Menge BeispielVIs mit, die solltest du dir mal anschauen!
Tipp: schau dir die Funktion WriteSpreadsheetFile (in neueren Versionen "Write Delimited Textfile") mal an.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
06.01.2018, 13:57
Beitrag #7

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Die drei Gedankenstriche sind super. Vielen Dank dafür. Ich bin gerade dabei das zu ändern. Allerdings hänge ich gerade an der Stelle mit dem boolschen Wert, der die Y-Richtung angeben soll. Also in der inneren For-Loop soll eine Case-Struktur sein, die bei "true" in positive Y-Richtung fährt und bei "false" in negative Y-Richtung. Aber wie kann ich das mit dem Selektoranschluss machen? Im Endeffekt soll dieser ja immer wechseln zwischen True und False nach jedem Durchgang. Aber wie kann ich die true-Konstante dann negieren?

Das Problem mit der While-Schleife ist somit tatsächlich gelöst. Allerdings verstehe ich dann noch nicht so ganz, wie das mit dem Teilarray ersetzen machen soll. Denn im TRUE-Fall fährt der Motor in positive Y-Richtung und wenn ich dann die Schleifeniteration mit dem Zeilenindex verbinde, fängt dieser ja bei 1 an, also "oben", obwohl der Motor ja "unten" startet. Das heißt ich hätte die Werte genau verkehrt. Oder habe ich da einen Denkfehler?

Mit dem Anzeigen des Arrays ist eine gute Idee, wenn nur die aktuelle Position angezeigt wird und nicht das ganze 2D-Array, denn dafür wird es zu groß sein. Wenn ich den Scanvorgang entsprechend geändert habe, werde ich mir diese Funktion anschauen. Danke für den Tipp :-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.01.2018, 14:50
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

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

Zitat:Aber wie kann ich das mit dem Selektoranschluss machen? Im Endeffekt soll dieser ja immer wechseln zwischen True und False nach jedem Durchgang. Aber wie kann ich die true-Konstante dann negieren?
Zwei Gedankenstriche:
- boolsche Werte negiert man mit NOT
- Werte speichert man in Schieberegistern, wenn man sie in der nächsten Iteration einer Schleife benötigt…

Zitat:wenn ich dann die Schleifeniteration mit dem Zeilenindex verbinde, fängt dieser ja bei 1 an, also "oben", obwohl der Motor ja "unten" startet. Das heißt ich hätte die Werte genau verkehrt. Oder habe ich da einen Denkfehler?
Wer hat gesagt, dass du dafür den Schleifeniterator verwenden sollst oder gar musst?
Man kann auch seinen eigenen "Index" berechnen - und sich diesen wiederum in einem Schieberegister merken…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.01.2018, 18:56
Beitrag #9

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Ich habe den Scanvorgang jetzt entsprechend geändert. Dabei habe ich das abwechselnde Ausführen von True und False in der inneren For-Loop mittels Rückkopplungsknoten umgesetzt. Ist das zielführend? Im Anhang sind zwei Bilder dazu.
Und jetzt geht es ans Speichern der Positionen im Array :-)
Also dafür initialisiere ich dann ein entsprechend großes 2D-Array und schreibe bei jeder Iteration mit Teilarray ersetzen die Positionen an die entsprechenden Stellen. So von der Theorie hört sich das ganz gut an. Jetzt muss ich es nur noch richtig umsetzen.


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.01.2018, 18:29
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

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

Zitat:Dabei habe ich das abwechselnde Ausführen von True und False in der inneren For-Loop mittels Rückkopplungsknoten umgesetzt. Ist das zielführend?
Ja.
Aber warum jetzt ein Rückkopplungsknoten anstatt eines Schieberegisters in der äußeren Schleife? (Das fände ich übersichtlicher.)

- Warum programmierst du beim "Stop Scanning" eine RaceCondition?
- So, wie du "Stop Scanning" abfragst, wird es in der inneren Loop nicht wirklich beachtet. THINK DATAFLOW!
- Der Fehlerdraht sollte auch in einem Schieberegister verwaltet werden, um darüber Errorhandling zu betreiben…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
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 11.830 08.02.2018 16:31
Letzter Beitrag: MartinNewBee
  Werte speichern mit Zeitangabe und Title patriote00 2 5.445 15.01.2016 13:52
Letzter Beitrag: patriote00
  Werte aus Signalverlaufsdiagramm in Datei speichern und laden montanaro 5 8.721 15.07.2015 06:56
Letzter Beitrag: montanaro
  1D Array in 6er xD matrix formatieren Da_Rudi 9 7.994 27.11.2013 15:22
Letzter Beitrag: Da_Rudi
  Werte in einer .txt-datei speichern tom102 38 33.687 28.07.2010 12:06
Letzter Beitrag: GerdW
  Werte aus Datei in Arrays speichern Fysi 4 5.982 07.09.2009 09:04
Letzter Beitrag: Lucki

Gehe zu: