データフィードオブジェクトを作成するには、接続の詳細を指定した引数をもつOpen Datafeed()関数を使います。
feed = Open Datafeed( options );
引数は必須ではありません。引数を指定せずにデータフィードオブジェクトを作成して、後からメッセージを送ることもできます。ポートへ接続したり、入力されたデータを処理するためのスクリプトを設定したりすることは、メッセージでも行えます。しかし、通常は、Open Datafeed()関数の引数において、データフィードの基本設定は行っておきます。そして、引き続いて、データフィードをさらに制御するのに必要なメッセージを送ります。後述のオプションはどれも、Open Datafeed()のオプションとしても、またデータフィードオブジェクトに送られたメッセージとしても使用できます。
上記の例のように、データフィードオブジェクトへの参照を、グローバル変数に格納しておくと良いでしょう(上記の例では、feedという変数に格納している)。変数に格納しておけば、後から、簡単にオブジェクトにメッセージが送れます。なお、既存のオブジェクトへの参照を、添え字を使って格納することも可能です。たとえば、次のスクリプトは、2番目に作成したデータフィードオブジェクトへの参照を変数に格納しています。
feed2 =Datafeed[2];
生のデータソースに接続するには、Connect( )を使ってポートの詳細を指定します。設定項目は、それぞれ1つだけ引数をとります。ここの構文の説明では、引数の選択肢間に記している記号「|」は「または」を意味します。接続する場合はPortを必ず指定してください。ポートを指定しなくてもオブジェクトは機能しますが、データフィードには接続されません。最後の3つの項目、DTR_DSR、RTS_CTS、XON_XOFFはブール値の引数をとり、データフィードがデータ取得可能な状態になったことを通知する際に、どの制御文字を送受信するかを指定します。通常、3つのうちの1つをオンにします。
feed = Open Datafeed(
Connect(
Port( "com1:" | "com2:" | "lpt1:" | ... ),
Baud( 9600 | 4800 | ... ),
Data Bits( 8 | 7 ),
Parity( None | Odd | Even ),
Stop Bits( 1 | 0 | 2 ),
DTR_DSR( 0 | 1 ), // データターミナル準備
RTS_CTS( 0 | 1 ), // 送信をリクエスト | 送信をクリア
XON_XOFF( 1 | 0 ) // 送信器オン | 送信器オフ
)
);
このコマンドにより、スクリプト可能なデータフィードオブジェクトが作成され、そのオブジェクトへの参照をグローバル変数feedに格納します。引数Connect()は、通信ポートを監視してデータのライン(行)をとりまとめるスレッドを立ち上げます。このスレッドは、ラインが確保されるまで文字を受け取ります。そして、それをキュー(待ち行列)に加え、スクリプトをコールするイベントのスケジュールを立てます。
メモ: フィードからのデータのライン(行)は、データテーブルにおける複数の行にすることもできますし、データテーブルにおける1行の1部にすることもできます。フィードからのデータのラインを解析し、必要に応じて行をデータテーブルに追加するJSLを記述してください。
Set Script()はデータフィードオブジェクトにスクリプトを割り当てます。このスクリプトは、データのライン(行)が届くたびにOpen Datafeedメッセージによって実行されます。Set Script()の引数には、実行するスクリプトをそのまま記述するか、またはスクリプトを含むグローバル変数を指定します。
feed = Open Datafeed( Set Script( myScript ) );
feed = Open Datafeed( Set Script( Print( feed << Get Line ) ) );
データフィードのスクリプトでは、通常Get Lineを使って1ラインのデータのコピーを取得し、そのラインに対して何らかの処理を行います。たとえば、ここで設定したスクリプトによって、ラインのデータを解析し、その結果をデータテーブルに追加できます。