INtimeドキュメンタリトップへ

データのインターフェース

課題
アナログ変換データを取得後、ログ出力スレッド、NT表示プロセスにそのデータを送信しなければいけません。
データ送信に使用するオブジェクトはメールボックスです。メールボックスにはオブジェクト型メールボックスとデータ型メールボックスがあり、今回はログ出力スレッドに対してデータ型メールボックスを、NTデータ表示プロセスにオブジェクト型メールボックスを使用することになりました。

10月22日・・・データ型メールボックス

データ型メールボックスは128BYTEまでのデータを扱います。
データ型メールボックスでのデータ送信に使用するSendRtData関数を使用してログ出力スレッドにデータを送信するようにしました。
データ型メールボックスについてはたいしたトラブルもなく、すんなり取り入れることができました。


初期化時

メールボックス生成:初期スレッド(mainスレッド) 

//データ型 メールボックス
//アナログデータ取り込み・擬似データ作成スレッドとログ出力スレッドとの
//データの受け渡しをする為の、データ型メールボックスを作成する
strInfo.hParamMBox	= CreateRtMailbox(DATA_MAILBOX | FIFO_QUEUING);
if (strInfo.hParamMBox == BAD_RTHANDLE)
	Fail("Cannot create data mailbox ParamMBox");
if (!Catalog(NULL_RTHANDLE, strInfo.hParamMBox, "ParamMBox"))
     	Fail("Cannot catalog data mailbox ParamMBox");


データ送信

アナログ変換データ取得スレッド、擬似アナログデータ生成スレッド:データ100件に一度ログに出力する
/*取り込みデータ100件に1度ログ出力を行う */ if((dataCnt % 100) == 0){ /*100件に1度ログ出力スレッドにデータ型メールボックスを使用しデータを送信する */ SendRtData(strInfo.hParamMBox,aData,sizeof(aData)); /* 100件をの制御を行う為のカウンタをクリアする*/ dataCnt = 0; }

データ受信

ログ出力スレッド:受信データをもとにログを出力 

while (1) {
       valData = (WORD*)byMessage;
       /*アナログデータ取り込みスレッド、または擬似データ作成スレッドより*/
       /*データ型メールボックスにてデータを受信*/ 
      wActual	= ReceiveRtData(strInfo.hParamMBox, valData, WAIT_FOREVER);	
      if (wActual == 0)
          Fail("Receive from data mailbox ParamMBox failed");	
       /* 受信したデータをもとにログ出力を行う */	
      WriteLogFile(valData);		/*	ログ出力	*/

}