TRNSYSでPCMの計算

TRNSYSには市販されているもので2種類のコンポーネントがあります。(TESSとTRANSSOLARからそれぞれリリースされています)その他にも何種類か作られているようです。たまたま見つけたのでリンクを貼っておきます。(しかし、これなんかの論文か?)

Development and numerical validation of a new model for walls with phase change materials implemented in TRNSYS
(TRNSYSに実装されたPCMを用いた壁の新しいモデルの開発と数値検証)

それぞれのコンポーネントによって特徴が有るようです。このドキュメントの中程にある比較表(Table 1)が参考になります。

PCMのコンポーネント
PCMのコンポーネント

Type1270(TESS)とType399は日本でも取り扱ってます。それ以外は研究室レベルのツールかな?番号の割り当てからだと、200番台はユーザー用なので、おそらくは研究機関、3200番台はCSTBの割り当てなので(こちらも研究機関だけど)、それぞれ開発されているようです。

TRNSYSコンポーネントのPrintデバッグ

あまり需要がある話とは思えないですが、備忘のためまとめておきます。

プログラムをデバッグする方法としてPrintデバッグというのがあります。名前の通り処理の途中にデバッグ用の出力を入れて画面やファイルに書き出して値をチェックするという古典的な方法です。

ファイルに書き出す方法として、TRNSYSにはリストファイル(.lst)へ書き出すAPI、writeToList()が用意されています。これを使って、次のようにコーディングするとリストファイルへの書き出しが行えます。

power_rated = getParameterValue(3)
Call writeToList(‘—– PRINT DEBUG —–‘)   ! コメントの書き出し
write (messageText,'(f10.3)’) power_rated   ! 値を文字列に変換
Call writeToList(messageText)                     ! .lstファイルへ書き出し

なぜか今朝、コンパイラのデバッグモードが使えなくなってしまったため、Printデバッグを使って見ました。TypeStudioでデバッグしようとすると、いまのところこの方法かな?

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 1803)
TRNSYS18.00.0019(64bit)

TRNSYS,TypeStudioのテキストを公開しました。

TypeStudioで作るTRNSYSコンポーネント(1)~(4)をまとめたテキストを公開しました。

元記事に加筆修正、画像の調整などを行ってテキスト形式にまとめています。

GitHub/TRNSYS.JP(以下のリンク先)でView Rowをクリックするとダウンロードできます。

https://github.com/TRNSYSJP/TRNSYS.JP/blob/master/Docs/TRNSYS18%20-%20TypeStudio%E3%81%A7%E4%BD%9C%E3%82%8BTRNSYS%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88.docx

Github
Github

関連

TypeStudioで作るTRNSYSコンポーネント(1)
TypeStudioで作るTRNSYSコンポーネント(2)
TypeStudioで作るTRNSYSコンポーネント(3)
TypeStudioで作るTRNSYSコンポーネント(4)

TypeStudioで作るTRNSYSコンポーネント(4)

前回ビルドしたコンポーネントを動かしてみます。

プロジェクトを用意する

テスト用になにかプロジェクトを用意します。

今回はExamplesからBegin.tpf(”C:TRNSYS18\Examples\BeginBegin.tpf”)を使ってテスト用のプロジェクトを作成します。

Bgin.tpfを元にテスト用のプロジェクトを作成する
Bgin.tpfを元にテスト用のプロジェクトを作成する

すこしコンポーネントを整理して、前回作成したコンポーネント(Type201Heater)を図のように配置して接続します。

Type201Heaterを配置したテスト用のプロジェクト
Type201Heaterを配置したテスト用のプロジェクト

Type138は今回作成したヒーターと同じ計算を行っています。計算結果の比較のため、Type138からRequired Energy Inputの値をType65へ出力します。

Type139,Type65の接続
Type139,Type65の接続

Type201Heaterの接続

Inputは集熱パネルから出口温度(Outlet temperature)、流量(Outlet flowrate)の値をそれぞれ対応するTin,mへ接続します

Type1、Type201の接続
Type1、Type201の接続

そしてOutputはType65へ負荷(Q)を接続しておきます。

