公開日: 04/01/2021

データフィードオブジェクトの作成

データフィードオブジェクトを作成するには、接続の詳細を指定した引数をもつOpen Datafeed()関数を使います。

feed = Open Datafeed( options );

引数は必須ではありません。データフィードオブジェクトを引数を指定せずに作成して、後からメッセージを送ることもできます。ポートへ接続したり、入力されたデータを処理するためのスクリプトを設定したりすることは、メッセージでも行えます。しかし、通常は、Open Datafeed()関数の引数において、データフィードの基本設定は行っておきます。そして、引き続いて、データフィードをさらに制御するのに必要なメッセージを送ります。後述のオプションはどれも、Open Datafeed()のオプションとしても、またデータフィードオブジェクトに送られたメッセージとしても使用できます。

上記の例のように、データフィードオブジェクトへの参照を、グローバル変数に格納しておくと良いでしょう(上記の例では、feedという変数に格納している)。変数に格納しておけば、後から、簡単にオブジェクトにメッセージが送れます。なお、既存のオブジェクトへの参照を、添え字を使って格納することも可能です。たとえば、次のスクリプトは、2番目に作成したデータフィードオブジェクトへの参照を変数に格納しています。

feed2 =Datafeed[2];

データフィードのオプション

生のデータソースに接続するには、Connect( )を使ってポートの詳細を指定します。設定項目は、それぞれ1つだけ引数をとります。ここの構文の説明では、引数の選択肢間の記号「|」は「または」を意味します。接続する場合はPortを必ず指定してください。ポートを指定しなくてもオブジェクトは機能しますが、データフィードには接続されません。最後の3つの項目、DTR_DSRRTS_CTSXON_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ラインのデータのコピーを取得し、そのラインに対して何らかの処理を行います。このスクリプトはラインのデータを解析し、結果をデータテーブルに追加します。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).