WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

2 parallele Funktionsdurchführungen durch ein GUI

 

acm

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2012, 12:26     Titel: 2 parallele Funktionsdurchführungen durch ein GUI
  Antworten mit Zitat      
Hallo allerseits,

kurz zu mir: bin Student, 24, und arbeite an einem kleinen Programm.
Ich habe erst vor kurzem mit Matlab (einfache Basisversion r2011a) angefangen, komme aber recht gut zurecht da ich ein paar Kenntnisse der C-Programmierung habe.

Mein Programm:
Es ist ein simples GUI, das eine Funktion aufruft, die in zeitlichen Intervallen 2 Variablen verändert. Je nach gewähltem Versuch, den ich machen will, sehen diese Zyklen anders aus. Soweit so gut. Alles kein Problem.
Das Programm ist nicht sehr aufwändig, im Prinzip sind es nur ein paar schleifen und Bedingungen, bis die Ausgabevariablen gesetzt werden, ehe dort eine pause(inf) eingreift Manchmal auch mehr: (90min Werte x1,y2, dann 30 min Werte x2,y2). Es werden also nur nach viel Pausenzeit die 2 Variablen mit einem anderen Wert besetzt.

Dann habe ich noch über einen Button im GUI eine Regelung erstellt. (Abfrage Istwert, Vergleich mit Sollwert und Berechnung, Ausgabe berechneter Stellwert -> Variable 3)
Diese Regelschleife soll, sagen wir mal, 1 mal die Sekunde ausgeführt werden.
Eingebaut, angeklickt, funktioniert.



Jetzt passiert nun folgendes. Läuft die Regelschleife, kann ich die andere Funktion nicht ausführen, da der Rechner sich ja in der schleife befindet.
Ich will quasi vom Gui ausgehend, einen Rechenweg in die Regelschleife schicken dann in der Lage sein, die andere Zyklische Ausgabe zu starten.

Wirklich belastend sind diese Rechnungen nicht... also muss das doch Möglich sein?
Ich habe schon ein wenig geschaut und etwas von einer Parallel Computing Toolbox gelesen, was mir jedoch nicht sehr weitergeholfen hat (ist doch eine Art kostenpflichtiges AddOn?)

Wenn ich matlab 2 mal öffne, dann je Fenster das gleiche GUI öffne, dann klappts ja. Kontrolle durch grafische Ausgabe der var1, var2 und beim anderen var3 Werte. CPU-Auslastung liegt da nicht sehr hoch, ist eher verschwindend gering (0-1-2%).

Nur jetzt habe ich ja die Variablen 1 und 2 getrennt von Variable 3 in zwei Matlab Instanzen. Da sih aber matlab noch mit einer anderen Software verbinden und diese Werte weitergeben soll (Spannungssignale), müssen diese in einem Matlab fenster laufen.


Das kann doch nicht so schwer sein?! Confused

Danke für etwaige Hilfe im Voraus,
acm


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2012, 15:10     Titel:
  Antworten mit Zitat      
Hallo,

wenn das wirklich parallel laufen soll, führt in MATLAB kein Weg an der Parallel Computing Toolbox vorbei.

Ich frage mich jedoch, warum das unbedingt parallel laufen soll? Man kann doch den Prozess der Aktualisierung der Variablen ohne größere Probleme in den anderen Prozess einbauen?

Wenn du bei deinem Ansatz mit zwei MATLAB-Sitzungen bleiben willst, könntest du die Daten auf Festplatte speichern / von dort laden. Natürlich nicht schön, aber immerhin eine Lösung. Zu bevorzugen wäre natürlich ein "echter" paralleler Ansatz oder das wie oben beschrieben zu umschiffen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
acm

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2012, 17:37     Titel:
  Antworten mit Zitat      
Danke schonmal für die Antwort...

Ja das habe ich jetzt auch ausprobiert.
Weil die rechte Schleife auch nicht bei jeder Variante der linken Schleife laufen soll.
Haupthinderungsgrund war halt, dass die linke Schleife für einen Durchlauf schonmal 2 std braucht (wobei viel Wartezeit darin ist) und die rechte Regelung etwa 10 mal die Sekunde. Dann wollte ich nicht die - für 2 std fixen, unveränderten - Variablen jedes mal mit ausgeben.

Ist ja wie bei Olympia, wenn du dem Läufer zurufst:
"Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, Lauf!, ......" Wink

Aber ich glaube ich habe eine gute Möglichkeit gefunden dies zu integrieren...
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2012, 18:01     Titel:
  Antworten mit Zitat      
Ich verweise einmal auf diesen Thread http://www.gomatlab.de/multithreading-overhead-t24873.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2012, 19:09     Titel:
  Antworten mit Zitat      
Hallo,

eine weitere Möglichkeit könnte hier das Arbeiten mit Timern sein. Ein Beispiel, wie ich mir das in etwa vorstellen könnte:

Code:
function bigEx

t1 = timer('ExecutionMode', 'FixedDelay', 'Period', 10, 'TimerFcn', @timer1);
t2 = timer('ExecutionMode', 'FixedDelay', 'Period', 1, 'TimerFcn', @timer2);
start(t1)
start(t2)


function timer1(obj, event)
global x
x = rand;

function timer2(obj, event)
global x
disp(x)


Mir gefällt die Verwendung globaler Variablen hier auch nicht, aber das sollte zur Demonstration erst mal reichen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.