![]() |
Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Module (/Forum-LabVIEW-Module) +---- Forum: LabVIEW MathScript RT (/Forum-LabVIEW-MathScript-RT) +---- Thema: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen (/Thread-Matlab-Skript-Knoten-zeitlich-sich-aendernde-Daten-einlesen) Seiten: 1 2 |
Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - ene mit b - 06.03.2013 14:55 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 RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - GerdW - 06.03.2013 15:08 Hallo ene, Zitat:Alle 100ms wird ein 1D-Array mit Zufallszahlen erzeugt. Durch die While-Schleife passiert das kontinuierlich. Die for-SchleifeDas scheint nicht nur, sondern dass ist so! THINK DATAFLOW! [attachment=43852] 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: [attachment=43853] 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! RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - ene mit b - 06.03.2013 15:58 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 RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - GerdW - 06.03.2013 16:04 Hallo Ene, Zitat:Wie kann ich das sonst lösen, wenn nicht mit dem Matlab Skript Knoten? Vielleicht so: Code: FOR i=0 to 999 (in LabVIEW!) RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - ene mit b - 06.03.2013 16:36 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 RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - GerdW - 06.03.2013 16:45 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... RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - ene mit b - 06.03.2013 16:56 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 RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - ene mit b - 07.03.2013 11:27 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 RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - GerdW - 07.03.2013 11:47 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 ![]() "a = ones(10)" sollte auch mit einem InitArray zu erledigen sein... RE: Matlab Skript Knoten zeitlich sich ändernde Daten einlesen - ene mit b - 07.03.2013 14:23 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 |