1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Scilab/XcosでCコード生成

Posted at

目的

Xcosで作成したモデルから、ソースを生成したい。

Scilab/Xcosのインストール

sudo apt install scilabでOK。

パッケージの調査

Xcosからコード生成するのは、ググってみると以下2つが見つかった。

Scilab Code Generatorの方が公式っぽいので、こっちで動かせないか試してみる。

Scilab Code Generator

インストール1(失敗)

Webページによると、コマンドでインストールできるらしい。Scilabを立ち上げて、コンソールで以下操作を行ったが、うまくインストールされない。Scilabをrootで立ち上げて、同じ操作をしてもインストール失敗。

-->atomsInstall("xcos_code_generator")
レポジトリをスキャン中 http://atoms.scilab.org/6.0 ... 完了

関数の   265 行目 atomsDESCRIPTIONget ( /usr/share/scilab/modules/atoms/macros/atoms_internals/atomsDESCRIPTIONget.sci 行 284 )
関数の    31 行目 atomsIsPackage      ( /usr/share/scilab/modules/atoms/macros/atoms_internals/atomsIsPackage.sci 行 47 )
関数の    69 行目 atomsInstallList    ( /usr/share/scilab/modules/atoms/macros/atoms_internals/atomsInstallList.sci 行 108 )
関数の   233 行目 atomsInstall        ( /usr/share/scilab/modules/atoms/macros/atomsInstall.sci 行 249 )

atomsDESCRIPTIONget: save ('/home/projectm/.Scilab/scilab-6.0.1/.atoms/packages') でエラーが発生しました.

インストール2(成功)

Webページより、xcos_code_generator-0.9.201901-bin-6.0.zipをダウンロード。

$ unzip xcos_code_generator-0.9.201901-bin-6.0.zip
Archive:  xcos_code_generator-0.9.201901-bin-6.0.zip
   creating: xcos_code_generator-0.9.201901-bin-6.0/
...
  inflating: xcos_code_generator-0.9.201901-bin-6.0/unloader.sce
$ 

Scilabのファイルブラウザでの現在地がxcos_code_generator-0.9.201901-bin-6.0ディレクトリになるように、Scilabのコンソールより以下操作。( 実際に入力しているのは、exec("builder.sce")exec('loader.sce')のみ。セミコロンをつければ、もっと出力が減っていたはず。 )

-->exec("builder.sce")
--> // Copyright (C) 2008 - INRIA
--> // Copyright (C) 2009-2011 - DIGITEO
--> // This file is released under the 3-clause BSD license. See COPYING-BSD.
--> mode(-1);
マクロを構築中...
-- [xcos_code_generatorlib]の作成 (マクロ) --
genlib: ファイルを処理しています: xcg_to_SIL.sci
genlib: ファイルを処理しています: xcg_to_SIL_eCG.sci
-- [xcg_sci_codegenlib]の作成 (マクロ) --
-- [xcg_sci_librarylib]の作成 (マクロ) --
ヘルプを構築中...
loader.sceを生成中...
unloader.sce を生成中 ...
cleaner.sceを生成中...
-->exec('loader.sce')
--> // This file is released under the 3-clause BSD license. See COPYING-BSD.
--> // Generated by builder.sce: Please, do not edit this file
--> oldmode = mode();      mode(-1);
Start Scilab Code Generator
	Version: 0.9.20190122
	Load macros
	Load help
	Load demos
--> clear oldlines oldmode;

demosディレクトリにあった、SampleCodeGenModel.zcosをXcosで開く。

Screenshot from 2020-02-08 17-51-35.png

以下手順で、Cソースを生成できた。

1 青いブロックを選択して、「シミュレーション」→「コンパイル」
2 「ツール」→「Code Generation to C(Emmtrix)」

Start Scilab Code Generator
警告: Scilab Code Generator is already loaded

 Using Emmtrix CodeGen latest version
emmtrix Code Generator (Oct 26 2017 01,14,08)

SampleCodeGen.sci(1,31-32), W00053 Warning, Variable t not used.
  function [y1] = SampleCodeGen(t, u1, u2)
                                ~
Value Range Coverage, 166/272
Memory Stats, 128 stack, 0 heap, 0 global
Compile time, 169 ms

Build succeeded ... 0 error(s), 1 warning(s), 0 note(s)
Retrieving file Makefile.gen
...
Retrieving file emx_codegen_rand.h

    []
-->

コードはgeneratedディレクトリに生成された。
以下の通り、makeして実行することができた。

$ cd generated
$ ls
Makefile.gen         SampleCodeGen.h.map         SampleCodeGen_inputs.h      SampleCodeGen_outputs.c.map  SampleCodeGen_scenario.c      SampleCodeGen_scenario.h.map  emx_codegen_intern.h
SampleCodeGen.c      SampleCodeGen.sci           SampleCodeGen_inputs.h.map  SampleCodeGen_outputs.h      SampleCodeGen_scenario.c.map  SampleCodeGen_scenario.html   emx_codegen_rand.c
SampleCodeGen.c.map  SampleCodeGen_inputs.c      SampleCodeGen_inputs.sci    SampleCodeGen_outputs.h.map  SampleCodeGen_scenario.d      SampleCodeGen_scenario.sce    emx_codegen_rand.h
SampleCodeGen.h      SampleCodeGen_inputs.c.map  SampleCodeGen_outputs.c     SampleCodeGen_outputs.sci    SampleCodeGen_scenario.h      emx_codegen.h
$ make -f Makefile.gen
cc -g -Wall -Wno-unused-function -Wno-unknown-pragmas -std=c99 -c SampleCodeGen.c -o SampleCodeGen.o
cc -g -Wall -Wno-unused-function -Wno-unknown-pragmas -std=c99 -c SampleCodeGen_inputs.c -o SampleCodeGen_inputs.o
cc -g -Wall -Wno-unused-function -Wno-unknown-pragmas -std=c99 -c SampleCodeGen_outputs.c -o SampleCodeGen_outputs.o
cc -g -Wall -Wno-unused-function -Wno-unknown-pragmas -std=c99 -c SampleCodeGen_scenario.c -o SampleCodeGen_scenario.o
cc -g -Wall -Wno-unused-function -Wno-unknown-pragmas -std=c99 -c emx_codegen_rand.c -o emx_codegen_rand.o
cc SampleCodeGen.o SampleCodeGen_inputs.o SampleCodeGen_outputs.o SampleCodeGen_scenario.o emx_codegen_rand.o  -lm -o SampleCodeGen_scenario
$ ./SampleCodeGen_scenario 
    0.211325
     0.17035
$

今後

デモ以外のXcosモデルでCコード生成できるようにする。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?