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.02.2018, 15:04
Beitrag #21

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



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

leider bin ich immernoch nicht weiter gekommen. Und die Schwierigkeiten sind die gleichen geblieben.
ich habe in der Zwischenzeit für die z-Matrix (3D-graphen) bzw. für das 2D-Array für den Intensitätsgraphen ein entsprechendes 2D-Array initialisiert, in dem bei jeder Iteration an die richtige Stelle der Messwert geschrieben wird mittels "Teil-Array ersetzen". Das scheint auch zu funktionieren, denn der Intensitätsgraph zeigt pro Iteration dann das richtige Element an. Aber leider auch nur das und nichts anderes.
Beim 3D-Graph passiert gar nichts.

Das Visualisieren befindet sich jetzt im Inneren der Schleife. Ich denke, dass es schöner ist, wenn man in Echtzeit sieht, was passiert. Aber auch nachher wäre ok. Nur ich komme bei beiden Möglichkeiten nicht weiter. Beim Intensitätsgraphen sieht man, dass irgendwie nur die letzte Iteration dargestellt wird. Der 3D-Graph bleibt leer. Die entsprechenden Daten sieht man auch im Anhang. Eigentlich müsste doch mehr passieren? Woran liegt das? Und warum werden die Graphen nicht bei jeder Iteration aktualisiert?


Angehängte Datei(en) Thumbnail(s)
           
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.02.2018, 16:03
Beitrag #22

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 Maik,

Zitat:ein entsprechendes 2D-Array initialisiert, in dem bei jeder Iteration an die richtige Stelle der Messwert geschrieben wird mittels "Teil-Array ersetzen". Das scheint auch zu funktionieren, denn der Intensitätsgraph zeigt pro Iteration dann das richtige Element an. Aber leider auch nur das und nichts anderes.
Weil du eben nur den einen Datenpunkt (Sample) in diesem in jeder Iteration neu initialisierten Array einträgst.
Dein VI macht genau das, was du programmiert hast!
LabVIEW-Grundlagen: wenn du Werte (z.B. dein Array) in einer Schleife für die nächste Iteration speichern willst, solltest du ein Schieberegister verwenden.

Zitat:Beim 3D-Graph passiert gar nichts.
Weil du auch hier nur genau einen Datenpunkt darstellen willst…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.02.2018, 18:23 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2018 18:34 von tahity94.)
Beitrag #23

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



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

das macht Sinn :-) Ich habe jetzt versucht, die Werte in Schieberegistern zu speichern. Das klappt allerdings nur bedingt.
Also wenn ich das 2D-Array in der äußeren Schleife initialisiere und die Werte der inneren Schleife dann im Schieberegister speichere, wird logischerweise am Ende nur die letzte innere Iteration angezeigt:
   

Das ist soweit auch klar. Aber da ich ja auch alle äußeren Iterationen speichern möchte, brauche ich dann ja noch ein weiteres Schieberegister für die äußere For-Schleife. Wenn ich das jetzt alles analog mache, also das Array vor den beiden Schleifen initialisiere und die Werte dann in Schieberegistern speicher, ist das Resultat wieder leer. Muss ich da noch was anderes beachten?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.02.2018, 20:32 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2018 20:35 von GerdW.)
Beitrag #24

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 Maik,

so schwer ist das alles doch gar nicht:
   
Array außen initialisieren, in der innersten Schleife dann Elemente ersetzen…

Macht man doch sonst genau so:
Code:
dim array[x, y]
FOR i = 1 to x
  FOR j = 1 to y
   array[i, j] := wert
  NEXT j
NEXT i

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.02.2018, 23:24 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2018 23:54 von tahity94.)
Beitrag #25

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



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

genau so hatte ich das vor. Und habe es natürlich auch versucht umzusetzen. Allerdings wurde dann automatisch zusätzlich zu den Schieberegistern ein Rückkopplungsknoten erstellt, weil ich die Dimensionen mit den entsprechenden Zählanschlüssen der For-Schleifen verbunden habe. Wenn ich das weglasse, sieht das wesentlich besser aus :-)
Hast du eventuell noch einen Tipp, wie man umsetzen kann, dass die x- und y-Achse den "wirklichen" Positionen entspricht? Mit einem Eigenschaftsknoten?
Ich habe den Eigenschaftsknoten xAchse.Faktor und yAchse.Faktor erstellt, die beiden in Schreiben geändert und jeweils mit der passenden Scanresolution verbunden. Dadurch erhoffe ich mir, dass die Schrittweite der x- und y-Achse direkt der Scanresolution entspricht, sodass man ergo direkt die Position ablesen kann. Ist das so zielführend?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.02.2018, 08:24
Beitrag #26

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 Maik,

