MaTXによる簡単な電力系統(一機無限大母線系統)のシミュレーションと描画 石川将人さんが「MaTX軟弱化計画」 http://www.cyb.mei.titech.ac.jp/~ishikawa/matx/nanjaku.html で公開されている Tkによるお絵描きライブラリ "tincas" を 私が改変して作った tincas2 を用いて, 電力系統の安定度解析で基礎系統として用いられる 一機無限大母線系統の微分方程式の解を計算しながら表示します。 系統モデルは http://www.eecs.kumamoto-u.ac.jp/~t-kita/b-bumon2000mgp/ に示したものと同じです。 # この頃はまだ MaTX は使っていませんでしたが.. パラメータの値を変更しながら,定常状態を随時確認し, 分岐点を記録するのに便利です。 単に私の研究の為につくったので, 他人がみても使い方が分からない部分が多々あると思いますが, なにかの参考になれば,と思い公開します。 [ファイルの簡単な説明] 2pbifu_func.mm : 2-パラメータ分岐図の計算に使う関数 Dftrs5.mm : 変分方程式(ヤコビ行列)の定義 Makefile : 各ファイルの依存関係はこれを見てください。 README (or Readme.txt) : このファイル bifudiag_output.mm : 分岐図の出力に用いる関数 ftrs5-lin.mm : 微分方程式(部分線形化モデル)の定義 ftrs5-orig.mm : 微分方程式(電力系統モデル)の定義 ftrs5.mm : -> ftrs5-orig.mm mk-prmout.pl : 大域変数表示の関数 rem_prm_output を自動生成 numerical_jacobi.mm : ヤコビ行列を数値的に求める prm_trs5.mm : デフォルトのパラメータ値の設定 trs5-inc.mm : 大域変数などの宣言 tincas2 : 改変した tincas tincas2_inc.mm : tincas2 の変数,関数の宣言 tincas2_lib.mm : 改変した tincas_lib.mm tincasfunc_trs5.mm : キーボード操作の定義など # 以下は main() のあるファイル trs5.mm : 微分方程式の解を表示,または数値として出力 trs5-bifu.mm : 分岐図を出力 trs5-2pbifu.mm : 2-パラメータ分岐図を出力 trs5-region.mm : カオス領域をすべて探索して出力 動作確認は Vine Linux 2.1 (i386) + MaTX 5.2.2 で行いました。 trs5 の骨格は ros2 (http://www.eecs.kumamoto-u.ac.jp/~t-kita/matx/ros-tincas2/) と全く同じです。 tincas, tincas_lib.mm -> tincas2, tincas2_lib.mm, tincas2_inc.mm の主な改変箇所は以下の通りです。 ----------------------------------------------------------------------- open_canvas()では、wish を呼び出すようにしたので、 tincas2 は カレントディレクトリか、パスの通ったディレクトリのいずれかに あればよい。 # . にパスを通さなくてよい。 ----------------------------------------------------------------------- 分割コンパイルできるように 変数,関数の宣言を tincas2_inc.mm に分けた。 ----------------------------------------------------------------------- 以下の関数や変数の追加。 void set_canvas_xyrange(); Matrix get_canvas_xyrange(); Matrix adjust_xyrange(); void clear_canvas(); void set_tincas_title(); void set_tincas_update_interval(); Matrix gxy(); void use_mouse(); Matrix _canvas_size, _xyrange, _mes_xyrange; Integer auto_clear_interval; ----------------------------------------------------------------------- 速度改善のため --- tincas ---- # # スタンバイ状態 # while {1} { gets stdin cmd if {$cmd=="."} break eval $cmd update } --------------- を --- tincas2 --- update set count 0 set update_interval 1 # # スタンバイ状態 # while {1} { gets stdin cmd if {$cmd=="."} break eval $cmd incr count if {$count >= $update_interval} { update set count 0 } } ----------------- に変更。 要するに,画面の update を行う頻度を update_interval で調節できるように するということ。 mmファイルの中で update_intervalを 変更するには, set_tincas_update_interval(pid,200); などとします。 シミュレーション中に 'u' を押しても変更できます。( kbd_event()で定義。) ---------------------------------------------------------------------------- canvas を一定時間間隔で(auto_clear_interval 個の点を描く毎に) 自動的にクリア( clear_canvas() )する。 auto_clear を 1 に設定すると行われる。 auto_clear_interval の値は,デフォルトでは 5000。 シミュレーション中に 'S' を押して,auto_clear が有効になる時に auto_clear_interval の値を変更できます。( kbd_event()で定義してある。) ---------------------------------------------------------------------------- このディレクトリにあるファイルの無断改変、再配布を許します。 改変後に再配布する場合は、原作者名のクレジットは残し, できれば変更箇所を明示して下さい。 〒860-8555 熊本大学 工 電気システム 助手 喜多敏博 (KITA Toshihiro, tel,fax: 096-342-3613) t-kita@eecs.kumamoto-u.ac.jp Web page : http://www.eecs.kumamoto-u.ac.jp/~t-kita/