Translate

2013/10/25

Inputの値を"ラベル"として扱う方法

コンポーネントのInputの項目って、通常は値、もしくはEquationなので設定された変数とか定数を入力することができます。

ところが、例外があって、この部分を単なる文字列として扱う事もできます。例えば、Type65 Online Plotterでは、Inputに入力された値を単なる文字列として扱って、グラフの凡例で使っています。

なーんか不思議ですよね?Inputの項目を変数として扱う場合と、単に文字列で扱う場合って、どこで区別しているんでしょう?
ちょっと必要に迫られて調べてみました。

新しくコンポーネントを作ってみると。。。

試しに普通にProformaとコンポーネントを作ると、この部分は値、もしくは変数として認識されます。Type65と同じようにInputへ適当な文字列を入れて実行してみるとエラーになります。

例)実際にInputの項目に"Ctrl01"って文字列を入れてエラー発生

*** Fatal Error at time   :         0.000000
    Generated by Unit     : Not applicable or not available
    Generated by Type     : Not applicable or not available
    TRNSYS Message     98 : Unrecognized variable name or bad data card.
TRNSYS was looking for a numerical value or the name of a variable
defined in an equation/constant and instead it found the data in
"reported information" below.
    Reported information  : Ctrl01 0 0 0 0 0 0 0 0 0

メッセージからすると、対応する変数が無いってコトでエラーになっているようですが、はて?
でもType65は、なんでOKなんだろ?

ちなみに、Inputの項目を文字列として取得するためのAPIはちゃんと用意されています。

例)Inputの値の説明を取得する
label = getVariableDescription(CurrentUnit, 1)

Type65のソースコードと比較してみると、同じAPIを使って文字列のデータを取得しているのにエラーは発生しません。でも自分で書いたコンポーネントではエラーになります。
う~ん、きっとなにか切り替えの仕組みがあるはずです。しかし、Type65のソースコードやProformaを眺めても、それらしい記述が見つかりません。ナゾです。

隠し機能なのか?


1日悩んでお手上げだったので開発に問い合わせたら、あっさり答えが返ってきました。

「ExeフォルダのDescrips.dat にType番号書いとけばOK」(意訳)

なんと、専用のファイルがあるようです。という事で実際にType番号を書き加えてみました。

例)Descrips.dat
This file should contain the TYPE numbers 
208  !Tess Library Model: Type208.for
535  !Tess Library Model: Type535.for
221  !MyComponent: Type221  ←この行を追加した

で、試したらあっさり動いた。

この仕組み、ドキュメントには記載が見当たらない(見付けらていないだけか?)
滅多に使う機能じゃないので、知っている人だけが知っていればいいってことなのかな?
ま、ともかく、目的は達せそうです。


0 件のコメント:

コメントを投稿