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 

Matlab Skript Knoten zeitlich sich ändernde Daten einlesen



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!

06.03.2013, 14:55
Beitrag #1

ene mit b Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2013

11
2012
DE



Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo Liebe Labview Gemeinde

Das ist mein erster Post in diesem Forum, deswegen entschuldigt falls ich noch über ein paar Fehler stolper.
Zuerst einmal: Ich benutze Labview der Version 11 mit Service Pack 1. Und mein test.vi habe ich dem Beitrag angehängt.
Ein vergleichbares Problem habe ich nicht gefunden und auch nicht woanders gepostet.

Nun versuche ich einmal mein Problem zu schildern. Ich generiere zum Test einen 1D Array in Labview mit der
Zufallzahl und einer for-Schleife. Dies habe ich gemacht um nicht mein unübersichtliches Programm für die
Ansteuerung eines Mikroskops zu posten. Dieses gibt mir dann zwar ein 2D-Array als Bild aus, aber ich möchte ja nur
das Prinzip erklären. Nun habe ich in Matlab ein großes Skript mit dem ich einen SLM Ansteuer welches ich auch schon
bereitgestellt bekommen habe. Deswegen der Matlab Skript Knoten.

Nun mein Vorgehen und mein Problem.
Alle 100ms wird ein 1D-Array mit Zufallszahlen erzeugt. Durch die While-Schleife passiert das kontinuierlich. Die for-Schleife
im Matlab Skript Knoten ist bei jedem Iterationsschritt um 1sec verzögert. Damit erhoffe ich mir, dass das Zufallsarray
am Eingang des Skript Knoten aktualisiert wurde und im nächsten Iterationsschritt eingelesen werden kann. Dies
geschieht 10 mal, sodass Matlab dann einen neuen Array ausgeben müsste, der 10 verschiedene Summen beinhaltet.
Problem: Der Input scheint immer der selbe zu sein. Daher habe ich 10 gleiche Zahlen.

Geht das irgendwie, dass ich mit Matlab in einer for-Schleife etwas berechne und jeweils die Summe des Array oder das
Array selber bei jeder Matlab Iteration abgespeichert wird? Die erste Schleife zum Produzieren des zu speichernden
Signals läuft dabei völlig unabhängig. Ich sorge nur dafür das die Matlab Schleife langsamer läuft, sodass ich sicher sein kann
das ein neues Signal anliegt. (In Matlab funktioniert das Skript. Ich muss nur das Labview-Array mit jedem Iterationsschritt als
Rückkopplung abspeichern können.)

Ich hoffe es ist nicht zu verwirrend!

Gruß ene mit b


