TRNSYS3D plugin を後でインストールする

TRNSYS3DのPluginって、通常はTRNSYSをインストールする際にオプションとして指定します。

これって、すでにSketchUpがインストール済みであればいいですが、後からSketchUpをインストールしたり、バージョンアップしたら再度TRNSYSのインストールが必要そうですよね?

でも、実はPluginのインストーラーって、TRNSYSのフォルダに格納されているので、後からでもインストールできます。

C:¥TRNSYS17¥Tools フォルダにSketchUpのバージョンごとのインストーラーが格納されています。(下図)

NewImage

ここからSketchUpのバージョンに合わせてインストールすればオッケーです

【TRNSYS17.02.0005で確認】

gbXML Schema Review (ver 6.00)

gbXML ver6.0 のSchema Reviewが始まってますね。

Version 6.00 – September 2015 (Review version, only)

EnergyPlusのHVACTemplateへの対応をメインとした規模の大きなバージョンアップのようです。

e+のHVAC系の定義って専門的すぎるので、単に負荷計算したい場合とか大変そうなんですよね。

HVACTemplate対応ということは、そのあたりの取り回しを考慮するのが意図なのかな?

しかし、gbXMLって、どんどんe+にコミットしていきますね。(もうちょっと汎用フォーマットかと思ってた)

TRNSYSで定数を扱う

TRNSYSではCONSTANTSキーワードを使って、定数を扱うことができます。

これどういうときに便利かというと、直感的に分かりにくい定数や、共通で設定したいパラメーター、もしくは値を変えて計算を繰り返したい場合に使用します。

例)タイムステップを定数で設定する

1. Control Cardsの画面で、Simulation cardsの項目へ次のように記述します。

CONSTANTS 1
TIMESTEP=1/60

2. Simulation time step のUnitをStringに設定する

3. Simulation time stepのValue に宣言した定数(TIMESTEP)を入力する

NewImage

これでタイムステップ 1/60 Hour(1分間隔)として計算が行われます。

定数はControl Cardsの他、コンポーネントのパラメータでも利用できます。同じコンポーネントを複数使用しているプロジェクトなどでは、定数を使って、共通のパラメータをまとめて設定することができます。

注:定数で入力した計算式はシンプルに左から右へ評価されます。(例えば、1/60+5と5+1/60は全く違う値になるので注意してください)

IWEC2ってなんだ?

このまえ書いた気象データのサイト、White Box Technologiesで日本の気象データを眺めていたら年別データの他に、データの種類でIWEC2っていうのが用意されている。IWEC2の’2’ってなに?

調べてみたらこれ↓

ASHRAE International Weather Files For Energy Calculations 2.0 (IWEC2)

エネルギーシミュレーション用の標準気象データの最新版(?)っぽい。

FAQによるとファイルフォーマットは基本的にTMY3と同じで、EPW形式も提供される。TRNSYSだと、どちらの形式もデータリーダーがあるから、ばっちり使えます。

What file formats are supplied for the individual IWEC2 files?

DVDだと3,012地点入って、$299とかお手頃ですね。掲載されているIWEC2の地点のリスト(PDF)を見ると、日本国内も65カ所含まれている。機会があれば使ってみたいです。

View a list of IWEC2 station locations included on the DVD

TRNSYS-USERS拾い読み(気象データ)

TRNSYS-USERSから気象データの話題をピックアップ。入手先として以下のサイトが紹介されていました。

Energy Plus Weather:
http://apps1.eere.energy.gov/buildings/energyplus/weatherdata_about.cfm
White Box Technologies:
http://weather.whiteboxtechnologies.com/
Weather Analytics:
http://www.weatheranalytics.com/wa/

EnergyPlusのサイトは良く出てくるので知ってたけど、あとの2つは初耳です。日本だと拡張アメダスの独壇場なので、あまり関係ないかもですが、海外の案件など取り組む際には役立ちそうです。
と言うことでメモ代わりに書き残しておきます。

作ってみようTRNSYSコンポーネント C/C++編(5) コンポーネントが呼び出されるタイミング

前回はSimulation Studioで作成したコンポーネントの動作を確認しました。 あとは計算式に合わせてソースコードを書き換えればOKです。基本的にはParameters,Inputsの値を取得して計算を実行、結果をOutputsへ引き渡してあげます。 さて、ここでもう少しコンポーネントの動きについて掘り下げてみましょう。

