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

for Schleife außerhalb zwei Funktionen

 

BlackDice
Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 12.04.2021, 14:30     Titel: for Schleife außerhalb zwei Funktionen
  Antworten mit Zitat      
Moin zusammen,

ich habe zwei Funktionen. Die eine stößt eine Messung an und die andere Plottet die Messwerte. Das möchte ich auch bei mehreren Messungen in dieser Reihenfolge machen.

Kann ich dafür eine for Schleife außerhalb der beiden Funktionen schreiben und den Schleifen Wert in den Funktionen nutzten? Oder gibt es für so etwas eine andere Möglichkeit?

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

Zitat:
Kann ich dafür eine for Schleife außerhalb der beiden Funktionen schreiben

Ich wüsste nicht, was dagegen spricht.

Zitat:
den Schleifen Wert in den Funktionen nutzten?

Funktionen bedeutet getrennte Workspaces. Das heißt, dass alle benötigten Daten übergeben werden müssen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 12.04.2021, 15:19     Titel:
  Antworten mit Zitat      
Moin Harald,

wie kann ich denn aus dem Workspace einer Funktion auf Variablen einer Schleife außerhalb zugreifen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wie gesagt: übergeben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 14.04.2021, 09:19     Titel:
  Antworten mit Zitat      
Moin,
ich habe mir das so überlegt:
Code:
       function alleMessungenstarten_ButtonPushed(app, event)
            for v = 1:app.SVS.Value
                MeasurementStart(app,v)
                AxesValue(app,v)
            end


Die Variable v benutzte ich dann auch innerhalb der Funktionen. Allerdings bekomme ich den Fehler "Too many input arguments."
Ich weiß nicht wo ich in der Doku danach suchen muss.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Funktionen MeasurementStart und AxesValue müssen v auch entgegennehmen, d.h. die erste Zeile bzw. die Deklarationszeile muss so aussehen:
Code:
function MeasurementStart(app,v)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 14.04.2021, 13:02     Titel:
  Antworten mit Zitat      
Perfekt, danke.

Wie kann ich es so programmieren, dass die Schleife einen weiter zählt, wenn ich den Button drücke?
Ich komme aber grad nicht drauf wie ich es funktionierend programmieren kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.04.2021, 13:29     Titel:
  Antworten mit Zitat      
Hallo,

wenn du die Schleife in einem Callback hast, werden die Iterationen unabhängig vom Betätigen weiterer Buttons ausgeführt.

Mir ist also nicht klar, was folgendes bedeuten und bezwecken soll:
Zitat:
dass die Schleife einen weiter zählt, wenn ich den Button drücke?


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 14.04.2021, 15:19     Titel:
  Antworten mit Zitat      
Moin, stimmt du hast recht. Die for Schleife ist überflüssig. Wenn ich es so schreibe bekomme ich natürlich "Unrecognized function or variable 'v'." Wie kann ich v nur in dieser Funktion erstellen und nutzen?

Code:
       function Messungstarten_ButtonPushed(app, event)
            if app.AnzahlMessungen.Value <= app.SVS.Value
                v = v + 1;
                MeasurementStart(app,v)
                AxesValue(app,v)
                app.AnzahlMessungen.Value = app.AnzahlMessungen.Value + 1;
            end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

vermutlich willst du also v bei Start der App auf 1 oder 0 setzen und dir den Wert für die nächste Ausführung merken?
Das geht mit persistent. Wichtig wird sein, dass du die persistent-Variable wieder zurücksetzt, wenn du die App schließt. Ich meine, das geht mit
Code:
clear Messungstarten_ButtonPushed


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 16.04.2021, 11:18     Titel:
  Antworten mit Zitat      
Kann ich eine for Schleife auch erst weiter laufen lassen wenn ich ein Call back von einem Button bekomme?

Code:
for v = 1:10
                MeasurementStart(app,v)
                AxesValue(app,v)
                pause(5)
                % hier würde die Schleife auf das Drücken des Buttons warten
            end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2021, 11:42     Titel:
  Antworten mit Zitat      
Hallo,

technisch wohl möglich, aber meiner Meinung nach keine gute Idee. Für mich fühlt sich das an, als würde man ein Paket von Hamburg nach München über China schicken.
Hast du versucht, den Vorschlag umzusetzen? Welche Probleme sind dabei ggf. aufgetreten?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 16.04.2021, 11:55     Titel:
  Antworten mit Zitat      
Ich habe versuch die Variable v, die auch in in meine Funktionen übergeben möchte, nach dem drücken eines Buttons zu erzeugen. So wie ich es aber geschrieben habe wurde in der if Bedingung v jedes mal aufs neue auf 1 gesetzt.

Code:
           if exist('v','var')
            else
                v = 1;
            end
           
            if app.AnzahlMessungen.Value <= app.SVS.Value
                MeasurementStart(app,v)
                AxesValue(app,v)
                v = v + 1;
                app.AnzahlMessungen.Value = app.AnzahlMessungen.Value + 1;
            end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2021, 12:18     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte dir vorgeschlagen, eine persistent-Variable zu verwenden, siehe
https://de.mathworks.com/help/matlab/ref/persistent.html und dort z.B. "Count Calls to Function".

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 16.04.2021, 12:40     Titel:
  Antworten mit Zitat      
Ok danke, jetzt hat das für mich Sinn gemacht.
So habe ich es jetzt programmiert:
Code:
           persistent v
            if isempty(v)
                v = 1;
            end
           
            if v <= app.SVS.Value
                MeasurementStart(app,v)
                AxesValue(app,v)
                v = v + 1;
            end
           
            if v > app.SVS.Value
                v = 1;
            end
           


Kann man das so stehen lassen oder gibt es da noch Verbesserungsvorschläge?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2024 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.