1 簡単な例題
今回の例題は、以下のサイトに掲載されています。
Simple code generation | Scilab (https://www.scilab.org/simple-code-generation )
2 準備(コード・ジェネレータのインストール)
仕様しているScilabのバージョンは (2023.1.0) です。
atomsでインストールするアプリケーションのバージョンは (0.9.201901) です。
Xcosフォルダーの中にある “Scilab Code Generator” をインストールします。
scilab 2023.1.0 を 再起動すると、scilabコンソールに以下のようなコメントが表示されます。
表示されるコマンドの中に “Start Scilab Code Generator” はありましたか?
バージョンの表記が異なっていますが、 ” 0.9.201901 “で大丈夫です。
この後、簡単な例題 に記載されているガウス・フィルタ(3X3)のScilab スクリプトをコピーし保存します。
保存する時、ファイル名は “gauss_filter_3_3.sce” にしました。
function B=gauss_filter_3_3(A) x=size(A,2); y=size(A,1); B = zeros(y, x); for j = 2:y-1 for i= 2:x-1 val= 4*A(j,i)+2*(A(j,i-1)+A(j,i+1)+A(j+1,i)+A(j-1,i))+A(j+1,i+1)+A(j-1,i+1)+A(j+1,i-1)+A(j-1,i-1); B(j,i) = val/16; end end endfunction A = rand(10, 10) * 256; B = gauss_filter_3_3(A);
例題を紹介しているサイトでは、このスクリプトの実行結果をMatplot()関数を使ってポスト処理しています。
もう少しわかりやすくするために、mesh()関数を併用しました。
rand()関数 <乱数発生関数>を使って例題の数値を生成しているため、同じ結果は得られませんが参考にはなると思います。
左側は、乱数で生成した結果です。
この結果にガウス・フィルタを適用し、生成された画像が右側になります。
ガウス・フィルタは画像処理において、コントラストやエッジ部分を滑らかにする効果があるります。
そのため、左の荒れた結果が滑らかに変化していることが分かります。
3 Cコードの生成
保存した scilab スクリプトに対し、scilab コンソールから、以下のコマンドを実行します。
–> emx_codegen(“gauss_filter_3_3.sce”);
当社では、以下のような Echo が出力されました。
“Generating files in C:\Users\teruh\AppData\Local\Temp\SCI_TMP_5552_9802\build”
“Using Emmtrix CodeGen latest version”
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
emmtrix Code Generator (Apr 20 2021 07,25,46)
gauss_filter_3_3.sce(14,1-2), W00053 Warning, Variable B not used.
B = gauss_filter_3_3(A);
~
Memory Stats, 8 stack, 0 heap, 0 global
Datatype Stats, 0 total, 0 float, 0 double, 0 int, 0 int64
Build succeeded after 0.1s … 0 error(s), 1 warning(s), 0 note(s)
Retrieving file Makefile.gen
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file emx_codegen.c
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file emx_codegen.h
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file emx_codegen_intern.h
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file emx_codegen_rand.c
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file emx_codegen_rand.h
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file gauss_filter_3_3.c
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file gauss_filter_3_3.d
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file gauss_filter_3_3.h
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file gauss_filter_3_3.html
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file gauss_filter_3_3.map
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
Retrieving file gauss_filter_3_3.sce
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
警告: getURL will be permanently removed in Scilab 2025.0.0.
Please use http_get instead.
その結果、 “build” というフォルダーが作成されます。
scilab 2023.1.0 のファイルブラウザを見ると、以下のような状態になります。
その中に、scilab スクリプトから生成されたC コードが出力されます。
出力されるファイルは、以下の通りです。
scilab のサイトで紹介されている例題を使い、できた部分はここまでです。
この後、gccやMinGWを使い、C コードをコンパイルして実行ファイルを生成できる方法を調べたいと考えています。
また、Cコードに出力できる範囲についても、調べないた方がいいですね。
subplot()関数やmesh()関数などは変換できるのでしょうか。
あるいはUIcontrol()関数で定義するGUI部品はC コードに変換できるのでしょうか。
当社では、実務にScilabを使っています。
物理的な微小単位での熱伝導モデルが出来れば、そこから積分して設計検討のためにシミュレーションをしています。
実行ファイルとして販売できると事業拡大ができるので、頑張りたいです。