−シミュレーションからROM組み込みまで−

●C言語ソース生成 [コンパイラ]

良好なシミュレーション結果が得られたら、コンパイラでコンパイルを実行します。

ブロック・ダイアグラムをコンパイルすると、以下のようなC言語ソース・コードが得られます。
このソース・コードはANSI−C規格準拠であるため、ほとんどのコンパイラで直接、
利用することが可能です。

実際にモータなどを制御・駆動するには、モータの駆動を制御する実機のCPUボード用の
C言語コンパイラ*
(別途必要)により、このリストを更にコンパイル(クロス・コンパイル)し、
CPUボードに転送・実行します。

*) (株)ルネサス テクノロジ製「HEW」コンパイラなどを推奨。


・Simtrol-mのコンパイル結果例(出力C言語ソース・コードの一例)

/////////////////////////////////////////////
// Simtrol-m by SHOWA DENGYOSHA CO.,LTD. //
/////////////////////////////////////////////
//
// 作成元ファイル名:[ブラシレスDCモータベクトル制御.ktc]
//
// 作成日時:[2006/07/14 19:39]
//

////////////////
// 変数の宣言 //
////////////////

// 線変数の宣言
float x0;
float x1; float x2; float x3; float x4; float x5;
float x6; float x7; float x8; float x9; float x10; float x11; float x12; float x13; float x14; float x15;
float x16; float x17; float x18; float x19; float x20;
float x21; float x22; float x23; float x24; float x25;
float x26;

// スコープ類の変数宣言
int counter6;
int dataSize6;
float data6[10000];
int counter8;
int dataSize8;
float data8[10000];
int counter11;
int dataSize11;
float data11[10000];

// プロパティ・データ領域の宣言
float pro19[3], pro4[1], pro1[3], pro21[3], pro20[3];
float pro3[3], pro2[3], pro5[7], pro6[11], pro7[7];
float pro8[11], pro9[1], pro22[3], pro10[3], pro11[11];
float pro12[3], pro13[3], pro14[3], pro15[3], pro23[3];
float pro24[3], pro17[1], pro18[1];

// 作業領域の宣言
float work1[3], work3[3], work2[3], work5[6], work10[2];

// 処理用変数の宣言
int err; // エラー処理用変数

//////////////////
// 変数の初期化 //
//////////////////

x0 = 0;
x1 = 0; x2 = 0; x3 = 0; x4 = 0; x5 = 0;
x6 = 0; x7 = 0; x8 = 0; x9 = 0; x10 = 0; x11 = 0; x12 = 0; x13 = 0; x14 = 0; x15 = 0;
x16 = 0; x17 = 0; x18 = 0; x19 = 0; x20 = 0;
x21 = 0; x22 = 0; x23 = 0; x24 = 0; x25 = 0;
x26 = 0;
counter6 = 0;
dataSize6 = 10000;
counter8 = 0;
dataSize8 = 10000; counter11 = 0;
dataSize11 = 10000;

//////////////////////////
// プロパティー値の設定 //
//////////////////////////

//2/3入力加減演算
pro19[0] = -1; // input1 : 入力1(上)(加算:0 減算:1 表示なし:-1)
pro19[1] = 0; // input1 : 入力2(左)(加算:0 減算:1 表示なし:-1)
pro19[2] = 1; // input1 : 入力3(下)(加算:0 減算:1 表示なし:-1)

//CONST : 定数信号器
pro4[0] = 0; // constant : 定数
//PI-D : PI−D制御器
pro1[0] = 0.3; // kp : 比例定数
pro1[1] = 5; // ki : 積分定数
pro1[2] = 0; // kd : 微分定数
//2/3入力加減演算
pro21[0] = 1; // input1 : 入力1(上)(加算:0 減算:1 表示なし:-1)
pro21[1] = 0; // input1 : 入力2(左)(加算:0 減算:1 表示なし:-1)
pro21[2] = -1; // input1 : 入力3(下)(加算:0 減算:1 表示なし:-1)

//2/3入力加減演算
pro20[0] = 1; // input1 : 入力1(上)(加算:0 減算:1 表示なし:-1)
pro20[1] = 0; // input1 : 入力2(左)(加算:0 減算:1 表示なし:-1)
pro20[2] = -1; // input1 : 入力3(下)(加算:0 減算:1 表示なし:-1)

//PI-D : PI−D制御器
pro3[0] = 10; // kp : 比例定数
pro3[1] = 1; // ki : 積分定数
pro3[2] = 0; // kd : 微分定数

//PI-D : PI−D制御器
pro2[0] = 10; // kp : 比例定数
pro2[1] = 1; // ki : 積分定数
pro2[2] = 0; // kd : 微分定数

//BLDCM : ブラシレスDCモータ(モータパラメータ値使用)
pro5[0] = 4.03; // Ra :巻線抵抗 [Ω]
pro5[1] = 0.09; // Ld :d 軸インダクタンス [H]
pro5[2] = 0.09; // Lq :q 軸インダクタンス [H]
pro5[3] = 0.0012; // J :慣性モーメント [Kgm2]
pro5[4] = 0.0001; // D :粘性摩擦係数 [Nm・s/rad]
pro5[5] = 0.44; // K :モータパラメータ [Vs/rad]または[Nm/A]
pro5[6] = 2; // P :極対数

