株式会社インタフェース Topページへ サイトマップ
English Site
Made in 日本
新着情報 製品情報 download 会社概要 採用情報 購入方法 資料請求
 
>>HowtoのTopへ

Visual C++によるAD入門書 5.4 コールバック関数 最終更新日:2008/08/25
 
このページでは、「Visual C++によるAD入門書 TUT-0020」の内容を元に、Visual C++ 2008で使用する際の差分情報を掲載しております。
ここに掲載されていない情報は、「Visual C++によるAD入門書 TUT-0020」をご覧下さい。
「Visual C++によるAD入門書 TUT-0020」については、こちらから ダウンロードください。
注) 弊社Web siteからファイルをダウンロードする場合は、ユーザIDを取得してください。

Step1.メインウィンドウ作成
   ここでは、これから作成するプログラムの画面作成を行います。(詳しくは『5.1 アナログ入力[1]』でのStep1〜Step3を参考にしてください。)
  1. Visual Studio 2008を起動し、新しいプロジェクト(プロジェクト名:AdCallback)を作成します。
  2. プロジェクトにFBIAD.LIBファイル, FBIADDC.LIBファイル, FBIAD.Hファイル, GPCAD.Hファイルのパス設定を行い、 ライブラリファイル”fbiad.lib”, ”fbiaddc.lib”をリンクさせます(『5.1 アナログ入力[1]』のStep2を参照してください)。
  3. メインウィンドウにメニューアイテムの追加を行います。今回はインタフェースモジュールの初期化, インタフェースモジュールの終了理, サンプリングの3つのメニューアイテムを作成します。 (『5.1 アナログ入力[1]』のStep4の2を参照してください)。各メニューのプロパティを以下のように設定します。
      インタフェースモジュールの初期化 インタフェースモジュールの終了 サンプリング
    ID ID_DEVICEOPEN ID_DEVICECLOSE ID_CALLBACK
    Caption Open Close コールバック
    Popup False False False
  4. イベントハンドラウィザードで、メンバ関数”OnDeviceopen”, ”OnDeviceclose”, ”OnCallback”の追加を行ないます。
    各メンバ関数の設定を行います(『5.1 アナログ入力[1]』のStep4の4〜7を参照してください)。
    以下のように設定します。
      インタフェースモジュールの初期化
    (Open)
    インタフェースモジュールの終了
    (Close)
    サンプリング
    (サンプリング)
    メッセージの種類 COMMAND COMMAND COMMAND
    クラスの一覧 CAdCallbackView CAdCallbackView CAdCallbackView
    関数ハンドラ名 OnDeviceopen OnDeviceclose OnCallback