if文がいっぱい

ソースコードを眺めてみるとParameters,Inputs,そしてOutputsの処理の他にも、なにやらごちゃごちゃとif分で処理が記述されています。例えば131行目からを見ると、次のような処理が記述されています。

]NewImage

info[6]の値が’-2’ならinfo[11]を16にセットして、そのまま処理終了。つまり本来の計算まで進まずに終了しています。ちなみにここではコンポーネントの対応するバージョンが16である事を宣言しています。(TRNSYS17使っているのに、なんで16なのかは後述) 他にもif文が何カ所かありますが、同じように何かを処理して、そのまま終了しています。これら本来の計算とは関係ない処理に見えますが、コンポーネントの処理を行う上で重要な処理を行っています。

コンポーネントは計算以外にも呼び出される

Simulation Studioでコンポーネントの配置、接続を行っていると、その順番に沿ってコンポーネントが呼び出されて計算が行われているように見えます。実際、動きとしては基本的にはその通りなのですが、計算の処理以外にも付随した処理が必要になる事があります。

例えば、コンポーネントがデータファイルを参照するようなケースを考えてみましょう。この場合、データファイルを開いて値を読み込む処理が必要になります。こういった処理は計算ごとに行う必要はないので、一般的には計算の開始前にまとめて処理するのが効率的です。 TRNSYSではタイムステップごとの計算の他、計算全体の開始前、終了後などのタイミングでコンポーネントを呼び出します。逆にコンポーネント側では、どのタイミングで呼び出されているのか意識して処理を進める必要があります。

具体的には、先ほどのif文のように、コンポーネント側ではinfo[]やタイムステップの値を使って、自身がどの段階で呼び出されているのか判定して処理を行います。 コンポーネント対応バージョンの処理などは、TRNSYS側からは最初に一度だけ呼び出されるので、そのタイミングでバージョンを宣言して終了するようにします。データファイルを読み込む処理などは、初期値の値を設定している以下のif文で処理すると良いでしょう。

NewImage

このあたりを含め、コンポーネントの仕組みについて詳しくは、ドキュメントの以下の箇所に、

7.3. How to Create New Component

info[]については以下に詳しく記載されています。

7.4.3. The INFO array – Typical calling sequence

この記述ですが、FORTRANを前提に記載されているため、C/C++では配列の添え字が一つずれます。(配列はC/C++では0、FORTRANでは1から始まるため)info[6]の説明はドキュメントではinfo(7)を見て下さい。 さて、ここでやっているinfo[]の値をif文で処理やり方ですが、これ実はTRNSYS16形式と呼ばれる方法です。前述のバージョンの宣言で16を指定しているのはこのあたりの事情によります。

最新版のTRNSYS17では、専用の関数で判定する方式に変更され、分かりやすくなっています。

TRNSYS17形式(FORTRAN)の例。

!Set the Version Number for This Type
If(getIsVersionSigningTime()) Then
Call SetTypeVersion(17)
Return
EndIf

info[]を判定するやり方に比べると、何をやっているのかだいぶ理解しやすくなります。 C/C++でも同じような書き方ができるんですが、そのあたりの話しについては、また次回ということで。つづく。

—————————————————-

以下、このシリーズの目次

作ってみようTRNSYSコンポーネント C/C++編
(1) 基本情報
(2) ソースコードの生成
(3) ソースコードを読んでみよう
(4) Simulation Studioで実行してみよう
(5) コンポーネントが呼び出されるタイミング
(6) ヘッダーファイル・基本編
(7) ヘッダーファイル・実践編

作ってみようTRNSYSコンポーネント C/C++編(4) Simulation Studioで実行してみよう

さてと、前回まででコンポーネントが出来上がったので、実際に動かしてみます。
Simulation Studioを起動して。。。って思ったんですが、よく考えたらFORTRAN編とここは一緒です。
ここを参考にプロジェクトを用意して、実際に動けばオッケーです。
NewImage
Githubにサンプルを追加しておきます。

プロフォルマ

https://github.com/TRNSYSJP/TRNSYS.JP/tree/master/TRNSYS17.1/Studio/Proformas/My Components
C:¥TRNSYS17¥Studio¥Proformas¥My Components  へダウンロード、保存してください。

ソースコード

