IXLクライアントからISaGRAF Ver.4/5ターゲットにリクエストを送信したい。応答があるまで多少時間がかかるが、その間、クライアント側に他の処理をさせたい。


IXLクライアントアプリケーションでは、ターゲットへのリクエストの送信にノンブロッキングメソッドを使うこともできます。
この方法では、あらかじめコールバック関数を準備しておきます。
そして、IXLの初期化の段階でコールバック関数のアドレスをセットしておきます。
クライアントは、リクエストを送信した後、できるだけ頻繁に ixlCallbackActive() 関数をコールするようにします。
リクエストが完了した時点でコールバック関数がコールされるので、クライアントはそれまでの間、他の処理を行うことができます。

アンサーの準備ができた時点でコールバック関数はコールされます。コールバック関数内では受信した応答は、
  • 指定したリクエストコード通知識別子対応する ixlOnNotifXxx() 関数
を使って処理するようにします。

下記はクライアントプログラムの一例です。

main ()
{
    ... ixlInit(... ,dtstIxlCallback,....);
    .... ドライバ初期化 ....
    ... 接続 ...
    ... ダイアログの確立 ...

    while (....)
    {
      if (.... ) /* 読みこみを行う場合 */
      {
        ixlRead(...);
        ...
      }
      else if (..) /* リソース情報の取得を行う場合 */
      {
        ixlResInfoGet(...);
        ...
      }
      else
      {
        ixlCallBackActive (...); /* この関数をできるだけ頻繁にコールする */
      }
    }

void dTstIxlCallBack( ..,cuRqCode,..)
{
    ....リクエストコード cuRqCode で分岐する....
    ...
    else if (cuRqCode == ISA_RQ_READ)
    {
      if (ixlOnNotifRC (..) == 0)
      ixlOnNotifReadL( …,_tIXLVarDesc…);
    }
    else if (cuRqCode == ISA_RQ_RES_INFOGET)
    {
      if (ixlOnNotifRC (..) == 0)
      ixlOnNotifResInfoGet( …, _IXLRESINFO …)

      }
    }
    :
    :
    :
最終更新:
2008-07-31 12:25
改訂:
1.1
評価点数:0 (0 件の投票)
Chuck Norris has counted to infinity. Twice.

このカテゴリー内のレコード

タグ