Scilab – DECODE https://decode.red/blog data decode, decoder or decoded ... design of code Mon, 15 Dec 2025 06:15:00 +0000 ja hourly 1 https://wordpress.org/?v=4.7.29 PID Controller ../../../20140809176/ Sat, 09 Aug 2014 14:57:49 +0000 ../../../?p=176 PID制御はフィードバック制御の基礎となるもので、前回にひきつづきScilabでテストしてみました。
ScilabからXcosというアプリケーションを立ち上げると、MatlabのSimulinkに相当するモデルベースデザインができる環境になります。パレットブラウザからブロックをドラッグ&ドロップして、これらを線でつないでいきます。
現在、フリーソフトではこれ以外の選択肢はなさそうに思います。

環境: Scilab 5.5.0 / Windows 7

まず、テストで使う入力とその一次おくれを確認します。
入力は、Sin波をクォンタイズしたものを使います。
cos01
Sin波ジェネレータ / Gain:1 Rad/s:1 Rad:0
Quantization / Step:0.5 Type:1
Clock / 0.1,0.1

緑が制御対象に送られる入力で、黒が出力です。
cos02

次にPIDレギュレータを追加します。
cos03

ブロックパラメータを適当に調整して、目標値に近づけました。
(もっと適合できそうですが・・)
cos04

参考までにP制御(I=0,D=0にする)だけだと、以下のようになります。(順番としてはこれを先)
cos05
目標にまだ遠いことがわかります。

制御対象にもっと多様なものテストできないかと、ソフトウェアエンジニア的に、興味をもっています。

]]>
Scilab Transfer Function ../../../20140809164/ Sat, 09 Aug 2014 07:18:26 +0000 ../../../?p=164 「フィードバック制御入門」なる本がO’Reillyから先月発売されました。最初「O’Reillyがフィードバック制御?」とちょっと違和感を感じましたが、頭に「エンジニアのための」とついていることが、肝です。ソフトウエアエンジニアのために書かれた制御入門なのですが、これから重要になってくるということなのでしょう。まさにこのブログを始めたのも、このあたりを感じていたからなので、このタイムリーな出版に本当に驚きました。昔組み込みの仕事で使っていたMatlabが、最近使いだしたRによってもう一度使ってみたくなっていたのも、自然なことだったのかもしれません。

今回は、そのMatlabの代わりに使えるScilabを使ってみました。書籍は随分前に買ったことがありますが、アプリを使うのは初めてです。

参考:MATLABの代わりに使えるソフトウェアまとめ
http://matome.naver.jp/odai/2136163231573327601

ここにその他も代わりに使えるソフトの情報があります。

まず最初は、一次おくれ伝達関数に対して、ステップ応答、インパルス応答、サイン波の応答をプロットしてみました。

s=poly(0, 's');
S1=syslin('c', 1/(s+1))
t=0:0.01:10;
y=csim('step', t, S1);
plot(t, y, 'r')
y=csim('step', t, S1*S1);
plot(t, y, 'g')
y=csim('step', t, S1*S1*S1);
plot(t, y, 'b')
y=csim('step', t, S1/.S1);
plot(t, y, 'c')

Sci01

y=csim('impulse',t,S1);
plot(t, y, 'r')
y=csim('impulse',t,S1*S1);
plot(t, y, 'g')
y=csim('impulse',t,S1*S1*S1);
plot(t, y, 'b')
y=csim('impulse',t,S1*S1*S1+S1*S1*S1);
plot(t ,y, 'c')

Sci02

u=sin(t); 
y=csim(u, t, S1);
plot(t, u, 'r') 
plot(t, y, 'g')
y=csim(u,t,S1*S1);
plot(t, y, 'b')

Sci03

S1*S1は直列接続、S1+S1は並列接続、S1/.S1はフィードバック接続をあらわします。
参考:http://alk.fam.cx/block_010.html

]]>