計測器制御C#プログラミング 34401A用サンプル 

2020年1月12日

34401AはKeysight(旧 Agilent Technology)の定番デジタルマルチメータです。この記事では34401AをC#で制御をするプログラミングを説明したいと思います。

以前に計測器制御に使用するC#プログラムをまとめてありますので、そちらをまだ見ていない人は確認してください。

C#入門 最簡単プログラム

C#を使った外部機器の制御プログラムについても記事にしてあります。

C#外部機器との通信

上記の際簡単プログラムではGPIBで計測器の情報を表示するプログラムを作成しました。

その最後からはじめます。

前回は測定コマンドに「*IDN?」を使いました。

この*IDN?コマンドはGPIBの標準コマンドで機器の情報を返します。ほとんどの機器で使用できるコマンドです。

1 34401Aの測定コマンド

C#でプログラミングする際には「MEAS」コマンドを使えばよいです。このコマンドは1つで、設定、測定、結果の返信までを実行します。

34401にはMEASコマンド以外にも同じ機能を持つCONF→READ?やCONF→INIT→FETC?などの汎用性の高いコマンドがありますが、結局MEASコマンドで用が足ります。

MEASの後ろには電圧、電流、抵抗と直流か交流かを書きます。

  • 直流電圧測定 MEAS:VOLT:DC?
  • 交流電流測定 MEAS:CURR:AC?
  • 抵抗測定   MEAS:RES?

回答のほしいコマンドには”?”をつけてmbSession.query(“□”)の□の中にコマンドを書きます。たとえばリッチテキストボックスの中に直流電圧計測の結果を表示する場合は次のようになります。

richTextBox1.Text = mbSession.Query("MEAS:VOLT:DC?");

2 サンプルコード

34401AのGPIB制御のサンプルコードを作りました。NIのドライバがインストールされていることを前提として書いています。

例1 ボタンが押されたら電圧を測定する

下のサンプルはbuttonStartが押されたら1回計測をするプログラムです。デザイナー画面にbuttonStartとrichTextBox1を配置しておきます。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using NationalInstruments.VisaNS;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private MessageBasedSession mbSession;

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            try
            {
                mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().Open("GPIB0::20::INSTR");
                richTextBox1.Text = mbSession.Query("MEAS:VOLT:DC?") + "\n";
                mbSession.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

例2 スタートボタンが押されたら2秒間隔で電圧を測定する


次の例はtimerを使って2000ミリ秒間隔で計測を繰り返します。スタートボタンが押されるとストップボタンで停止します。

デザイナー画面でtimer1を配置してください。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using NationalInstruments.VisaNS;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private MessageBasedSession mbSession;

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            timer1.Interval = 2000;
            timer1.Enabled = true;
        }

        private void buttonStop_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().Open("GPIB0::20::INSTR");
                richTextBox1.Text += mbSession.Query("MEAS:VOLT:DC?");
                mbSession.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

問題がなければ次のようにrichTextBox1に結果が表示されると思います。

まとめ

上記のコードを理解したら、後は機能を少し追加したり、表示のレイアウトを変えたりするだけで、使いたい方の専用にプログラムになると思います。

このサンプルがが皆さんの役に立ってもらえると幸いです。

関連記事

C#外部機器との通信

C#入門 最簡単プログラム