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

Ergebnis aus Simulink über GUI an Excel-Datei übergeben

 

saveprob

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 07:46     Titel: Ergebnis aus Simulink über GUI an Excel-Datei übergeben
  Antworten mit Zitat      
Hallo,

Simulink gibt vier Kurven über die Variable simout an das Workspace (Time, data1, data2, data3, data4), die ich anschließend in meiner GUI folgendermaßen plotte:

Code:
function plotbutton_Callback(hObject, eventdata, handles)

simout = str2num(get(hObject,'String'));
   simout = evalin('base','simout');
   axes(handles.axes1_temperature);
   plot(simout);
   
handles.simout = simout;
guidata(hObject, handles);


Ich möchte dieses Ergebnis per xlswrite in eine entsprechende Excel-Datei abspeichern und habe bisher diese Ansatz probiert:

Code:
function savebutton7_Callback(hObject, eventdata, handles)

[filename, pathname] = uiputfile('*.xls', 'Choose a file name');
outname = fullfile(pathname, filename);
xlswrite(outname, handles.simout);


Es wird keine .xls-Datei erzeugt, sondern bloß folgende Fehlermeldung im Commandfenster ausgegeben:

Error using xlswrite (line 166)
Input data must be a numeric, cell, or logical array.

Das ist meine erste GUI und ich kann noch nicht die Auswirkungen jedes Befehls vollständig durchblicken, ein paar erklärende Worte würden mich freuen.


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.07.2013, 10:51     Titel: Re: Ergebnis aus Simulink über GUI an Excel-Datei übergebe
  Antworten mit Zitat      
Hallo saveprob,

Das Problem betrifft nicht das GUI, sondern den Befehl XLSWRITE. Wie die Fehlermedlung besagt, scheint der Input kein Cell-Array zu sein:
Code:
xlswrite(outname, handles.simout);

Was enthält "handles.simout" genau? Das kannst Du herausfinden, wenn Du einen Breakpoint in diese Zeile setzt, das Programm startest bis es am Breakpoint anhält, und dann dies eingibst:
Code:
class(handles.simout)
size(handles.simout)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
saveprob

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 11:59     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für die schnelle Antwort.

Wenn ich den Break;-Befehl eine Zeile nach dem xlswrite-Befehl mit simout setze, erhalte ich folgende Fehlermeldung:

Error: File: simulation.m Line: 799 Column: 1
A BREAK statement appeared outside of a loop. Use RETURN instead.

Mit return; kommt diese Fehlermeldung nicht, aber wenn ich dann class(handles.simout) und size(handles.simout) im Commandwindow eingebe, schreibt er folgendes:

Undefined variable "handles" or function "handles.simout".

Ist das hilfreich, oder wo soll ich diese Befehle eingeben?


Ich definiere diese variable simout in der function plotbutton (siehe erster Code ganz oben). Dabei zieht er simout aus dem base-workspace, wo eine Variable mit dem Ergebnis der Simulink-Simulation hinterlegt ist. Simout im Workspace enthält bloß vier Spalten: time, data1, data2, data3, data4 und wird scheinbar richtig ins GUI geladen, da das plotten wie gewünscht funktioniert. Auch der Import der Daten einer Excel-Datei ins GUI inklusive Plot funktioniert. Nur beim Export der Daten und der Erstellung einer Excel-Datei (2. Code oben) beschwert er sich, obwohl in der Variablen selbst abgesehen von der ersten Zeile alle Werte numerisch sind.
Liegt es an dieser Titelzeile mit Buchstaben? Wie gebe ich ihm vor ab Zeile 2 zu beginnen?
xlswrite(outname, handles.simout, 2, Inf); ???
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.07.2013, 12:10     Titel:
  Antworten mit Zitat      
Zitat:
Wenn ich den Break;-Befehl eine Zeile nach dem xlswrite-Befehl mit simout setze,

break befehl und breakpoint für den debugger sind 2 unterschiedliche sachen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
saveplot

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 12:30     Titel:
  Antworten mit Zitat      
Auch wenn ich...

breakpoint;

oder

breakpoint;
class(handles.simout);
size(handles.simout);

... in meiner .m-Datei direkt hinter den xlswrite-Befehl setze, ändert sich die Fehlermeldung nicht:

Code:
Error using xlswrite (line 166)
Input data must be a numeric, cell, or logical array.

Error in gui_hvleitung>savebutton7_Callback (line 797)
xlswrite(outname, handles.simout);

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in gui_hvleitung (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in @(hObject,eventdata)gui_hvleitung('savebutton7_Callback',hObject,eventdata,guidata(hObject))

 
Error while evaluating uicontrol Callback



Muss vielleicht vorher die Vorgabe erfolgen, dass es sich in der workspace-variable simout um fünf Spalten handelt oder das in der Titelzeile Buchstaben enthalten sind?
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.07.2013, 12:33     Titel:
  Antworten mit Zitat      
ok dir ist anscheinend die funktion des debuggers unbekannt.

das bild ist aus einem anderen thread von gestern aber den breakpoint setzt man da forne Smile
grüße
p.s. der debugger ist ein sehr hilfreiches tool und am besten machst du dich damit kurz vertraut. er hilft einem in vielen sachen schnell weiter und ist in großen projekten unverzichtbar.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
saveprob

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2013, 13:10     Titel:
  Antworten mit Zitat      
Problem gelöst.

Der "To Workspace"-Block in Simulink hat die Variable standardmäßig als Timeseries ans Workspace übergeben. Das war mir nicht bewusst. Wenn ich im Block auf Array umstelle, funktioniert es wie gewollt. Danke.
Verschoben: 24.07.2013, 14:03 Uhr von denny
Von GUIs nach Simulink
 
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.