//SCOPE4 : オシロスコープ(4入力)
pro6[0] = 0; // tmin : 時間軸最小値[sec]
pro6[1] = 5; // tmax : 時間軸最大値[sec]
pro6[2] = 1; // tgrid : 時間軸目盛り刻み[sec]
pro6[3] = -0.2; // ymin1 : 左y軸最小値
pro6[4] = 0.2; // ymax1 : 左y軸最大値
pro6[5] = 0.05; // ygrid1 : 左y軸目盛り刻み
pro6[6] = 0; // ymin2 : 右y軸最小値
pro6[7] = 50; // ymax2 : 右y軸最大値
pro6[8] = 10; // ygrid2 : 右y軸目盛り刻み
pro6[9] = 1; // ScopeNo : スコープ番号
pro6[10] = 10000; // buffsize : データ数(1入力あたり)

//DCCTRL : ブラシレスDCモータの非干渉化(モータパラメータ値使用)
pro7[0] = 4.03; // Ra :巻線抵抗 [Ω](未使用)
pro7[1] = 0.09; // Ld :d 軸インダクタンス [H]
pro7[2] = 0.09; // Lq :q 軸インダクタンス [H]
pro7[3] = 0; // J :慣性モーメント [Kgm2](未使用)
pro7[4] = 0; // D :粘性摩擦係数 [Nm・s/rad](未使用)
pro7[5] = 0; // K :モータパラメータ [Vs/rad]または[Nm/A]
pro7[6] = 2; // P :極対数

//SCOPE2 : オシロスコープ(2入力)
pro8[0] = 0; // tmin : 時間軸最小値[sec]
pro8[1] = 5; // tmax : 時間軸最大値[sec]
pro8[2] = 1; // tgrid : 時間軸目盛り刻み[sec]
pro8[3] = -10; // ymin1 : 左y軸最小値
pro8[4] = 10; // ymax1 : 左y軸最大値
pro8[5] = 1; // ygrid1 : 左y軸目盛り刻み
pro8[6] = -10; // ymin2 : 右y軸最小値
pro8[7] = 10; // ymax2 : 右y軸最大値
pro8[8] = 1; // ygrid2 : 右y軸目盛り刻み
pro8[9] = 5; // ScopeNo : スコープ番号
pro8[10] = 10000; // buffsize : データ数(1入力あたり)

//CTRL_I : I制御器
pro9[0] = 1; // ki : 積分定数

//2/3入力加減演算
pro22[0] = -1; // input1 : 入力1(上)(加算:0 減算:1 表示なし:-)
pro22[1] = 0; // input1 : 入力2(左)(加算:0 減算:1 表示なし:-1)
pro22[2] = 1; // input1 : 入力3(下)(加算:0 減算:1 表示なし:-1)

//PID : PID制御器
pro10[0] = 20; // kp : 比例定数
pro10[1] = 1; // ki : 積分定数
pro10[2] = 0; // kd : 微分定数

//SCOPE2 : オシロスコープ(2入力)
pro11[0] = 0; // tmin : 時間軸最小値[sec]
pro11[1] = 5; // tmax : 時間軸最大値[sec]
pro11[2] = 1; // tgrid : 時間軸目盛り刻み[sec]
pro11[3] = 0; // ymin1 : 左y軸最小値
pro11[4] = 50; // ymax1 : 左y軸最大値
pro11[5] = 5; // ygrid1 : 左y軸目盛り刻み
pro11[6] = 0; // ymin2 : 右y軸最小値
pro11[7] = 50; // ymax2 : 右y軸最大値
pro11[8] = 5; // ygrid2 : 右y軸目盛り刻み
pro11[9] = 7; // ScopeNo : スコープ番号
pro11[10] = 10000; // buffsize : データ数(1入力あたり)

//STEP : ステップ信号発生器
pro12[0] = 1; // delay : 切り替え時間[sec]
pro12[1] = 0; // vinit : 初期値
pro12[2] = 15; // vfinal : 切り替え後の値

//STEP : ステップ信号発生器
pro13[0] = 2; // delay : 切り替え時間[sec]
pro13[1] = 0; // vinit : 初期値
pro13[2] = 15; // vfinal : 切り替え後の値

//STEP : ステップ信号発生器
pro14[0] = 2.5; // delay : 切り替え時間[sec]
pro14[1] = 0; // vinit : 初期値
pro14[2] = -15; // vfinal : 切り替え後の値

//STEP : ステップ信号発生器
pro15[0] = 3.5; // delay : 切り替え時間[sec]
pro15[1] = 0; // vinit : 初期値
pro15[2] = -15; // vfinal : 切り替え後の値

//2/3入力加減演算
pro23[0] = -1; // input1 : 入力1(上)(加算:0 減算:1 表示なし:-1)
pro23[1] = 0; // input1 : 入力2(左)(加算:0 減算:1 表示なし:-1)
pro23[2] = 1; // input1 : 入力3(下)(加算:0 減算:1 表示なし:-1)

//2/3入力加減演算
pro24[0] = -1; // input1 : 入力1(上)(加算:0 減算:1 表示なし:-1)
pro24[1] = 0; // input1 : 入力2(左)(加算:0 減算:1 表示なし:-1)
pro24[2] = 1; // input1 : 入力3(下)(加算:0 減算:1 表示なし:-1)

//CTRL_I : I制御器
pro17[0] = 1; // ki : 積分定数

//CTRL_I : I制御器
pro18[0] = 1; // ki : 積分定数

err = 0; // エラー変数の初期化

//////////////
// 実行処理 //
//////////////

fn_sum3( x0, x17, x10, pro19, &x1, &err ); // 2/3入力加減演算
fn_const( pro4, &x2, &err ); // CONST : 定数信号器
fn_pi_d( x1, x10, pro1, work1, &x3, &err ); // PI-D : PI−D制御器
fn_sum3( x8, x2, x0, pro21, &x4, &err ); // 2/3入力加減演算


(注意) 他のCPU上での利用を前提としているため、プリプロセッサやヘッダー・ファイル
など、コンパイラやシステム環境に依存する部分は含みません。