Translate

2017/05/31

TRNSYS18のTypeStudioとIntel Visual FORTRAN

TRNSYS18からコンポーネントの開発用の専用ツール(FORTRANコンパイラ)が標準添付します。コーディングからビルド、DLLの配置まで手軽にできるので、コンポーネントの開発が非常に楽になります。

image

とはいえ従来のIntel Visual FORTRAN(以下、IVF)で行っていたコンポーネント開発に比べて制限もあります。主な項目を比較してみました。

機能

TRNSYS/TypeStudio   

Intel Visual FORTRAN

コンポーネント開発

デバッグ

×

TRNDLLリビルド

×

32bitコンポーネント

×

64bitコンポーネント

外部ライブラリ

×

DLL配置

ちょっとした開発にはTypeStudio、本格的な開発にはIntel FORTRANというところですかね。

開発するコンポーネントの内容や使用環境に合わせて、ケースバイケースでどちらを使うか検討しましょう。

以下、表の各項目をもう少し詳しく解説します。


コンポーネント開発

TypeStudio,IVFのどちらでもコンポーネントの開発が可能です。


デバッグ

TypeStudioでは処理の途中で変数の値を調べたり、ステップ実行したりと言った、いわゆるデバッガーの機能がありません。(そのうち付くかも知れないですが。。。)
一方、IVFはもともと本格的な開発ツールなので、非常に強力なデバック機能を備えています。

TRNDLLビルド

TypeStudioはコンポーネントの開発専用です。TRNDLL(TRNSYSの本体)のビルドには対応してません。IVFでは従来通り、TRNDLLのビルドが可能です。


32bitコンポーネント

TRNSYS18よりTRNSYSは64bit化(※)されています。このため、今後は32bitのコンポーネントを作る機会は少なくなると思います。TypeStudioは64bit版のツールのため,32bitコンポーネントにビルドには使用できません。IVFでは従来通り32bitコンポーネントのビルドが可能です。

※32bit版のOSに対応した32bitはサポートサイトよりダウンロードできます。


64bitコンポーネント

TypeStudio、IVFともに64bitコンポーネントのビルドが可能です。


外部ライブラリ

コンポーネントによっては外部のライブラリ、例えば数値計算や他のシミュレーションソフトウェアのライブラリを参照したいケースがあると思います。IVFは汎用的なツールでなので問題ありません。
TypeStudioは専用ツールのため参照できません。


DLL配置

TypeStudioではビルドしたDLL(コンポーネントの本体)をTRNSYSのフォルダに自動的に配置します。フォルダの構成を意識せず、すぐにSimulation Studioで配置、利用することができます。

IVFではビルドのモード(Release,またはDebug)に合せて、出力先を調整します。


以上、TRNSYS18.00.0012で確認

2017/05/24

TESSのTRNSYSのオンライントレーニング

TRNSYSのオンライントレーニングのお知らせ貼っとく。

Calling TRNSYS Functions from C/C++

TRNSYSの関数をC/C++から呼び出す方法について紹介します。というか備忘です。
In this article I will explain how to call TRNSYS functions from C/C++.

1. 引数/argument

C/C++では引数は下表のように置き換える必要があります。
In the C/C++ language, the argument needs to be replaced as shown in the table below.

FORTRAN C/C++

Integer

int*

Real(8),
Double Precision

double*

Character(Len=n)

char*, size_t n

 

コーディング例

1.1. Integer

- TRNSYS.h

extern "C" __declspec(dllimport) void _cdecl SETTYPEVERSION(int* ver);
#define setTypeVersion                 SETTYPEVERSION

- Source code

if (getIsVersionSigningTime())
{
     int ver = 17;
     setTypeVersion(&ver);
     return 1;
}

1.2. Double Precision

- TRNSYS.h

extern "C" __declspec(dllimport) double _cdecl TRNSYSFUNCTIONS_mp_GETINPUTVALUE(int* n);
#define getInputValue                   TRNSYSFUNCTIONS_mp_GETINPUTVALUE

- Source code

int no = 1;
double ret = getInputValue(&no);

1.2. Character

文字列を渡す引数では、size_t(文字列の長さ)を引数の最後に加える。
NOTE: For string argument, the length(size_t) has to be added at the end of the arguments.

- TRNSYS.h

extern "C" __declspec(dllimport) void _cdecl SETINPUTUNITS(int*i, char* string, size_t len);
#define setInputUnits                   SETINPUTUNITS

- Source code

int i = 1;
setInputUnits(&i, "DM1", 3);

 

2. 戻り値/return value

戻り値は下表のように置き換えます。
In the C/C++ language, the return value needs to be replaced as shown below.

FORTRAN C/C++

Logical

int

Integer

int

Real(8),
Double Precision

double

Character(Len=n)

char* , size_t n

 

コーデング例

2.1. Logical

- TRNSYS.h

extern "C" __declspec(dllimport) int    _cdecl TRNSYSFUNCTIONS_mp_ERRORFOUND(void);
#define ErrorFound                     TRNSYSFUNCTIONS_mp_ERRORFOUND  

- Source code

if (ErrorFound()) return 1; // 0:false, except 0: true in C/C++

2.2. Integer

- TRNSYS.h

extern "C" __declspec(dllimport) int _cdecl TRNSYSFUNCTIONS_mp_GETMAXLABELLENGTH(void);
#define getMaxLabelLength        TRNSYSFUNCTIONS_mp_GETMAXLABELLENGTH  

- Source code

size_t maxlen = getMaxLabelLength();

2.3. Double Precision

- TRNSYS.h

extern "C" __declspec(dllimport) double _cdecl TRNSYSFUNCTIONS_mp_GETINPUTVALUE(int* n);
#define getInputValue                TRNSYSFUNCTIONS_mp_GETINPUTVALUE