Type201,Type65の接続
Type201,Type65の接続

最後に、配置されているType138の設定温度(Setpoint temperature)に合せて、Type201Heaterの設定温度(Tset)を60℃へ変更します。

Tsetを60に設定する
Tsetを60に設定する

そして結果がこちら。

計算結果
計算結果

Type138とType201の結果がまったく同じになるため、グラフがぴったりと重なって描かれています。少々分かりにくい画面になってしまいましたが、正しく動作しているようです。(注:画面はType65/Prameters/Left axis maximumを10000へ変更しています)

計算結果の検証

今回は同じ計算を行うコンポーネントがあったので、簡単に比較検証できました。普通は存在しないのでなんらかの方法で結果を検証する必要があります。

ここでは関連するデータを書き出してExcelで検証する方法をご紹介します。まずは検証用のデータを書き出すためType25を配置して、図のように接続します。

Type25を追加
Type25を追加

コンポーネントが計算に使用するためInputsで受け取っているパネルの出口温度、流量、それとコンポーネントの計算結果をType25で出力します。ちなみに接続は図のような感じで。。。

Type1,Type25の接続
Type1,Type25の接続
Type201,Type25の接続
Type201,Type25の接続

書き出された値を使ってExcelで計算して同じ結果になるか比較、検証します。図のようにコンポーネントが行っているのと同じ計算式をセルに入力します。

Type201と同じ式をExcelで設定する
Type201と同じ式をExcelで設定する

注:上の図では、なぜか0hourのQの値が変な値になっていますが、これは出力値の初期化に由来します。理由と対策は後述します。そして、QExcelで計算した値を比べてみると、同じ値になっている事が確認できます。

Type201とExcelで計算結果の比較
Type201とExcelで計算結果の比較

Outputの初期化(おまけ)

さて、0hourでおかしな値が出力されていた件ですが、これはOutputの初期化が原因です。コンポーネントのソースコードを再確認すると Output の初期化を行っている箇所があります。(下図の赤枠の関数)

Outputの初期化
Outputの初期化

ここで、Outputの1番目、つまりQの値を”0”に初期化しています。計算の開始時点なので、”0”で問題なさそうですが、この書き方はFORTRANでは整数値として扱われます。

やや専門的な話になりますが、この関数では実数値で値を受ける取る事を期待しています。ここで整数値から実数値へのキャスト(変換)で微少な誤差が発生しているようです。

さきほどの図では見切れていてますが、値は “+4.2439915819305446-314″(指数表記)で書き出されています。実質は限りなく”0″なので実用上は問題ありませんが、計算上はこういうケースが発生します。

対策はごくごくシンプルで”0“から”0.0“へ書き換え、実数としてFORTRANが認識できるようにすれば解決です。

実数0.0で初期化する
実数0.0で初期化する

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 1803)
TRNSYS18.00.0019(64bit)

関連

TypeStudioで作るTRNSYSコンポーネント(1)
TypeStudioで作るTRNSYSコンポーネント(2)
TypeStudioで作るTRNSYSコンポーネント(3)
TypeStudioで作るTRNSYSコンポーネント(4)

TypeStudioで作るTRNSYSコンポーネント(3)

前回はProformaを作成して配置まで行いました。今回は、いよいよ計算部分を作り込みます。シリーズ3回目にしてようやくTypeStudioの登場です。

ソースコードのエクスポートと編集

前回作成したProformaからソースコードの雛形をエクスポートします。
はじめに、Simulation Studioを起動して、Proformaを開きます。(”C:TRNSYS18\Studio\Proformas\MyComponents\Type201Heater.tmf”)

次にメニューから [File]-[Export as]-[Fortran] を選んでソースコードをエクスポートします。この機能ではProformaの情報を使って、ソースコードの雛形の書き出しを行います。

FORTRANを選んでソースコードをエクスポートする
FORTRANを選んでソースコードをエクスポートする

① エクスポート先のフォルダとして”C:TRNSYS18\MyTypes“を選択。
② ファイル名、”Type201Heater.f90“を指定。
③ 「保存」ボタンをクリックします。

