タイトルのとおりです.
matlab上では動作するmex関数を持っています.
これを,simulinkのMatalab functionでmatalbと同様に記述したところ,coder.extrinsicを利用して外部関数として宣言することを検討してください
とエラーが出ました.
どうすれば良いでしょうか?
例えば,
Afunction.mexw64
を持っているときに,matlab上ではy = Afunction(u);で正常に動作しています.
これを,SimulinkのMatlab function上で利用したいのです.

 채택된 답변

Yoshio
Yoshio 2019년 7월 29일

0 개 추천

コード生成機能は、plotdispfigureなどの可視化関数には対応していません。
mexをMATLABで動作させると、この部分はMATLABが呼びだされますが、Simulinkでは明示的に外部関数だと指示して、この場合はMATLABを呼ぶようにします。
例えば、coder.extrinsic('plot')等とします。
該当する関数の部分でエラーが出るはずですので、その関数をcoder.extrinsicを使って先のように指定すればよいはずです。

댓글 수: 3

Kento SHIRAKATA
Kento SHIRAKATA 2019년 7월 30일
Yoshio様
ありがとうございます.早速試しましたところ,とてもシミュレーションに時間がかかってしまい,困っております.時間ステップごとにcoderを実行しているためと愚考しておりますが,なにか良い方法はございませんでしょうか?
if文にて,一度のみcorderを実行しようとしましたが,最上位にのみ配置できるとのエラーでうまくいきませんでした.
Yoshio
Yoshio 2019년 7월 30일
Coderは一回のみ実行されるはずなので、問題は他にあると思います。Simulinkではデータが入力される毎に処理して出力するという流れですので、これに合わせたプログラムにする必要があります。
入出力で変数を介して行うと時間が掛かります。persistent宣言を行ってこれを回避する方法があります。こちらのでExitKalmanを開き、使い方を見ると参考になるかと思います。
Kento SHIRAKATA
Kento SHIRAKATA 2019년 7월 30일
ありがとうございます.
必要なもののみを入力と設定しましたが,改善されませんでした.
原因はcoderではなく,MEX関数そのものでした.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 コード生成에 대해 자세히 알아보기

질문:

2019년 7월 29일

댓글:

2019년 7월 30일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!