Verfasst am: 04.08.2009, 13:14
Titel: Simulink-Modell aus Gui steuern
Hallo Leute,
ich hab ein Problem : ich möchte ein Simulink model aus Gui steuern und werte aus Gui an das Simulink-Modell übergeben(was in GUI eingegben wird), dann will ich das Signal was am ende raus kommt in Gui plotten .aber ich weiss nicht wie das geht ??
ich hab das geschrieben
Code:
function simulieren1_Callback(hObject, eventdata, handles) % hObject handle to simulieren1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
%----------------------------------------------------------------------
aopt=19.405; % defaultwerte für aopt,L und f
L=1;
f=1.5e6;
gesamte_Daempfung=str2double(get(handles.aopt,'String'));% Parameter der optischen Übertragungsstrecke(Länge)nehmen aus GUI(edit.box aopt)
c1=power(10,-gesamte_Daempfung/10); % aopt=19.405 dB ---> c1=0.0115 set_param('lwl_Uebertragungsstrecke/LWL_TransferFcn','Numerator',num2str(c1));% c1 an Block LWL_TransferFcn setzen % set_param erwartet einen string daher mat2str([c1])!!!!!!! mat2str(c1)
frequencyString=get(handles.f,'String');
set_param('lwl_Uebertragungsstrecke/Signal Generator','Frequency',frequencyString);% frequenz wird gesetzt bzw übernommen
%%% Hier genauso wie bei Rd machen
hObj_C=findall(gcf,'Tag','C')
diffusionkapazitaet_Str_CellArr=get(hObj_C,'String');
C_index=get(hObj_C,'Value')
C_ausgewaehlt=diffusionkapazitaet_Str_CellArr{C_index};% Den ausgewählten Wert bestimmen ...
diffusionkapazitaetsfaktor= 1/C_ausgewaehlt;% die Kapazität in nf,durch String darf man nicht dividieren daher str2double!!! set_param('lwl_Uebertragungsstrecke/Lichtsender_LED/Gain','Gain',num2str(diffusionkapazitaetsfaktor));% setzen der Parameter C im Simulink-Modell
%%% 2. Weg, um an die Rd-Daten ranzukommen
hObj_Rd=findall(gcf,'Tag','Rd')
diff_widerstand_Str_CellArr=get(hObj_Rd,'String');
Rd_index=get(hObj_Rd,'Value')
%%% Den ausgewählten Wert bestimmen ...
diff_widerstand_ausgewaehlt=diff_widerstand_Str_CellArr{Rd_index};
differentiellerwiderstandsfaktor= 1/diff_widerstand_ausgewaehlt;
%%% ... und im Simulink-Modell setzen set_param('lwl_Uebertragungsstrecke/Lichtsender_LED/Gain1','Gain',num2str(differentiellerwiderstandsfaktor));
%%% Hier genauso wie bei Rd machen
hObj_Cs=findall(gcf,'Tag','Cs')
Cs_Str_CellArr=get(hObj_Cs,'String');
Cs_index=get(hObj_Cs,'Value')
Cs_ausgewaehlt=Cs_Str_CellArr{Cs_index};% Den ausgewählten Wert bestimmen ...
speerschichtkapazitaetsfaktor=1/Cs_ausgewaehlt;% die Kapazität in nf set_param('lwl_Uebertragungsstrecke/Lichtempfänger_Photodiode/Gain','Gain',num2str(speerschichtkapazitaetsfaktor));
%%% Hier genauso wie bei Rd machen
hObj_Rb=findall(gcf,'Tag','Rb')
Rb_Str_CellArr=get(hObj_Rb,'String');
Rb_index=get(hObj_Rb,'Value')
Rb_ausgewaehlt=Rb_Str_CellArr{Rb_index};% Den ausgewählten Wert bestimmen ...
%%% Hier genauso wie bei Rd machen
hObj_RL=findall(gcf,'Tag','RL')
RL_Str_CellArr=get(hObj_RL,'String');
RL_index=get(hObj_RL,'Value')
RL_ausgewaehlt=RL_Str_CellArr{RL_index};% Den ausgewählten Wert bestimmen ...
widerstandsfaktor=1/(Rb_ausgewaehlt+RL_ausgewaehlt);
set_param('lwl_Uebertragungsstrecke/Lichtempfänger_Photodiode/Gain','Gain1',num2str(widerstandsfaktor));
set_param('lwl_Uebertragungsstrecke',[]);
funktioniert das setzen der Parameter mit set_param?
Wenn ja kannst Du anschließend mit dem Befehl sim die Simulation durchführen. Der sim Befehl hat drei Rückgabewerte (Zeit, Zustände, Ausgabesignale). Jedes Signal, das Du zurückbekommen willst, legst Du im Modell auf einen Out-Port (Library-Browser->Sinks->Out).
Hallo LittleX ,
danke für die Antwort,leider funktioniert das setzen mit set_param nicht,ich bekomme Fehlermeldung :
??? Error using ==> /
Matrix dimensions must agree.
Error in ==> D:\Projektarbeit\lwl_eingabe.m (simulieren1_Callback)
On line 436 ==> diffusionkapazitaetsfaktor= 1/C_ausgewaehlt;%
es ist wegen der Division
kann mir bitte jemand helfen.
Danke im Voraus
sonnenmann
Danke für die Antwort.ich es hinbekommen mit str2double geht auch.
Viele Grüsse
sonnenmann
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.