Translate

2013/11/18

TRNSYSの単位換算がヘンな値を返す???

計算していると、単位を換算したいケースってありますよね。たとえばkJをkWhに換算したいとか。そういう場合、TRNSYSには単位換算用にType57 Unit Convertorっていう便利なコンポーネントが用意されています。値を換算して返してくれるシンプルなコンポーネントです。

これが、あるプロジェクトで使ったら、なぜか変な値を返します。結果だけ見ると、換算係数がタイムステップごとに変化しているように見えます。コンポーネント間を流れるデータをチェックしていくと、どうも上流がType55だと変な値に換算されているようです。

こういうつなぎ方をすると、換算が変になる。
ここで使っているType55って、値を積算してくれる便利なコンポーネントなんですが、なぜ?
いろいろ検討して行き詰ってしまったので、開発元へ問い合わせてみました。結論から言うと、換算してから積算すればOK

こういうつなぎ方。換算してから積算する。
結果的に目的は果たせるのですが、なんで逆順だとだめなんだ?

これにはTRNSYSがコンポーネントを呼び出す順番が関係しています。通常のコンポーネントはTRNSYSからタイムステップごとに値が収束するまで繰り返し呼び出されます。
ところが、ある種のコンポーネントは他のコンポーネントの収束後に1度だけ呼び出されるものがあります。これは出力系のコンポーネントに多くて、たとえばType25のようにファイルにデータを書き出すコンポーネントなどがそれにあたります。結果の書き出し専用なので、収束まえのデータとか書き出されたら困るので、必ず収束後に呼び出されます。

これと同じで、Type55も収束後に一度だけ積算のため実行されるように作られています。

Type57は、ごく普通のコンポーネントなので、収束まで繰り返し呼び出され、値を出力します。この呼び出しタイミングの違いが原因で、次のような状態になります。

Type55:収束後の値を積算処理した値を出力
Type57:収束時の換算値を出力

この違いで、結果的にType57はひとつ前のタイムステップの換算値を出力してしまうようです。(あーややっこしい。)

原因が解ってしまえば、なんてことない話ですが、コンポーネントの見た目としては、どちらでも同じ結果になりそうな気になるので、ちょっと注意が必要ですね。

コンポーネントを並べるときは、出力系や積算系などは必ず最後につなぐと憶えておくといいかもしれません。


2013/11/07

TRNSYSのコンポーネントに詳細情報を追加する

TRNSYSというか、ほとんどFORTRANのネタです。というかIntel Fortranネタですね。
コンポーネントを作ってて、ふとファイルのプロパティを見てみたら。。。
なんかどうも味気ない。製品名とか著作権とか、何も表示がないので、ちょっと寂しい。

こういう場合C++だと、リソースを追加すればOKなので、FORTRANでも同じだろうと追加してみたら、ちゃんと詳細情報が追加できました。

まずはリソースの追加

ソリューションエクスプローラーで、Resource Filesを選んで、リソースファイルを追加する。

次に、リソースファイルにVersionリソースを追加する。
Versionリソースを開いて、試しにProductNameを変更する。

そして再ビルド 

ファイルのプロパティを確認すると。
設定した製品名がちゃんと反映されています。
ファイルの説明とか、著作権なんかも設定できるので、このコンポーネントのDLLってなんだっけ?って時や、バージョン管理したいときに役立ちそうです。