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

- 「表示」→「クラスビュー」でクラスビューを表示し、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」メニューをクリックして、終了処理を行ないます。

|