xcos_simulate
xcosシミュレーションをバッチモードで実行する関数
呼び出し手順
Info=xcos_simulate(scs_m, needcompile)
引数
- scs_m: ダイアグラムデータ構造体 (scs_m 構造体参照).
- needcompile: 整数. 4の場合, シミュレータはダイアグラムの完全なコンパイルを実行します. それ以外は, %cpr にキャッシュされた値を使用します. (古い仕様)
説明
この関数は,xcosダイアグラムをバッチモードでシミュレートする際に 使用されます. この関数は,.zcos
ファイルをScilabに読み込むことにより
得られるscs_m 構造体を必要とします
(importXcosDiagram参照).
ユーザはシミュレーションの前に実行される
pre_xcos_simulate
を定義することも可能です.
function continueSimulation=pre_xcos_simulate(scs_m, needcompile) // 何もしない continueSimulation = %t; endfunction
continueSimulation
を false に設定した場合,
シミュレーションは停止します.
ユーザはシミュレーションの後に実行される
post_xcos_simulate
関数を定義することも可能です.
function post_xcos_simulate(%cpr, scs_m, needcompile) // 何もしない endfunction
ファイルの内容
SCI/modules/xcos/macros/xcos_simulate.sci
例
SCI/modules/xcos/demos/batch_simulation.zcos
にある
xcosダイアグラム.
importXcosDiagram("SCI/modules/xcos/demos/batch_simulation.zcos") typeof(scs_m) // ダイアグラムのデータ構造体 //このダイアグラムは3つのコンテキスト変数を使用します : // Amplitude : sin関数の大きさ // Pulsation : sin関数のpulsation // Tf : シミュレーション終了時間 scs_m.props.context //組込み定義 //ダイアグラムに埋め込まれたパラメータを使用した最初のバッチシミュレーション xcos_simulate(scs_m, 4); // 終了時間の値を変更 scs_m.props.context = ["Amplitude=2" "Pulsation=3" "Tf=10"]; xcos_simulate(scs_m, 4); // ここでpulsationを変更 scs_m.props.context = ["Amplitude=2" "Pulsation=9" "Tf=10"]; xcos_simulate(scs_m, 4); //get the variable created by the "from workspace block" counter
pre_xcos_simulate関数を用いた このダイアグラムの統計的な解析
importXcosDiagram("SCI/modules/xcos/demos/batch_simulation.zcos") typeof(scs_m) //The diagram data structure // ダイアグラムを解析するためにpre_xcos_simulationを宣言 function continueSimulation=pre_xcos_simulate(scs_m, needcompile) // 全てのオブジェクトを取得 objs = scs_m.objs; links = 0; blocks = 0; other = 0; // リンクとブロックを数える for i = 1:size(objs) currentType = typeof(objs(i)); select (currentType) case "Link" links = links + 1; case "Block" blocks = blocks + 1; else other = other + 1; end end // ダイアグラムの解析結果を表示 disp("Diagram Analysis:") disp("Found "+string(blocks)+" Blocks.") disp("Found "+string(links)+" Links.") disp("Found "+string(other)+" Other component.") // シミュレーションは行わず,ダイアグラムの解析のみを実行 continueSimulation = %f; endfunction //ダイアグラムに埋め込まれたパラメータで最初のバッチシミュレーションを実行 xcos_simulate(scs_m, 4);
xcosダイアグラム: SCI/modules/xcos/demos/Command.zcos
importXcosDiagram("SCI/modules/xcos/demos/Command.zcos") // 全てのpre_xcos_simulationを消去; clear pre_xcos_simulate; function post_xcos_simulate(%cpr, scs_m, needcompile) // 全オブジェクトを取得 objs = scs_m.objs; clrBlock = []; // CLRブロックを探す for i=1:size(objs) if objs(i).gui == "CLR" then clrBlock = objs(i); break; end end // CLRが見つかったかどうかを確認 if isempty(clrBlock) then disp("No CLR block found.") return end // exprsを取得 exprs = clrBlock.graphics.exprs; s = poly(0,'s'); num = evstr(exprs(1)); den = evstr(exprs(2)); h = syslin('c', num/den); // 新たに図をオープンし,ボード線図をプロット scf(max(winsid())+1); bode(h, 0.01, 100); endfunction xcos_simulate(scs_m, 4);
xcosダイアグラム: SCI/modules/xcos/demos/Command_bode.zcos
importXcosDiagram("SCI/modules/xcos/demos/Command_bode.zcos") // post_xcos_simulationを全て消去; clear post_xcos_simulate; function continueSimulation=pre_xcos_simulate(scs_m, needcompile) // 全オブジェクトを取得 objs = scs_m.objs; clrBlock = []; //CLRブロックを探す for i=1:size(objs) if objs(i).gui == "CLR" then clrBlock = objs(i); break; end end // CLRが見つかったかどうかを確認 if isempty(clrBlock) then disp("No CLR block found.") return end // exprsを取得 exprs = clrBlock.graphics.exprs; s = poly(0,'s'); num = evstr(exprs(1)); den = evstr(exprs(2)); h = syslin('c', num/den); // 新しい図を開き,ボード線図をプロット scf(max(winsid())+1); bode(h, 0.01, 100); // ボード線図のプロットの後で停止します. シミュレーションは行いません. continueSimulation = %f; endfunction xcos_simulate(scs_m, 4);
参照
Report an issue | ||
<< steadycos | Batch functions | xcosValidateBlockSet >> |