Matlab-Skript steuern (Pause, Reset)

8

Hey Leute, ich versuche ein Matlab-Skript (m-Datei) zu erstellen, das von einem externen VBA-Skript gesteuert werden soll.

Das Matlab-Skript muss die gleiche Operation jedes Mal durchführen (auch wenn sich Parameter ändern, aber das ist in diesem Fall nicht der Fall) für eine bestimmte Anzahl von Schleifen. Wenn ich es richtig sehe, kann ich Matlab-Funktionen in VBA wie folgt verwenden: Ссылка

Mein Hauptproblem ist, wie man den Matlab-Teil dieses Problems implementiert ... im Moment sieht mein Kontrollteil so aus:

start.m:

%Vor%

Der Reset-Teil funktioniert sehr gut, während der Wert vom Skript geändert wird, aber wenn ich manuell versuche, den Wert von 'run' oder 'reset' auf einen anderen Wert in meinem Arbeitsbereich zu ändern, passiert nichts ... mein Skript doen nicht abbrechen, auch nicht das Zurücksetzen - wenn es funktioniert ... das scheint mir, dass das Skript keine Änderungen im Arbeitsbereich erkennt?!

später sollen die Variablen 'run' und 'reset' vom VBA-Skript gesetzt oder deaktiviert werden. Gibt es einen plausiblen Grund, warum ich die Schleife nicht mit der Hand abbrechen kann?

Danke für irgendeinen Rat!

grüßt, poeschlorn

Bearbeiten:

Es sieht so aus, als ob das Skript die Variablen vor dem Start einmal lädt und niemals während der Laufzeit ... gibt es eine Möglichkeit, explizit auf eine Arbeitsbereichsvariable zuzugreifen?

Bearbeiten 2:

Ich benutze Matlab 2010b im Moment ohne zusätzliche Toolboxes

Bearbeiten 3:

Ich habe herausgefunden, dass es in Matlab mehrere "Arbeitsbereiche" oder RAMs gibt. Wenn meine Funktion ausgeführt wird, werden die Variablen im "base" (?) -Arbeitsbereich gespeichert, der nicht der Matlab-Arbeitsbereich ist, auf den Sie klicken und jeden Wert ändern können. Also muss ich Zugang zu diesem ominösen "Basis" -Raum bekommen und das Flag 'run' auf Null setzen. Irgendwelche Ideen?

    
poeschlorn 24.02.2011, 12:05
quelle

3 Antworten

4

Ich nehme an, dass Ihr Problem einfach darin besteht, dass Ihre Schleife die Ausführung der externen Schnittstelle blockiert. Während die Schleife läuft, können Sie nicht auf die anderen Schnittstellen zugreifen.

Ich wollte eine ähnliche Sache machen - erlaube die Kontrolle einer Matlab-Schleife durch ein externes Programm (entweder Ruby oder eine andere Matlab-Instanz). Die mit Abstand flexibelste Lösung war UDP. Es gibt eine großartige Toolbox namens PNET für Matlab, und ich nehme an, VB muss auch eine Socket-Bibliothek haben. Ich öffne einfach einen UDP-Port auf beiden Seiten und benutze einfache Textbefehle, um zu steuern und Feedback zu geben.

%Vor%

Auf diese Weise kann ich meine eigene erweiterbare Steuerungsschnittstelle erstellen, ohne mich um die Blockierung aus der Schleife kümmern zu müssen, sie kann plattformübergreifend und sprachübergreifend arbeiten, kann innerhalb einer Maschine oder über das Netzwerk arbeiten.

UPDATE: Um zwischen zwei UDP-Clients zu sprechen, müssen Sie zwei komplementäre UDP-Ports einrichten, beide sind Clients (dieses Beispiel ist alles in Matlab, so tun Sie das hier ist eine Struktur, in meinem Fall ist es eine Klasse, die die pnet-Funktionalität umschließt):

%Vor%     
The Tentacle 28.02.2011 22:47
quelle
1

Ist Ihr Skript eine Script-M-Datei oder eine Funktion?

Wenn es sich um eine Funktion handelt, verlieren Sie den Umfang der Variablen im Arbeitsbereich, weshalb sie nicht funktioniert. Ich würde Ihren Code in eine Funktion wie diese verwandeln:

%Vor%

Sie können dann die Werte für run und reset evertime einstellen, wenn Sie die Funktion von VBA aufrufen.

Wenn Sie ein Skript haben, entfernen Sie die Zeilen run und reset von oben und legen Sie ihre Werte im Arbeitsbereich fest, bevor Sie das Skript ausführen. Ich denke, Sie überschreiben Ihre Arbeitsbereichswerte, indem Sie die Skriptdatei ausführen.

    
Adam Leadbetter 24.02.2011 14:25
quelle
1

Tut mir leid, ich habe nicht genug Rep für einen Kommentar, also zitiere ich es hier:

  

@Adam Leadbetter: Danke, das macht Sinn. Das einzige was ich damit zu tun habe, ist wie man das Skript nach dem Reset pausiert und dann wieder startet, wenn es von run = 1 als param gestartet wurde - poeschlorn 25.02. Um 7:17 Uhr

Wenn Sie aus der Schleife ausbrechen wollen, nachdem reset auf eins gesetzt wurde, und dann warten, bis die Schleife wieder einmal fortgesetzt wird run = 1 , das ist ziemlich genau das gleiche wie einfach von vorne beginnen?

%Vor%

Wenn doProcess() 0 zurückgibt, wird die Funktion processRun() enden (wie das Verhalten, das Sie beim Zurücksetzen haben wollen), beim nächsten Aufruf von processRun beginnt sie mit "Zurücksetzen" / Standardwerten neu .

Oder fehlt mir etwas?

    
Juhl 03.03.2011 23:08
quelle

Tags und Links