simulinkでMEX関数を使いたい

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

 Accepted Answer

Yoshio
Yoshio on 29 Jul 2019

0 votes

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

3 Comments

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

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

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

Start Hunting!