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

Simulink - Array output einer Matlab function

 

Sandreal
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 03.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2012, 14:36     Titel: Simulink - Array output einer Matlab function
  Antworten mit Zitat      
Hallo zusammen,

ich verwende in Simulink eine Matlab function, die drei verschiedene Arrays als Output erzeugt. Beim Starten der Anwendung erhalte ich den Fehler "Unable to locate a C-compiler required by Steteflow and MATLAB Function blocks. Use 'mex -setup' to select a supported C-compiler." Was hat es mit mex auf sich und warum ist es so umständlich simple Matlab-Funktionen in Simulink zu verwenden?

Grüße
Sandreal
Private Nachricht senden Benutzer-Profile anzeigen


CoDerAbt
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2012, 18:47     Titel: csfunc.m
  Antworten mit Zitat      
Schau mal unter "C:\Program Files\MATLAB\R2012b\toolbox\simulink\simdemos\simfeatures\" und guck dir die Beispielfunction "csfunc.m" an. Das ist eine MATLAB Level-1 s-function; anhand des Beispiels mal deinen Code vergleichen. mex steht für MatlabEXecutable. Wenn s-functions nicht in MATLAB geschrieben werden, sondern in C, C++ oder FORTRAN, dann müssen die Codes mit einem Compiler zu einer mex-Datei konvertiert werden. Erst dann kann die Simulink Engine die s-function lesen... Stell mal den Code rein, vor allem, wie du die Arrays in den Outputs definierst... Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Sandreal
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 03.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2012, 15:58     Titel:
  Antworten mit Zitat      
Danke CoDerAbt für die Rückmeldung!

Ich arbeite an einer Fahrwerkssimulation und möchte nun zuerst mit Hilfe eines Motorkennfeldes aus den Inputwerten Gaspedalstellung und Drehzahl das Drehmoment berechnen (s. Blockschaltbild.jpg). Dabei verwende ich die Matlab function Blöcke TorqueInit und torque, die wiederum die Matlab Funktionen Torque und TorqueLoad aus m-files aufrufen.
Code:
function [X,Y,kennfeld] = TorqueInit(kennfeldFile)
coder.extrinsic('TorqueLoad');
X = zeros(17,5);
Y = zeros(17,5);
kennfeld = zeros(17,5);
[X Y kennfeld] = TorqueLoad(kennfeldFile);
end

Code:
function M = torque( X, Y, kennfeld, pedal, drehzahl)
coder.extrinsic('Torque');
M = zeros(1,1);
M = Torque(X, Y, pedal, drehzahl, kennfeld);
end

Das Problem ist nun wie gesagt, dass die Outputwerte bei TorqueInit Arrays sind und der Matlab Function Block damit scheinbar nicht arbeiten kann. Idee wie ich das lösen kann?

Was versteht man denn unter s-functions?

Grüße
Sandreal

Blockschaltbild.jpg
 Beschreibung:

Download
 Dateiname:  Blockschaltbild.jpg
 Dateigröße:  30.35 KB
 Heruntergeladen:  1038 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
CoDerAbt
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 06.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2012, 16:33     Titel:
  Antworten mit Zitat      
Hallo Sandreal,

versuch doch mal:

Code:
function OUTPUT = TorqueInit(kennfeldFile)
coder.extrinsic('TorqueLoad');
X = zeros(17,5);
Y = zeros(17,5);
kennfeld = zeros(17,5);
[X Y kennfeld] = TorqueLoad(kennfeldFile);
OUTPUT=[X,Y,kennfeld];
end


Sieht simpel aus, könnte aber aufgrund der Übergabe des Arrays so funktionieren...
hast du [X Y kennfeld] = TorqueLoad(kennfeldFile); im CommandWindow oder so schon mal probiert, ob das Auslesen korrekt funktioniert?

s-function ist kurz für system-functions. Damit können diskrete oder kontinuierliche Funktionen geschrieben werden. Ich benutze sie, um partielle DGLs in Simulink zu lösen.... ein einfaches Beispiel ist die csfunc.m in deinem Systemordner. Das ist eine s-function, die in m-Code geschrieben wurde.

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.