Verfasst am: 01.02.2021, 17:00
Titel: Gauge in App zyklisch updaten
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?
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 ;)
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)
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.
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 ;)
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?
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.
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
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 ;)
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.
Danke für deine Antwort und die Empfehlungen hat mir sehr geholfen.
Werde sie umsetzen.
Ja das problem ist tasächlich das clear
Einstellungen und Berechtigungen
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
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.