C#外部機器と通信2 GPIB
This article has an English version
C#外部機器通信の2回目はC#とGPIBです。C#とその他の通信インターフェースのプログラムを知りたい方は以下のリンクから見つけてください。
計測器でGPIBは最も歴史が長い通信インターフェースですので、多分一番多くの計測器に装備されています。
そのため、いまだにGPIBを使っている人は一番多いでしょう。
この記事ではC#でGPIB接続を使って外部機器と通信する方法を紹介ます。
1 GPIBの情報について
2018年現在でGPIBのデファクトスタンダードになっているのはNatinal Instruments社(NI社)のGPIB-USB-HSでしょうか。
この他にはKeysight社などが有名ですが、日本企業ではContec社などあります。
ContecのGPIBボードをこの前使いましたが、使い勝手は良いなと思いした。
GPIBをプログラミングしたいと思った人はGoogle検索したと思いますが、その情報の少なさに驚いたと思います。
日本語で唯一、C#とGPIBのプラグラムについて説明しているサイトはNI社のこのサイトです。
ちょっとこれだけだと初めての人にはきついですねー。私もかなりつらい思いをした記憶があります。
皆が何度も同じことを調べなくてもいいように、このブログでできるだけ簡単に、最短距離でGPIBプログラムができるように説明をしたいと思います。
2 ドライバインストール
この記事ではGPIBのインターフェースはGPIB-USB-HSを使うことを前提に説明します。
GPIB-USB-HSを使用する前にドライバーのインストールが必要です。もし、購入時のCDを持っていればそのCDが使えます。
もし持っていなければNI社のHPからNI-488.2というドライバーをダウンロードします。
NI-488.2はNI-488.3とかないです。NI-488.2しかないので間違いようがありません。もっとシンプルな名前でいい気がするんですけどね。
NIのサイトからOSとバージョンを選んでダウンロードします。(最新で130MBあります)
ダウンロードできたらNI-488.3を実行してください。
インストールの途中でインストールする機能の選択があります。
この時、必ず.NET Frameworkの最新版をインストールしてください。
階層の深いところにいますので気が付かず通り過ぎてしまうかもしれません。
これ以外ではデフォルトの設定のまま、インストールを行ってください。
3 クラスライブラリの追加
Visual Studioを起動して、新しプロジェクトを開きます。
プロジェクトの右上のソリューションエクスプローラツリーの中のソリューションの中のアプリケーションの中に参照設定と呼ばれるカテゴリがあります。
新規のリファレンスを追加するには、参照設定カテゴリを右クリックして参照の追加を選択します。
NIのGPIBライブラリを使用するには、NationalInstruments.CommonとNationalInstruments.VisaNSをプロジェクトに追加します。この二つのファイルはドライバやwindowsのバージョンによって場所が違うのでwindowsで検索してください。
4 コードの追加
コードエディタの画面に移動します。
ファイルの一番上にusing~の行が並んでいるのでその一番下に次の行を追加します。
using NationalInstruments.VisaNS;
上記の行を書き終わった後に赤線が出なければ多分問題はありません。
次はデザイナーに戻ってritchTextBoxとbuttonを追加します。
button1をダブルクリックしてコードエディタに移ります。
コードエディタのpublic partial class Form1 : Formの下に次の行を追加します。
private MessageBasedSession mbSession;
これはGPIBの通信に使うクラスで、上記はクラスの宣言を行っています。
次にbutton1_Clickなどの中に以下の3行を書きます。
mbSession=(MessageBasedSession)ResourceManager.GetLocalManager().Open("GPIB0::17::INSTR"); string responseString = mbSession.Query("*IDN?"); mbSession.Dispose();
上記のコードの1行目はGPIB経由で外部機器との通信を準備(Open)しています。
上の例ではGPIBのアドレスが17になっていますが、外部機器の設定に合わせて変えてください。
次にmbsession.Query()で外部機器へコマンドを送ります。
上の例では*IDN?コマンドを送りました。
これはGPIBの標準コマンドどの機器にも共通で使えます。
外部機器がこのコマンドを受け取ると機器の名前とシリアル番号が返信されます。
外部機器からの返信はそのままmbSession.Queryの引き数になり、responseStringに代入されます。
最後のmbSession.Dispose()で通信を終了します。
通常は通信の実行部分は突然の遮断に備えてtryで括ります。ここまでのプログラムを通して表示するとこのようになります。
using System; ・ ・ using System.Windows.Forms; using NationalInstruments.VisaNS; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private MessageBasedSession mbSession; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { try { mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().Open("GPIB0::17::INSTR"); richTextBox1.Text = mbSession.Query("*IDN?"); mbSession.Dispose(); } catch { MessageBox.Show("通信エラー"); } } } }
private MessageBasedSession mbSessionとtry,catchの中が追加した部分です。
5 実行
やっと実行です。
このプログラムを実行すると外部機器の情報とファームウェアバージョンなどが分かります。
まとめ
この記事ではC#とGPIB経由の外部機器との通信の方について紹介しました。
今回は機器のコマンドはとりあえずとして、C#で外部機器との通信をする部分のみ説明したので、まだ外部機器での測定はできていません。
次回は外部機器の機種を限定して具体的なプログラミングを説明します。
おまけ
プロジェクトを新規に作成してプログラムを作った場合「 アセンブリ参照が不足しています。 」とエラーが出ることがあります。
これはアプリケーションを右クリックしてプロパティの選択し、その中のフレームワークを「.NET Framework 4 Client Profile」から「.NET Framework 4」に変えると解決する場合があります。