・Simlink用いたときの注意(MATLAB ver6.1)
・mdlファイルとmファイルの名前が同一だと実行させたときに
どちらか片方しか起動しないので同じ名前は付けない.
・連続系で記述した伝達関数のブロックの入力信号が
ランプ波形のように特異点を生じる可能性がある場合は
計算誤差が大きくなりやすいので,そのような場合は
離散系で記述した伝達関数を用いたほうが良い.
特に擬似微分の場合は要注意.
伝達関数を用いるより状態方程式用いたほうが初期状態を設定できるので
Simulation開始時の誤差が少なくなる.
また,離散系の状態方程式のほうが連続時間系の状態方程式よりも誤差生じにくい.
・SimlinkでScopeのY軸のスケール調整(MATLAB ver6.1)
Scopeの画面を起動し逆クリックして座標軸プロパティを選択.
・Simlinkで任意のプロファイルを用いる(MATLAB ver6.1)
mファイルで
profile_data = [time_data profile];
のようなプロファイルのデータを作成後,実行し
simulink上でFromWorkSpaceでデータの項目に
変数名(上記の場合はprofile_data)を記述すると
そのプロファイルを出力できる.
・Simulinkで直接Bode線図を記述する.(MATLAB ver6.1)
@SimulinkでBode線図を記述したmdlファイルを開く.
Aメニューから[ツール]→[線形解析]を選択し,Input PointとOutPut Point
を入力信号と出力信号の線に挿入する.
BLTIViewerのメニューから[Simulink]→[線形化したモデルの取得]を選択する.
C(左利き用のマウスの設定で)左クリックして[表示方法]→[ボード]を選択する
とボード線図が記述される.
その後,更に(左利き用のマウスの設定で)左クリックして[グリッド]を選択
するとグリッド表示させることもできるようになる.
また,Bode線図の表示後にLTIViewerの[編集]→[LTIViewerの設定]を選択すること
により,周波数の軸の単位を[rad/sec]から[Hz]に設定したりすることもできる.
一度,記述した線はLTIViewerの[編集]→[システム]→[削除]で消すことができる.
LTIViewerのメニューから[ファイル]→[エクスポート]を選択し[ディスクへ出力]すると
MATファイルで線形化(時不変)システムのシステム行列を保存することができる.
保存されたMATファイルは
who -file MATファイル名.mat
で内部の構造体を確認することができる.
load MATファイル名.mat
でMATLABにMATファイルをインポートし,
[MAG,PHASE,W]=Bode(構造体名)
とすると,Simulink用いなくてもBode線図再現できる.
ただし,各周波数におけるゲインと位相の数値データを取り出すには
そのままではMIMO系に対応するために3次元データになっているので
[MAG,PHASE,W]=Bode(構造体名.a,構造体名.b,構造体名.c,構造体名.d)
とするか,reshapeコマンドを用いて2次元データに変換したほうがよい.
LTIViewerのメニューから[ファイル]→[エクスポート]を選択し[ワークスペースへ出力]
を選択した場合は線形化(時不変)システムのシステム行列を直接構造体としてMATLABで
扱うことが出来るようになる.(構造体名はエキスポート時にエキスポートリストに表示
される.)その後は上MATファイルをインポートした後のときと同様にBodeを用いれば
Bode線図再現でき,各周波数におけるゲインと位相の数値データを取り出すこともできる
ようになる.
・Figureをコピーするときにバックグラウンドの色が変わらないようにする方法(MATLAB ver6.1)
Figureのメニューバーにて,[編集]→[Figureプロパティ]にてバックグラウンドカラーに
カーソルをあてた後,[適用]ボタンをクリックしOK.その後にコピーするとバックグラウンドの色
が変わりにくいように思える.
・CSV形式でデータの保存(MATLAB ver6.1)
csvwrite('051014_02sim.csv',sim_reslt)
のようにしてデータ保存する.
・CSV形式でデータの読込(MATLAB ver6.1)
csvreadを用いる.
ただし,csvreadでは読みこむファイル名にワイルドカード(*)使えなかった.
・S-functionの使い方(MATLAB ver6.1)
STEP1 Simulink起動
STEP2 Simulink Library BrowserのFunctions&TablesのS-functionを
モデルにドラッグ.
STEP3 Simulink Library BrowserのM-File-S-functionのM-File Templateを
モデルにドラッグ.
STEP4 STEP3でドラッグしたTemplateをダブルクリックして開き,ファイル名(*.m)と
関数名を変更してドラッグしたモデルのmdlファイルと同じディレクトリなどに保存.
パラメータを追加したい場合はt,x0,u,flagの後に追加すること.
STEP5 S-Functionブロックを開きダイアログボックスのS-Function名フィールドに
S-Function名を設定する.
STEP6 STEP4で設定したファイルの
function[sys,x0,str,ts]=mdlInitializeSizesの中の各Sizeとx0などを設定.
STEP7 連続時関系の場合は
function sys=modelDeribatives(t,x,u)の中を記述
(例)dx(t)/dt=Ax+Bu → sys= A*x+B*u
離散時関系の場合は
function sys=modelUpdate(t,x,u)の中を記述
(例)x(k+t)=Ax(k)+Bu(k) → sys= A*x+B*u
STEP8 function sys=mdlOutputs(t,x,u)の中を記述
(例)連続時関系
y(t)=Cx(t)+Du(t) → sys = C*x+D*u
離散時関系
y(k)=Cx(k)+Du(k) → sys = C*x+D*u
Dが0でない場合はSTEP6にてSizeDirFeedthrogh=1とすること.
STEP9 変数をSimulinkのモデル上で設定したい場合は
S-Functionブロックを逆クリックで選択し,「S-functionのマスク」
(2回目以降はマスクの編集)を選択し,初期化のタブを選択.その後,マスクタイプに
S-function:function名を設定し,プロンプトと変数,コントロールタイプを入力する.
また,S-Functionブロックを逆クリックで選択してブロックパラメータを選択しS-Function
パラメータに追加したい変数を入力する.
その後,STEP4で保存したファイルの関数と,その中で新変数を用いる関数
の入力部に新変数を追加する.(区切り記号はコンマ)
関数に追加するパラメータはt,x,u,flagの後に追加すること
STEP10 S-Functionブロックを逆クリックで選択し,「S-functionのマスク」(2回目以降は
マスクの編集)を選択し,描写コマンドにdisp('1\n---\ns')とするとアイコンに1/sと表示される.
ドキュメントのタブのブロックの概要にコメント文を記入できる.
・Simulinkで一般関数ブロック.(MATLAB ver7)
Simulinkライブラリ中のUser-Defined Functionライブラリの中のFcnブロック.
Sample m file for Matlab ( for Download )
・Sin波形で計測した結果を用いて周波数応答を求める.
・Bode線図を[Hz]で記述.
・Simulinkの線形解析によって得られた線形化システム行列(MATファイル)から周波数応答再現.
・保存してあった周波数応答結果(Bode線図)を重ね書きする.
・2つのデータの時間波形とそのFFT波形を表示する.
・ランプ指令の移動平均処理.
・データを間引いて保存する.
・MATLABグラフ記述サンプルプログラム.
・S字プロファイル.
・LoopShiftingを用いたHinf制御器設計(自作).
S-function
・入力信号が一定となってから現時点までの経過時間を
カウントするカウンタ.入力信号が変化すると0リセット.
入力信号が一定となってから現時点までの経過時間を
カウントし,しきい値以上となれば1,しきい値未満ならば0出力.
入力信号が変化するとカウンタは0リセット.
スイッチ付き積分器.
スイッチ付き,かつ,リミッタ付き積分器.
移動平均器.
| |