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)と比べると恐ろしく処理速度が遅くなります。
素直にType79を購入すればいいのですが、共同研究とか納品とか考えると、それもちょっとなーという感じです。(とはいえ使ってみた感じ、そこそこ便利は便利そうです)
世の中には同じような事を考える人がいるらしく、Javaで実装している例もあります。
こもれなんか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
Equationで書くのに比べると、だいぶ解りやすいですね。(まあPythonが前提ではありますが)
Pythonには数値計算のライブラリも用意されているので、使いようによってはMatlabのような使い方もありそうです。
動作環境
Windows10 Pro(64bit)
Python:Anaconda 4.3.1(Python 3.6/64bit)
TRNSYS18.00.0014(64bit)