https://github.com/TRNSYSJP/TRNSYS.JP/tree/master/TRNSYS17.1/Compilers/My Components
「Step3」フォルダの内容をC:¥TRNSYS17¥Compilers¥My Components へダウンロード、保存してください。

実行用のサンプルプロジェクト

https://github.com/TRNSYSJP/TRNSYS.JP/tree/master/TRNSYS17.1/MyProjects/MyComponent201
C:¥TRNSYS17¥MyProjects¥MyComponent201 へダウンロード、保存してください。
ということで、次回へつづく。

—————————————————-

以下、このシリーズの目次

作ってみようTRNSYSコンポーネント C/C++編
(1) 基本情報
(2) ソースコードの生成
(3) ソースコードを読んでみよう
(4) Simulation Studioで実行してみよう
(5) コンポーネントが呼び出されるタイミング
(6) ヘッダーファイル・基本編
(7) ヘッダーファイル・実践編

作ってみようTRNSYSコンポーネント C/C++編(3) ソースコードを読んでみよう

前回はソースコードのスケルトン(雛形)の書き出しと、ひとまずビルドできたので、今回はソースコードを読みながら一部書き換えて計算式を記述していきます。

はじめる前にちょっとプロフォルマで設定した内容のおさらいです。プロフォルマでは以下の様な設定を行なっていました。

Parameters:

Mult (デフォルト:1)

Inputs:

Inp1

Inp2

Outputs:

Out1

パラメーターを1個、入力は2個で、出力は1個です。この設定に沿ってソースコードを見て行きます。

1. ソースコードの確認

まず、ソリューションエクスプローラーからType201.cppをダブルクリックしてソースコードを表示します。

NewImage

ソースコードを上から順に見ていくと110行目付近に変数の宣言箇所があります。(Ctrl+Gで直接指定行にジャンプできます。これ使うと探しやすいです)

NewImage

プロフォルマの設定と見比べると分かりやすいですが、ここでParameters, Inputsの項目として登録したものが宣言されているのがわかります。 さらに下の方にPrameterとInputsに値を設定している箇所があります。この部分でSimulation Studioで設定した値や他のコンポーネントから受け取った値(Inputsの値)を変数に設定しています。

でもって、最後は270行目付近に前回、Outputの処理を書き加えた箇所があります。通常ここで計算した結果をOutputsの値して書き出します。

NewImage

2. 処理の追加

試しに簡単な計算を為てみます。Parameters、Inputsの値を使って処理を記述してみましょう。処理内容はInputsの値2つを足してPrameterの値を掛けるシンプルなものです。

xout[0] = (Inp1 + Inp2) * Mult;

NewImage

以上で、ソースコードの変更は終了です。 コンポーネントの処理は次のような流れで順番に処理されます。

Parameters,Inputsの値を受け取る

計算する

出力する

これの繰り返しです。簡単ですよね?コンポーネントは基本的にはこのようにシンプルな仕組みで動作します。

3. ビルドする

ソースコードの変更が終わったらビルドして実際に動かしてみます。この時、メニューから[ビルド]-[構成マネージャー]を選択して、「アクテイブソリューションの構成」で「Release」を選択しておきます。(DebugモードだとTRNSYSが認識てくれないので必ずReleseでビルドしてください)

NewImage

[ビルド]-[ソリューションのビルド]を選択してビルドします。エラーにならずビルドができたらコンポーネントの完成です。

次回は、実際にSimulation Studioで動かしてみたいと思います。
つづく。

—————————————————-

以下、このシリーズの目次

作ってみようTRNSYSコンポーネント C/C++編
(1) 基本情報
(2) ソースコードの生成
(3) ソースコードを読んでみよう
(4) Simulation Studioで実行してみよう
(5) コンポーネントが呼び出されるタイミング
(6) ヘッダーファイル・基本編
(7) ヘッダーファイル・実践編

作ってみようTRNSYSコンポーネント C/C++編(2) ソースコードの生成

さて、今回は前回用意したプロフォルマからC/C++のソースコードの生成を行います。

1.開発環境の設定

コンポーネントのソースコードの生成を行う前に、使用する開発環境(VS2013)の設定を行います。これを設定しておくと、後述する作業でVisual Studioを自動起動してくれます。 まず、Simulation Studioのメニューから[File]-[Settings…]の順で選択します。

NewImage

次に表示される「Directories」ダイアログで「C++」のパスを設定します。使用する開発環境に合わせてパスの設定を行います。

