|
|
Fehlermedlung in der gui_mainfcn |
|
bmtil |
Forum-Anfänger
|
|
Beiträge: 49
|
|
|
|
Anmeldedatum: 01.05.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.10.2016, 11:06
Titel: Fehlermedlung in der gui_mainfcn
|
|
|
|
|
Guten Tag,
ich habe mich die letzten Tage mit GUIDE beschaeftigt und ein paar Testguis zum Üben erstellt. Nebenbei habe ich auch an meinem eigenen Simulink Projekt gearbeitet und die Simulink GUI für meine Zwecke erweitert, siehe save_model.fig .
Ich habe die einzelnen GUI Elemente (listbox1, listbox2, etc.) über den GUIDE hinzugefügt und mir von Matlab die save_model.m erstellen lassen. Anschließend habe ich die entsprechenden Callbacks eingefügt. Leider beim Starten meiner GUI in Simulink, gibt mir Matlab folgende Fehlermedlung:
Zitat: |
Conversion to cell from char is not possible.
Error in save_model>listbox2_CreateFcn (line 247)
list(a) = strrep(list{a}, '-',' ');
Error in gui_mainfcn (line 96)
feval(varargin{:});
Error in save_model (line 44)
gui_mainfcn(gui_State, varargin{:});
Error in
@(hObject,eventdata)save_model('listbox2_CreateFcn',hObject,eventdata,guidata(hObject))
Error using struct2handle
Error while evaluating uicontrol CreateFcn |
Dabei verstehe ich nicht, wie es in der gui_mainfcn und in save_model (Zeile 44) zu einem Fehler kommen kann, da die Dateie gui_mainfcn Matlab intern ist und der Fehler in save_model bereits im von Matlab selber erzeugtem Code vorkommt. Den Fehler in der Zeile 247, kann ich ebenso nicht finden. Offensichtlich benutze ich struct2handle falsch, jedoch weiss ich nicht, was ich anders machen soll.
Die GUI ansich wid gestartet, ist alledings verbuggt. Wenn ich zum Beispiel über die Checkbox "enable" die Option "constant propagation" auschalte, dann auf die Option "reduce variables" geh um diese auszuschalten, dann wird bei der Option "constant propagation" der Hacken der Checkbox "enable" gesetzt. Ich bin ziemlich verwirrt durch diesen Umstand.
Die linke Seite der GUI scheint perfekt zu funktionieren, nur die rechte eben nicht. Die Idee der linken Seite, ist aus der Liste sich die Optionen einzeln auswaehlen zu können. Vllt. wäre es eleganter statt einer Liste für die Optionen Radiobuttons zu verwenden?
Viele Grüße und Dank, bmtil.
EDIT: aktualisierte Version der save_model.m hochgeladen.
Beschreibung: |
|
Download |
Dateiname: |
save_model.m |
Dateigröße: |
11.17 KB |
Heruntergeladen: |
512 mal |
Beschreibung: |
|
Download |
Dateiname: |
save_model.fig |
Dateigröße: |
4.78 KB |
Heruntergeladen: |
541 mal |
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.10.2016, 12:06
Titel:
|
|
Hallo,
die genannten Funktionen rufen die von dir selbst veränderte listbox2_CreateFcn auf.
Woran der Fehler liegt, hängt an OPTIMISATIONS.keys.
Vielleicht mal einen Haltepunkt in die Zeile setzen und das dort genauer untersuchen?
Grüße,
Harald
|
|
|
bmtil |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 49
|
|
|
|
Anmeldedatum: 01.05.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.10.2016, 13:40
Titel:
|
|
|
|
|
Hallo, entschuldigung, dass ich so spät antworte, habe lange gebraucht um das zu unteruschen und bin leider zu keinem Ergebniss gekommen.
Also, habe ich angefangen die GUI vom neuen aufzubauen, diesmal auch übersichtiger, siehe die angehangene .fig Datei.
Die linke Seite der GUI funktioniert einwandfrei, also die Auswahl der Algorithmen und der Button "save model". Das einzige was bis jetzt nicht klappt ist die Funktion des Buttons "save options". In der matlab Commando Zeile werden mir zwar die richtigen gesetzen Optionen angezeigt (wenn man auf den Button "save Options" drückt), jedoch werden die damit verbundenen Optimierungen (siehe angehangener .m file ab Zeile 288) nicht ausgeführt. Vermutlich habe ich die Zuweisung meiner Optimierungsfunktionen nicht korrekt angegeben. Jedoch, da Matlab mir keinen Fehler rausgibt, steh ich buchstäblich im Dunkeln und weiss nicht, was ich verändern sollte.
Viele Grüße.
EDIT: Ich habe verstanden, wo das Problem mit der Übergabe der externen Funktionen liegt. Unter der Callback Funktion meines "save options" Buttons (tag = pushbutton4) muss ich die Handles für die jeweilige externe Funktion anders an die GUI übergeben. Und die Handles müssen aufjedenfall auch in der externen Funktion vorhanden sein.
In meinem jetzigem Beispiel sieht es so aus, zunächst der relevante Code Abschnitt meiner GUI:
Nun Auschnitt meiner externen Funktion constant_propagation:
Für einen erfolgreichen Funktionsaufruf müsste die erste Zeile meiner externen Funktion modifiziert werden zu:
Und anschließend müsste in der GUI unter der Callback für push.button4 irgendwie sowas stehen:
Ich bin jetzt deutlich verwirrter als vorher, da ich mir nicht zu 100% sicher bin, ob die Sache mit Handles tatsächlich die Fehlerquelle ist. Ich habe die entsprechend die Funktionen modifiziert, allerdings funktioniert durch die Änderung die komplette GUI nicht mehr. Vermutlich habe ich die Änderungen nicht konsequent durchgezogen, ich wäre schon glücklich wenn ich in meiner GUI save_model.m einfach nur erfolgreich die constant_propagation.m aufrufen könnte .
Die Idee mit der Handles Übergabe habe ich von hier:
https://de.mathworks.com/matlabcent.....rnal-functions-with-a-gui und habe versucht die Lösung anzuwenden, jedoch bis jetzt erfolglos.
[EDITED, Jan, Bitte kein Top-Quoting - Danke]
Beschreibung: |
|
Download |
Dateiname: |
save_model.m |
Dateigröße: |
11.77 KB |
Heruntergeladen: |
480 mal |
Beschreibung: |
|
Download |
Dateiname: |
save_model.fig |
Dateigröße: |
5.61 KB |
Heruntergeladen: |
453 mal |
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 24.11.2016, 22:20
Titel:
|
|
|
|
|
Hallo bmtil,
Zitat: |
Jedoch, da Matlab mir keinen Fehler rausgibt, steh ich buchstäblich im Dunkeln und weiss nicht, was ich verändern sollte. |
Es wundert mich sehr, dass Matlab da keine Fehlermeldungen heraus gibt. Es müsste auch einige Warnungen im Editor geben.
Die globalen Variablen werden hier ja gar nicht benötigt. Wozu deklarierst Du sie dann?
Die Variable "value_const" wird hier zwar erzegut, aber nirgends verwendet. In anderen Funktionen ist sie nicht sichtbar.
"handles = guidata;" sollte eine Fehlermeldung erzeugen, da
guidata
Inputs benötigt.
Zitat: |
Für einen erfolgreichen Funktionsaufruf müsste die erste Zeile meiner externen Funktion modifiziert werden zu:
|
Nein, das wäre nicht erfolgreich, sondern ein Syntax-Fehler. "handles.graph" kann man nicht als Input-Variable verwenden. In der Definition einer Funktion dürfen nur Variablen stehen. Ein Struct mit Feldnamen ergibt hier keinen Sinn.
Zitat: |
Ich bin jetzt deutlich verwirrter als vorher, da ich mir nicht zu 100% sicher bin, ob die Sache mit Handles tatsächlich die Fehlerquelle ist. |
Welche Sache mit welchen Handles ist die Quelle für welchen Fehler?
Ich kann Dir nicht mehr folgen.
Gruß, Jan
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|