Verfasst am: 09.01.2018, 11:53
Titel: Matlab Code aufrufen OHNE code generation Probleme
Ich habe ein Simulink Model mit dem Block "MATLAB function". In dem zugehörigen Code mache ich sehr viele Berechnungen und ich hangele mich jetzt schon seit Stunden von einer Fehlermeldung zur anderen, weil viele Befehle und Schreibweisen nicht so funktionieren wie gewohnt. Alles wegen dieser Code Generation. Gibt es keine Möglichkeit einfach Matlab Code so wie er ist in Simulink einzubinden oder aufzurufen?
du kannst die Funktion in eine eigene .m-Datei (hier: myfunction) auslagern, sie in der MATLAB Function als extrinsisch deklarieren und dann von dort aufrufen:
Super, vielen Dank das funktioniert jetzt endlich!
Eine weitere Frage hätte ich noch. Ich definiere mir zu Beginn eine Struktur in der ich meine Daten (Koordinaten) speicher. Dazu verwende ich bisher folgendes Ungetüm:
Das Problem hier ist auch wieder die Code Generation, die verlangt, dass die Variable "deklariert" wird. Mit folgendem kürzeren und schönerem Code funktioniert es aber leider nicht:
Subscripted assignment into an mxArray is not supported for code generation.
Weißt du dafür vielleicht auch noch eine schnelle und elegante Lösung? Perfekt wäre es, wenn die Struktur nicht länger auf eine bestimmte Anzahl begrenzt wäre sondern eine variable Größe hätte.
ich sehe zwei Möglichkeiten:
a) versuch mal etwas wie
repmat({0}, 1, 100)
b) auch das in die ausgelagerte Funktion ziehen. Klappt aber nur, wenn das kein Rückgabeargument der Hauptfunktion ist
Wenn das nicht weiterhilft, wäre noch ein reproduzierbares Beispiel hilfreich. Dann schaue ich mal, ob ich das hinbiegen kann.
dieser wird jetzt für jeden Zeitschritt des Simulink-Modells einmal ausgeführt. Das ist aber nicht notwendig, da sich der Inhalt nicht ändert. Ich habe versucht diese Zeile zu kopieren und in die Callback Function (InitFcn, StartFcn, und andere) einzufügen. Allerdings bekomme ich trotzdem immer die Fehlermeldung, dass "Tabelle" nicht definiert ist. Gibt es eine Möglichkeit dieses Problem zu lösen?
du kannst in der MATLAB Function oben im Toolstrip auf "Edit Data" gehen und dort Parameter anlegen. Das könnte aber wieder mit der Codegenerierung Probleme machen.
Besser ist es vielleicht, in deiner eigenen Funktion Tabelle als
persistent
zu definieren.
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
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.