MyTypesフォルダへソースコードをエクスポート
MyTypesフォルダへソースコードをエクスポート

エクスポートが終わるとTypeStudioで編集を促す、図のようなメッセージが表示されます。

エクスポート終了のメッセージ
エクスポート終了のメッセージ

TypeStudioの起動とソースコードのインポート

スタートメニューからTypeStudioを起動して、エクスポートしたソースコードを読み込みます。TypeStudioのメニューから[Workspace]-[Add Source Files]を選択して、

TypeStudioでエクスポートしたソースコードを読み込む
TypeStudioでエクスポートしたソースコードを読み込む

① 先ほど保存したフォルダ “C:TRNSYS18\MyTypes“を選び、
② “Type201Heater.f90“を選択して
③ 「開く」ボタンのクリックしてソースコードを読み込みます。

ソースコードを選択する
ソースコードを選択する

下の図のような表示になっていれば準備完了です。

ソースコードが読み込まれた状態
ソースコードが読み込まれた状態

ソースコードの確認

ソースコードの中身を確認すると、61行目から67行目にProformaのParameters,Inputsの値に相当する変数が宣言されている事が確認できます。

Proformaで定義したParameter,Inputに対応する変数
Proformaで定義したParameter,Inputに対応する変数

ソースコードの実装

さて、次は雛形のソースコードへ計算処理や出力を実装します。

変数の追加

前回用意した式の”Q“に対応する変数を追加します。

計算式
計算式

図の赤枠のようにParameters,Inputsの変数宣言の後へ変数”Q“を追加します。

Output用に変数を追加する
Output用に変数を追加する

計算処理の追加

コンポーネントのソースコードでは処理を追加する位置が決められています。ソースコードのコメントで”PERFORM ALL THE CALCULATION HERE FOR THIS MODEL. “と書かれた位置に処理を追加します。

この例では180行付近にコメントがあるので、前回準備した計算式に沿って、図のように処理を追加してください。

計算式を追加する
計算式を追加する

出力処理の追加

最後に、計算した値をOutputsへ出力処理を追加します。これも追加する位置が決まっています。ソースコードのコメント”Set the Outputs from this Model (#,Value)“を探して、その後に出力処理を記述します。

この例では214行目付近にコメントが見つかります。すでに出力処理の雛形が用意されているので、出力する値の部分のみを図のように書き換えます。

計算結果をOutputへ出力する
計算結果をOutputへ出力する

コンポーネントのビルド

ソースコード修正が終わったら、いよいよビルドです。(ソースコードからコンポーネントの実体を生成します)メニューから[Build]-[Compile Workspace]を選択します。

コンポーネントをビルドする
コンポーネントをビルドする

図のように画面右上に緑色のメッセージが表示されればビルドは成功です。もし違うメッセージが表示されていたら、どこかに間違いがあります。ソースコードを見直して再度ビルドを行ってください。

ビルド成功!
ビルド成功!

これでコンポーネントが利用できる状態です。ということで、次回は簡単なプロジェクトを用意して動作を確認してみます。つづく

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 1803)
TRNSYS18.00.0019(64bit)

関連

TypeStudioで作るTRNSYSコンポーネント(1)
TypeStudioで作るTRNSYSコンポーネント(2)
TypeStudioで作るTRNSYSコンポーネント(3)
TypeStudioで作るTRNSYSコンポーネント(4)

TypeStudioで作るTRNSYSコンポーネント(2)

Proforma(プロフォルマ)の作成

さて、まずはじめにコンポーネントを作成する前にProformaを用意します。普段はあまり意識しないProformaですが、Simulation Studioでコンポーネントとして見ているアイコンの実体がProformaです。

Simulation Studioにアイコンとして表示されるProforma
Simulation Studioにアイコンとして表示されるProforma

そもそもProformaって何?

Simulation Studioでコンポーネントの設定で使う図のような画面(Variables Window)が表示されますが、この画面に表示される内容を定義しているのがProformaファイル(拡張子.TMF)です。

Type65のVariable Window
Type65のVariable Window

