• 検索結果がありません。

データ送受信(非コントローラモード)

ドキュメント内 visual C++によるGP-IB入門書 (ページ 49-54)

第 4 章  チュートリアル ( 高機能版 ActiveX コントロール ) 26

4.3  データ送受信(非コントローラモード)

では、次にGP-IB I/Oモジュールが非コントローラモード時でのデータ送受信で使用するプログラ ムを作成します。使用するメソッド,プロパティ,イベントの詳細は巻末の高機能版ActiveXコント ロールリファレンスを参照してください。

ここで作成するデータ送受信(非コントロールモード)プログラムは、基本的にStep4で作成した データ送受信(コントロールモード)プログラムと作成手順は同じです。

1. Visual C++を起動し新しいプロジェクト(プロジェクト名:GpibTrans_s_ActvX)を作成し、環境設 定まで行います。(Step1,Step2を参照してください)

2. OnClose関数を追加し、OnInitDialog関数,OnClose関数にコードを記述します。OnInitDialog関数 には、(List 1-7)を記述し、OnClose関数には、(List 1-3)を記述します。(Step3を参照)

※ Step3の手順1にある「制御対象名の変数追加」は、行う必要ありません。

(List 1-7:CgpibTrans_s_ActvXDlgクラスのOnInitDialog関数のコード)

CGpibTrans̲m̲ActvXDlg::OnInitDialog() 

    CDialog::OnInitDialog(); 

           

    // TODO: 特別な初期化を行う時はこの場所に追加してください。 

    LONG    lRet;        // 関数の実行結果      CString szErrMsg;    // エラーメッセージ     

    lRet = m̲GpibHost.Open(); 

    if(lRet != 0){ 

        szErrMsg.Format("初期化に失敗しました(%d)", lRet); 

        MessageBox(szErrMsg,"オープンエラー", MB̲ICONERROR); 

        exit(0); 

    } 

    // GP‑IB I/Oモジュールが、スレーブモードに設定されていることを確認します。 

    if (m̲GpibHost.GetIsMaster() != FALSE) { 

        MessageBox("GP‑IB I/Oモジュールが、スレーブモードに設定されていません。", "実行エラー", MB̲ICONERROR); 

        m̲GpibHost.Close(); 

        exit(0); 

    } 

    return TRUE;  // TRUE を返すとコントロールに設定したフォーカスは失われません。 

この部分は、デフォルトのままです

ここから記述します

3. データ送受信(非コントローラモード)用のダイアログボックスを作成します。基本的にデータ 送受信(コントローラモード)と変わりはありません。Step4を参照に行ってください。

(変更点)

  コントローラモード  非コントローラモード  プロジェクト名 GpibTrans_m_ActvX GpibTrans_s_ActvX クラス名 CGpibTrans_m_ActvXDlg CGpibTrans_s_ActvXDlg

4. 作成したOnSend関数,OnRecv関数にそれぞれ(List 1-8),(List 1-9)のコードを記述します。

(List 1-8:CgpibTrans_s_ActvXDlgクラスのOnSend関数のコード)

void CGpibTrans̲s̲ActvXDlg::OnSend()  

    // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください      LONG          lRet;        // 関数の実行結果 

    CString    szErrMsg;    // エラーメッセージ      COleVariant   vtData; 

   

    // SlaveSendメソッドを呼び出し、データを送信します。 

    // 第2引数を省略する(NULL終端までの文字列を送信する)      UpdateData(TRUE);        // 送信データをメンバ変数に格納      vtData = m̲szSendData;   // データ代入 

    lRet = m̲GpibHost.SlaveSend(vtData, COleVariant((long)0, VT̲ERROR));// データ送信      if (lRet != 0) { 

        szErrMsg.Format("データ送信に失敗しました(%d)", lRet); 

        MessageBox(szErrMsg,"送信エラー", MB̲ICONERROR); 

    }     

(List 1-9:CgpibTrans_s_ActvXクラスのOnRecv関数のコード)

