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

Codegenerierung mit RTW

 

daniel23_123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2010, 08:24     Titel: Codegenerierung mit RTW
  Antworten mit Zitat      
Hallo Zusammen,

ich würde gerne aus meinem Simulink-Modell C-Code generieren.
Das Modell hat mehrere Inputs und einen Output.
Am Schluß würde ich gerne eine C-Funktion haben der ich Parameter übergeben kann und das Ergebnis als Rückgabewert zurückbekomme.

Die Codegenerierung mit RTW klappt soweit auch schon, aber die Eingabeparameter werden hartcodiert.

Wie schaffe ich es dass ich später meiner Funktion Parameter übergeben kann?

Vielen Dank im Voraus!

Gruß,
Daniel


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 29.04.2010, 09:31     Titel:
  Antworten mit Zitat      
Schaue in der Hilfe nach RSIM-Target. Möglicherweise löst das Dein Problem.


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
daniel23_123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2010, 09:50     Titel:
  Antworten mit Zitat      
Rapid Simulation Target hatte ich mir schon angeschaut.
Ich will die Parameter vorher aber nicht in ein mat-File schreiben müssen, sondern diese direkt als Funktionsparameter eingeben können.

Der generierte Quellcode soll später als Function in eine größere Umgebung eingebaut werden.

Ist das irgendwie möglich?
 
J*hnnY
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 09.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2010, 23:58     Titel:
  Antworten mit Zitat      
um nicht einen neuen Thread anfangen zu müssen schließe ich mich hier an. Stehe vor dem selben Problem und will ebenfalls ein sehr komplexes Simulink-Modell (nicht von mir, ich soll darauf aufbauen) nach C/C++ exportieren.

Mir ist es zwar schon gelungen ein einfacheres Simulink-Modell zu exportieren und auch die EXE dazu erzeugen zu lassen, aber per Hand das ganze in mein Programm implementieren ging leider nicht.

Auf die Idee ständig in eine Datei zu schreiben und daraus wieder zu lesen wär ich zwar auch gekommen, aber leider klappt das bei mir wegen der hohen Abtastrate nicht und mein System muss unbedingt echtzeitfähig sein.

Kann mir da jemand weiterhelfen?
Private Nachricht senden Benutzer-Profile anzeigen
 
EIT_stud

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2011, 11:27     Titel:
  Antworten mit Zitat      
Da ich ein fast identisches Problem habe, schließe ich mich hier auch mal an.

Ich möchte ein Subsystem mit RTW in C-Code umwandeln. In dem Subsystem sind einige Parameter zu setzen. Auch bei mir klappt die Codegenerierung mit RTW, aber wie beim Threadersteller werden die Parameter hartcodiert und ich weiß nicht, wie man die variabel hält. Wie muss ich vorgehen, damit ich die Parameter ändern kann?

Der Ansatz mit RSIM-Target war an sich schon gut, nur (wenn ich das korrekt verstanden habe) wird da die Ausführbare Datei (.exe) durch eine .mat-Datei parametrisiert. Ich möchte aber den C-Code parametrisieren können, da ich .exe-Datei nicht verwenden kann, weil der Code später weiterverwendet werden soll.
 
Jimmy
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2011, 18:34     Titel:
  Antworten mit Zitat      
Hallo zusammen,

habt ihr den Embedded Coder oder nur den RTW? Hat man den Embedded Coder, gibt es in den Configuration Parameters unter "Real-Time Workshop" > "Interface" den Button "Configure Model Functions".
Im folgenden Dialog wählt man dann unter "Function specification" die Option "Model specific C prototypes" und nun kann man die In- und Outports des Modells als Parameter bzw. als return-Wert der Funktion definieren.
Es wird auch gleich eine Vorschau der Funktion angezeigt, damit man überprüfen kann, ob man mit der gewählten Einstellung das erreicht hat was man haben wollte.

Diese Funktion gibt es aber, wie gesagt, nur mit dem Embedded Coder.


Grüße
Jimmy
Private Nachricht senden Benutzer-Profile anzeigen
 
EIT_stud

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.04.2011, 08:18     Titel:
  Antworten mit Zitat      
vielen Dank erstmal für den Hinweis.

