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

Gauge in App zyklisch updaten

 

Neelassmal
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2021, 17:00     Titel: Gauge in App zyklisch updaten
  Antworten mit Zitat      
Hallo Zusammen,

ich bein ein Neuling mit Matlab und habe ein Problem.

Ich habe eine App geschrieben die Zyklisch ein Skript ausführt.
Die Daten aus dem Skript möchte ich auf der Gauge anzeigen.
Allerding funktioniert die Gaugeanzeige in verbindung mit run(script) nicht.

Code:

while ON
app.temperature= getappdata(0,'temperature');      
app.GauTemp.Value = app.temperature;                  
drawnow
pause(1/1000);
 run("Temp_Hum.m")
end
 


Die Daten kommen richtig in der App an, da ich sie Testweise über einen Button ausgeben konnte.
Selbst wenn ich mir einfach nur den Wert 5 anzeigen lassen will funktioniert es nicht in verbindung mit run(skript).

Jemand eine Idee für mich und kann mir Helfen wie das machbar ist?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ein reproduzierbares Beispiel wäre hilfreich. Insbesondere ist hier die Frage, was Temp_Hum denn macht. Damit das überhaupt funktionieren kann, müsste dort ein setappdata(0,'temperature',...) stehen. Ich halte es aber für eine alles andere als gute Idee, die Hauptsession zur Datenspeicherung zu "missbrauchen".
Viel besser: aus dem Skript eine Funktion machen und die app übergeben, damit sie direkt modifiziert werden kann.

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
 
Neelassmal
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2021, 10:39     Titel:
  Antworten mit Zitat      
Danke für die Rückmeldung!
Ich lese in dem Skript die Temperatur mit einer Arduino aus und möchte sie auf der Gauge Anzeige darstellen. Ja ich verwende am Ende des Skriptes den befehl
setappdata(0,'temperature',...)
Das Format der Daten kommt korrekt in der App an auch wenn es keine sehr schöne Lösung ist.
Nur die Anzeige funktioniert in der Schleife nicht (Anzeige ändert sich nie)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich habe es gerade mit einem kleinen Beispiel versucht, und die Anzeige ändert sich. Das Problem muss also woanders liegen. Ich kann dich nur nochmal bitten, ein reproduzierbares Beispiel zur Verfügung zu stellen - ansonsten kann ich dir leider nicht helfen.

Grüße,
Harald

app2.zip
 Beschreibung:

Download
 Dateiname:  app2.zip
 Dateigröße:  9.74 KB
 Heruntergeladen:  266 mal

_________________

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
 
Neelassmal
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2021, 12:20     Titel:
  Antworten mit Zitat      
Tatsächlich funktioniert die Anzeige mit Ihren Skript. Selbst wenn ich in meinem Skript den setappdata Wert mit rand*50 ersätze funktioniert die Anzeige wieder nicht.

Hier ein Programmauszug aus meinem Skript Temp_Hum. Oder was wird für ein reproduzierbares Beispiel benötigt?
Code:

clear

port = 'COM3';
board = 'UNO';
a = arduino (port, board);
DHT22 = addon(a, 'Adafruit/DHT22', 'D2');

temperature = readTemperature(DHT22);
fprintf('Teste auf NaN: %.2f °C\n', temperature);

NaN = isnan(temperature);        % Number or NaN

if NaN == 0                                                               % if value is a Number
    setappdata(0,'Sens_T_error',0)
   
       
    temperature = readTemperature(DHT22);
    setappdata(0,'temperature',temperature)
     fprintf('Temperature Normal Running: %.2f °C\n', temperature);

       
   
else                                                % if value is NaN
    setappdata(0,'Sens_T_error',1)
end
 


Ich bin bisher nicht davon ausgegangen, dass das Problem in meinen Skript liegt, da ich in der Schleife nicht einmal mir den Wert 5 auf der Gauge Anzeige ausgeben konnte und ich mir aus der GUI den app.temperature Wert printen korrekt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Oder was wird für ein reproduzierbares Beispiel benötigt?

Man muss das Problem nachstellen können. Das kann ich mangels Arduino und Funktion readTemperature nicht.

Zitat:
Selbst wenn ich in meinem Skript den setappdata Wert mit rand*50 ersätze funktioniert die Anzeige wieder nicht.

Wo genau machst du das? Kannst du die Arduino-Befehle dann auskommentieren, ohne dass es zu Fehlermeldungen kommt? Dann wäre es nämlich reproduzierbar.

Hier fallen mir noch weitere potenzielle Probleme auf:
1. clear am Anfang: damit löscht du alle Variablen, also auch die app-Variable und alle damit in Zusammenhang stehenden Informationen. Wo keine App ist, ist auch kein Callback. Wenn ich mein Skript auf
Code:
clear
setappdata(0, 'temperature', rand*100)

erweitere, aktualisiert sich in meinem Beispiel auch nichts mehr. Das ist aber auch kein Wunder.

2. NaN = isnan(temperature); : NaN ist eine Funktion innerhalb von MATLAB. Dadurch, dass du die Variable NaN nennst, überlagerst du die Funktion. Um das ganze noch zu toppen, testest du in der selben Zeile auf NaN!

Zusammen mit setappdata(0, ...) und dem Aufrufen eines Skripts aus einer Funktion heraus sind das in einem Code überschaubarer Länge 4 fragwürdige Dinge, die gutgehen können, aber im Falle eines Problems eine viele Stunden lange Fehlersuche nach sich ziehen können. Oder noch schlimmer, zu falschen Ergebnissen führen können. Ich rate dringend dazu, sich einen guten Programmierstil anzueignen, um so etwas zu vermeiden.

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
 
Neelassmal
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2021, 13:18     Titel:
  Antworten mit Zitat      
Ich habe jetzt ein bisschen herum gespielt und ich denke, dass es mit dem clear im Skript zusammen hängt. Wenn ich clear auskommentiere, dann wird mir einmal der Richtige Wert auf der Gauge Anzeige angezeigt. Allerdings bekomme ich so beim 2. Durchgang dann die Fehlermeldung
MATLAB connection to Uno at COM3 exists in your workspace.
To create a new connection, clear the existing object.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neelassmal
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.01.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2021, 13:22     Titel:
  Antworten mit Zitat      
Danke für deine Antwort und die Empfehlungen hat mir sehr geholfen.
Werde sie umsetzen.
Ja das problem ist tasächlich das clear
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 - 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.