Step2.コールバック処理の作成
  
  1. ソリューションエクスプローラを表示し、ソースファイルフォルダを展開してAdCallbackView.cppの以下の位置(最初の部分)に #include “fbiad.h”を追加します。
  2. 「表示」→「クラスビュー」でクラスビューを表示し、CAdCallbackViewクラスを展開してOnDeviceopen関数、OnDeviceclose関数、OnCallback関数に以下のコードを記述します。
    また、コールバック関数のCallBackProc関数も追加します。
    (CAdCallbackViewクラスのOnDeviceopen関数、OnDeviceclose関数、OnCallback関数のコード、コールバック関数CallBackProc関数のコード)

    /////////////////////////////////////////////////////////////////////////////
    // CAdCallbackView クラスのメッセージ ハンドラ
    void CALLBACK CallBackProc(DWORD dwUser){
        MessageBox(NULL, "サンプリングを終了しました", "メッセージ", MB_SETFOREGROUND);
    }

    void CAdCallbackView::OnDeviceopen() {
        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
        // インタフェースモジュールの初期化を行います
        hDeviceHandle = AdOpen ("FBIAD1");
        if (hDeviceHandle == INVALID_HANDLE_VALUE) {
            AfxMessageBox("デバイスのオープンに失敗しました", MB_OK, 0);
            return;
        } else{
            AfxMessageBox("デバイスをオープンしました", MB_OK, 0);
            // サンプリング設定情報読み出し
            nRet = AdGetSamplingConfig( hDeviceHandle, &SmplConfig );
            if(nRet != AD_ERROR_SUCCESS){
                AfxMessageBox("サンプリング設定情報読み出しに失敗しました", MB_OK, 0);
            }
            //デバイスの情報取得
            nRet = AdGetDeviceInfo( hDeviceHandle, &BoardSpec );
            if(nRet != AD_ERROR_SUCCESS){
                AfxMessageBox("デバイスの情報取得に失敗しました", MB_OK, 0);
            }
        }
    }

    void CAdCallbackView::OnDeviceclose() {
        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
        // 終了処理.
        nRet = AdClose( hDeviceHandle );
        if (nRet != AD_ERROR_SUCCESS) {
            AfxMessageBox("デバイスのクローズに失敗しました");
            return;
        }
        AfxMessageBox("デバイスをクローズしました");
    }

    void CAdCallbackView::OnCallback() {
        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
        //サンプリング条件設定
        SmplConfig.SmplChReq[0].ulChNo = 1;
        SmplConfig.ulSmplNum = 1024;
        SmplConfig.fSmplFreq = 50000;
        SmplConfig.SmplChReq[0].ulRange = AD_5V;
        hEvent = CreateEvent(0, TRUE, FALSE, NULL);
        nRet = AdSetSamplingConfig( hDeviceHandle, &SmplConfig );
        if(nRet != AD_ERROR_SUCCESS){
            AfxMessageBox("サンプリング条件設定に失敗しました", MB_OK, 0);
            return;
        }
        //イベント設定
        nRet = AdSetBoardConfig( hDeviceHandle, hEvent, CallBackProc, 0);
        if(nRet != AD_ERROR_SUCCESS){
            AfxMessageBox("アナログ入力インタフェースモジュールのイベント設定に失敗しました", MB_OK, 0);
        }
        //サンプリングスタート
        nRet = AdStartSampling( hDeviceHandle, FLAG_ASYNC );
        if(nRet != AD_ERROR_SUCCESS){
            AfxMessageBox("サンプリングに失敗しました", MB_OK, 0);
        }
        //イベント待ち
        WaitForSingleObject( hEvent, 5000 );
        ResetEvent(hEvent);
        CloseHandle(hEvent);
    }
    プログラムの入力が終わったら保存した後、プログラムを実行してみてください。まず「open」メニューでインタフェースモジュールの初期処理を行ない、 「サンプリング」メニューをクリックすると、サンプリングが終了して以下のようなメッセージボックスが表示されます。メッセージボックスを閉じたら、 「close」メニューをクリックして、終了処理を行ないます。

上へ


© 2012 Interface Corporation. All rights reserved.
製品を選ぶ
・スペック検索
・用途/使い方から
・インタフェースモジュールが
  使えるCPU

・ボックス型コンピュータ
・新製品
・おすすめ/売れ筋から
・製品マップから
・カテゴリから
・広告から
・パンフレットから
・型式から
産業用パソコン
Classembly Devices®
・エコ
・省エネ
・車載
・タフコントローラ
・I/O
・タッチパネル
・マザコン
FAコントローラ
・長期安心
・スロットイン
・ノンストップ
・分散処理コントローラ

産業用マザーボード
・ATXマザーボード
・Mini-ITX マザーボード

インタフェースモジュール
・インタフェースモジュール
・最大50%OFF
  特別キャンペーン販売実施中

・サブプロセッサモジュール
・拡張ユニット
・アクセサリ
・ソフトウェア
・開発らくらくパッケージ
部品販売
・クラシック販売
・ディスコン部品販売
・ポップス部品販売
サポート
・サポート
・ユーザID登録
・製品貸出サービス
・コラム集
・FAQ検索
・個人情報の取扱について

・サイトマップ