dein Vorschlage habe ich schon verstanden. Mit der Befehl "plot_handle1 = plot(guiplot,XData1,YData1,XData2,XData2);" kann man zwei Line bekommen. Dann kann man mit "set(plot_handle1(1), 'XData', XData1, 'YData', YData1,'Color','red')" bzw. "set(plot_handle1(2), 'XData', XData1, 'YData', YData2,'Color','blue')" die zwei Graph in ein selben Axes bezeichnen. Aufgrund der Logik ist dieses Gedanke ganz richtig.
Aber wenn ich einmal durchlaufe, habe ich noch eine Fehlermeldung bekomme, wie
Warning: Error occurred while evaluating listener callback.
Error in ==>update_gui1 at Line 32.
if isempty(plot_handle1) || ~ishandle(plot_handle1)
The operands of the || and the && operator must be able to be converted to logical scalar values.
persistent plot_handle1
%create a run time object that can return the value of the outport block's
%input and then put the value in a string
rto1 = get_param('Beispiel4_sim/simout','RuntimeObject');
rto2 = get_param('Beispiel4_sim/Out1','RuntimeObject');
% create str from rto1
str = num2str(rto1.InputPort(1).Data);
% get a handle to the GUI's 'edit_display' window display = findobj('Tag','edit_display');
% get Data from Simulation
XData1 = get_param('Beispiel4_sim','SimulationTime');
YData1 = rto1.InputPort(1).Data;
XData2 = get_param('Beispiel4_sim','SimulationTime');
YData2 = rto2.InputPort(1).Data;
% save Data to workspace assignin('base','XData1',XData1) assignin('base','YData1',YData1) assignin('base','XData2',XData2) assignin('base','YData2',YData2)
Meine Meinung ist, bedeutet das, mit der Code "plot_handle1 = plot(guiplot,XData1,YData1,XData2,YData2);" ist die Type von plot_handle1 schon verändert ?
Die Anlage ist die relative Dokumente.
Grüße
Jieshen
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorhergehenden Nachricht - Danke!]
ist das ehrlich möglich, zwei Graph in ein Axes zu bezeichnen. Ich habe so viele Male versucht. Leider kann ich noch nicht erfolgreich erledigen. Kannst du meine letzte Nachricht einmal gucken. Hilf mir bitte. Danke dir. : )
Grüße
Jieshen
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorhergehenden Nachricht - Danke!]
bitte etwas Geduld. Ich bin auch nicht rund um die Uhr hier ;)
Ich kann nur immer wieder den Debugger empfehlen. Dann sieht man wirklich schnell, wo die Probleme liegen. Hier ist es eben das Array von Plots, also die Zeile mit der Fehlermeldung abändern zu
vielen vielen Danke für deine Hilfe. Mit deiner Code kann man zwei Graph ehrlich gleichzeitig in ein Axes bezeichnen. Aber für das zweite Mal bekomme ich immer eine Fehlermeldung wie
Requires one of the braces or dot index expressions, but the result is two.
Error in Beispiel4_gui>Startstopbutton_Callback (line 158)
ph1.XData = []
Error in gui_mainfcn (line 95)
feval(varargin{:})
Error in Beispiel4_gui (line 42)
gui_mainfcn(gui_State, varargin{:})
Meine eigene Meinung ist, wir sollen die Variable "ph1.XData" etwa verändern, weil die Eigenschaft von "plot_handle1" schon verändert ist (plot_handle1 verändert zu zwei Line plot_handle1(1) bzw. plot_handle1(2) ). Aber ich weiß nicht wie kann man diese Befehl "ph1.XData = []" verändern ?
Die Anlage sind relative Dokumente.
Grüße und vielen vielen Danke bei dir
Jieshen
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorhergehenden Nachricht - Danke!]
vielen Danke für deine große Hilfe. Jetzt funktioniert es. Ich bin jetzt ein Anfänger bei Matlab. Deshalb weiß ich nicht die Funktion von etwa Befehle, z.B. wie
Damals weißte ich auch, wegen der Veränderung der Type von plot_handle1(plot_handle1 verändert zu plot_handle1(1) bzw. plot_handle1(2)) bekam ich die Fehlermeldung wie
Warning: Error occurred while evaluating listener callback.
Error in ==>update_gui1 at Line 32.
if isempty(plot_handle1) || ~ishandle(plot_handle1)
The operands of the || and the && operator must be able to be converted to logical scalar values.
Leider weiß ich nicht, mit was für ein Befehl kann man die Error löschen ? Also, wie du gesgat, mit Debugger kann man nicht nur finden, wo die Fehler liegt, sondern auch einige Vorschläge für die Veränderung von Code bekommen ?
Aber natürlich werde ich nächste Mal selbst mit Debugger selbst für die Lösung suchen. Nur wenn ich noch etwa andere Probelme habe, wende ich an dich nochmal.
Vielen Danke.
Grüße
Jieshen
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorhergehenden Nachricht - Danke!]
Also, wie du gesgat, mit Debugger kann man nicht nur finden, wo die Fehler liegt, sondern auch einige Vorschläge für die Veränderung von Code bekommen ?
Ich meinte eher, dass man sich dann die Situation (Datentyp und Dimension von Variablen) genauer ansehen kann. Hier ist das Problem ja, dass man statt einem Plot nun mehrere in den Variablen abgespeichert hat und die Abfragen entsprechend anpassen musste.
jetzt kann das Programm ganz genau durchlaufen. Nur habe ich noch eine Frage, die unabhängig von der Code ist. Wenn ich das Programm laufe, sind die Graph, die in GUI bezeichnet werden, nicht glatte Graph. (Siehe die Anlage "picture")
In meiner Meinung denke ich, das ist wegen des Abtastrates von Eingangsignal. Weil das Abtastrate nicht so hoch ist, scheint es in Axes bei GUI gebrochene Linie statt glatte Graph. Aber ich habe schon bei Eingangsignal "SineWave" die "Sample Time" als "0" eingestellt. Aufgrund der Logik glaube ich, die Graph sollen glatt sein. Leider bekomme ich die gebrochene Linie. Das verstehe ich noch nicht.
Oder soll man bei "update_gui1" die Type von Linie mit der Befehl "set" einstellen ? Aber es gibt keine Linietype wie "glatt" oder "gebrochen".
Die Anlage sind relative Dokumente.
Grüße
Jieshen
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorhergehenden Nachricht - Danke!]
das ist eine Einstellung im Simulink-Modell. Die Standardschrittweite bei Modellen ohne diskrete oder kontinuierliche Dynamik ist die Schrittweite auf t_stop/50 festgelegt, bei t_stop = inf anscheinend auf 0.2.
Du kannst unter Simulation --> Model Configuration Parameters eine andere maximale Schrittweite einstellen um eine feinere Auflösung zu bekommen.
Danke für deine sorgfältige Antwort. Jetzt kann man ein glatt Graph mit kleine Schrittweite bekommen.
Und ich habe eine neue Frage über die real-time Plot bei GUI. Bitte guck zuerste die Anlage. Die Fig. ist ganz einfach mit drei Start-Knöpfe "Start1", "Start2" bzw."Start Together". Und das Simulationsmodell hat nur zwei Output "Out1" bzw. "Out2". Meine Frage ist, ist es möglich, das Ergebnis von jeder Befehl nur in Axes1 beschrieben wird ? Das heißt, wenn ich "Start1" drücke, dann bekomme ich nur die Graph über "Out1". Und wenn ich "Start Together" drücke, dann bekomme ich gleichzeitig die Graphe über "Out1"bzw. "Out2".
Meine eigene Meinung ist, diese solche Anforderung ist wie ein Auswahl mit der Befehl "if-else". Das heißt, wenn ich den Knöpf "Start1" drücke, soll ich die spezielle Eigenschaften von Knöpf "Start1" behalten, um nur die Befehle mit Bezeichnung von "Out1" zu auszuführen.
Deshalb habe ich noch eine persistent Variable "num" in update_easy einstellen.
Aber wie kann man das Eigenschaft "String" von "Start1" zu Variable "num" geben ist das Problem.
Ich denke, man soll bei easy_model.m etwa Befehle wie "set" oder "set_param" unter die Button-Callback Funktion schreiben.
Aber ich weiß nicht,was für eine Befehl soll ich schreiben? Dann kann ich diese Anforderung verwirklichen. Natürlich weiß ich auch nicht, ob mein Gedanke richtig oder nicht ist.
Deshalb hoffe ich, dass du einmal gucken kannst und mir einige Hinweise und Vorschläge geben kannst. Vielen Danke.
Grüße
Jieshen
[EDITED, Jan, Bitte kein Top-Quoting der gesamten vorhergehenden Nachricht - Danke!]
bitte guck einmal my Dokumente, wenn du Ziet hast. Und bitte gib mir einige Hinweise darüber, ob es möglich unterschiedliche Bedienungen mit dem zugehörigen Betätigen in ein selben Axes zu bezeichnen ist.
danke für deine Vorschlage. Das ist einfach mit der Befehl "setappdata" eine neue Variable bei handles.axes1 einstellen. Dannach wird der Wert von "num" zu Variable "num" in Update-Funktion mit der Befehl "getappdata" geführt. Aber ich weiß nicht wie kann man den Wert von "num" in Update-Funktion nach der Simulation löschen, um nächste Mal ein andere Simulation zu durchlaufen. (z.B. in erste Mal mit "Start1" und in zweite Mal mit "Start2")
ich habe gedacht, wahrscheinlich soll man nach der Verlauf den Wert von "num" in GUI.m File löschen. Deshalb habe ich ein Befehl unter Stop_callback_function geschrieben.
Leider wenn ich den Knöpf "Stop" drücke, bekomme ich die Folgende Fehler.
error in line 142
---->handles.axes1.num = []
Class matlab.graphics.axis.Axes does not exist public property num.
Ich weiß, das bedeutet, die Variable "num" ist nicht das eigentliche Eigentum von handles.axes1. Dann wie kann man den Wert löschen ? Eine andere Frage ist, wenn man den Wert von "num" in GUI.m File gelöscht hat, bedeutet das, der Wert von "num" in Update-Funktion auch gelöscht wird ?
Ich weiß nicht wie kann man den Wert von "num" nach der Simulation löschen. Du weißt, wenn den Wert schon gelöscht geworden ist, kann man in nächster Simulation die obgenannten Code nochmal laufen.
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.