Translate

2013/03/06

TRNSYSのEquationで条件判定


Complementary Creative Commons Casio Calculator / Boaz Arad


TRNSYS-Usersを読んでいると、if-then-else処理の話題が出てました。

以下、メーリングリストからの抜粋ですが、TRNSYSで条件判定をやる場合、Equationを使って処理することになります。EquationにはGT(),LT()など、FORTRANでいう比較演算子に相当する関数が用意されています。これらを組み合わせて。。。

'For example, let's assume you would like to use the following "if-then-else"
statement:

if (Z>0) then
X=Y1
else
X=Y2
endif
The following equation will do the same:

X=GT(Z,0)*Y1+(1-GT(Z,0))*Y2

だいたいこんな感じで式を組み立てて判定します。
で、これを何に使うかというと、特定の条件でパラメータとか変えたい時です。
例えば、暖冷房機器の運転を冷房、暖房期間できっちりON/OFFしたい場合とかです。Equationを使って暖冷房期間の判定処理をして、冷房機に暖房が入ったり、逆に暖房機に冷房が入ったりといったことを避ける事ができます。

例)暖房期以外は冷房期 として処理する
暖房期 1/1-4/25, 10/21-12/31(1-2760, 7056-)
冷房期  4/26-10/20(暖房期以外)

これをEquationで表現すると、次のようになります。

HEATING = or(le(time,2760 ),ge(time,7056)) 
COOLING = not(HEATING) 

これでHEATING,COOLINGで、それぞれ暖房、冷房のOn/Off状態がつくれます。あとはType56のHeating TypeやCooling Typeで受け取って、暖房、冷房のPowerに渡してあげれば、暖房期間は暖房だけ、冷房期間は冷房だけというようなコントロールができます。

ちょっと慣れがいりますが、これを覚えると、いろんな場面で使えて重宝します。

2016/1/23 追記
1年以上の期間を計算すると、上記のやり方だと2年目はすべて暖房期間として判定されます。こまりますよねー。そういう場合は、mod()関数を使って、剰余として扱えば幸せになれます。
HOUR=mod(time,8760) 
HEATING = or(le(HOUR,2760 ),ge(HOUR,7056)) 
COOLING = not(HEATING) 

0 件のコメント:

コメントを投稿