- Source code

int no = 1;
double ret = getInputValue(&no);

2.4 Character

※文字列(Character型)を返す関数では、「引数」としてchar* と size_t(文字列の長さ)を第1、第2引数として指定する。
NOTE: For a function which returns 'Character', char* and size_t has to be needed as the first and second arguments in C/C++.

- TRNSYS.h

extern "C" __declspec(dllimport) int  _cdecl TRNSYSFUNCTIONS_mp_GETMAXPATHLENGTH(void);
extern "C" __declspec(dllimport) char*  _cdecl TRNSYSFUNCTIONS_mp_GETDECKFILENAME(char* dck, size_t len);

#define getMaxPathLength         TRNSYSFUNCTIONS_mp_GETMAXPATHLENGTH 
#define getDeckFileName           TRNSYSFUNCTIONS_mp_GETDECKFILENAME

- Source code

size_t maxlen = getMaxPathLength();
char *fname= new char[maxlen];
getDeckFileName(fname, maxlen);
std::string deckFileName = trim(std::string(fname,0,maxlen)); // trimming the string, just in case
delete[] fname;

// Trimming the string
std::string trim(const std::string& str)
{
    size_t first = str.find_first_not_of(' ');
    if (std::string::npos == first)
    {
        return str;
    }
    size_t last = str.find_last_not_of(' ');
    return str.substr(first, (last - first + 1));
}

2017/05/18

家庭用エアコン選定支援ツール ASST

電力中央研究所のサイトで家庭用エアコン選定支援ツール(ASST)が公開されています。

家庭用エアコン選定支援ツール(ASST)
http://criepi.denken.or.jp/asst/

image

エアコンのカタログなどでは8畳用とか10畳用とか、性能を部屋の畳数で記載しています。でも、これずいぶん昔に決められた表現なので、最近の住宅では当時に比べて断熱性能が上がっていて実状に合わなくなっています。畳数だけでエアコンを選ぶと、設置する部屋の条件によってかなりオーバースペック(もしくはアンダースペックも?)になります。

エアコンを設置する部屋の条件は、断熱性能の他、例えば南向きの部屋と北向きの部屋では変わってきます。また、東北や九州といった地域の気象条件も影響します。

ASSTでは、部屋の広さの他、向きや、断熱性能、地域、それに暖房や冷房の好み(寒がりなので設定温度高めとか)など、条件を指定して必要なエアコンの性能を絞り込む事ができます。

image
「地域」の選択画面(盛岡から福岡の5地域から選択)

さらに、すぐに効き始めるタイプ(立ち上がり)のエアコンが良いか、価格が安くて電気代がお得(省コスト)なのが良いか、でもやっぱり地球の事を考えて省CO2にしたいなど、優先度を指定する事ができます。

image
エアコンに求める優先度の選択画面

すべての条件を指定すると、データベース(あらかじめシミュレーションした膨大なデータから)適切な機器をリストアップしてくれます。

image
対象機種をポイントでランク表示

総合点でランク付けされていますが、立ち上がり、CO2、コストそれぞれでランク表示もできます。見比べてみると、総合点では良いけど、立ち上がりはいまいち、でもコストはどれを選んでも大差ないんだとか傾向が見えます。(条件によります)

住宅の条件や好みでエアコンを設定できるので、畳数だけで選ぶの比べて実状に沿った機種が選定できそうです。エアコンを使う時間帯や設定温度でも結果が変わってくるので、条件を変えて試してみるのも面白かも知れません。

詳しくはこちら

実際の使用環境を考慮したエアコン選定が可能な「エアコン選定支援ツール(ASST)」を公開
http://criepi.denken.or.jp/press/pressrelease/2017/04_19.html

2017/05/08

TRNSYS-USERS拾い読み(PCMのコンポーネント)

連休も終わっちゃいましたね。TRNSYS-USERSの連休中の投稿を見ていたらPCMの情報が流れていました。
PCMって条件によって潜熱が出たり入ったりして変化するから扱いが難しいんですよね。以下、TRNSYS-USERSで紹介されていたPCMのコンポーネント。

Type204

TRNLibアーカイブで提供される現状有姿、無保証のコンポーネント。無償で利用可能。サポートなし。 (http://sel.me.wisc.edu/trnsys/trnlib/library16.htm#thermalstorage)

※TRNSYS16対応。TRNSYS17以降ではコンポーネントの仕組みが大分変わったので、おそらく動作しない。(TRNSYS17で動いたらラッキーといったレベル。TRNSYS18はそもそも標準で64bit版で提供されるため動作しない)
ソースコードも提供されるのでTRNSYS18への移植も考えられるが、慣れた人でも数日は掛かる。

 

Type1270

image

TESS社が開発、販売する商用コンポーネント。 (http://trnsys.com/tess-libraries/individual-components.php)

※TRNSYS17対応。TRNSYS18については64bit対応版が必要。たぶん近日リリース。 

2017/5/8追記
通常のTESS Lib(Individual Component Libを除く)についてはすでにTRNSYS18対応済みです。
Individual componentsについては問い合わせ中。

 

Type399

image

Transsolar社が開発、販売する商用コンポーネント。(http://trnsys.de/docs/komponenten/komponenten_ts_en.htm)

※TRNSYS17対応。TRNSYS18については64bit対応版が必要。たぶん近日リリース。

2017/5/9追記
TRNFlowを含め、すべてのNon Standard typeが対応済みです。

Type1270,Type399については、いずれもTRNSYS18対応はハッキリと謳っていません。が、TESS社もTranssolar社もTRNSYSの開発グループなので近日中には対応して来るんじゃないかなと期待中。