Zitat:Hast du eventuell noch einen Tipp, wie man umsetzen kann, dass die x- und y-Achse den "wirklichen" Positionen entspricht? Mit einem Eigenschaftsknoten?
Ich habe den Eigenschaftsknoten xAchse.Faktor und yAchse.Faktor erstellt, die beiden in Schreiben geändert und jeweils mit der passenden Scanresolution verbunden. Dadurch erhoffe ich mir, dass die Schrittweite der x- und y-Achse direkt der Scanresolution entspricht, sodass man ergo direkt die Position ablesen kann. Ist das so zielführend?
Genau das wäre jetzt auch mein Tipp gewesen! Big Grin
Wie schon mal geschrieben: das klappt natürlich nur "korrekt" für äquidistante Schrittweiten, du hast ja nur einen festen Faktor vergeben.
Wenn deine echten Positionen aber nur gering vom Sollwert abweichen, kann man in der Darstellung aber wohl damit leben…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
07.02.2018, 17:03 (Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2018 21:47 von tahity94.)
Beitrag #27

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Wir sind fast am Ziel angekommen :-)
Allerdings bestehen noch ein, zwei "kleine Probleme".

Problem 1: Bei der inneren Schleife, in der einmal der Messwert an die richtige Stelle des Arrays gesetzt wird und einmal die Positionen und der Messwert in eine Tabelle geschrieben werden, stimmt wohl etwas nicht. Denn wie in dem CSV-File zu sehen, wird die erste Position doppelt gespeichert und ganz am Ende fehlt ein Step. Bei den Iterationen dazwischen funktioniert aber alles tadellos. Das hat zur Folge, dass der y-Array, der mit dem 3D-Graphen verbunden wird, fehlerhaft ist. Für den x-Array (eigentlich komplett analog) gibt es dieses Problem nicht.
Und wenn man die Messwerte aus der Tabelle (4. Wert) mit den Einträgen des z-Arrays vergleicht, fällt auf, dass der erste Messwert nicht im Z-Array erscheint. Weiterhin sollte der "letzte" Messwert (letzte Iteration) des ersten inneren Schleifendurchgangs 20 sein und nicht 0. Ich weiß nicht, wo die 0 herkommt. Und dann ist da ein Sprung drin. Der Wert "20" erscheint dann plötzlich da, wo eigentlich der Wert "60" erscheinen sollte (bezieht sich auf das zweite Bild). Da habe ich aktuell keine Idee, woran das liegen könnte. Prinzipiell scheint es ja zu stimmen/funktionieren.

   

Problem 2:
Wenn man das Z-Array mit dem Intensitätsgraphen vergleicht, fällt auf, dass da etwas mit der Zuordnung nicht stimmt. Die Nullen sind eigentlich oben links und rechts, befinden sich im Graphen jedoch unten.

   


Die beiden Bilder zeigen genau das gleiche Problem, es handelt sich aber um 2 unterschiedliche Messungen. Velleicht ist das so ersichtlicher.


Hier sind einmal die Soll-Positionen und die Ist-Positionen im direkten Vergleich:

   




Vielen Dank.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.02.2018, 08:13
Beitrag #28

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 Maik,

Bilder vom UI sind ja nett - nur wie soll man daran die Programmierfehler erkennen?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.02.2018, 17:16 (Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2018 17:39 von tahity94.)
Beitrag #29

tahity94 Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2017

17.0f2
-
DE



RE: Positionen (Werte) in Matrix speichern
Hallo,

ich habe eine Vermutung, weshalb die erste Position doppelt in die Tabelle geschrieben wird und die letzte Position fehlt. Und zwar handelt es sich dabei wohl um ein Timing-Problem.

   

Und zwar soll sich für i=0 der Motor nicht bewegen, damit die Startposition auch aufgenommen wird. Jetzt für i=1 soll sich der Motor um einen Step bewegen und danach die Position in die Tabelle geschrieben werden. Aber anscheinend funktioniert das so nicht, sondern beinahe instantan wird der Messwert in die Tabelle geschrieben. Und das so schnell, dass der Motor den Befehl noch nicht verarbeitet hat. Deswegen befindet sich in der Tabelle zweimal der Wert der Startposition. Und für i_1=N_1(äußere Schleife) i_2=N_2 (innere Schleife) wird der letzte Befehl an den Motor gesendet und direkt danach die Position gespeichert. Aber die Position entspricht dann eigentlich die der i_2=N_2-1. Iteration.

