MV-7006:MotionSolve用のPythonユーザーサブルーチン
本チュートリアルでは、Pythonを使ってMotionSolve用のユーザーサブルーチンを作成し、Cで書かれた6個のSFOSUBを含むモデルをPythonユーザーサブルーチンに変換します。
Pythonのようなスクリプト言語を使用することによって、ユーザーは、煩雑さの軽減とパワーを得ることができます。これらのスクリプトは変換処理され、コンパイルの必要はありません。したがって、サブルーチンを構築するためのツールを要しません。さらに、スクリプトは読んだり理解するのがより簡単で、より速いプロトタイピングに使用することが可能です。
プログラミングの経験があまりない場合でも、ユーザーサブルーチン用のスクリプトを書くことは、Cコードを書くよりも簡単です。Cユーザーにとっては、この使用法は、いっそうシンプルです。Pythonの言語シンタックスに従うこと以外では、CコードをPythonスクリプトに変換するためのルールに従うことだけが必要です。
参照用として、Pythonユーザーサブルーチンのサンプルセットが、hwsolvers\motionsolve\usersub\py_srcフォルダーに用意されています。
Pythonユーザーサブルーチンを書くためのルール
- 1. 出力の引数は、左側に移動する必要があります。
c_datout(&istat);
は、次のようになります;
istat = py_datout()
Cユーティリティ関数では、入力引数および出力引数は、引数リスト内に組み合わされています。 Pythonでは、py_*ユーティリティ関数の引数は厳密に入力引数です。出力引数はすべて、関数コールの戻し値として、左側に移動する必要があります。
- Cユーティリティ関数では、入力または出力配列引数の後ろには通常、配列のサイズ用の整数の引数が続きます。Pythonユーティリティ関数では、配列のサイズ用の整数の引数は必要がないため、削除されます。
ipar[0] = (int)par[0]; ipar[1] = (int)par[1]; c_sysfnc("DM", ipar, 2, &dm, &errflg);
は単に、次のようになります;[dm, errflg] = py_sysfnc("DM", [par[0],par[1]])
またipar[0] = (int)par[1]; ipar[1] = (int)par[0]; c_sysary("TDISP", ipar, 2, u1, &nstates, &errflg);
は、次のようになります;[u1, errflg] = py_sysary("TDISP", [par[1],par[0]])
- 関数名を、c_* からpy_*に変更します。
c_rcnvrt(sys1, coord1, sys2, coord2, &istate);
は、次のようになります;[coord2, istate] = py_rcnvrt(sys1, coord1, sys2)