Ich hab auch den Embedded Coder und konnte so deinen Vorschlag auch mal ausprobieren. Nur, wie kann ich in dem Dialog die Parameter editieren? Schreib ich die berits dort stehenden Namen in C-Manier einfach um (was bei mir irgendwie nicht zum erhofften Ziel führt)? In der Tabelle, die da noch erscheint steht nichts drin.
Und wie muss ich die Variablennamen in den Blöcken wählen, damit diese dadurch mit Daten versorgt werden? Wenn ich nämlich auf "Validate" klicke, erscheinen nur Fehlermeldungen, dass die Variablen, die ich im Moment in der Block-Parametern stehen habe, nicht existieren.

Sorry für die evtl. blöden Fragen, bin noch ein ziemlich Neuling auf dem Gebiet der C-Programmierung mit Simulink.
 
Jimmy
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.04.2011, 13:35     Titel:
  Antworten mit Zitat      
Ich glaube, ich verstehe dein Problem noch nicht vollständig.

Möchtest du einer generierten Funktion Parameter übergeben können? Also soetwas wie
Code:

mymodel_step(paramterX, parameterY);
 


oder möchtest du, dass im Code eine Variable wie
Code:

int meineVariable = 123;
 

auftaucht, die dann während der Laufzeit änderbar ist?

Wie sehen denn deine Parameter im Simulink-Modell aus? Sind das Blöcke vom Typ "Constant"?

Gruß
Jimmy
Private Nachricht senden Benutzer-Profile anzeigen
 
EIT_stud

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2011, 12:17     Titel:
  Antworten mit Zitat      
Ich hab mal einen Screenshot angehängt. Das Subsystem bekommt z.b. einen 400x1 vektor binärer daten, diese werden kodiert und hinterher kommt beispielsweise ein 800x1 vektor binärer daten raus. Innerhalb des Subsystems müssen dann für den kodierer noch ein paar parameter gesetzt werden.

Also ich möchte meiner generierten Funktion Parameter übergeben, wie in deinem ersten Beispiel.

Die Parameter in meinem Simulink-Modell werden nicht durch Constant-Blöcke übergeben (weil die zu parametrisierenden Blöcke keine Eingänge für diese Parameter haben). Die Blöcke werden durch Variablen parametrisiert, die in den Eingabefeldern stehen, auf die man zugreifen kann, wenn man Doppelklick auf den Block macht.

Capture.PNG
 Beschreibung:

Download
 Dateiname:  Capture.PNG
 Dateigröße:  1.58 KB
 Heruntergeladen:  698 mal
 
Jimmy
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 18.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2011, 14:21     Titel:
  Antworten mit Zitat      
EIT_stud hat Folgendes geschrieben:

Also ich möchte meiner generierten Funktion Parameter übergeben, wie in deinem ersten Beispiel.


Dann müssen diese Parameter in deinem Simulinkmodell durch In-Ports repräsentiert werden. Mit In-Port meine ich den Block, der im Simulink Library Browser unter Simulink -> Ports&Subsystems -> In1 zu finden ist.

Signale, die von einem In-Port kommen, können dann, wie ich es weiter oben beschrieben habe, der generierten Funktion als Parameter übergeben werden.

Das heisst du müsstest dem Block, den zu parametrieren willst, einen Eingang hinzufügen (wenn das möglich ist) und diesen Eingang mit einem In-Port verbinden.

Eine andere Möglichkeit der generierten Funktion Parameter zu übergeben, kenn ich leider nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
EIT_stud

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2011, 14:41     Titel:
  Antworten mit Zitat      
[quote=Jimmy]Das heisst du müsstest dem Block, den zu parametrieren willst, einen Eingang hinzufügen (wenn das möglich ist) und diesen Eingang mit einem In-Port verbinden. [/quote]

Ok und da liegt dann genau mein Problem...ich benutze zum Beispiel den Block "Pad" aus dem Signal Processing Blockset und diesen kann ich nicht so einstellen, dass er die Parameter über einen eigenen Eingang annimmt.
Und die Blöcke selber schreiben kommt auch nicht in Frage. Bei dem Pad Block geht das zwar noch, aber beim anschließenden Kodierer wird das sehr sehr aufwändig.

Hmm, ok, dann danke ich für die Mühe. Sollte ich noch auf eine andere Lösung kommen, werde ich sie hier noch posten.
 
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.