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

set_param() und Fcn

 

rocknrolli
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 11.01.10
Wohnort: ---
Version: 7.4.0 (R2007a) für Mac
     Beitrag Verfasst am: 11.01.2010, 19:52     Titel: set_param() und Fcn
  Antworten mit Zitat      
Hallo,

ich habe da ein Problem mit set_param():

Ich habe im Simulink-Modell Formeln mit mehreren Konstante. Die würde ich gerne in einem Script-File definieren und dann mittels set_param() an mein Simulink-Modell übergeben.
Dort benutze ich Fcn-Bausteine (aus User-defined Functions).
Dass klappt aber irgendwie nicht.

Ich hab mal ein (ziemlich billiges) Beispiel geschrieben:

Ein Sinussignal soll mit einer Variable (im Script-File k, im Modell i) multipliziert und mit einem Scope ausgeben werden.

Meine Funktion:
Code:

function []= fcnbeispiel(k)

kString = num2str(k);
set_param('fcn_beispiel/Fcn', 'i', kString);
[t,x,y] = sim('fcn_beispiel', [0, 10]);
 


Mein Modell:
siehe Anhang

Ich bekomme folgende Fehlermeldung:
??? Error using ==> set_param
Fcn block does not have a parameter named 'i'.

Error in ==> fcnbeispiel at 4
set_param('fcn_beispiel/Fcn', 'i', kString);

Wie kann ich das machen?
Schon mal vielen Dank für die Antwort!

fcnbeispiel.m
 Beschreibung:

Download
 Dateiname:  fcnbeispiel.m
 Dateigröße:  141 Bytes
 Heruntergeladen:  801 mal
fcn_beispiel.mdl
 Beschreibung:

Download
 Dateiname:  fcn_beispiel.mdl
 Dateigröße:  16.34 KB
 Heruntergeladen:  758 mal

_________________

7.4.0 (R2007a) für Mac
Private Nachricht senden Benutzer-Profile anzeigen


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.01.2010, 15:35     Titel:
  Antworten mit Zitat      
ganz einfach
die Property in deinem Block heisst nicht 'i' sondern 'Expr' also:

Code:
set_param('fcn_beispiel/Fcn', 'Expr', kString);


Gruß Lord nibbler
 
rocknrolli
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 11.01.10
Wohnort: ---
Version: 7.4.0 (R2007a) für Mac
     Beitrag Verfasst am: 21.01.2010, 11:52     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort!

Und dann hab ich gleich eine neue Frage:
Was ist denn, wenn ich zwei Variablen in einem Fcn-Block habe? Heißt dann die eine "Expr1" und die andere "Expr2"?
_________________

7.4.0 (R2007a) für Mac
Private Nachricht senden Benutzer-Profile anzeigen
 
rocknrolli
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 11.01.10
Wohnort: ---
Version: 7.4.0 (R2007a) für Mac
     Beitrag Verfasst am: 06.02.2010, 20:59     Titel:
  Antworten mit Zitat      
Hallo,

ich komm grad nicht weiter...

In meinem Modell verwende ich einige physikalische Formeln mit mehreren Konstanten. Für jede Berechnung habe ich einen fcn-Block genommen. Ich will die Konstanten in einem Script-File festlegen, also mit set_param die Werte an die Blöcke übergeben.

In einem Fcn-Block steht z. B.: u*n0*A

(Hier soll die Leistung eines Sonnenkollektors berechnet werden: u (Eingangsgröße) ist die Bestrahlungsstärke, n0 der Wirkungsgrad und A die Fläche)

Wenn ich in der MATLAB-Oberfläche mit get_param die Parameter dieses Blockes aufrufe wird mir folgendes angezeigt:
Code:

EDU>> get_param('thermische_Solaranlage/Kollektorleistung','DialogParameters')

ans =

          Expr: [1x1 struct]
    SampleTime: [1x1 struct]
 


Gibts es eine Möglichkeit, mehr als einen Parameter zu übergeben?

Viele Grüße,
Daniel
_________________

7.4.0 (R2007a) für Mac
Private Nachricht senden Benutzer-Profile anzeigen
 
hoderlump
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 08.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2010, 13:36     Titel:
  Antworten mit Zitat      
Das wär doch dann:
Code:

set_param('fcn_beispiel/Fcn', 'Expr', kString, 'SampleTime', zweiterWertalsString);

Greetz

edit: kosmetisch
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2010, 14:32     Titel:
  Antworten mit Zitat      
Für mich klingt das nach ziemlich vielen Parametern...

Wieso schreibst Du nicht einfach alle Konstanten mit ihrem Wert ins m-File und rufst den Spaß dann unter File -> Model Properties -> Callback -> InitFcn auf. Dann solltest Du die Konstanten einfach so in den Funktionsblock schreiben können und die Werte werden am Start der Simulation automatisch übergeben.

Würde das die Sache nicht viel einfacher machen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jazzer
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 28.03.10
Wohnort: HH
Version: 2009b 32bit
     Beitrag Verfasst am: 06.04.2010, 10:12     Titel:
  Antworten mit Zitat      
rocknrolli hat Folgendes geschrieben:
Vielen Dank für die Antwort!

Und dann hab ich gleich eine neue Frage:
Was ist denn, wenn ich zwei Variablen in einem Fcn-Block habe? Heißt dann die eine "Expr1" und die andere "Expr2"?


Ich mach das immer so:

Ich klicke auf den Simulink Block dessen Parameter ich mit set_param ändern möchte.
Dann schreib ich in das Command Fenster:

Code:


Jetzt bekommst Du den Pfad zu diesem Block angezeigt.

Danach tippt man einfach:
Code:
get_param(gcb,'DialogParameters')

und erhält alle Parameterfelder angezeigt.
Einfach anzunehmen deas nächste Feld hieße Expr2 ist ja zu waage.
Manchmal ist z.Bsp: Value klein geschrieben und manchmal groß.
mit 'DialogParameters' muss man dann nicht mehr probieren oder raten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 06.04.2010, 19:30     Titel:
  Antworten mit Zitat      
Hi,

Ich mein das geht schon mit get_param. Aber die einfachere und meiner
Meinung nach auch übersichtlichere Variante ist ein mFile in dem alle Startwerte liegen und dieses mit initfct aufrufen. Vorallem wenn man mal mehr als 20 Paramter und Anfangswerte hat in einem Komplexen Model.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 2024 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.