MATLAB/SimulinkのS-Functionについて、今回はMEXファイルについてです。
前回の記事
MBD開発では、既存機能のC/C++ソースやモデルが苦手な処理などを1つのブロック(S-Function)として、モデル内に組み込むことが可能です。
Simulink上でシミュレーションする場合、S-FunctionブロックはMEXファイルを読み込み、動作させます。
MEXファイルは、OSによって以下の拡張子で作成されます。
OS | 拡張子 |
---|---|
Linux(64bit) | mexa64 |
Apple(64bit) | mexmaci64 |
Windows(64bit) | mexw64 |
※以降はWindows版で説明します。
MEXファイルは拡張子が特殊ですが、中身は「動的リンクライブラリ(DLL)」になっています。
動作させたいソース+モデルとのIF、MEXファイルに必要なlibを取り込んだものをDLLとしてビルドし、拡張子をmexw64としています。
例)Visual Studioのdumpbinでdumpした結果。DLLとして作られていることが分かります。
MEXファイルはExport関数としてmexFunction()を持っています。
SimulinkはS-Functionブロックと同名のMEXファイルをロードし、MEXファイル内にあるmexFunctionを呼び出すことでS-Functionブロックを動作させます。
※プラグイン開発を行ったことがある方は、イメージしやすいと思います。
こういった仕組みを理解しなくても利用することはできますが、中身を知るとより理解が深まるのではないでしょうか。