TRNSYSにIF文が欲しい

条件判定

TRNSYSで計算する際に条件を判断して処理したいケースってないですか?例えば暖冷房期間の判定処理とか。手軽な方法としてEquationを使って判断する方法(TRNSYSのEquationで条件判定)がありますが、少々分かりにくいのが難点。

単純な処理だと、これはこれで十分なんですが、条件が複数になると途端にハードルが上がります。例えば、冷房期間でも気温の低い早朝は窓開け換気の条件を設定したい。ただし、外気の湿度は60%以下の場合に限る。なんて条件を設定されるとEquationでは表現が難しくなります。(工夫すれば多分できると思うけど、可読性は低くなります)

スクリプトで代用できないか?

開発言語やスクリプトのようにIF文が使えると、少々条件が増えても簡潔に記述することができるはずです。例えば、書き方はこんな感じで。。。

#暖房、冷房期間の判定
if  time<=2760 or time>=7056 then
    heating=true
else
    heating = false
    cooling = not heating 
endif

#外気導入の判定:冷房期間でも外気温が25℃未満、湿度が60%以下なら窓開け換気する
if cooling and tamb <25 and rh <=60 then
    ach=10  #外気導入分の換気量を増やす
    aircon=0  #冷房のスイッチをOFF
else
    ach=0.5 
    aircon=1 #冷房のスイッチをON
endif

あとは、achをInfiltrationへairconをCoolingTypeへ渡して処理する。こういった処理をやろうとすると、いくつかやり方があります。

JavaScriptを試す

以前にスクリプト言語の実装を試みたこともあるのですが、パフォーマンス的にいまいち。cstbが有償配布しているW言語コンポーネント(Type79)と比べると恐ろしく処理速度が遅くなります。

TRNSYSでJavaScriptを使ってみる

TRNSYS Type79 とスピード対決

素直にType79を購入すればいいのですが、共同研究とか納品とか考えると、それもちょっとなーという感じです。(とはいえ使ってみた感じ、そこそこ便利は便利そうです)

世の中には同じような事を考える人がいるらしく、Javaで実装している例もあります。

TRNSYSとJavaを連成?(1)

こもれなんかJavaの環境設定が面倒で簡単じゃないんですよね。

単純に配布できて、誰でも利用できる仕組みって作れないんだろうか?パフォーマンスが良くて、配布も関連ファイル同梱するだけでOKとか、Lua言語とか検討してみるか?とか考えていると。。。

2022/06/20 追記

Python用に新しいコンポーネント、Type3157がリリースされています。Type169よりも安定して動作するので、こちらの利用がお薦めです。

Type169(Direct Call)登場

TRNSYS18からPythonが標準でサポートされるようになりました。Pythonなら技術計算では広く使われているのでパフォーマンスも定評があります。Pythonは別途インストールが必要になりますが、使いやすいディストリビューションも利用できます。

スクリプトは次のような感じで記述できます。

import TRNSYSpy as trn 
def PythonFunction():
     # retrieve values from the Inputs
     time = trn.getInputValue(1) 
     tamb = trn.getInputValue(2)    
     rh=trn.getInputValue(3)
     #冷房、暖房期間の判定
     if  time<=2760 or time>=7056 :
         heating=True
         cooling=False
     else:
         heating = False
         cooling=True
         
     #冷房期間の外気導入判定
     if (cooling==True) :
         if  (tamb <25) and (rh <=60) :
             ach=10
             aircon=0 
         else:
             ach=0.5 
             aircon=1
     else:
         aircon=0
     
     # return the new values to the Outputs
     trn.setOutputValue(1,ach)
     trn.setOutputValue(2,aircon)
     return
Type169(Direct Call)
Type169(Direct Call)

Equationで書くのに比べると、だいぶ解りやすいですね。(まあPythonが前提ではありますが)
Pythonには数値計算のライブラリも用意されているので、使いようによってはMatlabのような使い方もありそうです。

動作環境

Windows10 Pro(64bit)
Python:Anaconda 4.3.1(Python 3.6/64bit)
TRNSYS18.00.0014(64bit)

Pocket

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です