Translate

2012/01/12

PowerShellで条件を変えてTRNSYSを繰り返し実行する

条件換えてTRNSYSの計算を何回も実行したいんですよね。って話をなぜか別々のところでいただきました。

TRNSEDとか、アプリケーションとして加工すればできないことはなんですが、どうもそういうコトじゃなくて複数の条件で反復して自動実行したいという事みたいです。

TRNSYSのツールでそういうの、ちょっと難しいんですよね。

もちろんがちがちにアプリケーションを作ればなんでもありなんですが、それだと時間も予算もいる話になってしまうし、そもそも研究してるんだかプログラム書いているんだかわからない。

もちょっと簡単に対応する方法ないんだろうかというコトで考えてみました。

TRNSYSで計算条件を変えるとなると、普通に考えるとSimulation Studioで作業することになります。

でも実際に計算するときは裏でDckファイルというデータ、というかスクリプトのようなファイルを作って実行しています。これテキストファイルなので、直接書換えて計算することも可能です。

大がかりなプログラムは避けたいのでスクリプトを使って条件の変更、連続実行など試してみます。

  • 例題
建物の方位を変えながらシミュレーションを繰り返す。
真南から真西まで建物の向きを10℃つづ変更して計算を繰り返す。
  • 使用するツール
もちろんTRNSYSは必須。
スクリプトはWindows PowerShellを使用する。

1.ツールの準備
PowerShellはWindows7だと標準でインストールされています。ただし、使う前に設定が必要なので、ここらあたりを参考に設定しておきます。

2.TRNSYSのシミュレーションモデルの準備
Simulation Stuidoを起動して、計算用のプロジェクトを作成します。
ここでは「Building Project」で作成してプロジェクトを前提にしています。

用意したのは、こんな感じのシンプルなモデル。実行して、ちゃんと計算できるか確認しておきます。


3.スクリプトを書く
まずはDckファイルの確認です。
プロジェクトのフォルダにプロジェクトと同じ名前で拡張子が".dck"のファイルがそれです。
メモ帳などで開くと、以下のような箇所が見つかります。

* EQUATIONS "Turn"

EQUATIONS 5
TURN = 0  ←ここが建物の傾きを設定しているところ
AA_N = 180 + TURN
AA_S = TURN
AA_E = 270 + TURN
AA_W = 90 + TURN
*$UNIT_NAME Turn
*$LAYER Main
*$POSITION 84 74

この"TURN=0"を書き換えてると、建物の傾きが変わります。例えば"TURN=45"とすると南西向きになります。

TRNSYSを直接実行する場合は、コマンドプロンプトから以下のように入力します。
C:\Trnsys17\Exe\TRNExe.exe  プロジェクト名.dck

ようは、この"TURN=0"の行を書き換えて、TRNSYSの実行を繰り返していけばいいわけです。
で、実際に書いてみたのが以下のスクリプト。
実行すると、Dckファイルを書き換えながらTRNSYSの計算を10回繰り返します。
計算後にフォルダを見ると、かっちり10回分の計算結果が書き出されています。
どういう仕組みで処理しているかは以下、スクリプトを参照してください。それほど長くないです。
実行する場合は、これをコピペして2行目と3行目をプロジェクトに合わせて変更すればOKです。

# TRNSYSを複数回実行する
$sourceDckfile = "SingleZoneProject.dck"#オリジナルのDckファイル名
$tempDeckfile = "SingleZoneProject_temp.dck" # 計算用に一時的に使用するDckファイル名
# 建物の傾きを0度から90度まで10度刻みで計算する
for($i=0;$i -le 9; $i++)
{
    # 新規に空のファイルを作成する
    New-Item $tempDeckfile -itemType File -Force

    # 元になるDckファイルを読み込む
    $Lines = Get-Content $sourceDckfile

    # 角度の変更
    for ( $j = 1; $j -le $Lines.Length; $j++ )
    {
        # 建物の傾きを変更する
        if($Lines[$j - 1].IndexOf("TURN =") -eq 0)
        {
            "TURN = " + ($i*10).ToString()| Out-File $tempDeckfile -encoding default -append
        }
        else
        {
            $Lines[$j - 1] | Out-File $tempDeckfile -encoding default -append
        }
    }
    # 計算中の角度の表示
    $message = "角度: " + ($i*10).ToString() + "を計算中です"
    Write-Host $message

    # TRNSYSの起動処理(最後の"| out-null"はプログラム終了待ちをするためのおまじない)
    C:\Trnsys17\Exe\TRNExe.exe $tempDeckfile /n | out-null

    # 計算に使用したDckファイルを念のためとっておく
    $dckfile = "SingleZoneProject_TURN_"+ ($i*10).ToString("0#")+".dck"
    Copy-Item $tempDeckfile $dckfile

    # 計算結果のファイルが上書きされないようにコピーしておく
    $csvname = "ZoneTemp_TURN_" + ($i*10).ToString("0#")+".csv"
    Copy-Item ZoneTemp.csv $csvname
}

0 件のコメント:

コメントを投稿