TRNSYSのコンポーネントの実体はFORTRANのサブルーチン(C言語だと関数)に相当します。ProformaはSimulation Studioの画面とサブルーチンのデータ(Parameters,Inputs,Outputs)の橋渡しルールを定義しています。

計算算式の準備

まずは、これから作成するコンポーネントの式を用意します。今回はドキュメントに載っているシンプルなヒーターの式を例にProformaを作成します。

簡単なヒーターの計算式
簡単なヒーターの計算式

Tset  設定温度
Tin    入口温度
m      流量
Cp     比熱
Q      負荷

TRNSYS18, Vol.7 Developer’s / Programmer’s Guide,  p7-17, Eq.7.3.1-1 より

さて、この式を元にコンポーネントのProformaを作っていくわけですが、はじめにそれぞれの値をPrameter,Input,Outputに割り当てていきます。

Qは計算結果なのでOutputで問題なさそうです。m, Tset, Tinは時系列で変化する値としてInputに割り当てます。Cpは時系列で変化するならInputで、それほど影響がないようであれば固定値でParamterで扱います。今回はParameterで扱うことにします。

値の割り当てを整理すると次の表のようになります。

NameRoleDimensionUnitDef.
minputFlow Ratekg/hr100.0
TsetinputTemperatureC50.0
TininputTemperatureC20.0
CpparameterSpecific HeatkJ/kgK4.190
QoutputPowerkJ/hr0.0

※デフォルト値(Def.)はInputでは初期値として使われるので、それっぽい値に設定します。Cpはここでは水の比熱です。

Proformaを作成する

Simulation StudioでProformaを作成します。

① メニューから[File]-[New]を選択する。
② 表示されるウィンドウで「New Component」を選択して、
③ Createボタンをクリックする。

Simulation StudioでNew Componentをクリック
Simulation StudioでNew Componentをクリック

Proformaのウィンドウが表示されるので、式に合せて設定を行います。はじめに「General」タブのType Numberの項目にType番号を指定します。ここでは201を指定してください。

Type番号の指定
Type番号の指定

次に、「Variable」タブで、「Variables(Parameters, Inputs, Outputs, Derivatives)」ボタンをクリックして、設定画面を表示します。

Inputの項目を追加します。「Inputs」タブを選んで、画面右のAddボタンをクリックして新しい項目を追加します。

Addボタンをクリックして、Inputを追加する
Addボタンをクリックして、Inputを追加する

先ほどの表に合せてInputsの項目を3つ追加、設定します。

Inputsを3個追加する
Inputsを3個追加する

つづいて、同じように「Outputs」タブで項目を一つ追加、設定します。

Outputを追加
Outputを追加

そして最後に「Parameters」タブで項目を一つ追加、設定したらOKボタンをクリックしてウィンドウを閉じます。

Paramterを追加
Paramterを追加

メニューから[File]-[Save]を選択してProformaを保存します。
① 保存先として新しいフォルダ”C:\TRNSYS18\Studio\Proformas\MyComponents “を作成します。
② ProformaをType201Heater.tmfという名前で保存します。

作成したProformaを保存する
作成したProformaを保存する

Simulation Studioのメニューから[Direct Access]-[Refresh tree]を選んで、ツールバーにType201Heaterが表示されればProformaの完成です。

新しく作成したProformaが表示される
新しく作成したProformaが表示される

この段階で、すでにコンポーネントとしてを配置、他のコンポーネントと接続できる状態です。ただし、実行してみると図のようなエラーになります。Proformaは出来上がったものの、まだコンポーネントの本体、つまり計算処理の部分は作成されていないためエラーになります。

コンポーネントが未実装なので、実行するとエラーが表示される
コンポーネントが未実装なので、実行するとエラーが表示される

次回は、計算処理の部分を作成します。つづく。

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 1803)
TRNSYS18.00.0019(64bit)

関連

TypeStudioで作るTRNSYSコンポーネント(1)
TypeStudioで作るTRNSYSコンポーネント(2)
TypeStudioで作るTRNSYSコンポーネント(3)
TypeStudioで作るTRNSYSコンポーネント(4)

TypeStudioで作るTRNSYSコンポーネント(1)

TRNSYSには標準的なコンポーネントが多数用意されています。基本的なシミュレーションはそれだけでも出来ますが、特殊な機器や、研究開発中の装置などを組み入れたい場合にはオリジナルのコンポーネントが必要になることがあります。

実は以前にもTRNSYSコンポーネントを作る例を紹介しているのですが。。。

作ってみようTRNSYSコンポーネント(1)~(6)

この例ではTRNSYSそのものの開発にも使われているIntel FORTRANを使用しています。Intel FORTRANは本格的なプログラミングが可能な非常に強力な開発ツールです。開発者向けに様々な機能が提供されていて細かな設定が可能です。でも逆にちょっとプログラムを書いて試してみたいという用途にはハードルが高い仕様になっています。(上記のリンク先にあるように、プログラマー向けのツールなので細かな設定が多くなっています)

TypeStudio登場!

TRNSYS専用コンパイラ、TypeStudio
TRNSYS専用コンパイラ、TypeStudio

TRNSYS18では、コンポーネントの開発用の専用ツール、TypeStudioがリリースされました。こちらはTRNSYS専用FORTRANコンパイラとエディタです。TRNSYSコンポーネントの開発に特化しているので、特に面倒な設定も不要で気軽にコンポーネントの開発を始めることができます。

TypeStudioの操作画面
TypeStudioの操作画面

とはいえ、何段階かの作業があるので、次のような順序で進めていきたいと思います。

  • Proformaの作成
  • ソースコードのエクスポートと編集
  • Simulation Studioで実行

てなわけで、つづく。

関連

TypeStudioで作るTRNSYSコンポーネント(1)
TypeStudioで作るTRNSYSコンポーネント(2)
TypeStudioで作るTRNSYSコンポーネント(3)
TypeStudioで作るTRNSYSコンポーネント(4)

TESS Libraryをインストールしてみる

TRNSYSには標準で100数十個のコンポーネントが用意されています。気象データリーダーやオンラインプロッターなど汎用で使えるコンポーネントから、各種機器などが含まれています。(下図の赤枠)

標準で用意されているコンポーネント
標準で用意されているコンポーネント

TESS Component Libraries

その他にオプションで提供されるコンポーネントライブラリが複数リリースされてます。
その中で最もポピュラーで収録されているコンポーネントが多いのがTESS Librariesです。
これをインストールすると、下図のように大幅にコンポーネントが追加されます。

TESS Component Librariesがインストールされた状態
TESS Component Librariesがインストールされた状態

TESS社がコンサルティング業務を通じで開発した以下の14カテゴリーのコンポーネントが利用できるようになります。

  • Application Components
  • Controller Components
  • Electrical Components
  • Geothermal Heat Pump (GHP) Components
  • Ground Coupling Components
  • HVAC Equipment Components
  • Hydronics Components
  • Loads and Structures Components
  • Optimization Components
  • Solar Collector Components
  • Storage Tank Components
  • Utility Components
  • Cogeneration (CHP) Components
  • High Temperature Solar Components

追加されるコンポーネントは標準には含まれていない機器や計算方法、同じ機器でもより詳細なコンポーネントが含まれています。ちょっと標準コンポーネントでは物足りないといったときには便利なオプションです。

TESS Component Libraries について詳しい情報はこちらのサイトで紹介さています。

例題も含まれているので、以下、Examplesからいくつかピックアップしてみました。

ASHRAEに基づいた地中熱コンポーネント

地中熱を計算するコンポーネント
地中熱を計算するコンポーネント

水を使った機器(ドライミストとかかな?)

Fogging Device
Fogging Device

太陽熱集熱器

太陽熱集熱システム
太陽熱集熱システム

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 1803)
TRNSYS18.00.0019(64bit)
TESS Component Libraries 17

TRNSYS/Simulation StudioのPluginを作ってみた

前回紹介したSimulation StudioのPluginを作ってみました。

Pluginの仕組み

Pluginの仕組み
Pluginの仕組み

Pluginの仕組み自体はシンプルで、Simulation StudioとPluginで専用ファイル(Exchange File)を使って設定をやり取りすることで実現しています。