Angehängte Datei(en)
11.0 .vi  test.vi (Größe: 9,14 KB / Downloads: 249)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
06.03.2013, 15:08 (Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2013 15:12 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo ene,

Zitat:Alle 100ms wird ein 1D-Array mit Zufallszahlen erzeugt. Durch die While-Schleife passiert das kontinuierlich. Die for-Schleife
im Matlab Skript Knoten ist bei jedem Iterationsschritt um 1sec verzögert. Damit erhoffe ich mir, dass das Zufallsarray
am Eingang des Skript Knoten aktualisiert wurde und im nächsten Iterationsschritt eingelesen werden kann. Dies
geschieht 10 mal, sodass Matlab dann einen neuen Array ausgeben müsste, der 10 verschiedene Summen beinhaltet.
Problem: Der Input scheint immer der selbe zu sein. Daher habe ich 10 gleiche Zahlen.
Das scheint nicht nur, sondern dass ist so! THINK DATAFLOW!
   
Du erstellst ein Datenarray und verdrahtest dieses an den MATLAB-knoten. Dieser wiederum arbeitet ein Schleife 10mal ab, bevor er ein Ergebnis ausgibt. Wie soll LabVIEW in dieser Zeit die FOR-Loop erneut aufrufen, wenn die While-Loop drumherum noch keine neue Iteration starten konnte???
- Warum lässt du die Schleife im MATLAB nicht einfach weg?
- Um Daten in einer Schleife zu speichern, verwendet man Schieberegister...
- Kannst du diese simple Rechnung nicht direkt mit LabVIEW erledigen? Du berechnest die Summe der Elemente deines Datenarrays und weist diese dem Ausgangsarray zu - jedem Element den gleichen Wert. (Willst du das wirklich so haben?) Dein jetziges VI würde dann so aussehen:
   

Zitat:Die erste Schleife zum Produzieren des zu speichernden Signals läuft dabei völlig unabhängig.
Aber nicht in deinem VI. THINK DATAFLOW!
Zitat:Ich sorge nur dafür das die Matlab Schleife langsamer läuft, sodass ich sicher sein kann das ein neues Signal anliegt.
Auch das ist nicht richtig gedacht...
Insgesamt kann man nur den Tipp geben: THINK DATAFLOW!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.03.2013, 15:58
Beitrag #3

ene mit b Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2013

11
2012
DE



RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo GerdW

Danke für deine schnelle Antwort. Das mit dem Dataflow habe ich mir schon gedacht. Mein Problem ist aber
das ich das nicht einfach in Labview machen kann, weil das richtige Matlabskript viel länge und größer ist
als das in meinem test.vi dargestellte. Zum einen werden Zernike Polynome erstellt, ein Lichtmodulator
angesteuert usw. Ich glaube das wäre mehr Aufwand das neu in Labview zu programmieren als das alte
zu benutzen. Da ich in Labview nicht so viel Ahnung habe wollte ich nur das generelle Problem darstellen
das ich habe.
Vielleicht um es besser zu verstehen den ganzen Ablauf:
Ich gebe auf einen Lichtmodulator ein Bild. Dies verändert mein Bild, dass mein Mikroskop aufnimmt.
Die Ansteuerung des Lichtmodulators erfolgt mit Matlab, das Bild des Mikroskops wird mit Labview
erstellt (Scanningmikroskop). Also alles etwas aufwändiger als in meinem test.vi. Nun möchte ich
ca. 1000 bis 10000 Bilder (Lichtmodulator) per for-Schleife in Matlab durchfahren und jeweils das
Bild aus Labview dazu abspeichern.

Wie kann ich das sonst lösen, wenn nicht mit dem Matlab Skript Knoten?
Matlab:
for 1000 Bilder
Bild auf Lichtmodulator geben
Bild von Mikroskop (Labview) messen/abspeichern (bzw die Summe der Pixel als Qualitätswert) jede Sekunde eins (Simuliert durch die Zufallszahlen)
end

Dann könnte ich den Laufindex gegen den Qualitätswert plotten und könnte rausfinden welches
Lichtmodulator Bild das beste war, dazu muss ich aber in Matlab in jeder Iteration einmal das
Mikroskopbild aus Labview abspeichern.

Gruß ene
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.03.2013, 16:04 (Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2013 16:05 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo Ene,

Zitat:Wie kann ich das sonst lösen, wenn nicht mit dem Matlab Skript Knoten?
Matlab:
for 1000 Bilder
Bild auf Lichtmodulator geben
Bild von Mikroskop (Labview) messen/abspeichern (bzw die Summe der Pixel als Qualitätswert) jede Sekunde eins (Simuliert durch die Zufallszahlen)
end

Vielleicht so:
Code:
FOR i=0 to 999 (in LabVIEW!)
   MATLAB: Bild auf Lichtmodulator geben
   LabVIEW: Bild lesen, Q berechnen, Werte speichern
   LabVIEW: WAIT(1000)
NEXT

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

ene mit b Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2013

11
2012
DE



RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo GerdW

Danke für die Antwort. Der Vorschlag gefällt mir. Meine einzige Frage dazu wäre, die Zeilen wo Matlab steht
soll ich wieder mit dem Skript Knoten bearbeiten?
Die Frage besteht lediglich in der Umsetzung, da die Ansteuerungssoftware für das Mikroskop sehr aufwendig
ist, mit Synchronisation, Sequenzen und vielen for- und while-Schleifen. Ich kann nicht das ganze Programm mit
in die von Ihnen vorgeschlagene Schleife packen. (Kenne nicht alle Einflüsse da ich sie noch nicht ganz durchdrungen
habe.) Kann ich einfach eine lokale Variable erzeugen und dann diese in der von Ihnen vorgeschlagene
for-Schleife auslesen? Oder hätte ich dann wieder Dataflow Probleme? (Bzw. dann würde wieder die
for-Schleife abgearbeitet ohne das neue Bilder erzeugt werden?)

Gruß Ene
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.03.2013, 16:45
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo Ene,

Zitat:die Zeilen wo Matlab steht soll ich wieder mit dem Skript Knoten bearbeiten?
Wenn du MATLAB-Code abarbeiten willst, brauchst du auch den zugehörigen MATLAB-Knoten...

Zitat:in der Umsetzung, da die Ansteuerungssoftware für das Mikroskop sehr aufwendig ist, mit Synchronisation, Sequenzen und vielen for- und while-Schleifen.
Die Komplexität kann ich nicht beurteilen...

Zitat:Kann ich einfach eine lokale Variable erzeugen und dann diese in der von Ihnen vorgeschlagene for-Schleife auslesen? Oder hätte ich dann wieder Dataflow Probleme?
Wahrscheinlich. Lokale Variablen halten sich nicht an den DATAFLOW...

Wenn ich dich richtig verstanden haben, dann willst du erst mit MATLAB ein Lichtmuster erzeugen und dann mit LabVIEW ein Bild von einer Kamera aufnehmen. Du musst also diese zeitliche Abhängigkeit irgendwo programmieren, und das ist nun mal am einfachsten mittels DATAFLOW zu erreichen.

Zitat:(Bzw. dann würde wieder die for-Schleife abgearbeitet ohne das neue Bilder erzeugt werden?)
Das würde ich bei deiner Schilderung befürchten, wenn das Timing beider Routinen (MATLAB, LabVIEW) unbekannt (bzw. nicht exakt definiert) ist...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
06.03.2013, 16:56
Beitrag #7

ene mit b Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2013

11
2012
DE



RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo GerdW
Vielen Dank für die Hilfe ich hoffe das hilft mir weiter, ich habe nun verstanden
wie ich das Problem umgehen kann. Bzw. das der Dataflow sehr wichtig in Labview ist.
Ich schreibe mir gerade eine neue test Routine und schaue ob ich das Timing mit dem
Dataflow irgendwie hinbekomme.
Ich melde mich dann wieder bei neuen Fragen bzw. wenn es funktioniert hat. Und
hänge dann die entsprechende Datei an.
Gruß Ene
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.03.2013, 11:27
Beitrag #8

ene mit b Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2013

11
2012
DE



RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo GerdW und Labview Gemeinde

Mir ist noch eine Kleinigkeit aufgefallen. Ich habe jetzt die Schleife in Labview realisiert.
Funktioniert auch sehr gut, aber wenn ich mit dem Laufindex i in dem Skriptknoten
rechnen will, kann ich nur die einfache Multiplikation ausführen.

Als Beispiel mal einfach angehängt. % Auskommentiert was z.B. nicht geht.

Gruß ene


Angehängte Datei(en)
11.0 .vi  test6.vi (Größe: 8,46 KB / Downloads: 204)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.03.2013, 11:47
Beitrag #9

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo ene,

mit MATLAB kenne ich mich nicht aus. Die beiden nicht funktionierenden Rechnungen sehen aber nicht so kompliziert aus, als dass man sie nicht in LabVIEW direkt erledigen könnte Smile
"a = ones(10)" sollte auch mit einem InitArray zu erledigen sein...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.03.2013, 14:23
Beitrag #10

ene mit b Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2013

11
2012
DE



RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen
Hallo GerdW

Sie haben mir sehr weitergeholfen ich hab gerade mein hoffentlich letztes Problem gelöst.
Der Matlab Code war nur für Testzwecke, welchen ich immer parallel in Matlab ausprobiere
und mir deswegen sicher bin das es daran nicht scheitern kann.
Problem war, dass der Laufindex i der Labview-Schleife der in den Skript Knoten eingebunden
wird nicht mit den üblichen mathematischen Operatoren bearbeitet werden konnte also wenn
ich z.B. das i mit einer 2 multipliziere gibt mir Labview einen Fehler aus der nicht da sein dürfte.

Die Lösung ist das i am Eingang des Skript Knotens als complexe Zahl zu deklarieren. Kommt
mir zwar seltsam vor weil das i ja nur 0 1 2 3 usw. ist, aber es funktioniert nun.

Gruß ene
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
  Variablennamen im MathScript-Knoten DrHoas 2 3.508 29.03.2012 09:58
Letzter Beitrag: DrHoas
  LabVIEW und Matlab Tina88 10 13.625 24.11.2010 08:34
Letzter Beitrag: labberview
  Einlesen von Daten mit mathscript capitano 5 6.212 27.11.2008 13:20
Letzter Beitrag: Guest
  Fehler 1047 beim Einbinden von Matlab-Skript chrissyPu 3 6.972 20.02.2007 18:30
Letzter Beitrag: chrissyPu

Gehe zu: