Translate

2012/01/14

PowerShellでBuiファイルを書き換えてTRNSYSを実行する

前回、前々回とTRNSYSで条件を変えた計算を行う方法を書きました。前回までの2回は方法が違うだけで、やっていることはDckファイルの編集と実行です。これだけでも計算の自由度が随分と上がります。

ところで計算方法はともかく建物自体のパラメータを変更して何度も計算したい時ってありますよね?
例えば開口部の面積による影響を見たいとか、材料の厚みを変えた影響を見たいとかです。この手のパラメータはDckファイルには含まれていません。こういう場合Type56/Buiファイルの変更が必要になります。こうなると前回までの方法だと、ちょっと対応しにくくなります。

という事で、材料のパターンを変えて計算を実行する方法を試してみました。

処理内容は「外壁の断熱材の厚みを変えて計算」としてみました。

建物は前回まで使っていたのと同じで、Simulation Stuidoが生成したモデルをします。
やりかたは基本的には前々回と同じでPowerShellを使って処理しますが、今回はbuiファイルを編集します。

Buiファイルの中身を調べる

まずは、Buiファイル(*.b17)をメモ帳などで開いて、材料の設定を確認します。Simulation Studioが生成するモデルだと、外壁は"OUTWALL"という名前になっているので、これを手掛かりに探していきます。

以下、Buiファイルの抜粋です。

*-------------------------------------------------
*  W a l l s
*-------------------------------------------------
WALL GROUND
 LAYERS   = FLOOR STONE SILENCE CONCRETE INSUL 
 THICKNESS= 0.005 0.06  0.04    0.24     0.08  
 ABS-FRONT= 0.8   : ABS-BACK= 0.4  
 EPS-FRONT= 0.9   : EPS-BACK= 0.9  
 HFRONT   = 11 : HBACK= 999
WALL OUTWALL                     ← これが外壁になるWall Typeの定義の始まり
 LAYERS   = BRICK INSUL PLASTER  ← ここが材料の並び
 THICKNESS= 0.24  0.1   0.015    ← でもって、これが材料の厚みの定義
 ABS-FRONT= 0.75  : ABS-BACK= 0.3  
 EPS-FRONT= 0.9   : EPS-BACK= 0.9  
 HFRONT   = 11 : HBACK= 64
WALL INTWALL
 LAYERS   = GYPSUM INSUL GYPSUM 
 THICKNESS= 0.012  0.05  0.012  
 ABS-FRONT= 0.6   : ABS-BACK= 0.6  
 EPS-FRONT= 0.9   : EPS-BACK= 0.9  
 HFRONT   = 11 : HBACK= 11



スクリプトを書いてみる
このモデルだと外壁は3種類の材料で構成されています。真ん中に断熱材っぽい材料があるので、この厚みを変えてみます。
単純な話、この行を差し替えてTRNSYSの計算を繰り返せばOKです。
100mm(0.1m)で設定されているので、0.1から0.5まで0.1づつ厚みを変えて計算してみます。


で、書いてみたのが以下のスクリプト。


※注意
以下のスクリプトでは" THICKNESS= 0.24  0.1   0.015"と書かれた行を単純に置き換えています。もし、同じファイルの中に同じ文字列が複数あると、すべて置き換えてしまいます。
この例で使ったBuiファイルでは、この文字列が一カ所しかないので問題ありませんが、同じような処理をされる場合には、この点注意してください。


サンプルファイルのダウンロード(Google Docsからダウンロード)

スクリプト:WallThickness.ps1

# TRNSYSを複数回実行する
# Buiファイルを編集して、断熱材の厚みを変えて計算を繰り返す


# ファイル名
$dckfile = "SingleZoneProject.dck" # 計算実行用のDckファイル
$buifile = "SingleZone.b17"        # 内容を変更するBuiファイルの名前
$orgBuifile = "SingleZone.b17.org" # オリジナルのbuiファイルの名前(予めコピーしておいてください)


# カレントフォルダをスクリプトと同じフォルダへ変更
Set-Location (Split-Path $MyInvocation.MyCommand.Path -parent)


# 断熱材の厚みを0.1mから0.5mまで0.1m刻みで計算する
for($i=1;$i -le 5; $i++)
{
    # 断熱材の厚みを計算する
    $thickness = " THICKNESS= 0.24  " + ($i*0.1).ToString("0.#") + "   0.015"


    # オリジナルのBuiファイルを読み込んで断熱材の厚みの"行"を置換する
    $bui = $(Get-Content $orgBuifile) -replace " THICKNESS= 0.24  0.1   0.015",$thickness 
    # 計算用にBuiファイルを上書きで書き出す
    $bui | Out-File -encoding default -filepath $buifile


    # 計算実行   
    # TRNSYSの起動処理(最後の"| out-null"はプログラム終了待ちをするためのおまじない)
    C:\Trnsys17\Exe\TRNExe.exe $dckfile /n | out-null
    
    # 計算結果のファイルが上書きされないようにコピーしておく
    $csvname = "ZoneTemp_THICKNESS_" + ($i*100).ToString("0#mm")+".csv"
    Copy-Item ZoneTemp.csv $csvname
}

計算結果を確かめると。。。
計算結果をExcelで加工してグラフにしてみました。以下は2/1の0:00~24:00までの計算結果です。

ちゃんと断熱材の厚みの変更による傾向が出てますねー。
という事で無事に計算終了です。






2012/01/13

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

前回のエントリーでPowerShellを使ってDckファイルを書き換えてTRNSYSを実行する話を書きました。

実は前回の例題の内容だと標準のツールでも同じことができます。というか、やり方としてはこちらの方が推奨です。前回はスクリプトを使って、他にもいろいろやりたかったので試験的にやってみました。

さて、標準ツールで行うやり方について詳しくはドキュメントの「6.1.2. Parametric runs」に説明があるので、そちらを参照してもらうとして、簡単に説明します。

TRNEditというツールを使用して作業を行います。TRNEditを起動して、まずはDckファイルを開きます。

前回PowerShellで書き換えたのと同じ"TURN=0"を変更対象にしたいので、以下のように書換えます。

オリジナル
* START, STOP and STEP
CONSTANTS 3
START=0
STOP=8760
STEP=1

--- 省略 ---


* EQUATIONS "Turn"
*
EQUATIONS 5
TURN = 0
AA_N = 180 + TURN
AA_S = TURN
AA_E = 270 + TURN
AA_W = 90 + TURN


変更後
* START, STOP and STEP
CONSTANTS 4   ←1項目追加するので3から4に書き換える
START=0
STOP=8760
STEP=1
TURN = 0    ← EQUATIONSからコピーして追加する

--- 省略 ---


* EQUATIONS "Turn"
*
EQUATIONS 4 ←  TURN=0のコメントアウトで1項目減るので5から4に書き換える
!TURN = 0   ← CONSTANTSへ移動したので行頭に"!"を追加してコメントアウト
AA_N = 180 + TURN
AA_S = TURN
AA_E = 270 + TURN
AA_W = 90 + TURN

変更箇所を比較ツールで表示した画面。

左側がオリジナル、右側が変更後です。


Parametric Tableを用意する
メニューから[Parametrics]-[New Table]を選択すると、以下のようなダイアログが表示されるので、対象にするパラメータ、つまり"TURN"を選択して"Parameters in Table"へ追加します。
OKボタンを押すと、以下のような画面になります。
ここで、直接パラメータを入力することも出来ますが、一定のパターンの値を入力する場合は[Parametrics]-[Alter Table]コマンドで簡単に設定することができます。
コマンドを選んで表示されるダイアログで以下のように入力します。
First Value : 0
Increment : 10

これで一気にテーブルにパラメータが設定されます。
最後に[TRNSYS]-[Run Table]を選ぶと、テーブルの値に基づいてTRNSYSの実行が繰り返されます。
この例では計算が10回実行され、計算結果も同様に書き出されてきます。後は計算結果をExcelなどで処理すればOKです。

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
}

2012/01/05

「Radianceの入門」がver0.5へアップデート

LEAD Projectで公開されている「Radiance入門」がver0.5にアップデートされています。
12月初旬の公開時から内容が倍ぐらいに増えております。