Und "mitten drin" funktioniert es, weil sowohl in der inneren als auch in der äußeren Schleife jeweils ein Timer ist. Der dann aber am Ende logischerweise nicht mehr zur Geltung kommt. Soweit macht das Sinn, oder?

Also kann man das beheben, indem man überprüft, ob der Motor in der Position angekommen ist. Deswegen hatte ich vorher schonmal ein SubVI angefertigt, das mittels State Machine abfragt, ob der Motor in der endgültigen Position angekommen ist. Das hat in der Praxis aber leider gar nicht funktioniert.
Ich hänge es nochmal an zur Überprüfung, ob das soweit stimmt oder fehlerhaft ist.

   
   

Das hat vermutlich nicht funktioniert, weil, wenn das Intervall zur Überprüfung zu genau ist, und der Motor eine Ungenauigkeit hat, die größer ist, als das eingegebene Intervall, ist die State-Machine im State "Wait" gefangen. Wie man der Tabelle entnehmen kann, sind Ungenauigkeiten von 0,1 um möglich, was eben auch die minimale Resolution sein soll. Wenn ich das Intervall jetzt auf +- 0,1 um setze, dann ist bei einer Auflösung von 0,1 um der boolesche Wert immer true, die Bedingung also immer erfüllt. Was dann nichts bringen würde. Gibt es da zu vielleicht Anregungen?

In der Palette "Timing" habe ich die Funktion "Datenfluss aufhalten" gefunden. Kann das eventuell eine Alternative sein?

   

Wenn ich den Datenfluss an dieser Stelle aufhalten würde, sollte das Problem ja nicht mehr sein. Klar, für die Performance ist es defintiv nicht die schönste Lösung, allerdings sind mir fehlerfreie Werte aktuell lieber. Und den Timer in der inneren Loop könnte ich dann einfach an diese Stelle mit "Datenfluss aufhalten" setzen.

Allerdings erklärt das noch nicht wirklich, weshalb in der Tabelle (siehe oben) der erste Messwert 10 beträgt und im Z-Array 70. Und den anderen Ungereimheiten bzgl. des Z-Arrays bin ich auch noch nicht auf die Schliche gekommen.
Aber generell ist da ja das gleiche Problem: Der Messwert soll wie die Positionen erst aufgenommen werden, wenn der Motor seine Position erreicht hat. Denn nur so kann man das ja eindeutig zuordnen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.02.2018, 20:17
Beitrag #30

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 Maik,

Zitat:Und zwar soll sich für i=0 der Motor nicht bewegen, … Soweit macht das Sinn, oder?
Das hört sich sinnvoll an.
Du machst folgendes:
- du schickst dem Motor einen Stellbefehl
- unmittelbar danach fragst du die aktuellen Positonen XYZ ab
- im Anschluss daran werden eben diese Werte XYZ in die Datei geschrieben
Dummerweise wird sich der Motor in den Mikrosekunden zwischen Stellbefehl und Positionsabfrage noch nicht (wesentlich) bewegt haben…

Zitat:ob das soweit stimmt oder fehlerhaft ist.
Da ist immer noch ein unverdrahteter Tunnel, der einen Wert auf "Default" zurücksetzt. Alle wichtigen Werte immer verdrahten!

Zitat:Funktion "Datenfluss aufhalten"
Das ist im Grunde auch nur eine Wartezeit. Kannst ja selbst in die Funktion hineinschauen!

Zitat:Aber generell ist da ja das gleiche Problem: Der Messwert soll wie die Positionen erst aufgenommen werden, wenn der Motor seine Position erreicht hat. Denn nur so kann man das ja eindeutig zuordnen.
Deswegen hatte ich ja schon einmal ein ordentliche Statemachine vorgeschlagen.
Und zwar nicht nur zum Zwecke des Prüfens, ob der Motor angekommen ist, sondern eben für alles States deines Programmablaufs…
Aber genau hier musst du ansetzen!

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.824 08.02.2018 16:31
Letzter Beitrag: MartinNewBee
  Werte speichern mit Zeitangabe und Title patriote00 2 5.439 15.01.2016 13:52
Letzter Beitrag: patriote00
  Werte aus Signalverlaufsdiagramm in Datei speichern und laden montanaro 5 8.685 15.07.2015 06:56
Letzter Beitrag: montanaro
  1D Array in 6er xD matrix formatieren Da_Rudi 9 7.967 27.11.2013 15:22
Letzter Beitrag: Da_Rudi
  Werte in einer .txt-datei speichern tom102 38 33.548 28.07.2010 12:06
Letzter Beitrag: GerdW
  Werte aus Datei in Arrays speichern Fysi 4 5.966 07.09.2009 09:04
Letzter Beitrag: Lucki

Gehe zu: