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

Outports von Simulink in GUI lesen

 

cheepy
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 02.01.2011, 10:38     Titel: Outports von Simulink in GUI lesen
  Antworten mit Zitat      
Hallo,
ich habe ein Problem und habe immer noch keine Lösung. Ich möchte aus mein Model Ergebnisse in GUI darstellen. Dabei sollen die Ergebnisse immer aktualisiert werden, dass heißt die Ausgabe soll während der Simulation erfolgen. Somit kann ich meine Ergebnisse nicht mehr in Workspace schreiben, da dieser erst nach dem die Simulation abgeschloßen ist, zur Verfügung stehen. Jetzt habe ich im Internet geschaut, aber über all stehen unterschiedliche Vorschläge. Hat jemand eine Idee oder wenigstens kann mir jemand sagen, in welche Richtung ich einschlagen kann?
Ich würde mich für jeden Ansatz oder Hilfe freuen, vielen Danke schon im voraus!

Gruß, Cheepy
Private Nachricht senden Benutzer-Profile anzeigen


cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 02.01.2011, 10:48     Titel:
  Antworten mit Zitat      
mit Befehl 'sim', kann ich doch nur meine Ergebnisse abrufen, wenn die Simulation abgeschloßen ist, oder? Der Befehl bzw Funktion benötigt doch die genauere Angabe in welchen Zeitraum soll das Ergebnis ausgegeben werden. Und meine Vermutung ist, dass dieser nicht in echtzeit angewendet werden kann. Kann jemand meine Vermutung bestätigen oder täusche ich mich da?
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 03.01.2011, 14:00     Titel:
  Antworten mit Zitat      
Du kannst mit
Code:

Werte von Blöcken auslesen.
Wenn du dies in einer Schleife oder auf Knopfdruck machst, wird immer der aktuelle Wert augelesen.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 03.01.2011, 14:30     Titel:
  Antworten mit Zitat      
Vielen Danke für die Antwort!

Aber ich habe noch weitere Frage. Am Anfang hatte ich auch an get_param gedacht, aber nach dem ich mir meine Parameter angeschaut habe, habe ich angenommen, dass ich nur Parameter also Einstellungsparameter abfragen kann.

Zum Beispiel ich habe eine folgende Simulink-Modell (siehe Anhang). Wenn ich folgende Befehl eingebe, sehe ich kein Parameter für die Ausgabe:
Code:

get_param('addition/Out1','DialogParameters')

ans =

                          Port: [1x1 struct]
                   IconDisplay: [1x1 struct]
                  UseBusObject: [1x1 struct]
                     BusObject: [1x1 struct]
             BusOutputAsStruct: [1x1 struct]
                PortDimensions: [1x1 struct]
                    VarSizeSig: [1x1 struct]
                    SampleTime: [1x1 struct]
                        OutMin: [1x1 struct]
                        OutMax: [1x1 struct]
                OutDataTypeStr: [1x1 struct]
                     LockScale: [1x1 struct]
                    SignalType: [1x1 struct]
                  SamplingMode: [1x1 struct]
    SourceOfInitialOutputValue: [1x1 struct]
            OutputWhenDisabled: [1x1 struct]
                 InitialOutput: [1x1 struct]
 


Wie finde ich den Parameter, den ich für meine Ausgabe ansprechen kann?

Bin für jeden Tipp sehr dankbar!

Gruß, Cheepy

addition.mdl
 Beschreibung:

Download
 Dateiname:  addition.mdl
 Dateigröße:  22.24 KB
 Heruntergeladen:  710 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 03.01.2011, 15:56     Titel:
  Antworten mit Zitat      
jetzt habe ich es gefunden, durch folgende zwei Zeilen kann ich meine ausgänge auslesen:
Code:

obj_myDisplay= get_param('addition/Display','RuntimeObject');
val_myDisplay = obj_myDisplay.InputPort(1).Data;
 


Aber wir kann ich die aktuelle Zeit aus Simulink auslesen, damit es in echtzeit angezeigt wird?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2011, 16:13     Titel:
  Antworten mit Zitat      
hi,
Code:
get_param('Addition','SimulationTime')
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 03.01.2011, 16:28     Titel:
  Antworten mit Zitat      
Freut mich, dass du es alleine gefunden hast und mit den anderen die Info teilst.
Gutes Vorrankommen wieterhin!
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 07.01.2011, 10:16     Titel:
  Antworten mit Zitat      
wenn ich auf Knopf drücke, dann wird der aktuelle Wert aktualisiert, aber ich möchte ganz gern wie du schon vorgeschlagen hast in eine Schleife. Ich habe gedacht ich bau mir eine unendliche Schleife und auf Knopfdruck "Stop" kann ich es beenden und solange es nicht beendet ist, soll dieser mir mein Wert aktualisieren. Kann ich irgendwie abfragen ob der Stop-Knopf gedrückt ist oder nicht? Oder gibt es noch andere Lösungsmöglichkeit?
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 07.01.2011, 14:34     Titel:
  Antworten mit Zitat      
so ich habe jetzt eine Lösung gefunden! Falls jemand gleiche Probleme hat und weis nicht wie das geht, dann schaut euch dieses Demo an http://www.mathworks.com/support/so...../data/1-5OKJMH/index.html


Vielen Dank für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 05.04.2011, 14:28     Titel:
  Antworten mit Zitat      
hi leute,
bei diesem beitrag wurde das link http://www.mathworks.com/support/so...../data/1-5OKJMH/index.html als beispiel vorgeschlagen worden.
was ich seit stunden nicht hinbekomme ist, wie und wo er das guiupdate. aufruft.
das mdl hab ich weggelassen, so sehen die codes aus.
Code:

% --- Executes just before mytestgui is made visible.
function mytestgui_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 mytestgui (see VARARGIN)

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

% Update handles structure
guidata(hObject, handles);

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


% --- Outputs from this function are returned to the command line.
function varargout = mytestgui_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;



function curState_Callback(hObject, eventdata, handles)
% hObject    handle to curState (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of curState as text
%        str2double(get(hObject,'String')) returns contents of curState as a double


% --- 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.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbuttonstart.
function pushbuttonstart_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonstart (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%start the model with the standard Simulink API command
set_param('mytestmdl','SimulationCommand','start');


% --- Executes on button press in pushbuttonstop.
function pushbuttonstop_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonstop (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%start the model with the standard Simulink API command
set_param('mytestmdl','SimulationCommand','stop')
 
und hier das updategui
Code:
function varargout = updategui(varargin)

%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('mytestmdl/Gain','RuntimeObject');
str = num2str(rto.OutputPort(1).Data);

%get a handle to the GUI's 'current state' window
statestxt = findobj('Tag','curState');

%update the gui
set(statestxt,'string',str);

ich hab überall breakpoints gestellt aber gleich nachm starten des modells springt es in die funktion updategui.wie macht er das.
vielen dank
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 05.04.2011, 14:45     Titel:
  Antworten mit Zitat      
sobald ich
Code:
set_param('mytestmdl','SimulationCommand','start');

mein modellname ändere dann springt er nicht mehr in die guiupdate funktion rein.
ich verstehe nur noch bahnhof Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

schau mal in den von dir genannten Link, in Teil 2:
Code:
listener = @updategui;

%Create the listener
h = add_exec_event_listener(blk, event, listener);


Das ist also etwas, was aus dem Simulink-Modell heraus ausgeführt wird. Um das auf dein Modell zu übertragen, müsstest du also auch die StartFcn für dein Modell entsprechend anpassen.

Ansonsten kann ich auch nicht behaupten, auf die Schnelle ein volles Verständnis des Beispiels zu haben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 05.04.2011, 17:13     Titel:
  Antworten mit Zitat      
danke harald,
das du es angeschaut hast Smile
ich schau mir das jetzt mal näher an.
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 05.04.2011, 18:12     Titel:
  Antworten mit Zitat      
jepp du hattest wieder recht harald Smile
bei model properties muss man beim start function das hier eingeben.
Code:

%The GUI handles are by default hidden, turn them on
set(0,'ShowHiddenHandles','on');

%Set up the arguments that will go into the out block event callback listener
blk = 'LeWiAktuell/Out1';
event = 'PostOutputs';
listener = @updategui;

%Create the listener
h = add_exec_event_listener(blk, event, listener);

das ist jetzt natürlich für ein ausgang aber da ich Out2,Out3..... habe. muss ich diese start function um Out2,Out3... erweitern????. weil ohne das komme ich trotzdem in die guiupdate funktion.
... und wie kann ich denn das ganze an meiner gui plotten?
wenn ich in diese funktion
Code:
plot(handles.axes1,ausgangout2,ausgangout3)
schreibe bekomme ich diese fehlermeldung
Code:
Warning: Error occurred while evaluating listener callback.
??? No appropriate method, property, or field axes1 for class handle.EventData.

Error in ==> updategui at 9
plot(handles.axes1,rto1,rto2)
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 05.04.2011, 18:46     Titel:
  Antworten mit Zitat      
so mein updategui sieht nun so aus
Code:

function varargout = updategui(varargin)


rto1 = get_param('LeWiAktuell/Out1','RuntimeObject');
value1= rto1.InputPort(1).Data;

rto2 = get_param('LeWiAktuell/Out2','RuntimeObject');
value2= rto2.InputPort(1).Data;

guiplot=findobj('Tag','axes1');

plot(guiplot,value1,value2,'o')

jetzt bekomme ich die fehlermeldung
Code:

Warning: Error occurred while evaluating listener callback.
??? Error using ==> plot
Vectors must be the same lengths.

nun weiss ich nicht mehr weiter
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.