例)Visual Studio 2013

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDEdevenv.exe

NewImage

2.ソースコード生成

いよいよソースコードの生成です。プロフォルマを開いていている状態で、メニューから[File]-[Export as]-[C++]の順で選択します。

NewImage

ここで保存先はFORTRANの時と同じように”C:Trnsys17Compilers”へ”My Components”というフォルダを作って保存します。 保存先: C:Trnsys17CompilersMy Components ファイル名:Type201.cpp ファイルが保存されるとメッセージが表示されます。保存先などの情報を確認したら「OK」をクリックします。

NewImage

つづいてVisual Studioが起動してメッセージが表示されます。これはSimulation Studioが書き出すプロジェクトファイル形式が以前のバージョンのため更新を促すメッセージです。ここは素直に「はい」をクリックして次へ進みます。

NewImage

ソースコードが生成が生成されたら、ひとまずすべてのファイルを保存します。メニューから[ファイル]-[すべてを保存]を選んで保存を行います。

NewImage

ここで、ソリューションファイルの名称はデフォルト(下図)で保存します。

NewImage

3.ビルド

ここでビルドしてみると。。。エラーになります。

NewImage

生成されたソースコードって必要最小限の内容になっています。出力の処理がちゃんと書かれていないので、それが原因でエラーになります。 エラーメッセージをダブルクリックすると、エラーの発生している箇所が表示されるので、修正を行います。

次のように書き換えます。

・修正前

xout[0]=?;

・修正後

xout[0]=1.0;

そして再度ビルドしてエラーが出なければ、ソースコードの準備完了です。

次回は、ソースコードの解説と修正の予定です。

—————————————————-

以下、このシリーズの目次

作ってみようTRNSYSコンポーネント C/C++編
(1) 基本情報
(2) ソースコードの生成
(3) ソースコードを読んでみよう
(4) Simulation Studioで実行してみよう
(5) コンポーネントが呼び出されるタイミング
(6) ヘッダーファイル・基本編
(7) ヘッダーファイル・実践編

作ってみようTRNSYSコンポーネント C/C++編(1) 基本情報

The Evolution of Computer Programming Languages #C #Fortran #Java #Ruby
The Evolution of Computer Programming Languages #C #Fortran #Java #Ruby / dullhunk

以前にFORTRANを使ってTRNSYSコンポーネントを作成する話をまとめましたが、今回は他の言語、具体的にはC/C++で書いてみたいと思います。
(しかし、上の絵って面白いので貼ってみたけど、CとFORTRANは時系列としては逆だよね)

さて、TRNSYSのドキュメントによるとカスタムコンポーネントの開発にはC, C++, PASCAL, FORTRAN,その他の開発言語が使用できるとあります。

Windowsのプログラミングに詳しい方はご存じだと思いますが、基本的に引数の渡し方とか戻り値の処理が分かれば複数言語を組み合わせた開発が可能です。そういう意味で他の言語も使えるという意味で書かれているようです。

さて、とはいえ開発に関するドキュメントはFORTRANを前提に書かれています。そもそもTRNSYS自身がFORTRANで書かれているので、その流れでドキュメントもそうなっているようです。その他の言語について言えば、C/C++対応として、’Export as C++’という機能がSimulation Stuidioに用意されており、ドキュメントでもさらっと触れられています。(1.8.3.2. Types in C++)

サンプルも用意されているので、それを参考にすればできそうな雰囲気で書いてあります。が、実際にやってみると、あちこち落とし穴が待ち構えています。そのあたりも含めて書いてみたいと思います。

用意するもの

今回試すに当たって用意した環境は以下の通りです。

TRNSYS 17.01.0028
コンパイラ Microsoft Visual Stuido 2013 Professional

プロフォルマの準備

コンポーネントのインターフェースを定義するプロフォルマ。これに関してはFORTRANとまったく同じ方法で作成します。今回も同じプロフォルマを使うので、以前の記事そのままです。

(1) 準備編
(2) プロフォルマ

これで準備は整ったということで、次回へつづく。

—————————————————-

以下、このシリーズの目次

作ってみようTRNSYSコンポーネント C/C++編
(1) 基本情報
(2) ソースコードの生成
(3) ソースコードを読んでみよう
(4) Simulation Studioで実行してみよう
(5) コンポーネントが呼び出されるタイミング
(6) ヘッダーファイル・基本編
(7) ヘッダーファイル・実践編