An der Stelle Ergebnis1 sind noch alle handles vorhanden, aber an der Stelle Ergebnis2 nicht.
Warum werden die Daten nicht übergeben bzw. warum gibt es das Feld nicht mal? Es wird doch erstellt somit müsste es existieren und ich sollte es abfragen können.
Ich muss dazu sagen, dass ich diese Funktion in eine Callback-Funktion geschrieben habe, diese aber nur mit einer anderen Funktion aufrufe und nicht durch einen Button. Nur weiß ich ansonsten nicht, wie ich die Werte in die handels schreiben soll.
Ich finde den Fehler einfach nicht. Könnt ihr mir bitte helfen?
Ich habe bisher nur raus gefunden, dass wenn ich das Gesamtskript mehrfach laufen lasse, es nach dem zweiten Mal funktioniert.
Auch funktioniert es, wenn ich die Callback Funktion über einen Knopf auslösen.
Habt ihr vielleicht noch eine Idee?
Ich würde deinen Ansatz gerne verwenden, allerdings muss ich mehrere Datensätze in Arrays schreiben. Daher habe ich die Handles verwendet, weil ich damit mehrere globale Variable mit Inhalt erzeugen kann ohen jedesmal eine neue Funktion aufzurufen.
Oder funktioniert das auch mit Funktionen?
Wie müsste dann deren Struktur aussehen?
Ich habe ein Hauptprogramm, welches bestimmte Berechnungen anhand von einigen Excellisten anstellst.
Ich muss 0 - 4 Listen einlesen, je nach Bedingungen die ich im gui gesetzt habe. Die Excellisten wollte ich über eine Function einlesen und Arrays zuweisen, damit sie nicht im Hauptprogramm steht und ich so etwas mehr Übersicht erhalte.
Anschließend wertet mir das Gui meine Berechnung aus und ich verändere nun in der Oberfläche einige Parameter, wie z.B. die Amplitude einer Schwingung. Darauf hin, soll er eine neue Berechnung anstellen, aber die Daten nicht neu laden, da diese sich ja nicht verändert haben und ich so Rechenzeit spare.
Außerdem muss er die Berechnung immer mehrfach durchlaufen lassen, weil ich statistische Werte erheben muss.
Ich habe zuerst einen weiteren Button gehabt über den ich die Daten eingeladen habe. Ich habe mir dann aber überlegt, dass es benutzerfreundlicher wäre, diesen Schritt zu automatisieren. Das habe ich dann auch getan und einfach den Button in der Oberfläche gelöscht. Anschließend habe ich in der Hauptfunktion einen Aufruf der Funktion, welche vorher über den Button gestartet wurde, eingebaut. In der Hauptfunktion ist vorher eine Abfrage ob die Daten schon eingelesen wurden oder nicht und anhand dessen wird entschieden wie vorgegangen wird.
Allerdings tut das ja nicht so ganz...
So, hoffe ich habe halbwegs verständlich erklärt was mein Problem ist -.-
ich kenne mich mit dem GUIDE nicht aus, denn ich schreibe meine GUIs von Hand. Dort ist es so, dass du Variablen die du innerhalb einer Funktion (z.B. in einer Callback-fkt.) erstellt hast, auch dort bleiben. Wenn ich das richtig sehe, ist dass dein Problem. Mit den Befehlen setappdata und getappdata, kannst du das Problem lösen.
Mit setappdata kannst du deine in der Fkt erzeugte Variable in dein Figure abspeichern. Folgenden Befehl setzt du ans Ende deiner Funktion.
Es bietet sich an, alle Variablennamen gleich zu lassen, heißt wenn du es in den Fig lädst und wieder in eine Funktion reinlädst. Da wirst du besser mit klar kommen.
Ich muss 0 - 4 Listen einlesen, je nach Bedingungen die ich im gui gesetzt habe.
In diesem GUI kannst Du wählen welche/ wie viele .xls- files geladen werden?
Haben diese files immer den gleichen Namen und Inhalt, oder greifst Du auf eine Menge verschiedener files zu, die jeweils einer anderen "Behandlung" bedürfen?
Prinzipiell wäre es gut alle benötigten Daten mit GUI- Start zu laden und zu verspeichern (Opening_Fcn). Du hast somit immer Zugriff darauf.
Es ist nun Geschmackssache ob Du Deine Daten in "handles" speicherst, oder mit "appdata" arbeitest. Wenn Du jedoch mehrere Fenster verwendest, würde ich auch umbedingt "appdata" empfehlen.
bzgl. der Listen:
Ich wähle im Gui die entsprechenden Dateien aus, die er danach einlesen soll. Je nach Versuch kann es sein, dass ich eine oder mehrere Listen einlesen muss. Diese haben fast immer einen anderen Namen und ein anderes Verzeichnis.
Daher kann ich sie nicht mit der Opening Funktion laden, denn ich muss sie danach ja noch entsprechend meinen Anforderungen auswählen.
Ich habe nur ein Fenster, aber ich kann gerne Appdata verwenden. allerdings irritiert es mich einfach, dass das Gui beim zweiten Lauf funktioniert...und keinen Fehler mehr hat.
Das bedeutet, dass Du den Datenimport schon gelöst hast?
- Ja, er importiert die Daten. Innerhalb dieser Funktion sind die Daten auch in den handles vorhanden.
Nur in der Funktion die diese Importfunktion aufruft komischerweise nicht.
Dort existieren die handles dann angeblich nicht mal.
Der Code welcher bei mir reproduzierbare Ergebnisse liefert lautet:
Code:
function Daten_Import_Callback(hObject, eventdata, handles)
handles.Daten= xlsread(['C:\Dokumente und Einstellungen\Werte.csv'],'a2:a50000');
Unter Ergebnis1 wird das handle richtig ausgegeben und unter Ergebnis2 existiert es nicht.
Der Rest des Codes ist meines Erachtens nicht so wichtig, weil er funktioniert und ich den Fehler auf diese paar Zeilen eingrenzen konnte.
Mein Problem ist wie gesagt nur die handle-Übergabe die scheinbar nicht funktioniert. Sobald ich aber einen zweiten Durchlauf starte, funktioniert mein Programm, warum auch immer...da ich die handles sonst nirgends erstelle...
Hallo Martin,
das funktioniert so, aber wie bekomme ich es hin, dass ich in der Funktion mehr als einen Array übergebe? Und diesen dann hinterher verwenden kann?
Denn nur einen Array pro Funktion ist in meinem Fall unsinnig, ich würde dann eher den Import direkt durchführen.
da ich diesen Code auch wieder in eine zweite Funktion schreibe habe ich wieder den gleichen Fehler -.-
Er übergibt die handels einfach nicht!
Scheinbar ist es nicht möglich ein Callbackfunktion über eine andere Funktion aufzurufen. Sie kann nur direkt über einen Button aufgerufen werden und übergibt dann die handles.
Bei einem zweiten Durchlauf allerdings sind die handles vorhanden und der Fehler existiert nicht mehr!
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.