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

c-code als s-function in simulink intergrieren

 

martinej
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 15.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2008, 15:05     Titel: c-code als s-function in simulink intergrieren
  Antworten mit Zitat      
Hi Leute,

Ich simuliere aufgrund meiner Diplomarbeit einen Linearmotor in Simulink. Diesen habe ich als ein Subsheet zusammen gefasst und eine der Grössen, die ich rausbekomme, ist die Drehzahl. Jetzt soll anhand einens Fahrdiagramm mein Strom, der eine Eingangsgrösse ist, in Abhängigkeit dieser Drehzahl angepasst werde. Ist die Drehzahl zwischen 0 und 100 soll der Strom I=5A bestragen, zwischen 100 und 200 I=7A usw. Der Strom stellt quasi eine Funktion der Drehzahl dar.

Ich habe mir überlegt, dass ich diese Funktion in der Programmiersprache C mit if - else - Schleifen realisiere. Diese mit dem Befehl mex compliere und dann als eine s-Funktion in meine Simulation einbinde.

Soweit die Theorie....

Wie muss mein header aussehen bzw. welche header-files muss ich im C-Sources includen, damit ich es überhaupt komplieren kann. (Hat vielleicht einer eine kleines Beispiel?) Meine nächste Frage wäre dann noch, wie intergriere ich dann das komplierte c-file in meine s-function.

Ich bin schon die ganze Zeit am googlen und Büchern durchblättern. Aber irgendwie finde ich keine vernünftige Anleitung oder Beispiel (oder ich bin zu blöd).

Wäre echt nett, wenn mir einer unter die Arme greifen könnte...oder zu mindesten mir einen Link für ne eine einfache Anleitung geben könnte
Private Nachricht senden Benutzer-Profile anzeigen


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 29.05.2008, 16:11     Titel:
  Antworten mit Zitat      
Zitat:
Ich bin schon die ganze Zeit am googlen und Büchern durchblättern. Aber irgendwie finde ich keine vernünftige Anleitung oder Beispiel (oder ich bin zu blöd).

Google ist zwar schon und einfach, aber wenn Du etwas zuhause verloren hast, dann sucht man das doch nicht bei dem Nachbar... Smile
wie wärs mit der MATLAB eigenen Doku?!

Das einfachste Beispiel ist die TIMESTWO S-Function. Eingang wird mit 2 multipliziert und ausgegeben. Kannst es als Template benutzen.
Zu finden in %matlab%\simulink\src\timestwo.c

Kopiere die nach Dein Projektverzeichnis und kompiliere die mit
Code:
>> mex timestwo.c

darauf hin wird "timestwo.mexw32" erzeugt.

Nun muss der S-Function Block dem Simulink model hinzugefügt werden.
Den findest Du unter Simulink->User-Defined Function->S-Function.
Kopiere den Block in Simulink-Model. Doppelclick darauf und unter
"S-function name" nun "timestwo" eintragen.

Zum testen noch um ein Constant-Block am Eingang und den Display Block am Ausgang erweitern und die Simulation starten...


MfG
P.S. mehr dazu in der Doku: Simulink->Overview of S-Functions
Private Nachricht senden Benutzer-Profile anzeigen
 
martinej
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 15.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2008, 17:54     Titel:
  Antworten mit Zitat      
Vielen Dank, dass hat schon mal gefunzt. Ich habe die Help von Matlab natürlich schon herangezogen, aber irgendwie schnalle ich immer noch net, welche Struktur mein c - File haben muss. Könntest du mir vielleicht ein kleines Beispiel posten, wie die Strukur zu sein hat?

Vielen Dank im Voraus
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 29.05.2008, 22:33     Titel:
  Antworten mit Zitat      
Code:
Könntest du mir vielleicht ein kleines Beispiel posten, wie die Strukur zu sein hat?

??? Shocked *sprachlos*

Zitat:
Zu finden in %matlab%\simulink\src\timestwo.c



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Tim
Forum-Century

Forum-Century



Beiträge: 140
Anmeldedatum: 03.11.07
Wohnort: Stuttgart
Version: 2011b+aktuellstes Release
     Beitrag Verfasst am: 02.06.2008, 11:12     Titel:
  Antworten mit Zitat      
Wozu überhaupt eine S-Function? Das ist doch ein klassischer Fall für eine einfache Kennlinie?
Private Nachricht senden Benutzer-Profile anzeigen
 
amin
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 11.05.09
Wohnort: Karlsruhe
Version: R2009b
     Beitrag Verfasst am: 11.05.2009, 10:10     Titel:
  Antworten mit Zitat      
Hallo,

kann mir jemand erklären wie ich das timestwo Beispiel umschreiben muss, damit es keine Arrays mehr verarbeitet sondern als kontinuierlicher verdoppler Block arbeitet.

Kann auch gerne ein anderes Beispiel sein.

Vielen Dank im Voraus !
Private Nachricht senden Benutzer-Profile anzeigen
 
amin
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 11.05.09
Wohnort: Karlsruhe
Version: R2009b
     Beitrag Verfasst am: 12.05.2009, 16:22     Titel:
  Antworten mit Zitat      
Hallo nochmal,

ich hab´s jetzt Momentan so:
Code:
static void mdlOutputs(SimStruct *S, int_T tid)
{
    InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
    real_T            *y    = ssGetOutputPortRealSignal(S,0);

   
        y[0] = 2.0 * (*uPtrs[0]);

}
 


Denke aber das es auch eleganter gehen sollte.
Private Nachricht senden Benutzer-Profile anzeigen
 
tarelizer
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2009, 14:57     Titel:
  Antworten mit Zitat      
hallo,

ich habe das ähnliche problem eine .mexw32 Datei einzubinden.

Matlab meldet das die S-Function nicht existiert

Error in S-function 'Example/S-Function': S-Function 'simulinktoxplane' does not exist.

Kann man das verzeichnis auch zuweisen??

P.S.: ich arbeite mich gerade in Matlab ein. Entschuldigt also bitte wenn das ein etwas trivialeres Problem sein sollte Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
tarelizer
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2009, 15:36     Titel:
  Antworten mit Zitat      
ich habe an hand der Matlab-Help heraus gefunden, dass sich unter S Function Modules die zugehörige mex datei versteckt.

Reicht es aus den pfad in das zugehörige Feld einzutragen??
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.