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

funktion nutzen in Simulink

 

schlammi
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2015, 15:45     Titel: funktion nutzen in Simulink
  Antworten mit Zitat      
Hallo,

ich bin ziemlicher Neuling in Simulink und Matlab.

Für die Uni haben wir die Aufgabe, ein zwei Wagen Modell (mit 2 Federn und 2 Daempfer) zu simulieren. Jetzt bau ich grade das Blockschaltbild auf. Die Federkraft von der Feder 2 sollen wir mit einer Funktion ausrechnen, welche ich schon als Funktiondatei geschrieben hab. Diese heisst NL_Feder. Jetzt weiss ich nicht welchen Block ich nehmen muss, laut google den S-Block. Aber dann kommt folgende Fehlermeldung.



Ist das der richtige Block, was mache ich falsch?

Meine Funktion sieht wie folgt aus.:

function [ y ] = NL_Feder(u)
%u=[x20-x10 , c2]';
y=u(2)*((u(1))^3+u(1));
end

Da u ein array ist, muss ich doch auch ein Array beim Blockschaltsystem eingehen, oder sehe ich das falsch? Wie füge ich den 2 Werte in Array im Simulink zusammen?

So sieht mein Blockschaltbild momentan aus, sind wahrscheinlich noch viele Fehler drin, fange erst grad langsam an, dass zu verstehen.



Fragen über Fragen, ich bedanke mich jetzt schonmal für jede Hilfe Smile

2.JPG
 Beschreibung:

Download
 Dateiname:  2.JPG
 Dateigröße:  32.92 KB
 Heruntergeladen:  430 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.10.2015, 22:32     Titel:
  Antworten mit Zitat      
Hallo,

ich würde stattdessen den MATLAB Function - Block nutzen.

Vermutlich ist es einfacher, wenn du statt einem Vektorsignal u mit zwei Signalen u1 und u2 als Eingängen arbeitest.
Falls du Vektorsignale erstellen möchtest, geht das mit dem Mux-Block

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
schlammi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2015, 11:15     Titel:
  Antworten mit Zitat      
Dankeschonmal!

Wir dürfen nur einen input haben in der Funktion, das ist vorgeschrieben.

Wenn ich den Block Matlab Funktion nehme, muss ich doch eine neue Funktion erstellen oder?

Ich will aber bereits die erstellte Funktion nutzen. Geht das auch mit dem Block?

Gruss

Yannick
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2015, 14:15     Titel:
  Antworten mit Zitat      
Einfach den Code Deiner Funktion in den Block einfügen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2015, 19:04     Titel:
  Antworten mit Zitat      
Hallo,

... oder einen Aufruf der bestehenden Funktion.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
schlammi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2015, 09:52     Titel:
  Antworten mit Zitat      
OK das hab ich gemacht. Allerdings funktioniert es nicht so ganz wie ich es mir vorstelle. Also hier erstmal die Matlab Funktion.

Code:

function y = fcn(u)
%#codegen
[y] = NL_Feder(u);
 


Hier die NL_Feder Funktion:

Code:

function [ y ] = NL_Feder(u)
%u=[x20-x10 , c2]';
y=u(2)*((u(1))^3+u(1));
end
 


Mein Simulink Blockschaltbild sieht mittlerweile wie folgt aus:



Wenn ich es simuliere, kann er die Funktion nicht durchführen, weil das u falsch ist. Wenn ich den input (x_2-x_1) verändere, und anstelle einfach eine konstante als input wähle, dann kann er die Funktion auswählen. Ich habe mal ein Display dran gehangen, um zu schauen was (x_2-x_1) ist, da wurde mir -68 angezeigt.
Ich verstehe nicht warum er die Funktion nicht mit (x_2-x_1) ausführen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.10.2015, 10:46     Titel:
  Antworten mit Zitat      
Hallo,

bitte die Fehlermeldung kopieren, nicht interpretieren.
Wenn du das Modell statt eines Screenshots davon anhängst, hat das den Vorteil, dass wir das Modell laufen lassen können.
Was mir ins Auge springt, sind die vielen Signalkreuzungen. Diese sollten unbedingt vermieden werden, damit das Modell gut lesbar ist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
schlammi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2015, 10:53     Titel:
  Antworten mit Zitat      
Okay mache ich. Hier die Fehlermeldung.

"Index expression out of bounds. Attempted to access element 2. The valid range is 1-1.
More information

Function 'NL_Feder.m' (#49.53.54), line 3, column 5:
"2"
Launch diagnostic report.
Component: MATLAB Function | Category: Coder error

Function call failed.

Function 'MATLAB Function1' (#53.58.69), line 4, column 7:
"NL_Feder(u)"
Launch diagnostic report.
Component: MATLAB Function | Category: Coder error

Errors occurred during parsing of MATLAB function 'MATLAB Function1'
Component: MATLAB Function | Category: Coder error

Errors occurred during parsing of MATLAB function 'MATLAB Function1'
Component: Simulink | Category: Block error


Ich werd es mal versuchen ein wenig mehr zu ordnen.

sim_Zwei_Wagen.m
 Beschreibung:

Download
 Dateiname:  sim_Zwei_Wagen.m
 Dateigröße:  1.01 KB
 Heruntergeladen:  450 mal
Zwei_wagen.slx
 Beschreibung:

Download
 Dateiname:  Zwei_wagen.slx
 Dateigröße:  25.99 KB
 Heruntergeladen:  451 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
schlammi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2015, 11:06     Titel:
  Antworten mit Zitat      
Hier die Simulink Datei nochmal, aber geordneter!

Zwei_wagen.slx
 Beschreibung:

Download
 Dateiname:  Zwei_wagen.slx
 Dateigröße:  25.46 KB
 Heruntergeladen:  418 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
schlammi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2015, 18:06     Titel:
  Antworten mit Zitat      
Hab die Funktion jetzt mit 2 Eingangsgrößen erstellt und nochmal probiert, das klappt nun!
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.