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

kontinuierliche Messdatenverarbeitung mittels GUI

 

Cyberbrat
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 18.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2013, 19:54     Titel: kontinuierliche Messdatenverarbeitung mittels GUI
  Antworten mit Zitat      
Guten Tag!

Bin mir nicht mal sicher ob das hier der richtige Thread ist aber ich versuchs mal:

Ich habe ein Programm geschrieben, welches einfache Werte eines externen Sensors (im meinem Falle messe ich die Tiefe einer Drucksonde in Wasser) ausliest und in einer GUI Grafisch und als Text kontinuierlich darstellt. Das ganze funktioniert eigentlich auch ganz super, ABER

Ich bin ein kompletter und bekennender Programmier-dilletant und habe das Gefühl ich könnte einiges an dem Programm optimieren. Bei den "Cody"- Challenges von Mathcentral zeigte sich zumindest dass ich für eine Problemlösung 100 mal so viel code generiere wie notwendig und das Ergebnis ist meistens so sexy wie unsere Kanzlerin, im Vergleich zu den Lösungen der Profis ^^

Zudem hat mir das schreiben soviel spaß gemacht dass ich gerne mehr über das Programmieren mit Matlab lernen möchte und ich glaube das ist hier eine gute gelegenheit.

Ich beschreibe erst mal mein Programm und stelle dann meine 1000 Fragen:

Also das ganze Ding steckt eigentlich im .m-file der GUI die ich mit GUIDE entworfen habe.

Damit das Ding kontinuierlich läuft, (bis ich das Fenster schliesse) habe ich eine "endlosschleife" in die "Output_FCN gebaut:
Code:


while exit_flag==0

Get Values and display them in the gui (Details siehe unten)

end

 



Über die Buttons, Edit_txt's etc. der GUI und deren Callback functions kann ich einige Änderungen dynamisch vornehmen, z.B. die Daten zeitweilig in ein logfile kontinuierlich abspeichern, die Achsendimensionen der grafischen Darstellung verändern (Im Grafen wird die Tiefe des Sensors über die Zeit dargestellt, hier kann ich die angezeigte Zeit (also sollen nur die letzten 5 min oder 30 min angezeigt werden, etc) und Tiefe ändern). Es gibt auch dynamisch veränderbare "Limits" also Werte bei deren Über- oder Unterschreitung ein akustischer Alarm ertönt.

Werte von den edit_fields (z.b. wenn ein "Limit" geändert wird) werden nicht in der "endlosschleife" per get(handles.Limit_edit_field, 'String) ausgelesen sondern, wenn sie geändert werden, von der entsprechenden Callback_Fcn zuerst überprüft (ist es eine Zahl und befindet sie sich innerhalb zulässiger Grenzen?) und dann in eine global Variable geschrieben, die in der "endlosschleife" kontinuierlich abgefragt wird. Der Grund dafür liegt darin, dass der Zugriff auf eine globale Variable wesentlich schneller erfolgt als das auslesen der edit_field 'String' -property.

In der "endlosschleife" werden also kontinuierlich alle globalen variablen abgefragt, die für die Darstellung der werte notwendig sind. Es gibt aber auch conditionals, also wenn der "Save Data"-Button gedrückt wird, wird eine globale Variable rec_tag von der callback function von 0 auf 1 gestezt, der wert wird dann in der Endlosschleife abgefragt und falls er 1 ist, werden die Daten zusätzlich zeilenweise in ein .txt abgespeichert.

Wie gesagt eigentlich funktioniert alles soweit wie es soll, aber
1.) kommt mir die lösung mit der Endlosschleife ziemlich dilletantisch vor, wie machen das denn die Profis bei Programmen die kontinuierlich Messdaten erfassen?
2.) kam bei meiner letzten Überarbeitung ein zusätzlicher sensor hinzu. Dieser liefert mir aber Werte in anderen (größeren) Zeitabständen wie der erste. Das heisst wenn ich die Abfrage des zweiten Sensors auch in die Endlosschleife packe, bremst er jeden Schleifendurchgang ab, und zwar gewaltig (beim ersten Sensor bekomme ich jede 0.01 sekunde einen Wert beim zweiten nur alle 0.5-0.7 einen) Momentan hab ich das einfach über das setzen eines Timeouts gelöst (wenn Du noch nicht bereit bist mir einen Wert zu senden, probier ichs halt später nochmal), aber auch das kommt mir sehr n00bish vor.

Hat jemand eine Ahnung wie man generell an so ein Programm herangehen würde oder hat jemand zum Beispiel eine Buchempfehlung? Oder ist Matlab am ende gar nicht das geeignete Programm? Oder hat jemand sonstige Anregungen?

Bin für jeden Tipp dankbar, wie gesagt die absoluten "Basics" hab ich aber mir fehlt die "Anwendungserfahrung".

Liebe grüße, Cyber
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.08.2013, 13:48     Titel:
  Antworten mit Zitat      
Hallo


Man könnte mehere TIMER für die Abfrage der Sensor Daten verwenden. Diese Timer schreiben dann die Daten auf ein Stack, denn man mit anderen Timer(ersatz für deine Endlosschleife) prüft, ob etwas drauf ist, und schreibt die Daten entweder in die Textdatei oder die GUI

siehe dazu mehr in der Doku
Code:
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.