ich möchte aus einem edit-Feld einen Wert auslesen und je nach Wert die Hintergrundfarbe des Feldes ändern.
Ich habe folgendes versucht, aber irgend klappt es nicht.
Code:
% --- Executes during object creation, after setting all properties. function curState_CreateFcn(hObject, eventdata, handles) % hObject handle to curState (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
Benutze den Debugger. Setze einen Breakpoint auf die Zeile "if y < 200" und schau Dir an, warum die Farbe nicht gesetzt wird.
Genau für solche Zwecke wurde der Debugger geschaffen.
also entweder ich bin zu doof (was durchaus sein kann, da ich das programm erst vor kurzem kennengelernt habe^^) oder es gibt dort keinen fehler.
ich habe an der stelle y<200 einen breakpoint gesetzt und die matlab-datei durchlaufen lassen. es wird mir aber kein fehler für diese zeile angezeigt bzw. für die damit im zusammenhang stehenden zeilen.
Du hattest ja auch nicht behauptet, dass dort ein Fehler ist. Viel mehr geht es darum, was dort geschieht und wieso die Farbe nicht geändert wird.
Wird "set(hObject,'BackgroundColor','red')" aufgerufen und ist hObject der richtige Handle? Wird die Farbe vielleicht später noch einmal zurückgeändert?
ich denke schon, dass hObject der richtige handle ist. zumindest funktioniert es bei anderen befehlen auch.
sorry, wenn ich auf dem schlauch stehe. ich wurde mit dem programm ins kalte wasser geworfen.
woran sehe ich, ob er ausgeführt wird?
was mich wundert, aber vlt ist es auch normal, wenn ich bei
Code:
% --- Executes during object creation, after setting all properties. function curState_CreateFcn(hObject, eventdata, handles) % hObject handle to curState (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
Wird die Funktion denn überhaupt aufgerufen? Das setzen eine Breakpoints oder ein einfacher DISP-befehl könnten das sehr schnell klären.
Den Debugger einzusetzen, um Bugs zu finden, ist im Allgemeinen extrem effizient. Dafür ist er ja in MATLAB integriert...
Ist "isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))" denn wahr oder falsch?
Ist das Absicht, dass dein Vorhaben in der CreateFcn steht? Normalerweise sollten solche Sachen doch in einer Callback-Funktion stehen. Ganz offensichtlich wird deine Funktion nämlich nur beim starten aufgerufen, dort steht noch nichts im Edit-Feld.
das hatte ich auch festgestellt und ins callback geschrieben ^^ ohne erfolg.
ich verstehe es nicht, wenn ich die farbe direkt im inspector ändere, dann ist die farbe zwar in der gui selbst geändert, aber sobald ich sie durchlaufen lasse, wechselt die farbe wieder auf weiß. selbst wenn ich die zeile
if
ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
entferne.
ich hatte an der stelle y<200 einen breakpoint gesetzt.
gestern hielt er dort an (also der grüne pfeil erscheint) und jetzt nicht mehr.
wenn ein fehler vorliegt müsste mir bei dem K>> etwas angezeigt werden, oder?
Wenn ein Syntax-Fehler vorliegen würde, würde Matlab mit einer Fehlermeldung stoppen. Wenn Du aber einen Fehler in der programm-Logik hast, macht das programm einfach nur nicht das, was Du erwartest.
Du kannst den Debugger benutzen um Zeile für Zeile durch Deinen Code zu gehen und so herausfinden, in welcher Zeile die Farben anders gesetzt werden, als Du es wünschst. Das würde nur wenige Minuten dauern und wäre viel effizienter, als hier im Forum zu spekulieren. Irgendwo wird im Programm etwas ausgeführt, was Du anders geplant hast. Du musst also nur diese Stelle finden und ändern.
^^ ja, das ist richtig. um ehrlich zu sein, habe ich im netz geschaut, wie ich den debugger genau verwende. dort wurde mir halt nur das mit dem grünen pfeil und dem K>> genannt.
kannst du mir vlt kurz sagen, wie ich den debugger in matlab verwende??
in simulink selbst ist das ja alles kein problem, nur von matlab habe ich keine ahnung
also, ich habe es noch einmal versucht.
er hält bei der folgenden zeile für die str2num funktion an:
Code:
function[STR2NUM_VaR,ok] = protected_conversion(STR2NUM_StR) % Try to convert the string into a number. If this fails, return [] and ok=0 % Protects variables in STR2NUM from "variables" in s.
try
STR2NUM_VaR = eval(STR2NUM_StR);
ok = true;
catch exception %#ok
STR2NUM_VaR = [];
ok = false;
end
Caught-error breakpoint was hit in str2num>protected_conversion at line 80. The error was:
Error using ==> string
Not enough input arguments.
Warning: string is obsolete and will be
discontinued.
Use char instead.
wen ich die "step out" schritte wiederhole, gelange ich zu meiner datei, welche einen event listener auf den simulinkblock setzt, der ausgelesen werden soll.
%create a run time object that can return the value of the gain block's
%output and then put the value in a string.
rto = get_param('HerzfrequenzFehlerPfad2/Num','RuntimeObject');
str = num2str(rto.OutputPort(1).Data);
%get a handle to the GUI's 'current state' window
statestxt = findobj('Tag','curState');
diese if bedingung hat er selbständig hinzugefügt, als ich sie in die matlab.datei geschrieben hatte. (dort verwende ich jedoch kein "str" sondern "y")
Was soll das denn bewirken? Matlab soll den String 'String' in eine Zahl umwandeln? Das sollte in der Tat ein Fehler sein.
Zitat:
diese if bedingung hat er selbständig hinzugefügt, als ich sie in die matlab.datei geschrieben hatte. (dort verwende ich jedoch kein "str" sondern "y")
Das verstehe ich nicht. Hat er (Matlab?) die Bedingung hinzugefügt, oder hast Du sie geschrieben. Wo verwendest Du y?
in der matlab-datei verwende ich "y" und in der updategui.m - datei (welche dem editfeld den ausgabewert des simulink-blocks zuweist) hat matlab, nachdem ich den die zeilen mit y=str2num... eingefügt hatte, die befehle str=str2num... und folgende selbstständig eingefügt.
wenn aber zuvor festgelegt wurde "set(statestxt,'string',str);"
warum sollte dann der befehl str2num('string') falsch sein?
ich dachte 'string' ist der wert des blocks gemeint, der ständig aktualisiert wird.
oder versteh ich das jetzt falsch??
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.