「C言語の前で足踏みしている人の背中を押す」をテーマにしたコラムの後編です。前編では準備を終え、後編ではコードを書いて実行してみます。
コードを書いてみる
<新規プロジェクトを作成する>
前編で準備が整いました。
Visual Studioの画面に戻って、新規プロジェクトを作成します。
[ファイル] -> [新規作成] -> [プロジェクト](写真1)

写真1
新しいプロジェクトにて、MFCアプリケーションを選択し、[OK]を選択します(写真2)。

写真2
[次へ]を選択します(写真3)。

写真3
ダイアログベースを選択して、[完了]を選択します(写真4)。

写真4
プロジェクトが作成されました(写真5)。

写真5
そして、ここで作成するプログラムは計測器との通信をおこなうので、そのためのVISAライブラリを、プロジェクトのフォルダ内に置く必要があります。そこでVISAライブラリにアクセスするための「libファイル(.lib)」と「ヘッダーファイル(.h)」があるフォルダをエクスプローラーで開きます(写真6、7)。

写真6

写真7
場所は、Cドライブ直下の[Program Files]フォルダ -> [IVI Foundation]フォルダ -> [VISA]フォルダ -> [WinNT]フォルダの中です。libファイルは[lib] -> [msc]、ヘッダーファイルは[include]の中にあるはずです。
そして、libファイルは「visa32.lib」、ヘッダーファイルは「visa.h」と「visatype.h」の2つ、合計3つのファイルが必要になるライブラリです。そしてこの3つのファイルを、Visual Studioで新規作成したプロジェクト(ここではMFCApplication1)のフォルダ内にコピーします。コピーができた状態が(写真8)です。

写真8
ライブラリのコピーができたらVisual Studioの画面に戻って、visa32.libを(プログラムが参照できるようにするため)プロジェクトにリンクさせる必要があります。
そこで、[プロジェクト] -> [MFCApplication1のプロパティ]を選択します(写真9)。

写真9
MFCApplication1プロパティページにおいて、[リンカー] -> [入力] -> [追加の依存ファイル] に、visa32.lib を入力します(写真10)。

写真10
準備は、整いました。次はいよいよコードの実装です。
<コードを書いてデバッガで実行してみる>
先の、プロジェクトが作成された画面(写真5)に戻ります。そして[OK]ボタンをダブルクリックしてください(写真11)。

写真11
ダブルクリック後、コード編集の画面が表示されます。
なんかもうここで帰りたくなるかもしれませんが、もうちょっとです。頑張りましょう。
ここで行うことは2つです。
ひとつは、先に参照可能にしたVISAライブラリ(visa32.lib)を使えるようにすること。
もう一つはボタンをクリックする動作(イベント)を書き加えることです。
まず、VISAライブラリ(visa32.lib)の追加(インクルード)を書きます(写真12)。
場所は、コードの最初の方です。追加するのは下記のコードです。
#include "visa.h"

写真12
そしてボタンクリック(OnBnClickedOk())の動作(イベント)を書きます。
場所は最後の方にあります(写真13)。

写真13
追加するコード
ViSession defaultRM;
ViStatus status = viOpenDefaultRM(&defaultRM);
if (status != VI_SUCCESS) {
AfxMessageBox(_T("初期化エラー"));
return;
}
ViSession vi;
status = viOpen(defaultRM, "USB0::0x0B3E::0x1014::nb003716::0::INSTR", VI_NULL, VI_NULL, &vi);
if (status != VI_SUCCESS)
{
AfxMessageBox(_T("オープンエラー"));
return;
}
ViUInt32 count;
ViChar txCmd[256] = { "*idn?" };
status = viWrite(vi, (ViBuf)txCmd, strlen(txCmd), &count);
if (status != VI_SUCCESS)
{
AfxMessageBox(_T("送信エラー"));
return;
}
char rxCmd[100] = { 0 };
status = viRead(vi, (ViPBuf)rxCmd, 100, &count);
if (status != VI_SUCCESS)
{
AfxMessageBox(_T("受信エラー"));
return;
}
viClose(vi);
viClose(defaultRM);
CA2T msg(rxCmd);
AfxMessageBox(msg); // *idn?の戻りを表示する
//CDialogEx::OnOK(); // コメントにして終了しないようにするイベントの内容は、まずはサンプルをそのままコピペしてください。コピペした後が(写真14-1、写真14-2)です。
現段階では一箇所を除いて他のコードの意味を理解しないでいいです(笑)。

写真14-1

写真14-2
この習作プログラムの目的は「*idn? コマンドの送受信」つまり、通信する相手が何者かを問い合わせることです。
そしてここでのポイントは、通信する計測器の指定です。
173行目の “USB0::0x0B3E::0x1014::nb003716::0::INSTR” が、PMX-A の接続名です。
これはサンプルなので、この原稿を作成するために使った手持ちの製品のアドレスになっています。
ここを、あなたが今使っている製品のアドレスに書き換える必要があります。
ではそのアドレスはどこで手に入るのか。答えは「KI-VISA Instrument Explorer」にあります(前編でやったことですが覚えてますか?)。面倒ですが、ここでVisual Studioの画面をいったん隠して、デスクトップの「KI-VISA Instrument Explorer」をダブルクリック(起動)します(写真15)。

写真15
この画面の中の「VISA Address」がお目当のアドレスです。これをコピーして、Visual Studioに戻り、コードの173行目の “USB0…INSTR”を上書きします。
これで作業は終了です。
さあ、ではプログラムを実行してみましょう。
キーボードの F5キーを押す、またはメニューの、[デバッグ] -> [デバッグの開始](写真16)を選択します。

写真16
「MFCApplication1」の画面が表示されるので、OKボタンをクリックします(写真17)。

写真17
PMX-Aから返事が返ってきました!(写真18)

写真18
ちなみに返って来た情報は、メーカー名、形名、シリアル番号、ファームウェアバージョンなどです。
なお、この習作のサンプル(プロジェクトファイル)を下記からダウンロードできます。
参考にしてみてください。
まとめ
いかがでしょうか?この習作はOKボタンを押したら、アラート画面が出る(データが返ってくる)だけですが、上手く動くと嬉しいですよね。
今回はC++の入口の入口の入口という感じですが、ここで「面白そうだな」と思った気持ちが大事です。学習する材料はすでに世の中にゴロゴロありますし、次はとにかく簡単なものでいいので作ってみることです。
参考書を読むだけでは絶対に続かないです。手を動かした分だけ成長がありますので。また、仮に途中で挫折したとしても、絶対無駄にはなりません。C++プログラム作成の概念(作業構造)を知っているだけでも、他者(ソフト屋さん)の仕事内容を理解する助けになるからです。
自分の主業務を掘り下げることは大事ですが、その周辺も(野次馬根性的に)かじっておくといいかなと思います。今はすぐに役に立たない(立つとは思えない)ことが、後々自分自身を助けてくれることがありますのでね。ぜひトライしてみてください。


