Verfasst am: 14.04.2016, 14:55
Titel: GUI "Variable Calling" Problem
Hallo zusammen,
ich habe schon ein Code fertig für ein spezifisches Programm, und wollte jetzt es in einer GUI schreiben.
Ich brauche 4 Matrizen für dieses Programm, und habe den in der GUI herstellt (sind alle editierbar). Zwei Parameter müssen auch gefolgt werden, welche habe ich mit 2 Radiobuttons herstellt. Folgt diesen Funktionen und Callbacks:
Code:
--- Executes on button press in EM_null.
function EM_null_Callback(hObject, eventdata, handles) % hObject handle to EM_null (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of EM_null if(get(hObject,'Value') == get(hObject,'Max'))
EM_Welle = 0;
else disp('Bitte T_VKM (Matlab-Programm) = T_VKM (Realität) + T_EM (Realität) verwenden') end
% --- Executes on button press in Abtriebs_2. function Abtriebs_2_Callback(hObject, eventdata, handles) % hObject handle to Abtriebs_2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of Abtriebs_2 if(get(hObject,'Value') == get(hObject,'Max'))
Abtriebswelle = 2;
else disp('Fehler! Bitte Abtriebswelle als 2 verwenden') end
% --- Executes when entered data in editable cell(s) in RS_Matrix. function RS_Matrix_CellEditCallback(hObject, eventdata, handles) % hObject handle to RS_Matrix (see GCBO) % eventdata structure with the following fields (see UITABLE) % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. Empty if Data was not changed % Error: error string when failed to convert EditData to appropriate value for Data % handles structure with handles and user data (see GUIDATA)
data_RS = get(hObject,'Data');
RS = [data_RS];
% --- Executes when entered data in editable cell(s) in SM_Matrix. function SM_Matrix_CellEditCallback(hObject, eventdata, handles) % hObject handle to SM_Matrix (see GCBO) % eventdata structure with the following fields (see UITABLE) % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. Empty if Data was not changed % Error: error string when failed to convert EditData to appropriate value for Data % handles structure with handles and user data (see GUIDATA)
data_SM = get(hObject,'Data');
SM = [data_SM] ;
% --- Executes when entered data in editable cell(s) in SE_Matrix. function SE_Matrix_CellEditCallback(hObject, eventdata, handles) % hObject handle to SE_Matrix (see GCBO) % eventdata structure with the following fields (see UITABLE) % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. Empty if Data was not changed % Error: error string when failed to convert EditData to appropriate value for Data % handles structure with handles and user data (see GUIDATA)
data_SE = get(hObject,'Data');
SE = [data_SE];
% --- Executes when entered data in editable cell(s) in Geartype_Matrix. function Geartype_Matrix_CellEditCallback(hObject, eventdata, handles) % hObject handle to Geartype_Matrix (see GCBO) % eventdata structure with the following fields (see UITABLE) % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. Empty if Data was not changed % Error: error string when failed to convert EditData to appropriate value for Data % handles structure with handles and user data (see GUIDATA)
data_GT = get(hObject,'Data');
GearType = [data_GT];
% --- Executes on button press in Solve_push. function Solve_push_Callback(hObject, eventdata, handles) % hObject handle to Solve_push (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% --- Outputs from this function are returned to the command line.
Ab hier folgt das originelles Programm/Code, das als Eingabeparameter hat :
RS, SE, SM (Matrizen), GearType (Vektor), EM_Welle (=0, habe als Parameter geschrieben), Abtriebswelle (=2, auch Parameter).
Wenn ich versuche das Programm/GUI zu benutzen, ich fülle die Tabellen aber bekomme diese Antwort:
gui_RS_Berechnung_1
Undefined function or variable "RS".
Error in gui_RS_Berechnung_1>Solve_push_Callback (line 189)
nRS = size(RS, 2); % Anzahl der Radsätze
Error in gui_mainfcn (line 96)
feval(varargin{:});
Error in gui_RS_Berechnung_1 (line 42)
gui_mainfcn(gui_State, varargin{:});
Error in @(hObject,eventdata)gui_RS_Berechnung_1('Solve_push_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating uicontrol Callback
So, ich weiß es nicht ob ich muss eine neue Funktion für jeder Eingabeparameter schreiben, oder eine Callfunction (@beispieleFunktion) benutzen, oder was.
Hab schon im Internet gesucht, aber die Beispiele für GUI sind immer einfach Sachen oder haben kein Sinn für mich.
Danke im Voraus und entschuldigung mich für mein schlechtes Deutsch (Ausländer hier )
Verfasst am: 14.04.2016, 16:23
Titel: Re: GUI "Variable Calling" Problem
Hallo hermano,
Du hast genau den Code, der die Probleme erzeugt, nicht gepostet. Das ist unpraktisch.
Jede Funktion hat in Matlab ihren eigenen Workspace, also eine Liste von Variablen. Wenn die Funktion verlassen wird, werden die Variablen gelöscht, wenn sie nicht als Output zurückgegeben werden.
Variablen in einem Callback zu erzeugen, bewirkt deshalb grundsätzlich gar nichts außerhalb des Callbacks. Das könnte auch in den einfachen GUI-Beispielen ersichtlich sein.
Eine Lösung ist es, die Variablen im handles-Struct zu speichern:
Code:
function EM_null_Callback(hObject, eventdata, handles)
handles = guidata(hObject); % Obtain current value of struct if(get(hObject,'Value') == get(hObject,'Max'))
handles.EM_Welle = 0;
else disp('Bitte T_VKM (Matlab-Programm) = T_VKM (Realität) + T_EM (Realität) verwenden') end guidata(hObject, handles); % Store struct
Ich habe es erneut versucht, aber klappt auch nicht mit dieser neuen Struktur.
Code:
functionvarargout = gui_RS_Berechnung_1(varargin) % GUI_RS_BERECHNUNG_1 MATLAB code for gui_RS_Berechnung_1.fig % GUI_RS_BERECHNUNG_1, by itself, creates a new GUI_RS_BERECHNUNG_1 or raises the existing % singleton*.
%
% H = GUI_RS_BERECHNUNG_1 returns the handle to a new GUI_RS_BERECHNUNG_1 or the handle to % the existing singleton*.
%
% GUI_RS_BERECHNUNG_1('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in GUI_RS_BERECHNUNG_1.M with the given input arguments.
%
% GUI_RS_BERECHNUNG_1('Property','Value',...) creates a new GUI_RS_BERECHNUNG_1 or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before gui_RS_Berechnung_1_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to gui_RS_Berechnung_1_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help gui_RS_Berechnung_1
% Last Modified by GUIDE v2.5 14-Apr-2016 15:55:47
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @gui_RS_Berechnung_1_OpeningFcn, ...
'gui_OutputFcn', @gui_RS_Berechnung_1_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
% --- Executes just before gui_RS_Berechnung_1 is made visible. function gui_RS_Berechnung_1_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 gui_RS_Berechnung_1 (see VARARGIN)
% Choose default command line output for gui_RS_Berechnung_1
handles.output = hObject;
% UIWAIT makes gui_RS_Berechnung_1 wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = gui_RS_Berechnung_1_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
% --- Executes on button press in EM_null. function EM_null_Callback(hObject, eventdata, handles) % hObject handle to EM_null (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of EM_null if(get(hObject,'Value') == get(hObject,'Max'))
handles.EM_Welle = 0;
else disp('Bitte T_VKM (Matlab-Programm) = T_VKM (Realität) + T_EM (Realität) verwenden') end guidata(hObject, handles); %Struktur speichern
% --- Executes on button press in Abtriebs_2. function Abtriebs_2_Callback(hObject, eventdata, handles) % hObject handle to Abtriebs_2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of Abtriebs_2 if(get(hObject,'Value') == get(hObject,'Max'))
handles.Abtriebswelle = 2;
else disp('Fehler! Bitte Abtriebswelle als 2 verwenden') end guidata(hObject, handles);
% --- Executes when entered data in editable cell(s) in RS_Matrix. function RS_Matrix_CellEditCallback(hObject, eventdata, handles) % hObject handle to RS_Matrix (see GCBO) % eventdata structure with the following fields (see UITABLE) % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. Empty if Data was not changed % Error: error string when failed to convert EditData to appropriate value for Data % handles structure with handles and user data (see GUIDATA)
data_RS = get(hObject,'Data');
handles.RS = [data_RS];
guidata(hObject, handles);
% --- Executes when entered data in editable cell(s) in SM_Matrix. function SM_Matrix_CellEditCallback(hObject, eventdata, handles) % hObject handle to SM_Matrix (see GCBO) % eventdata structure with the following fields (see UITABLE) % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. Empty if Data was not changed % Error: error string when failed to convert EditData to appropriate value for Data % handles structure with handles and user data (see GUIDATA)
data_SM = get(hObject,'Data');
handles.SM = [data_SM] ;
guidata(hObject, handles);
% --- Executes when entered data in editable cell(s) in SE_Matrix. function SE_Matrix_CellEditCallback(hObject, eventdata, handles) % hObject handle to SE_Matrix (see GCBO) % eventdata structure with the following fields (see UITABLE) % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. Empty if Data was not changed % Error: error string when failed to convert EditData to appropriate value for Data % handles structure with handles and user data (see GUIDATA)
data_SE = get(hObject,'Data');
handles.SE = [data_SE];
guidata(hObject, handles);
% --- Executes when entered data in editable cell(s) in Geartype_Matrix. function Geartype_Matrix_CellEditCallback(hObject, eventdata, handles) % hObject handle to Geartype_Matrix (see GCBO) % eventdata structure with the following fields (see UITABLE) % Indices: row and column indices of the cell(s) edited % PreviousData: previous data for the cell(s) edited % EditData: string(s) entered by the user % NewData: EditData or its converted form set on the Data property. Empty if Data was not changed % Error: error string when failed to convert EditData to appropriate value for Data % handles structure with handles and user data (see GUIDATA)
data_GT = get(hObject,'Data');
handles.GearType = [data_GT];
guidata(hObject, handles)
% --- Executes on button press in Solve_push. function Solve_push_Callback(hObject, eventdata, handles) % hObject handle to Solve_push (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% --- Outputs from this function are returned to the command line.
%Hauptfunktion
%%% ENDE von "Werte vorgeben" %%% % Ab hier stehen nur noch Informationen bzgl. des Programm- bzw. % Berechnungsablauf. Alle Informationen, die ein Getriebe charaktersisieren % sollen oberhalb dieser Zeilen stehen. % --> Wichtige Ausnahmen: Unter dem Punkt "%%% Mögliche Korrektur einzelner % Größen:" kann einzelnen Variablen (insbes. abgeleiteten Größen) noch ein % anderer Wert zugewiesen werden, z.B. nRS, um Motorstart-Übersetzungen % nicht zu beachten, oder zur Fehlersuche.
%%% Abgeleitete Größen:
nRS = size(RS, 2); % Anzahl der Radsätze
nSE = size(SE, 2); % Anzahl der Schaltelemente
nSZ = size(SM, 1); % Anzahl der Schaltzustände (= Gänge) % Anzahl der Wellen (= größte Zahl aus den ersten drei Zeilen von RS):
nWellen = max(max(RS(1:3, :)));
nWellen = max([nWellen EM_Welle]); % Wenn die EM_Welle nicht direkt mit einem RS verbunden ist, könnte dies auch die größte Wellen-Nr. sein. % Zeilen für die Matrix A in Abhängigkeit des geschlossenen Schaltelements % vorbereiten:
SEA = zeros(size(SE, 2), nWellen);
for i1 = 1:size(SE, 2) if SE(1, i1) > 0
SEA(i1, SE(1, i1)) = 1;
end if SE(2, i1) > 0
SEA(i1, SE(2, i1)) = -1;
end end
%%% Mögliche Korrektur einzelner Größen:
%nSZ = 9; % Möglich wäre z.B.: Zunächst sollen nur die 8 VKM-Gänge betrachtet werden.
%nSZ = 9; % nSZ = 9; --> Nur VKM-Gänge betrachten. Den 4. Gang gibt es zweimal.
%%% Berechnung der Matrix A, die das Gleichungssystem beschreibt: % 1. Zeile von A: omega1 := 1 % Nächste Zeilen: Für jeden Radsatz einmal die Willis-Gl. hinzufügen. % (Die Definition der Zeilen für geschlosse Radsätze erfolgt später.)
% Die Winkelgeschwindigkeit jeder Welle ist eine Unbekannte. Also muss es % auch genausoviele Gleichungen geben, um das Gleichungssystem zu lösen:
A = zeros(nWellen); % Matrix des Gleichungssystems
b = zeros(nWellen, 1); % Rechte Seite des Gl.-Systems % Gesuchter Lösungsvektor sind die Winkelgeschwindigkeiten.
% omega1 = 1 setzen ODER omega_EM = 1 setzen (für EM-Gänge): % A(1,1) = 1; % Wird später definiert, um auch EM-Gänge berücksichtigen zu können.
b (1) = 1;
% Für jeden Radsatz gilt die Willis-Gleichung: for i1 = 1:nRS
for i2 = 1:3 if RS(i2, i1) > 0% Gehäuse steht fest. --> Omega0 = 0 --> Kein Eintrag in Matrix A. switch i2
case1
EintragInA = abs(RS(4, i1)); % Hohlrad hat Radius |i0| case2
EintragInA = - (1+abs(RS(4, i1))); % Planetenträger hat Radius 1 + |i0| sowie negatives Vorzeichen. case3
EintragInA = 1; % Sonnenwelle hat Radius 1. end
A(i1+1, RS(i2, i1)) = EintragInA;
end end end
% Für jede geschlossene Kupplung/Bremse sind die Drehzahlen gleich: % -- Dies erfolgt später, da sich ja bei jedem Gang die geschlossenen % Schaltelemente ändern. --
%%% Berechnung der Lösung: for i1 = 1:nSZ
% Für jeden Schaltzustand/Gang die Matrix A bzgl. der geschlossenen % Schaltelemente vervollständigen:
AktuelleZeileInA = nRS + 2;
A(AktuelleZeileInA:size(A, 1), :) = 0; % Die letzten Zeilen von A wieder löschen. for i2 = 1:nSE
if SM(i1, i2) == 1
A(AktuelleZeileInA, :) = SEA(i2, :);
AktuelleZeileInA = AktuelleZeileInA + 1;
end end % Prüfen, ob der aktuelle Schaltzustand/Gang ein EM-Gang ist. % Wenn ja, dann wird omega_EM := 1 gesetzt, ansonsten gilt omega1 := 1
A(1, :) = 0; % Die erste Zeile von Matrix A wieder löschen. if AktuelleZeileInA <= size(A, 1) % Bei EM-Gängen besagt die letzte Zeile von Matrix A: omega1 = NaN (also nicht definiert).
A(size(A, 1), :) = 0; % Die letzte Zeile von Matrix A wieder löschen.
b(size(A, 1)) = 0; % Den letzten Eintrag von b wieder löschen. end switch GearType(i1) case1
A(1, 1) = 1;
case2
A(1, EM_Welle) = 1;
if AktuelleZeileInA <= size(A, 1)
A(size(A, 1), 1) = 1;
b(size(A, 1)) = 0;
end end % Berechnung der Winkelgeschwindigkeiten aller Wellen im aktuellen % Schaltzustand/Gang:
omega = A\b;
% Ergebnis (= alle Winkelgeschwindigkeiten im gewählten Gang) in % Lösungsmatrix schreiben:
LsgMatrixOmega(:, i1) = omega;
end
%%% Lösungsmatrix für Winkelgeschwindigkeiten ausgeben: % Jede Zeile gibt alle Winkelgeschindigkeiten der ENTSPRECHENDEN Welle an. % Jede Spalte gibt alle Winkelgeschwindigen des GEWÄHLTEN % Gangs/Schaltzustands an.
%LsgMatrixOmega
%%% Berechnung der Drehmomente an allen Wellen und Radsätzen
% Die Anzahl der unbekannten Drehmomente berechnet sich folgendermaßen: % - 3 pro Radsatz (Sonne, Planetenträger, Hohlrad) --> Bei 2 RS: 6 % - Getriebeeingang: VKM --> schon bekannt % - Getreibeeingang: EM --> schon bekannt % - Getriebeausgang: 1 % - 1 pro Schaltelement --> Bei 5 Schaltelementen: 5 % ---- % SUMME: 12 % =============
%
% Anzahl der Gleichungen zur Lösung des Gleichungssystems: % - 2 pro Radsatz (Summe aller Momente = 0; Summe eingehender/ausgehender % Leistungen = 0) --> Bei 2 RS: 4 % - 1 pro Welle (Summe aller Momente = 0) --> bei 7 Wellen: 5 % - 1 pro OFFENES Schaltelement: % --> Bei 3 offenen Schaltelementen in VKM-Gängen: 3 % --> Bei 4 offenen Schaltelementen in EM-Gängen: (4) % Frage: Ist das System dann überbestimmt? --> Ich werde es sehen. % ---- % SUMME: 12 % =============
% Definition von T_VKM und T_EM (als Symbole): syms T_VKM T_EM real
% Festlegen der Größe von T: % 3x Anzahl RS Abtrieb Anzahl Schaltelemente
LaengeT = 3.*size(RS, 2) + 1 + size(SE, 2);
% bT = zeros(LaengeT, 1); % Hinweis beachten. % Hinweis: Wenn bT über zeros(...) erzeugt wird, kann später über bT(1) = % T_VKM kein Wert mehr zugewiesen werden. Warum dies so ist, weiß ich % nicht. Deshalb folgende "Umgehungslösung":
bT = T_VKM .*zeros(LaengeT, 1);
% Aufstellen der Matrix AT, um das Gleichungssystem AT*T=bT auflösen zu % können und so alle gesuchten Momente T (Vektor) zu berechnen.
AT = zeros(LaengeT);
% Gleichungen/Zeilen in AT, die unabhängig vom gewählten Gang gelten, % festlegen: for i1 = 1:nRS
% Für jeden Radsatz in jedem Gang gilt: Summe aller Momente = 0.
AT(i1, (3.*(i1-1)+1):(3.*(i1-1)+3)) = 1;
end
% Für jede Welle in jedem Gang gilt: Summe aller Momente = 0. % Drehmomente, die über die Radsätze in die Wellen ein-/ausgeleitet werden: for i1 = 1:nWellen
for i2 = 1:3 for i3 = 1:nRS
if RS(i2, i3) == i1
% Zeile Spalte
AT(2.*nRS+i1, 3.*(i3-1)+i2) = 1;
end end end end % Drehmomente, die über Schaltelemente in die Wellen ein-/ausgeleitet % werden: for i1 = 1:nSE
% Zeile Spalte if SE(1, i1) > 0
AT(2.*nRS+SE(1, i1), 3.*nRS + 1 + i1) = 1;
end if SE(2, i1) > 0
AT(2.*nRS+SE(2, i1), 3.*nRS + 1 + i1) = -1;
end end % Berücksichtigung des Abtriebsdrehmoments auf der entsprechenden Welle. % (I.d.R. ist dies Welle 2.)
AT(2.*nRS+Abtriebswelle, 3.*nRS+1) = 1;
% Berücksichtigung der Antriebsmomente auf den entsprechenden Wellen: % (Aufstellen von bT um das Gleichungssystem AT*T=bT lösen zu können.) % Konvention: Die Welle mit der VKM ist Welle 1. % Nur, wenn es eine elektrische Maschine gibt (EM_Welle > 0), und nur, wenn % die elektrische Maschine auf einer anderen Welle als der % Verbrennungsmotor sitzt (EM_Welle > 1), wird das Drehmoment der % elektrischen Maschine auf eine andere Welle übertragen. % ("Echte" Parallelhybride mit EM_Welle = 1 werden so behandelt, dass gilt % T_VKM (Matlab-Programm) = T_VKM (Realität) + T_EM (Realität) % Damit für die Berechnung unterschieden wird ob ein Hybrid oder E-Gang % vorliegt, wird in der Berechnungsschleife das VKM-Moment jeweils gesetzt oder % nicht. if EM_Welle > 1
bT(2.*nRS + EM_Welle) = T_EM;
end
% Aufstellen der Gleichungen, die vom gewählten Gang abhängen, und % Berechung der Ergebnisse:
%nSZ = 4; % nSZ = 2; (Nur zu Testzwecken) for i1 = 1:nSZ
% Vorbereitung: Gangabhängige Zeilen in Matrix AT löschen:
%AT((nRS+1):(2.*nRS), :) = 0; % Nur für Kriterium (2a) verwenden. NICHT bei Kriterium (2b) verwenden.
AT((2.*nRS+nWellen+1):size(AT, 1), :) = 0;
% Für jeden Radsatz in jedem Gang gilt: Summe ein-/ausgehender Leistungen = 0. (= Kriterium 2a) % --> Dies soll ersetzt werden durch Kriterium (2b): T_Hohlrad + i_0 * T_Sonne = 0
%for i2 = 1:nRS
% for i3 = 1:3 % if RS(i3, i2) > 0 % AT(nRS+i2, 3.*(i2-1)+i3) = LsgMatrix(RS(i3, i2), i1); % end % end
%end % Für jeden Gang (zumindest für jeden VKM-Gang) gilt: % Kupplungsmomente offener Kupplungen = 0.
AktuelleZeileInAT = 2.*nRS + nWellen + 1;
for i2 = 1:nSE
if SM(i1, i2) == 0 % Zeile Spalte
AT(AktuelleZeileInAT, 3.*nRS + 1 + i2) = 1; % --> Moment der offenen Kupplung zu null setzen.
AktuelleZeileInAT = AktuelleZeileInAT + 1;
end end % Setzen des VKM-Moments abhängig vom Gangtyp switch GearType(i1) case1
bT(2.*nRS + 1) = T_VKM;
case2
bT(2.*nRS + 1) = 0;
end
AT
% Lösen des Gleichungssystems AT*T=bT
T = AT\bT;
% Ergebnis (= alle auftretenden Drehmomente im gewählten Gang) in % Lösungsmatrix schreiben:
LsgMatrixT(:, i1) = T;
end
Mein Programm funktioniert wenn ich es benutze ohne die GUI Tabelle. Ich habe gedacht, dass vieleicht der handles.EM_Welle = 0 Befehl wurde nicht für RS , SE, SM, und GearType funktionieren, da sie Werte aus einer Tabelle sind.
Ich wollte auch eine Tabelle herstellen, welche man konnte verschiedene Größe Matritzen erstellen, wie zum Beispiel nicht nur diese 5x5 Matrix, sondern auch zB eine 7x8 oder so. RS wird immer 4 Zeilen haben, aber mehrere Spalten sind auch möglich. GearType immer 1 Zeile, aber mehrere Spalten sind auch möglich.
Ich versuche zuerst das einfacher Programm zu schreiben, ohne Tabelle Änderüngen, aber bekomme ich diese Probleme...
natürlich das ist keine Beschreibung...mein Fehler!
Immer wenn ich das Programm verwende, bekomme ich die folgende Antwort:
Undefined function 'max' for input arguments of type 'cell'.
Error in gui_RS_Berechnung_1>Solve_push_Callback (line 202)
nWellen = max(max(RS(1:3, : )));
Error in gui_mainfcn (line 96)
feval(varargin{:});
Error in gui_RS_Berechnung_1 (line 42)
gui_mainfcn(gui_State, varargin{:});
Error in @(hObject,eventdata)gui_RS_Berechnung_1('Solve_push_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating uicontrol Callback
Dann denke ich, ich ein Befehl wie "cell2struct" benutzen sollte, um die Werte in den Tabellen im Programm zu haben. (hab daran gedacht wegen den Fehler, der sagt "max" ist keine Funktion bei der GUI).
Ich kann auch nich verstehen, was ist mit dem Fehler "feval (varargin)" los....
Auf jeden Fall, danke für die Zeit und Hilfe
_________________
In "feval(varargin{:})" gibt es gar keinen Fehler, sondern Matlab gibt die Kette von Befehlen an, auf der man zu der Zeile mit dem Error kam. Das ist der "Calling Stack".
Das Posten der Fehlermeldung hätte hier also ausgereicht. Kompakte Fragen werden häufiger gelesen.
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
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.