5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windows10 .net Core時代のGPIB制御 初級編

Posted at

#はじめに
WindowsでのGPB制御は、National InstrumentsやキーサイトのUSB-GPIBコントローラを各社提供の.net framework用のDLL経由でプログラミングしてきましたが、近年.net Coreのほうが主流になってきています。web、帳票でのソフト開発では、.net Coreを使っても差し支えないし、またこの分野ではgoogle先生の検索で世の中には多数のサンプルコードが公開されています。その点、ハードウェアを制御するようなものでは、ハードウェア各社のサンプルプログラムをみても.net Coreに対応したものは見当たらない。しかもこの分野では、未だにVB6がサンプルプログラムというハードウェアメーカーも多々ある状況です。とはいっても、ハードウェア制御でプログラムを書く時だけ.net frameworkを使うというの釈然としない。
そこで、.net CoreでGPIBを制御できるのか、試しに実行してみたので、その結果を報告したいと思います。

#とりあえず試してみる。
OS:Windows10 Pro 20H2
開発:Visual studio2019
言語:C#

まずは、.net Core初心者は、過去の遺産から大きく変わると、変更点の多さに戸惑うので、まずは、慣れたFormアプリを作成しGPIBテストプログラムを作成してみたいと思います。
image.png

image.png

image.png

本当に、対象フレームワークが。NET Core 3.1になっていますね。

image.png
ソリューションエクスプローラはちょっと様子が異なるようです。
image.png

「参照」ではなく「依存関係」この文字で、やっぱり参照設定ないのかなーと思っていましたが、恐る恐る右クリックしてみるとCOM参照の追加という文字がありましたので実際に参照設定してみたいと思います。
GPIB制御は、過去は各社DLLのライブラリを使っていましたが、近年(とは言っても結構昔)は、VISAドライバ経由にすることで、プログラムは、コントローラのメーカーに依存せずにプログラムが書ける仕組みになっています。今回は、このVISAドライバのDLLを読みこみます。

image.png

いまのGPIB制御は、各社のドライバではなく、IVI FoundationのCOMライブラリを選択します。

image.png

無事、依存関係にCOMが加わり、VisaComLibが登録されています。

コードは、Formにラベルとボタンを追加し、名前はデフォルトのままでにして、次のコードをForm1.csに書き込みます。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using VisaComLib;

namespace netCoreGpibTestS
{
    public partial class Form1 : Form
    {
        VisaComLib.ResourceManager rm;
        VisaComLib.FormattedIO488 dmm;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            rm = new ResourceManager();
            dmm = new FormattedIO488();
            dmm.IO = (IMessage)rm.Open("GPIB0::7::INSTR");
            dmm.WriteString("*IDN?");
            string v = dmm.ReadString();
            label1.Text = v;
        }
    }
}

コードの記載が終わったら、さっそく実行してみたいと思います。

image.png

無事「*IDN?」コマンドで測定機器名を取得できています。
image.png

簡単なプログラムですが、.net Core時代でも、GPIB制御できることがわかりました。今後は、.net Coreらしいコーディングで
GPIB機器を制御していきたいと思います。
プログラムを書いた後付けですが、マイクロソフトのホームページに.net Core とCOMの関係が記載されています。

#参考文献
.net Core とCOMの関係
https://docs.microsoft.com/ja-jp/dotnet/standard/native-interop/cominterop

5
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?