Inputの値を”ラベル”として扱う方法
コンポーネントのInputの項目って、通常は値、もしくはEquationなので設定された変数とか定数を入力することができます。
Inputを文字列として扱う
ところが、例外があって、この部分を単なる文字列として扱う事もできます。例えば、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 ←この行を追加した
で、試したらあっさり動いた。
この仕組み、ドキュメントには記載が見当たらない(見付けらていないだけか?)
滅多に使う機能じゃないので、知っている人だけが知っていればいいってことなのかな?
ま、ともかく、目的は達せそうです。