Translate

2011/10/13

TRNSYSでExcelを使う

TRNSYSには外部プログラムとデータをやり取りできるコンポーネントがいくつか用意されています。
換気計算のプログラムなど専門ツールとのやりとりもありますが、もっと一般的なプログラムとしてExcel用のコンポーネントも用意されています。

ちょっとした計算ぐらいだと、Excelで処理した方が楽なので試しに簡単なプロジェクトを作ってみました。
内容は時刻を基にサインカーブを描くだけのシンプルなものですが、以下の2通りの方法でExcelで計算してみます。

  • Excelの関数
  • VBA


まずは新規にプロジェクトを用意してコンポーネントをならべてつなぎます。Equation、Type62、Type65を配置して、つないで行きます。
完成するとこんな感じのシンプルなプロジェクト




コンポーネントの設定

  • Equa

0~360の値が欲しいので、変数"Degree"を用意して、mod()で値を生成します。



  • Type62

Special CardsでExcelのファイル名を指定します。


  • Excelのワークシート

順番逆になってしまいますけど、肝心のExcelのシートは予め用意されているワークシートをコピーして用意します。

このファイル→C:\Trnsys17\Examples\Data Files\Type62-CallingExcel.xls をプロジェクトのフォルダに"sample.xls"という名前でコピーします。
コピーしたら、ワークシートの"Output1"の項目に関数を入力します。

関数
=SIN(RADIANS(Inp1))


そしてVBAはワークシートに既存で含まれているTRNSYSという名前のサブルーチンを、がっさり以下のように書き換えます。
※最近のExcelだとデフォルトではVBAがインストールされていないようです。その場合はVBAの方は省略するか、別途VBAのインストールを行ってから作業を進めてください。
参考→ http://yasuda-style.blogspot.com/2011/03/xlsexcel2010.html


Sub TRNSYS(Optional Input1 As Variant, Optional Input2 As Variant, Optional Input3 As Variant)

    If IsMissing(Input1) Then Exit Sub
 
    Range("inp1") = Input1 'Type62のInput1をセルに書き込む
    Dim deg As Double
    deg = CDbl(Input1) ' VariantからDoubleへキャスト
 
    Range("Out2").Value = Sin(deg * 3.14 / 180) 'Sin値を計算してセルに書き込む

End Sub


ここまでできたら、あとはコンポーネントをつなぎます。


  • Equa ---> Type62



  •  Type62 ---> Type65


実行してサインカーブが表示されたら出来上がり。
 

関数で描いたカーブとVBAで描いたカーブが重なってしまって解りにくいですね。ちょっとずらせばよかったかな?

補足:
標準で"Examples\Calling_Excel"フォルダに2つ例が置いてあります。
一個はシートに含まれている、データを出力するデータリーダーのような使いかた、もう一つは入力データから図を作成(というかアニメーション)するサンプルです。



0 件のコメント:

コメントを投稿