Scilabで学ぶフィードバック制御入門
ようこそ
 はじめに
数学の準備
 高校数学
 複素数
 ラプラス変換
 ラプラス逆変換
Scilab入門
 概要
 四則演算
 配列
 グラフ表示
 プログラム1
プログラム2
伝達関数
 概要
 poly,syslin,csim
 ステップ応答法
 RLC回路
周波数応答
 ゲイン・位相
 ボード線図
 比例・微分・積分
 1次遅れ,ムダ時間
 パデ近似の導出
 pade関数の作成
制御の安定性
 ブロック線図
 フィードバック
 2次遅れ系
 ステップ応答法
 周波数応答法
 ナイキスト線図
 安定性の判別
 判別の仕組み
 安定余裕の評価
 評価の例題
Xcos
 入門
 例・運動方程式
PID制御(Xcos)
 概要
 比例(P)動作
 積分(I)動作
 微分(D)動作
 PID・ボード線図

Scilab入門:プログラム2


Scilabでのプログラミングを解説します。
他のプログラム言語の経験者であれば斜め読み程度で大丈夫と思います。

input

input関数は、プログラム上から対話形式で値を入力する関数です。

スクリプトファイル名 : script2.sce
//三角形の面積を求める
w=input('w=');    //底辺
h=input('h=');     //高さ
s=w*h/2

// は、コメント行を表します。
// は、行の途中でも記述でき、それ以降から行末までがコメントになります。
例のようにコメントは日本語の使用も可能ですが、コンソール画面では文字化けします。

<実行: メニュー[ファイル]→[Exeute...]→「script2.sce」>
コンソール画面
w=10     //←入力待ち 10 を入力(底辺)
h=5      //←入力待ち 5 を入力(高さ)
 s  =
    25.  //←三角形の面積を出力
 
 Execution done.

halt/pause

プログラムを停止・中断・再開します。

スクリプトファイル名 : script3.sce
//三角形の面積を求める
w=15    //底辺
halt('halt!!!')
h=5    //高さ
pause
s=w*h/2

halt('comment') commentを表示してプログラムを中断
「Enter」キーで再開
(「Enter」キー以外の入力は無視)
pause プログラムを中断
プロンプトが '-1->' に変わる
resume と入力すれば再開
abort と入力すればプログラムの終了

プログラムの中断中は、通常のコンソールと同じように使用可
つまり、変数の内容を見たり、変更したりすることが可能

<実行: メニュー[ファイル]→[Exeute...]→「script3.sce」>
コンソール画面
w  =
    15.  
halt!!!    //←文字列入 halt!!! を表示して入力待ち
-->        //←「Enter」キーを入力
 h  =
    5.  

-1->w=5    //←pauseを実行 プロンプトが '-1->' に変わる ここでは 'w=5' を入力して w の値を変えた
 w  =
    5.  

-1->resume //←'resume' と入力 プログラムを再開
 s  =
    37.5  
 
 Execution done.

if文

条件を判定し、結果によってプログラムの流れを変更します。

スクリプトファイル名 : script4.sce
//数値が + のときは'white'、- のときは'black'、0 のときは'red'と表示する
a=input('a =');
if a>0 then
  color='white';
elseif a<0 then
  color='black';
else
  color='red';
end
disp('Color=' + color);

これをフロチャートで表したものが下図です。


条件式の種類
== 等しい
~= or <> 等しくない
< より小さい
<= 以下
> より大きい
>= 以上

<実行: メニュー[ファイル]→[Exeute...]→「script4.sce」>
コンソール画面
a =-4          //← -4 と入力

 Color=black   //← 0 未満なので 'black' と表示

 Execution 

繰り返し:for文

for文は繰り返し処理を実行します。

スクリプトファイル名 : script5.sce
//1〜10を合計するプログラム
sum=0;
for n=1:10 do
  sum=sum+n;
  disp('n=' + string(n) + ',sum=' + string(sum));
end

繰り返し部分をフロチャートで表したものが下図です。


<実行: メニュー[ファイル]→[Exeute...]→「script5.sce」>
コンソール画面
n=1,sum=1
n=2,sum=3
n=3,sum=6
n=4,sum=10
n=5,sum=15
n=6,sum=21
n=7,sum=28
n=8,sum=36
n=9,sum=45
n=10,sum=55

Execution done. 

繰り返し:while文

while文は繰り返し処理を実行します。
上述の for文 と全く同じ処理を while文 で作成しました。

スクリプトファイル名 : script6.sce
//1〜10を合計するプログラム
sum=0;
n=1;
while n<=10 do
  sum=sum+n;
  disp('n=' + string(n) + ',sum=' + string(sum));
  n=n+1;
end

<実行: メニュー[ファイル]→[Exeute...]→「script6.sce」>
コンソール画面
n=1,sum=1
n=2,sum=3
n=3,sum=6
n=4,sum=10
n=5,sum=15
n=6,sum=21
n=7,sum=28
n=8,sum=36
n=9,sum=45
n=10,sum=55

Execution done.
当然、結果は前述の for文 と同じになります。