void CGpibTrans̲s̲ActvXDlg::OnRecv()  

    // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください      LONG          lRet;        // 関数の実行結果 

    LONG          lRecvSize;    // 受信データサイズ      CString    szErrMsg;    // エラーメッセージ   

    // I/Oモジュール番号0よりデータ受信を開始します 

    lRet = m̲GpibHost.SlaveReceive(&lRecvSize);  // データ受信      if(lRet != 0){ 

        szErrMsg.Format("データ受信に失敗しました(%d)",lRet); 

        MessageBox(szErrMsg,"受信エラー", MB̲ICONERROR); 

    } 

5. データ受信完了を通知するイベント(OnReceiveFinishGpc4304advancedctrl1イベント)に は、先ほどと同じコード(List 1-6)を記述します。

プログラムの入力が終わったら保存してください。

では、プログラムを実行してみます。先ほどのではなく、今度は図4-1の接続例2で行います。そ れぞれのコンピュータにPCI-4304を差し込みます。

次に、各I/Oモジュールの設定を行います。コントローラ/非コントローラは、どちらのI/Oモジュー ルがなっても構いません。それぞれの設定を行った方のI/Oモジュールがコントローラまたは、非 コントローラに設定されます。下図を参照に設定を行ってください。

・コントローラモードの設定

1.コントロールパネルの

「InterfacePCI GPIB」の設定

注)左図のように「I/Oモジュール番号」

I/Oモジュール上にあるRSW1の番号 に、「動作モード」は MASTER に、「送 信(受信)デミリタ」を EOI に設定「し ます。

2.プロパティページの設定

(『データ送受信(コントローラモード)』

Step2参照)

3.「接続機器設定」の設定

(『データ送受信(非コントローラモード)』の Step2参照)

ここでの接続機器は、PCI-4304になります。デ バイス名を PCI-4304 1次アドレスは、先 ほど設定したコントローラの設定値 0 と異な る値にします。

非コントローラモードの設定

1.コントロールパネルの「InterfacePCI GP-IB」の設定 注)左図のように「I/Oモジュール番号」はI/Oモジュール 上にあるRSW1の番号に、「動作モード」は“SLAVE”に、

「送信(受信)デミリタ」を“EOI”に設定「します。また、

「1次アドレス」は、コントローラの「接続機器設定」で

設定した値に設定します。

2.プロパティページの設定 (

『高機能版と標準版ActiveXコントロールの違い』Step2 参照)

左図のように各設定を行います。

注)「マスタ/スレーブ」は、“スレーブ”に、「マイアドレス」

は、1次アドレスの値を設定します。

では、プログラムを動かしてみます。コントロール側で“GPC4304”と入力し、「送信」をクリッ クします。その後、非コントロール側で「受信」をクリックすると、“GPC4304”と受信データが 表示されます。

コントローラモード 非コントローラモード

「送信」をクリック 「受信」をクリック

次に非コントロール側で“GPC4304”と入力し、「送信」をクリックします。その後、コントロー ル側で「受信」をクリックすると、“GPC4304”と受信データが表示されます。

コントローラモード 非コントローラモード

「送信」をクリック

「受信」をクリック

List1-8のSlaveSendメソッド,List1-9のSlaveReciveメソッドの役割は、Step4のMasterSendメソッ ド,MasterReciveメソッドと同じです。

「使用例」

lRet = m_GpibHost.SlaveSend(vtData, COleVariant((long)0, VT_ERROR));

送信 す る デ ー タ を 指 定 します。

送 信 デ ー タ 長(バ イ ト 数)を指定します。

メソッド実行後の状態 が格納されます。

「使用例」

lRet = m_GpibHost.SlaveReceive(&lRecvSize);

メソッド実行後の状態が 格納されます。

データ受信完了時に受信バッファに格 納されている受信データのサイズを格 納する変数を指定します。

ドキュメント内 visual C++によるGP-IB入門書 (ページ 49-54)