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

Mit Zahlen aus Textbox rechnen und wieder in andere TextBox

 

Huuut

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 10:48     Titel: Mit Zahlen aus Textbox rechnen und wieder in andere TextBox
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem.
Ich lese aus Text- und PopUpBoxen Zahlen aus und berechne damit einen Wert. Jetzt zeigt er mir aber eine Fehlermeldung. Wieso?

Hier mein Code:
Code:
function weiter_Callback(hObject, eventdata, handles)
% hObject    handle to weiter (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
Spulenkoerperbreite = get(handles.Hoehe_Wickelraum,'String');
MittlererDraht = get(handles.Drahtdurchmesser_PopUp, 'String');
Skb = str2double(Spulenkoerperbreite);
Drahtdurchmesser = str2double(MittlererDraht);

if (get(handles.symmetrisch,'Value')==1)
    Wz = floor(Skb / Drahtdurchmesser);
    set(handles.Windungszahl1,'String',Wz);
else
        Wz = floor((Skb - (Drahtdurchmesser / 2) / Drahtdurchmesser));
        set(handles.Windungszahl1 ,'String', Wz);
end
set(handles.Windungszahl1 ,'Visible','on');
guidata(hObject, handles);
 


Danke schon einmal im Voraus!

Gruß,
Huuut


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2011, 11:58     Titel:
  Antworten mit Zitat      
Hallo,

bei Fehlermeldungen bitte immer angeben, welche Fehlermeldung und in welcher Zeile sie auftritt. Auf den ersten Blick sieht es so aus, dass du die numerischen Werte nicht in Strings umgewandelt hast:

Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Huuut

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 12:49     Titel:
  Antworten mit Zitat      
Hallo Harald.
Danke für deine schnelle Antwort.
Ich habe das ganze jetzt so gelöst.
Code:
function weiter_Callback(hObject, eventdata, handles)
% hObject    handle to weiter (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
a = get(handles.Drahtdurchmesser_PopUp, 'Value')
Spulenkoerperbreite = get(handles.Hoehe_Wickelraum,'String')
MittlererDraht = get(handles.Drahtdurchmesser_PopUp, 'String',a)
Skb = str2double(Spulenkoerperbreite);
Drahtdurchmesser = str2double(MittlererDraht);

if (get(handles.symmetrisch,'Value')==1)
    Wz = floor(Skb / Drahtdurchmesser);
    Wz = num2str(Wz);
    set(handles.Windungszahl1,'String',Wz);
else
    Wz = floor((Skb - (Drahtdurchmesser / 2)) / Drahtdurchmesser);
    Wz = num2str(Wz)
    set(handles.Windungszahl1 ,'String', Wz);
end
set(handles.Windungszahl1 ,'Visible','on');
guidata(hObject, handles);


Ich denke der Fehler liegt darin, dass ich nicht richtig auf die Werte im PopUp-Menü zugreife, bzw. sie vll sogar nicht richtig reinschreibe.

Hier mal der Code zu füllen des PopUp-Menüs:
Code:

function eingabemaske_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to eingabemaske (see VARARGIN)

% Choose default command line output for eingabemaske
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes eingabemaske wait for user response (see UIRESUME)
% uiwait(handles.figure1);

draht = struct ('nenn', '', 'minZunahme', '', 'maxDurchm', '', 'mittlererDurchm', '');

    range1='A2:A100';
    range2='B2:B100';
    range3='C2:C100';
    range4='D2:D100';
    d1=xlsread('Drahtdurchmesser.xls', 'Tabelle1', range1);
    d2=xlsread('Drahtdurchmesser.xls', 'Tabelle1', range2);
    d3=xlsread('Drahtdurchmesser.xls', 'Tabelle1', range3);
    d4=xlsread('Drahtdurchmesser.xls', 'Tabelle1', range4);
    D1=num2str(d1);
    D2=num2str(d2);
    D3=num2str(d3);
    D4=num2str(d4);
       
    for(n=1:99)
        draht(n).nenn = {D1};
        draht(n).minZunahme = {D2};
        draht(n).maxDurchm = {D3};
        draht(n).mittlererDurchm = {D4};
        set(handles.Drahtdurchmesser_PopUp,'String',draht(n).nenn);
    end
 

Ich möchte nur die Daten, die in draht(n).nenn stehen im PopUp-Menü haben, allerdings möchte ich mit den anderen der gleichen Zeile (des gleichen "n") weitere berechnungen durchführen.

Außerdem bekomme ich im Moment folgende Fehlermeldung:
Code:

??? Error using ==> get
Too many input arguments.

Error in ==> eingabemaske>weiter_Callback at 156
MittlererDraht = get(handles.Drahtdurchmesser_PopUp, 'String',{a})

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> eingabemaske at 42
    gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback
 


Wie realisiere ich das am besten?
Danke schon mal im Voraus!

Gruß,
Huuut
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2011, 12:54     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung sollte selbsterklärend sein. Das ",a" ist zuviel.

Deine andere Frage verstehe ich leider nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Huuut

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 13:09     Titel:
  Antworten mit Zitat      
Hallo Harald,

ohne "a" hab ich es auch schon versucht. Mein Problem ist, wenn ich mir MittlererDraht ausgeben lasse, dass alle Werte ausgegeben werden, nicht nur der, der im PopUp-Menü ausgewählt wurde.
Und ich benötige ja nur einen Wert um mit diesem weiterzurechen.

Zu meiner 2. Frage:
Angenommen ich wähle im PopUp-Menü den 1. von 99 Werten aus. Um weitere Berechnungen durchzuführen benötige ich vom struct draht.nenn und draht.mittlererDurchm den 1. Wert. Der im PopUp-Menü ausgewählte Wert ist in diesem Fall schon draht.nenn.
Wie könnte ich das machen.

Tut mir leid, dass ich solche vermutlich banalen Fragen stelle, aber ich habe noch nicht viel mit Matlab gearbeitet.

MfG
Huuut
 
Huuut

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 13:15     Titel:
  Antworten mit Zitat      
Ich habe mir mal die whos von draht angeschaut.

Code:
>> whos draht
  Name       Size             Bytes  Class     Attributes

  draht      1x99            455260  struct

Sollte das nicht eigentlich eine 4x99-Matrix sein?

Gruß,
Huuut
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2011, 14:57     Titel:
  Antworten mit Zitat      
Hallo,

du kannst entweder nachträglich indizieren oder die Hilfestellung benutzen, die im Callback eines Popupmenu angeboten wird:

Zitat:
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu1


Was die andere Frage angeht, bin ich immer noch nicht schlauer. Vielleicht kannst du das an einem einfacheren Beispiel erklären.

Zur letzten Frage: Die Ausgabe stimmt so. Das struct ist 1x99, und jede Komponente enthält 4 Felder. Das kannst du dir auch im Workspace Browser schön anschauen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Huuut

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2011, 07:19     Titel:
  Antworten mit Zitat      
Hallo Harald,

das ganze in einem kleinen Beispiel:
Diese Werte sollen die Felder enthalten:
draht(1).nenn = 1
draht(2).nenn = 5
draht(1).minZunahme = 2
draht(2).minZunahme = 6
draht(1).maxDurchm = 3
draht(2).maxDurchm = 7

Ich will mit meinen PopUp draht(1).nenn auswählen, was auch inzwischen super funktioniert.
Allerdings möchte ich dann auch auf draht(1).minZunahme und auf draht(1).maxDurchm zugreifen - also immer das erste Element des structs draht.

Ich habe das jetzt so lösen wollen:
Code:
function weiter_Callback(hObject, eventdata, handles)
% hObject    handle to weiter (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
Spulenkoerperbreite = get(handles.Hoehe_Wickelraum,'String')
BlankerDraht = get(handles.Drahtdurchmesser_PopUp,'String')
idx = get(handles.Drahtdurchmesser_PopUp,'Value')
selected_draht = BlankerDraht(idx)
MaxDraht = get(handles.draht(idx).maxDurchm)
ZunahmeDraht = get(handles.draht(idx).MinZunahme)

Skb = str2double(Spulenkoerperbreite);
Drahtdurchmesser_blank = str2double(selected_draht);
Maximaler_Draht = str2double(MaxDraht);
Mindestzunahme_Draht = str2double(ZunahmeDraht);


Das hat aber leider nicht so funktioniert.
Ich bekomme die Fehlermeldung:
Code:
??? Reference to non-existent field 'draht'.

Error in ==> eingabemaske>weiter_Callback at 161
MaxDraht = get(handles.draht(idx).maxDurchm)

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> eingabemaske at 42
    gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback


idx ist bei mir der Index des Wertes, der im PopUp-Menü ausgewählt wurde.
Bis selected_draht wird alles super ausgegeben. Danach nicht mehr.
Ich hoffe, es ist jetzt alles verständlich.

Danke schon mal!

Gruß,
Huuut
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 19.10.2011, 07:24     Titel:
  Antworten mit Zitat      
Die Fehlermeldung ist doch relativ einfach zu interpretieren, Übersetzung: Das Feld "draht" existiert nicht (in der handles-struct). Benutze hierzu bitte den Debugger und schaue, wieso das Feld nicht vorhanden ist. Siehe hierzu auch "doc guidata".
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.10.2011, 07:37     Titel:
  Antworten mit Zitat      
Hallo,

euphos Anregung sollte hier erstmal weiterhelfen.

Ich möchte jedoch darauf hinweisen, dass es nicht unbedingt empfohlen ist, die handles-Struktur mit eigenen Daten "zuzumüllen".
Stattdessen sollte man lieber mit SETAPPDATA / GETAPPDATA arbeiten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Huuut

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2011, 07:51     Titel:
  Antworten mit Zitat      
Wie schon gesagt, bin ich absoluter Anfänger.
Die Fehlermeldung verstehe ich auch, aber wie mache ich das, dass das struct draht existiert?

Was habe ich hier falsch gemacht, bzw, was fehlt?
Code:
function eingabemaske_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to eingabemaske (see VARARGIN)



% UIWAIT makes eingabemaske wait for user response (see UIRESUME)
% uiwait(handles.figure1);

draht = struct ('nenn', {}, 'minZunahme', {}, 'maxDurchm', {}, 'mittlererDurchm', {});
handles = guihandles;


Tut mir leid, für die doofen Fragen...

Gruß,
Huuut
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 19.10.2011, 07:57     Titel:
  Antworten mit Zitat      
Anstatt

Code:


schreibst du

Code:
guidata(hObject, handes)


Siehe auch in der Hilfe (wie ich vorhin angemerkt hatte)...

Dann werden die Fehler aber immer noch nicht erledigt sein, weil du nur leere Cell-Einträge hast. Vielleicht merkst aber auch selbst, dass es ohne ein grundlegendes MATLAB-Verständnis nicht geht. Ich würde daher auch dir nahe legen, sich in die Einsteigertutorials, zumindest in die GUI-Tutorials einzuarbeiten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Huuut

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2011, 08:06     Titel:
  Antworten mit Zitat      
Hallo eupho,

mit
Code:
guidata(hObject, handles)

habe ich es auch schon versucht. Funktioniert auch nicht.
Und meine Cells fülle ich gleich danach. Diese sind sogar gefüllt, denn ich kann über
Code:
a = char(handles.draht(n).minZunahme) darauf zugreifen, jedoch kann ich kein bestimmtes Element auswählen (zB.: n = 71)
.

Vermutlich sollte ich wirklich erst einmal Tutorials durcharbeiten.

Trotzdem vielen, vielen Dank für eure rasche Hilfe!

Gruß,
Huuut
 
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.