このようにExchange Fileは構造的にはシンプルな形式ですがプログラムで扱うとなるとそれなりに手間が掛かります。そこでまずは処理用のライブラリをC#で作ってみました。

ライブラリを使ったコーディングは以下のようにExchange Fileを受け取ったら、展開して、値を変更してSimulation Studioへ戻す手順で行います。

// Exchange File を解析する
this.exchFile = Parser.Parse(fname);

// Input1の既定値を変更する
if (exchFile.Inputs.Variables[0].IsNumeric()) exchFile.Inputs.Variables[0].Value = 3.14;

// Exchange File 更新してSimulation Studioへ返す
Writer.Save(exchFile, fname);

この例ではInputの1番目の既定値を3.14へを更新しています。あまり意味のある操作ではありませんが、使い方の雰囲気は分かりますよね?

これにインターフェースを用意してあげると、それっぽいPluginになります。

作成例

下の動画はVariable Windowを模したインターフェースの作成例です。Plugin側で値を変更すると、コンポーネントの設定に反映されているのが分かります。

この例では通常のウィンドウと似ていて紛らわしいですが、本来は用途に応じた分かり易いインターフェースを用意する事になります。例えば、機器のコンポーネントであれば型番を選んだら設定が自動で行われるとか、ですね。

少し試して問題ないようなら公開しようかと思います。

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit)
TRNSYS18.00.0019(64bit)

面倒なコンポーネント設定にプラグイン

TRNSYSのコンポーネントでパラメータの指定が複雑なものって設定が面倒ですよね。Simulation Studioには複雑な設定を助けるためプラグインの仕組みが用意されています。いくつかのコンポーネントが対応していて、複雑な指定も簡単な操作で設定できるようになっています。

プラグインの例

下の図はType14の例ですが、設定画面左下のMagic Stickアイコンをクリックするとプラグインが起動します。

Magic Stickアイコンをクリックしてプラグインを起動する
Magic Stickアイコンをクリックしてプラグインを起動する

プラグインが起動するとType14の時刻ごとの値の変化がチャートで表示されます。設定内容が視覚的に確認できるので、簡単に設定が行えます。

時刻ごとの値の変化を設定するプラグイン
時刻ごとの値の変化を設定するプラグイン

プラグインの仕組み

プラグインの本体は通常のアプリケーションと同じなので、C/C++やC#、その他のプログラミング言語を使って作成することができます。ただし、Simulation Studioと設定内容のやり取りをするため、所定のデータを扱う必要があります。こう言うとなにか複雑な処理が必要なように聞こえますが、テキストファイル形式のシンプルな内容です。

基本的にテキストファイルを扱えるアプリケーションであればSimulation Studioとやり取りしているデータを受け取ることができます。

下の図はプラグインの代わりに「メモ帳」を使った例です。Commentタブの画面の下にプラグインを指定している項目があるので、ここをメモ帳に置き換えます。

プラグインの代わりにメモ帳を指定する
プラグインの代わりにメモ帳を指定する

この状態で、Magic Stickアイコンをクリックすると、メモ帳が起動してSimulation Studioからのデータを読み込んで表示してくれます。

下の画面のように、INPUTS,PARAMETERSなどコンポーネントの設定画面で見慣れた単語が並んでいるのが分かります。

Simulation Studioから引き渡されたプラグインのデータ
Simulation Studioから引き渡されたプラグインのデータ

ここで内容を書き換えて保存、メモ帳を終了すると、Simulation Studioに変更内容が反映されます。非常にシンプルな仕組みです。通常のType14のプラグインは、このテキストデータを使って、チャートの表現をしているわけです。

頻繁に利用するコンポーネントやオリジナルのコンポーネントを作成する場合には、プラグインを含めて考えると使いやすくなります。

なにか簡単な作成例でも紹介できないかと思いますが、それはまた別の機会ということで。。。

プラグインの詳しい仕様についてはドキュメントの以下の箇所にまとめれらています。

2.12.5. The plug-in technology

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit)
TRNSYS18.00.0018(64bit)